【金融数据分析】用Python开发一个技术分析面板
本文介绍了如何使用Streamlit和Python库(如AKShare、TA-Lib等)构建一个简单的技术分析面板,以便更便捷地进行金融数据分析。该面板允许用户通过下拉菜单选择期货品种,并设置起止日期以获取历史行情数据。用户还可以选择不同的技术指标(如MACD、布林带、RSI),并通过TA-Lib进行计算。最后,面板将历史行情的K线图和技术指标的计算结果进行可视化展示。通过这种方式,用户可以快速获
如果我们想要让数据分析的工作更加便利一些,可以考虑制作一个简单的技术分析面板,这样就不需要每次都重新运行代码了。构想是用Streamlit制作一个简单的行情分析面板,在左侧边栏可以选择金融产品的代码,然后根据代码通过接口获取其历史行情数据。然后,还可以选择不同的技术指标,使用TA-Lib根据所选的技术指标进行计算。之后将历史行情的K线图以及技术指标的计算结果在主面板进行可视化。
功能一:使用下拉菜单选择期货品种
导入要用到的库
# Python代码
# 导入我们要用的库
import streamlit as st
import akshare as ak
import talib
import pandas as pd
from datetime import datetime
import cufflinks as cf
from plotly.offline import iplot
cf.go_offline()
接下来我们开始准备数据源。这里我们使用AKshare获取全部主力连续合约的期货代码,并将这些期货代码以下拉菜单的形式呈现在streamlit开发的技术分析面板的侧边栏,供用户选择,示例代码:
# 获取所有主力连续合约的期货代码
futures_codes = ak.futures_display_main_sina()
futures_list = futures_codes["symbol"].tolist()
# Streamlit App
st.title("技术分析面板")
selected_contract = st.sidebar.selectbox("选择期货合约代码", futures_list)
# 从akshare获取期货行情数据
futures_data = ak.futures_main_sina(symbol=selected_contract)
# 预览数据
st.write(futures_data)
将其命名为“ta_app.py”,然后我们打开终端,进入保存这个文件的目录,然后使用命令:
streamlit run ta_app.py
按下回车键运行这个终端命令,会看到电脑的默认浏览器打开新的窗口,并将我们使用streamlit制作的页面进行了呈现,如图所示:
此代码示例中,首先使用AKShare获取了所有主力连续合约的期货代码。然后,使用st.sidebar.selectbox在Streamlit的侧边栏创建一个下拉菜单,供用户选择期货合约代码。然后,我们使用st.write将获取的数据展示在面板的主体位置中。
功能二:让用户可以选择起止日期
现在我们的技术分析面板运行用户通过下拉菜单选择希望获取的期货连续合约行情数据了。接下来,我们还要让用户可以对行情的起止日期可以进行选择。代码如下:
# Python代码
# 获取所有主力连续合约的期货代码
futures_codes = ak.futures_display_main_sina()
futures_list = futures_codes["symbol"].tolist()
# Streamlit App
st.title("技术分析面板")
selected_contract = st.sidebar.selectbox("选择期货合约代码", futures_list)
# 用户选择日期范围
start_date = st.sidebar.date_input("选择开始日期", datetime(2023, 1, 1))
end_date = st.sidebar.date_input("选择截止日期", datetime(2023, 12, 31))
# 从akshare获取期货行情数据
futures_data = ak.futures_main_sina(symbol=selected_contract,
start_date=start_date,
end_date=end_date)
# 显示所选的期货合约代码和日期范围
st.write(f"您选择了期货合约代码: {selected_contract}")
st.write(f"您选择的日期范围是从 {start_date} 到 {end_date}")
# 预览数据
st.write(futures_data)
使用这段代码替换刚刚我们保存的ta_app.py中除了导入库的部分,然后保存,再刷新一下刚刚弹出的浏览器页面,会得到如图所示的结果。
这段代码示例中,我们使用了st.sidebar.date_input组件分别为开始日期和截止日期创建了日期选择器,用户可以选择数据的时间范围。用户的选择将存储在start_date和end_date变量中,然后用户就可以在应用程序的其余部分使用这些日期范围来获取相应的数据了。
功能三:添加技术分析指标
完成了上面两步之后,我们就可以在这个技术分析面板中添加一些常用的技术分析指标供用户选择了。例如我们选择常用的MACD、布林带、RSI这三个指标,代码如下:
# 获取所有主力连续合约的期货代码
futures_codes = ak.futures_display_main_sina()
futures_list = futures_codes["symbol"].tolist()
# Streamlit App
st.title("技术分析面板")
selected_contract = st.sidebar.selectbox("选择期货合约代码", futures_list)
# 用户选择日期范围
start_date = st.sidebar.date_input("选择开始日期", datetime(2023, 1, 1))
end_date = st.sidebar.date_input("选择截止日期", datetime(2023, 12, 31))
# 从akshare获取期货行情数据
futures_data = ak.futures_main_sina(symbol=selected_contract,
start_date=start_date,
end_date=end_date)
# 侧边栏选择指标
selected_indicator = st.sidebar.selectbox("选择指标", ["MACD", "布林带", "RSI"])
# 计算并显示选择的指标
if selected_indicator == "MACD":
# 计算MACD指标
macd, signal, _ = talib.MACD(futures_data["收盘价"])
futures_data["MACD"] = macd
futures_data["Signal"] = signal
elif selected_indicator == "布林带":
# 计算布林带指标
upper, middle, lower = talib.BBANDS(futures_data["收盘价"])
futures_data["Upper Bollinger Band"] = upper
futures_data["Middle Bollinger Band"] = middle
futures_data["Lower Bollinger Band"] = lower
elif selected_indicator == "RSI":
# 计算RSI指标
rsi = talib.RSI(futures_data["收盘价"])
futures_data["RSI"] = rsi
# 显示所选的期货合约代码和日期范围
st.write(f"您选择了期货合约代码: {selected_contract}")
st.write(f"您选择的日期范围是从 {start_date} 到 {end_date}")
st.write
# 预览数据
st.write(futures_data)
用这段代码替换ta_app.py文件中除导入库的部分,保存之后刷新浏览器中的页面,会得到如图所示的结果。
此示例在Streamlit应用的侧边栏添加了一个下拉菜单,其中中包含了MACD、布林带和RSI三个指标的选项。根据用户的选择,它将计算并显示相应的指标。例如这里我们选择了RSI指标,可以看到在应用主体部分,供用户预览的数据中多了RSI这一列,其中存储了使用TA-Lib计算该指标的结果。
功能四:添加K线图与技术指标的可视化
现在我们已经可以允许用户自行选择期货品种、起止日期,以及技术指标了。接下来,我们可以用可视化的方法,在streamlit应用中添加K线图和技术指标的可视化了。代码如下:
# Python代码
# 获取所有主力连续合约的期货代码
futures_codes = ak.futures_display_main_sina()
futures_list = futures_codes["symbol"].tolist()
# Streamlit App
st.title("技术分析面板")
selected_contract = st.sidebar.selectbox("选择期货合约代码", futures_list)
# 用户选择日期范围
start_date = st.sidebar.date_input("选择开始日期", datetime(2023, 1, 1))
end_date = st.sidebar.date_input("选择截止日期", datetime(2023, 12, 31))
# 从akshare获取期货行情数据
futures_data = ak.futures_main_sina(symbol=selected_contract,
start_date=start_date,
end_date=end_date)
futures_data = futures_data[['日期', '开盘价', '最高价', '最低价', '收盘价']]
futures_data.columns = ['date', 'open', 'high', 'low', 'close']
futures_data['date'] = pd.to_datetime(futures_data['date'])
futures_data.set_index('date', inplace=True)
# 侧边栏选择指标
selected_indicator = st.sidebar.selectbox("选择指标", ["MACD", "布林带", "RSI"])
# 计算并显示选择的指标
if selected_indicator == "MACD":
# 计算MACD指标
macd, signal, _ = talib.MACD(futures_data["close"])
futures_data["MACD"] = macd
futures_data["Signal"] = signal
elif selected_indicator == "布林带":
# 计算布林带指标
upper, middle, lower = talib.BBANDS(futures_data["close"])
futures_data["Upper Bollinger Band"] = upper
futures_data["Middle Bollinger Band"] = middle
futures_data["Lower Bollinger Band"] = lower
elif selected_indicator == "RSI":
# 计算RSI指标
rsi = talib.RSI(futures_data["close"])
futures_data["RSI"] = rsi
# 显示所选的期货合约代码和日期范围
st.write(f"您选择了期货合约代码: {selected_contract}")
st.write(f"您选择的日期范围是从 {start_date} 到 {end_date}")
# 绘制K线图及技术指标
st.header("期货K线图")
qf = cf.QuantFig(futures_data, title='期货K线图')
if selected_indicator == "MACD":
qf.add_macd()
elif selected_indicator == "布林带":
qf.add_bollinger_bands()
elif selected_indicator == "RSI":
qf.add_rsi()
fig = qf.iplot(asFigure=True)
st.plotly_chart(fig)
用这段代码替换ta_app.py文件中除导入库的部分,保存之后刷新浏览器中的页面,会得到如图所示的结果。
这段代码使用了Cufflinks库中的QuantFig来绘制K线图和不同的技术指标——如果用户选择了“MACD”指标,使用add_macd()方法添加MACD指标的可视化。如果用户选择了“布林带”指标,使用add_bollinger_bands()方法添加布林带指标的可视化。如果用户选择了“RSI”指标,使用add_rsi()方法添加RSI指标的可视化。使用Streamlit的plotly_chart函数将图形对象fig显示在Streamlit应用的主要部分,从而呈现K线图和选定的技术指标的计算结果。
读者朋友可以修改代码,添加或替换技术指标,以变获得不同的结果。
参考书目:北京大学出版社《巧用AI大模型轻松学会Python金融数据分析》
更多推荐
所有评论(0)