欢迎大家订阅《教你用 Python 进阶量化交易》专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下:
第一篇《管理概率==理性交易》
第二篇《线性回归拟合股价沉浮》
第三篇《最大回撤评价策略风险》
第四篇《寻找最优化策略参数》
第五篇《标记A股市场涨跌周期》
第六篇《Tushare Pro接口介绍》
第七篇《装饰器计算代码时间》
第八篇《矢量化计算KDJ指标》
第九篇《移植量化交易小工具》
第十篇《统计学预测随机漫步》
第十一篇《TA-Lib库扩展介绍》
第十二篇《股票分笔数据跨周期处理》
第十三篇《TA-Lib库量价指标分析》
第十四篇《ATR在仓位管理的应用》
第十五篇《扒一扒量化回测常见陷阱》
为了将专栏中分散的知识点贯穿起来,笔者在专栏的末尾小节《制作自己的量化交易工具》中分享了早期制作的一个简易版量化交易小工具,希望大家能够通过调试代码的方式掌握相关的知识。
目前在场外篇第9篇中已经移植到了Python3.7x版本上,接下来我们在这个版本的基础上逐步完善这个工具,使专栏的读者不仅能够通过小工具掌握专栏的相关知识点,也能够把工具用到自己的股票量化交易中去。
我们把量化小工具的基础版本称为V0,该版本的股票行情页面中的股票名称只有4个,分别为开山股份、浙大网新、水晶光电、高鸿股份,如果同学们要添加自选股,只能在代码中添加。
接下来我们把A股市场中全部的股票都添加到下拉框中去。此处使用Tushare Pro的stock_basic()接口,该接口获取上市的所有股票基础信息数据,包括股票代码、名称、上市日期、退市日期等。输入参数说明如下:
- is_hs:是否沪深港通标的,N否、H沪股通、S深股通;
- list_status:上市状态,L上市、D退市、P暂停上市;
- exchange:交易所 SSE上交所,SZSE深交所,HKEX港交所。
注:关于输出参数大家可参照官网的介绍,此处不在赘述。
pro = ts.pro_api(token)
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
print(data.head())
"""
ts_code symbol name area industry list_date
0 000001.SZ 000001 平安银行 深圳 银行 19910403
1 000002.SZ 000002 万科A 深圳 全国地产 19910129
2 000004.SZ 000004 国农科技 深圳 生物制药 19910114
3 000005.SZ 000005 世纪星源 深圳 房产服务 19901210
4 000006.SZ 000006 深振业A 深圳 区域地产 19920427
"""
print(data.tail())
"""
ts_code symbol name area industry list_date
3585 603993.SH 603993 洛阳钼业 河南 小金属 20121009
3586 603996.SH 603996 中新科技 浙江 家用电器 20151222
3587 603997.SH 603997 继峰股份 浙江 汽车配件 20150302
3588 603998.SH 603998 方盛制药 湖南 中成药 20141205
3589 603999.SH 603999 读者传媒 甘肃 出版业 20151210
"""
把ts_code和name组合成字典形式后,传递给self.StNameCodedict变量,这样就把全部股票加载到ComboBox控件中,如下所示:
下拉框中太多股票名称,一个个看过去不切实际,我们把ComboBox控件的style属性更改下,从wx.CB_READONLY变成wx.CB_SIMPLE,如下所示
style = wx.CB_READONLY|wx.CB_DROPDOWN
style = wx.CB_SIMPLE|wx.CB_DROPDOWN
更改后,我们可以在控件中自己输入股票的名称,如下所示:
然后把DataReader接口换成daily接口,因为前者下载数据耗时太长了。更换的话需要相应地把stockName、stockTimeS、stockTimeE这三个变量的形式更换。
stockDat = web.DataReader(stockName, "yahoo", stockTimeS, stockTimeE)
df_stockDat = pro.daily(ts_code=stockName,
start_date=stockTimeS.strftime('%Y%m%d'), end_date=stockTimeE.strftime('%Y%m%d'))
对了,获取到的数据别忘记规整化之后再展开后续的分析和处理。最后我们可以随意选取A股市场的数据,并且更新行情数据。
查看股票《雅本化学》的行情数据:
查看股票《上实发展》的行情数据:
下载的数据会以csv文件存储在本地路径的文件夹,下次会先从csv文件加载,新的数据会同步到文件中哈!!
关于完整代码可以加入专栏交流群获取。更多的量化交易内容欢迎大家订阅专栏阅读!!