设{P(t), t=1,2,...}为一个独立同分布的连续随机变量序列,这个序列落在非负实轴上,其中位数为m. 那么:
P[P(t-1)>m且P(t)<m 或 P(t-1)<m且P(t)>m] = 0.75
其实不需要独立同分布这么强的条件,但必须要求时间序列是稳定的。然而股价序列不是稳定的,即使考虑价差序列,通常也不是稳定的。所以我对价差进行局部分析,使用动态调整的中位数近似值,可以得到局部近似的稳定序列。故可以应用这个公式构建套利策略。
策略逻辑如下:
设dif(t)为白糖主力合约和次主力合约的价差序列,时间频率为5分钟。
m(t)为近20个周期的中位数,即m(t) = mid(dif(t-19:t))
若dif(t)>m(t),平掉之前的仓位并做空价差
若dif(t)<m(t),平掉之前的仓位并做多价差
策略收益:
绩效概要:
在matlab上实现,策略代码:
- function Kqtl3(ShareNum,Freq,len)
- targetList = traderGetTargetList();
- HandleList = traderGetHandleList();
- global s;
- n = length(targetList);
- for j = 1:2:n
- [time1,open1,high1,low1,close1,volume1,turnover1,openinterest1] = traderGetKData(targetList(j).Market,targetList(j).Code,'min',Freq, 0-len, 0,true,'FWard');
- [time2,open2,high2,low2,close2,volume2,turnover2,openinterest2] = traderGetKData(targetList(j+1).Market,targetList(j+1).Code,'min',Freq, 0-len, 0,true,'FWard');
- if length(close1)<len+1
- return
- end
- diff = close1-close2;
- mid = median(diff);
- s(j).condition = 0;
- if s(j).position~=0
- traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
- traderPositionTo(HandleList(1),targetList(j+1).Market,targetList(j+1).Code,0,0,'market','close');
- s(j).position = 0;
- end
- if diff(end)<mid
- s(j).condition = 1;
- end
- if diff(end)>mid
- s(j).condition = -1;
- end
-
- if s(j).condition==1
- OrderId = traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
- traderDirectSell(HandleList(1),targetList(j+1).Market,targetList(j+1).Code,ShareNum,0,'market','buy');
- if OrderId~=0
- s(j).position = 1;
- end
- end
- if s(j).condition==-1
- OrderId = traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
- traderDirectBuy(HandleList(1),targetList(j+1).Market,targetList(j+1).Code,ShareNum,0,'market','buy');
- if OrderId~=0
- s(j).position = -1;
- end
- end
- end
执行代码:
- clear;
- clc;
- targetList(1).Market = 'CZCE';
- targetList(1).Code = 'SR000';
- targetList(2).Market = 'CZCE';
- targetList(2).Code = 'SR001';
- Freq = 5;
- ShareNum = 100;
- len = 20;
- global s;
- for i = 1:length(targetList)
- s(i).position = 0;
- s(i).condition = 0;
- end
- %回测
- % 在回测时设置初始资本1000000元、手续费率0.000026、无风险利率0.02、滑价0、默认1下一个bar的开盘价、默认0成交价、默认0直接成交
- AccountList(1) = {'FutureBackReplay'};
- traderRunBacktest('Kqtl3BackTest',@Kqtl3,{ShareNum,Freq,len},AccountList,targetList,'min',Freq,20160110,20161030,'FWard');