大概思路是两个模型之间近期波动规律的价差套利,这两天看了看帮助说明试写了下,可是其中有不少的问题不甚了解,望指正!
可能其中有不少语法错误,但是大概的思路能体现出来,主要是A1705和M1705的5分钟周期套利
有什么不对的,希望大神纠正以下
Input:N(50,1,100,1),M(50,1,100,1),S(2,2,5,0.1),SS(2,1,5,0.2),CA(0,0,10,1)
//N线性计算周期,M标准差计算周期,S标准差框架,SS波动速度,CA标准差绝对值
//定义A,B两个品种的合约
A合约:'AY05';
B合约:'M05';
A5MIN收盘:=stkindi('A合约','MACD.CC',0,2,0);//A的五分钟周期当前收盘
B5MIN收盘:=CALLSTOCK('B合约',VTCLOSE,2,0);//B的五分钟周期当前收盘
A5SEC收盘:=CALLSTOCK('A合约',VTCLOSE,23,5);//A的五秒钟周期当前收盘
B5SEC收盘:=CALLSTOCK('B合约',VTCLOSE,23,5);//B的五秒钟周期当前收盘
VARIABLE:A收盘[100]=0,B收盘[100]=0;
FOR i=1 to 100 do A收盘[i]=CALLSTOCK('A合约',VTCLOSE,2,-i);
FOR i=1 to 100 do B收盘[i]=CALLSTOCK('B合约',VTCLOSE,2,-i);//定义A/B 100个 5分钟周期的收盘价
A:=COVAR(A收盘 ,'B收盘' ,N )/VARP('B收盘',N);
B:=INTERCEPT(A收盘,'B收盘',N);
PEARSONAB:=PEARSON(A收盘,B收盘,N);//定义线性回归系数以及pearson相关,A赋值给Y,B复制给A
SNOWCAN:=dynainfo2(34,'B合约')*A-B-dynainfo2(28,'A合约');//最新残差,B的卖一,A的买一,做多对价差
BNOWCAN:=dynainfo2(28,'B合约')*A-B-dynainfo2(34,'A合约');//最新残差,A的卖一,B的买一,做空对价差
OLDCAN:=B5MIN收盘*REF(A,1)-REF(B,1)-A5MIN收盘;//前残差
标准差:=STDP(REF(OLDCAN,1),M);
做多条件:=SNOWCAN/标准差<-S AND (SNOWCAN-OLDCAN)/标准差<-SS;
平多条件:=(BNOWCAN-OLDCAN)/标准差>SS OR BNOWCAN*OLDCAN<0;//缺少当前K线开仓后迅速波动
做空条件:=BNOWCAN/标准差>S AND (BNOWCAN-OLDCAN)/标准差>-SS;
平空条件:=(SNOWCAN-OLDCAN)/标准差<-SS OR SNOWCAN*OLDCAN<0;//缺少当前K线开仓后迅速波动
5秒价差:=A5SEC收盘-B5SEC收盘;//5秒价差
IF 做多条件 and every((5秒价差-REF(5秒价差,1))<=0,3) THEN BEGIN
TBUY(1,10,MKT,0,0,0,'A合约');
TBUYSHORT(1,10,MKT,0,0,0,'B合约');
END
IF 平多条件 THEN BEGIN
TSELL(1,10,MKT,0,0,0,'A合约');
TSELLSHORT(1,10,MKT,0,0,0,'B合约');
END
IF 做空条件 and every((5秒价差-REF(5秒价差,1))>=0,3) THEN BEGIN
TBUYSHORT(1,10,MKT,0,0,0,'A合约');
TBUY(1,10,MKT,0,0,0,'B合约');
END
IF 平空条件 THEN BEGIN
TSELL(1,10,MKT,0,0,0,'A合约');
TSELLSHORT(1,10,MKT,0,0,0,'B合约');
END