本书第8章是The ML4T Workflow – From Model to Strategy Backtesting,本章集成了机器学习交易工作流的各个构建模块,并从端到端角度介绍了由机器学习算法驱动的交易策略的设计、模拟和评估机器学习驱动的交易策略的过程。详细地演示了如何使用backtrader和Zipline库准备、设计、运行和评估回测。前几章我们已经学过了zipline,这章更像一个总结应用,东西不是特别多。
上面提到了端到端,端到端就是:输入是原始数据,输出是最后的结果
端到端(end-to-end)的含义_lxy_Alex的博客https://blog.csdn.net/happyhorizion/article/details/100607429
目录
5.1 Calendars and the Pipeline 让拟合更稳健
5.3 The Pipeline API:对ML信号进行回测
首先,什么是回测:
基于归纳历史市场规律的策略,就需要让策略在历史环境中模拟交易,评估性能。回测是根据历史数据来验证交易策略的可行性和有效性的过程,希望用回测结果预测该策略在未来的收益率。 计算策略在历史数据可以实现的盈利能力、风险度、可靠性等,来预测策略未来的表现。回测的基本理论是,任何在过去有效的策略在未来都可能有效,相反,任何在过去无效的策略在未来也可能无效。
1 如何回测
- 获取和准备市场数据、基本面数据和其他数据
- 处理数据调整时间,计算阿尔法因子和特征工程
- 设计机器学习模型、调整参数和评估机器学习模型以生成交易信号
- 根据这些预测的信号,应用规则来选择要投资的资产
- 根据资产配置等原理,调整投资组合环境中的单个头寸的大小,使得投资组合最优化,生成Target Portfolio
- 使用历史市场数据,模拟所触发的结果交易
- 评估结果位置的表现
2 回测中的陷阱及如何避免
2.1 数据正确
- 前视偏误:用未来的信息来确定今天的交易信号。比如说用当日的最高价格来决定当日的买入信号。但实盘里这种信息是不可能取得的。
- 幸存者偏差:选股中,只选当时存在的股票,而没有把退市的股票也加入到选股库里。
- 异常值控制:我们可以通过winsorize缩尾或者截尾,控制异常值,(缩尾就是所有大于上临界值的值全等于上临界值,所有小于下临界值的值全等于下临界值;截尾就是直接去掉极端值)。这里的难点在于确定真正不能代表所分析时期的异常值,而不是去掉作为当时市场环境组成部分的任何极端值。
- 样本期选择:如果样本数据不能反映当前(和可能的未来)环境,那么回测将不能产生推广到未来的具有代表性的结果。在波动性或成交量方面,未能包含足够的数据点,或包含过多或过少的极端历史事件,就很难产生可以推广的结果。我们可以使用包含重要市场现象的样本周期或生成反映相关市场特征的合成数据,来解决这个问题。
2.2 模拟正确
- 未能Mark to Market盯市,模型可能开始的时候表现很好,但后面表现变差;解决方法:绘制随时间变化的性能图或计算(滚动)风险指标,比如风险价值VaR或者Sortino Ratio
- 对交易的可行性、成本或市场影响的不切实际的假设;没有交易对手的情况下假设卖空的策略,或低估交易规模较大或交易流动性较差资产的交易(下滑)对市场的影响,或由于经纪人费用而产生的成本。解决方法可以是限制流动性,设置一些市场参数模拟现实情况流动性较差的资产交易对价格的影响。
- 错误的信号和交易执行时机,类似于前视偏误,模拟可能会对什么时候接收信号并根据信号进行交易做出不切实际的假设。例如,当交易只能在下一个开盘价进行时,信号可能从收盘价格计算出来,而这两个价格可能有很大不同。当我们使用收盘价来评估性能时,回测结果将不能代表现实的未来结果。解决办法是 写程序的时候:认真确认信号到达、交易执行和性能评估的顺