在MT5下利用python作策略统计分析-货币相关性交易
接续前两篇的 python 数据统计,这篇讨论 'pairs trading',也就是配对交易,和配对商品选择的统计分析。配对交易就是一个商品下多单另外一个商品下空单,对机构交易者的目的也许是作标的部位作反向避险操作,但对大部分一般交易者,配对交易的目的是操作两个商品(或多组商品)的价差回归套利。
下面是个人在几年前设计的 mt4/mt5 双商品主图叠加和价差附图指标,使用这个指标的朋友通常是用来观察两种商品的价差行为变化,指标上也设计了价差到价提示等功能。大部分朋友关注的对象,以西德州原油 WTI 和 布兰特原油 Brent 居多,也有交易朋友研究不同贵金属或欧美股指或 数字 货币组的价差行为。下图是美国股指道琼和纳指 H4 的对照示意图:
操作多空对作的模式,期望是两种商品的价差在未来会作收敛,如果要对多组商品作两两对比的过去历史价格关联作统计,这时 mt5+python 利用 python 丰富的统计库,是最便利的。毕竟如果要统计例如10组商品的两两对应统计,就会产生 (10+1)*10/2=55 种可能,用外部程序来跑统计设计弹性是更好的。
统计两种商品未来价格是否有收敛性,一般采用的统计分析方式不是传统的 correlation 方式,而是使用 cointegration 方式来作统计会更加合适。下面是利用 mt5+python 取十个欧美股指 AUS200, ES35, FCHI, GDAXI, J225, NDX, SPX, STOXX50E, UK100, WS30 的 h4 过去 1000 根行情数组,以 python 的 statsmodels 函数库里 Engle–Granger 方式作 cointegration 统计。
先画出十个欧美股指的 h4 行情叠加图,从这个图就已经可以看到 ES35 西班牙股指已经是脱离大部分欧美股指在过去1000根 h4 K 的联动性。
再跑出两两对应的 pValue:
pValue 低于 0.1 通常代表数组间的价差具有未来关联收敛性。以道琼 WS30 为例,与标普 SPX 和 纳指 NDX 和 欧指50 STOXX50E 是具有这样的特性。
WS30 and AUS200: p-value = 0.1579572805246145
WS30 and ES35: p-value = 0.15602936165576176
WS30 and FCHI: p-value = 0.16819283547088626
WS30 and GDAXI: p-value = 0.40711437857596067
WS30 and J225: p-value = 0.06918988507290684
WS30 and NDX: p-value = 0.0045802346059718385
WS30 and SPX: p-value = 0.013914733762629715
WS30 and STOXX50E: p-value = 0.03451463758655442
WS30 and UK100: p-value = 0.3600445357651985
如果要作短期模型,上面的 h4 可以改为 m5 然后再跑更长的数组统计。
统计结果验证后,接下来就可以再根据筛选后的商品对,再设计 mt5 双商品价差策略的 ea,利用 mt5 可以复盘多商品的优势,在 mt5 环境下再作详细的复盘验证和参数优化。
所以一个自动交易策略的形成,可以从一般交易者的,首先观察行情或交易经验来得到自己的交易策略,再增加一道数组统计验证的前置分析,后续的自动交易形成和撰写,可以回到 mt5 ea 的架构,这样就可以利用 mt5 优秀的多商品多周期的复盘架构来验证策略的获利性。不过配对交易的交易环节,还需要仔细考虑不同商品的点差成本,和价差收敛的平均时间和平均大小距离,在杠杆交易,过大的价差收敛和时间,都需要降低杠杆或改用美股市场里的多空 ETF 来操作会更合适。
在这个流程里,还会有一个新的可能,就是作为形成策略的数据资料,通常只是行情价格或量的数据,如果可以再有更多的例如市场交易者多空部位这类数据作为分析一部分,将会看到更不同的面向。在许多地区的期货交易所是有提供机构期货多空部位或股指现货部位变化的信息,差别在不同地区交易所提供这类部位数据的时效差异,有些交易所在盘后几:就提供有些是每周才提供。但在保证金交易平台,这些“非常规”行情价格的市场数据,通常是付费或很难取得的,后续的 mt5+python 分析文会接续探讨这些非常规数据统计的题目。
个人提供 MT4/MT5 EA 或 指标定制编程代写服务,有兴趣可以扫描下方二维码添加晓辉编程为好友,进一步沟通。