工欲善其事,必先利其器
最终成果
视频说明
https://www.bilibili.com/video/BV1Ex5yz5EvS/?vd_source=d83520060555baa03c7a70ec445dea2b
股票多因子量化回测框架从零开始开发步骤
整体设计:选股框架轮动,每天读入个股排名,根据当前的资金量与已持仓量,决定应该购买哪些个股,买入后,持有若干天后卖出获得资金,继续买入后续的排名区间,不断轮动这个过程。
设计上为了方便操作不用写代码,设定一个config文件,里面是些参数(如同时持仓数量,期望持有天数,是否买北交,还可以加上一些因子权重)
核心就是用不同的config来表示不同的策略,来查看历史表现,不断完善自己的交易系统。
整体系统分为以下步骤
1.数据获取:回测需要大量的历史数据,包括行情数据(如开盘价、收盘价、成交量等)和基本面数据(如市盈率、市净率等),这个可通过自己爬取或者来平台https://quantkt.com/下载。
2.数据预处理:数据读入后需要处理下是否涨跌停(注意2020.8.23前后的涨跌停规则区别),上市天数,是否退市,是否改名,是否发生除权(如发生,需要进行复权,具体前复权还是后复权都可以)。
计算复权因子
3.因子计算:如果策略需要的因子已经在读入数据中有了,则跳过这一步,否则可以自己计算所需因子作为新的字段,因子计算出来,各类权重进行相应的排名,来算出当日股票的排名。
4.每日选股
选择相应数量或者区间
5.模拟交易
以日期为枚举量进行遍历。
对于需要持仓的个股,根据开盘,或者平均价(成交额/成交量)来计算买入。
对于需要平仓的个股,根据收盘,或者平均价(成交额/成交量)来计算卖出。
输出各类csv文件,用于复盘分析
6.数据可视化
读入上个步骤生成的相关csv,查看各类数据情况。
策略收益,基准收益,最大回撤,每日交易情况,超额收益,仓位百分比,策略当前最大回撤(上影线)。
一些注意点:
1.数据的除权
2.涨跌停和停牌时的处理,即涨停时排不进,跌停时出不来,停牌时没法交易
3.别忘了考虑双向的佣金和卖出的印花税问题
4.每次买入有个资金使用率的问题,确保能支付的起手续费和佣金
5.退市股票别忘记考虑(不然其实带进了未来函数)
6.股票的更名问题(变名称,带星带帽导致的涨跌停判定问题)
需要输出的一些常见分析指标
策略收益,基准收益,最大回撤,每日交易情况,超额收益,仓位百分比,策略每天的最大回撤,夏普率,胜率,月度热度图,回撤恢复时间,总手续费,阿尔法,赢利最多的一些股票,亏损最多的一些股票,一些异常的股票(如买入爆雷)。