INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),SS(1,1,10000,1);
C1:="Y01$CLOSE";
C2:="M01$CLOSE";
Spread:=C1-C2;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
Spread[1]:REF(Spread,1);
HH:HHV(Spread[1],225);
LL:=LLV(Spread[1],225);
OO:=valuewhen(date<>ref(date,1),Spread);
T1:=TIME>OPENTIME(1) AND TIMET2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;
//交易条件
浮动区间:=HH-LL;//RANGE
上轨:OO+K1*浮动区间,,COLORYELLOW;
下轨:OO-K2*浮动区间,,COLORYELLOW;
//交易条件
开多条件:=Spread>上轨 AND HOLDING=0;
开空条件:=Spread<下轨 AND HOLDING=0;
//交易系统
开多:BUY(开多条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET);
开空:BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET);
IF STRCMP(STKLABEL,'YO1') = 0 THEN
BEGIN
SELL(T2,手数,MARKET);
BUY(开多条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET);
BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET);
SELLSHORT(T2,手数,MARKET)
END
IF STRCMP(STKLABEL,'M01') = 0 THEN
BEGIN
SELL(T2,手数,MARKET);
BUY(开空条件 AND T1 AND CYC>1 AND TIME<14450,1,MARKET);
BUYSHORT(开多条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET);
SELLSHORT(T2,手数,MARKET)
end
这是根据软件经典的DS日内模型改变的价差套利版本,因为今年行情反向套利机会很多,如七八九月份的豆油豆粕价差反向套利,鉴于此,我就把原先收盘价替换成价差,赌的是日内价差的持续扩大,但编写出来之后发现几个问题
1,豆粕可以开仓,豆油无法开仓
2,无法达成日内平仓
3,信号不准确
请版主提供一些思路或讲解,谢谢
更正一下,函数为
INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),SS(1,1,10000,1);
C1:="Y01$CLOSE";
C2:="M01$CLOSE";
Spread:=C1-C2;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
Spread[1]:REF(Spread,1);
HH:HHV(Spread[1],225);
LL:=LLV(Spread[1],225);
OO:=valuewhen(date<>ref(date,1),Spread);
T1:=TIME>OPENTIME(1) AND TIMET2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;
//交易条件
浮动区间:=HH-LL;//RANGE
上轨:OO+K1*浮动区间,,COLORYELLOW;
下轨:OO-K2*浮动区间,,COLORYELLOW;
//交易条件
开多条件:=Spread>上轨 AND HOLDING=0;
开空条件:=Spread<下轨 AND HOLDING=0;
//交易系统
IF STRCMP(STKLABEL,'YO1') = 0 THEN
BEGIN
SELL(T2,手数,MARKET);
BUY(开多条件 AND T1 AND CYC>1 AND TIME<1445,手数,MARKET);
BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET);
SELLSHORT(T2,手数,MARKET)
END
IF STRCMP(STKLABEL,'M01') = 0 THEN
BEGIN
SELL(T2,手数,MARKET);
BUY(开空条件 AND T1 AND CYC>1 AND TIME<14450,1,MARKET);
BUYSHORT(开多条件 AND T1 AND CYC>1 AND TIME<1445,1,MARKET);
SELLSHORT(T2,手数,MARKET)
end
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
这是界定了日内阶段开平仓的时间
我了个去啊。。。什么小细节问题都出来了。。。而且这种小细节问题根本就不好找我调试了半天。。。
YO1
你写的这个,不是Y01 (大写Y 数字0数字1)而是YO1(大写Y,大写O,数字1)
在金字塔里面大写O和数字0从肉眼上看根本看不出来区别
还有些细节代码我做了下修改,比如上个周期的spread不能那样写,时代函数不能省略后面的0
INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1),NMIN(10,1,100,1),SS(1,1,10000,1);
C1:"Y01$CLOSE";
C2:"M01$CLOSE";
Spread:C1-C2;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
cc:=cyc>1;
Spread_1:=REF(Spread,1);
HH:=HHV(Spread_1,225);
LL:=LLV(Spread_1,225);
OO:=valuewhen(date<>ref(date,1),Spread);
T1:=TIME>OPENTIME(1) AND TIME<CLOSETIME(0)-NMIN*100;
T2:=TIME>=CLOSETIME(0)-NMIN*100;
手数:=SS;
//交易条件
浮动区间:=HH-LL;//RANGE
上轨:OO+K1*浮动区间,,COLORYELLOW;
下轨:OO-K2*浮动区间,,COLORYELLOW;
//交易条件
开多条件:=Spread>上轨 AND HOLDING=0;
开空条件:=Spread<下轨 AND HOLDING=0;
//交易系统
DRAWTEXT(ISLASTBAR,CLOSE,STKLABEL);
IF STRCMP(STKLABEL,'Y01')=0 THEN
BEGIN
SELLSHORT(T2,手数,MARKET);
BUY(开多条件 AND T1 AND CYC>1 AND TIME<144500,手数,MARKET);
SELL(T2,手数,MARKET);
BUYSHORT(开空条件 AND T1 AND CYC>1 AND TIME<144500,1,MARKET);
END
IF STRCMP(STKLABEL,'M01') = 0 THEN
BEGIN
SELLSHORT(T2,手数,MARKET);
BUY(开空条件 AND T1 AND CYC>1 AND TIME<144500,1,MARKET);
SELL(T2,手数,MARKET);
BUYSHORT(开多条件 AND T1 AND CYC>1 AND TIME<144500,1,MARKET);
end
...................不好意思,麻烦版主了,万分感谢
之前那个不知道为啥复制成这样子的,后面那个确实是疏忽,谢谢帮忙