交易策略
在配对交易中如何计算利差和交易没有单一的方法。一些方法使用线性回归和残差作为一个利差。我们将使用下一个算法。
这个算法策略包括以下几步:
1.通过上面描述的方法之一(例如,Engle-Granger)识别协整配对。
应该定期执行此步骤,以获得将在后续步骤中使用的一对(或多对)。
2.通过length N. 得到资产的价格历史。计算每对资产(如A和B)的收益。
3、计算收益之间的差额
4. 计算z分数,z分数是一个数据点离均值的标准差数。
这张图说明了z分数。
5. 检查进入头寸规则:
如果此条件成立,则为A(资本的50%)打开多头头寸,为B(资本的50%)打开空头头寸
如果这个条件成立,则为A打开空头头寸,为B打开多头头寸
6. 检查关闭头寸规则
如果这个条件成立,则关闭所有头寸。
让我们使用催化剂(Catalyst)框架为这个算法编写代码。
我在之前文章中简要介绍了Catalyst,可以在其中找到关于初始化、handle_data、分析和run_algorithm函数的信息。
一个标准的方法是,使用一个train \ test split,但是在我们的例子中也有一个协整测试周期。这些时期不应交叉。因此,我们有
协整测试周期——5个月(2018年1月1日至2018年5月31日)
回溯测试周期——4个月(从2018年6月1日到 2018年9月30日)
转发周期——2个月(2018年10月1日到2018年11月30日)
首先,应该验证算法。让我们使用XMR/USD和NEO/USD对运行这个脚本,并禁用佣金成本和关闭滑动模型。
正如我们所看到的,算法的返回曲线非常好。这就像它工作的方式(非常高的索提诺(Sortino)比率和回报率,4个月的收益是16-4%)。控制台输出性能:
总共收益:1.6-415993234216582
Sortino coef: 30.971434947620118
最大回撤率:-0.05125165292172551
回溯测试:
让我们建立佣金成本和滑动模型
表现不佳,权益(红线)平稳下降。通常情况下,当一个策略产生了很多平均利润较低的信号时,就会发生这种情况。
控制台输出性能:
总共收益:-0.9160713719222552
Sortino coef: -11.718587056-499238
最大回撤率:-0.9148-93278444377
应该尽量减少交易信号的数量,同时交易的潜在利润也应该很高。我建议增加min_spread值,设置为0.035,这意味着价差应该比往返交易成本高出几倍。
同样,z_signal_in值应该更高,例如对于99.99%的区间。时间范围可以更改为更大的值(例如每小时),但是分析的周期将是相同的(3天)。
这组参数实现了我们的目标。信号数量少(黄色线表示使用杠杆),算法4个月正向表现:
总收益:0.0946758-967277288
Sortino coef: 8.399998343300492
最大回撤率:-0.028181546269574607
转发:
这一步更真实地展示了所开发的算法。让我们对样本外数据(最近两个月)采用该策略。
XMR/USD和NEO/USD的转发测试
表现依然良好,指标接近于回测值:
总收益:0.040754467244888515
Sortino coef: 8.205062447014148
最大回撤率:-0.010029904921808-908
可以通过索提诺(Sortino)比率值来比较结果。
该策略的权益图是
进一步的问题讨论
对不同的资产进行大量的试验,以创建一个可靠的资产组合,并调整它们之间的资金管理。
1、它将允许获得更重要的统计数据,因为交易的数量将会更大。
2、该试验尝试使用跨货币对来降低交易成本(例如XMR/NEO,而不是XMR/USD和NEO/USD)。
3、采用以下步骤:对投资组合中的每一对数据进行协整测试—回测—转发,以获得更可靠的生产模式性能。可调参数:历史记录长度、p值阈值和算法参数。
4、创建规则,当共同移动属性被破坏时停止算法,如果这不可预见,结果可能是一场灾难。
总结
1、描述了该方法并创建了算法交易策略。
2、该算法在回测和转发测试中取得了良好的效果。演示了不同的表现度量和图表。
3、就如何改进这项研究提出了建议。
4、源代码可以得到github。
关注币海启行微信公众号,了解更多