帮忙看看这个套利程序哪里错了,代码如下:
INPUT:M(8,1,100,1);
INPUT:a(2,1,100,1);
INPUT:N(100,1,100,1);
INPUT:LOT1(1,1,10,1);
INPUT:LOT2(1,1,10,1);
runmode:0;
//取每五分钟K线的开盘价
YOPEN:=callstock('y05',VTOPEN,2,0);
POPEN:=callstock('p05',VTOPEN,2,0);
MEAN:=MA(YOPEN-POPEN,M);
vd:=std(YOPEN-POPEN,N);
UPPERBAND:=MEAN+a*vd;
LOWERBAND:=MEAN-a*vd;
IF NOT(ISLASTBAR) THEN EXIT;
//做空价差
IF TBUYHOLDINGEX('800980','Y05',0)=0 AND TBUYHOLDINGEX('800980','P05',0)=0 AND TSELLHOLDINGEX('800980','Y05',0)=0 AND TSELLHOLDINGEX('800980','P05',0)=0 THEN
BEGIN
TBUYSHORT(YOPEN-POPEN>=UPPERBAND,LOT1,lmt,YOPEN,0,'','Y05');
TBUY(YOPEN-POPEN>=UPPERBAND,LOT2,lmt,POPEN,0,'','P05');
END
//做空套利平仓
IF TSELLHOLDINGEX('800980','Y05',0)>0 AND TBUYHOLDINGEX('800980','P05',0)<0 THEN
BEGIN
TSELLSHORT(YOPEN-POPEN<=MEAN,LOT1,lmt,YOPEN,0,'','Y05');
TSELL(YOPEN-POPEN<=MEAN,LOT2,lmt,POPEN,0,'','P05');
END
//做多价差
IF TBUYHOLDINGEX('800980','Y05',0)=0 AND TBUYHOLDINGEX('800980','P05',0)=0 AND TSELLHOLDINGEX('800980','Y05',0)=0 AND TSELLHOLDINGEX('800980','P05',0)=0 THEN
BEGIN
TBUY(YOPEN-POPEN<=LOWERBAND,LOT1,lmt,YOPEN,0,'','Y05');
TBUYSHORT(YOPEN-POPEN<=LOWERBAND,LOT2,lmt,POPEN,0,'','P05');
END
//做多套利平仓
IF TBUYHOLDINGEX('800980','Y05',0)>0 AND TSELLHOLDINGEX('800980','P05',0)<0 THEN
BEGIN
TBUYSHORT(YOPEN-POPEN<=MEAN,LOT1,lmt,YOPEN,0,'','Y05');
TBUY(YOPEN-POPEN<=MEAN,LOT2,lmt,POPEN,0,'','P05');
END
没看出来什么问题
注意:实际要用到Y05和P05的100周期以内的开盘价,要先确定有这两个合约的5分钟数据.
这里的问题20也是要注意的事项http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332
反复开仓,观察了好几天,没有平仓信号
你模型问题多多
TBUYHOLDINGEX('800980','Y05',0)>0 or TSELLHOLDINGEX('800980','P05',0)<0 //and 改为 or
其中 TSELLHOLDINGEX('800980','P05',0)<0 这个条件不会成立,所以不会平仓
重复开仓 应该不会出现吧
TSELLHOLDINGEX('800980','P05',0)<0 这个条件怎么不会成立呢,Y05是多单,P05就是是空单啊