[求助]系统分时段,有时开仓,有时不开仓 (文华财经WH8赢智V8.2)

投资者咨询:[求助]系统分时段,有时开仓,有时不开仓 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-16 16:33
工程师好,请教您一个问题:
我做一个海龟系统的微调版,出现一个问题:以橡胶为例,如果我设置从早些时候开始回测(如2011年),则没有任何信号,如果我设置2016年或17年开始回测,则有信号,初始金额设置为500万,不是权益不够不能开仓的原因。
其他品种也有这个问题,为什么呢?
程序请见下面。谢谢!

TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//真实波幅
ATR:=MA(TR,100); //求100个周期内真实波幅的简单移动平均
TC..INTPART((REF(MONEYTOT,1)*0.003/10/(2*REF(ATR,1))));//根据权益的R%计算下单手数(此处以10吨/手为例,适合螺纹、豆粕等品种)
MTC:=4*TC; //总的持仓头寸
TC1:=VALUEWHEN(CROSS(BKVOL,0.5)||CROSS(SKVOL,0.5),TC);
ATR1:=VALUEWHEN(CROSS(BKVOL,0.5)||CROSS(SKVOL,0.5),ATR);
HH:HV(H,P);
LL:LV(L,P);
PD: LV(L,T);
PK:HV(H,T);
CROSSUP(C,HH)&&ISLASTBK=0&&ISLASTSK=0,BK(TC);//最新价超过前高,首次买入开仓,手数为TC手
CROSSDOWN(C,LL)&&ISLASTBK=0&&ISLASTSK=0,SK(TC); //最新价跌破前低,首次卖出开仓,手数为TC手
C>=BKPRICE+0.5*ATR1&&BKVOL<MTC&&ISLASTBK,BK(TC1);//多头第1次加仓
C>=BKPRICE+0.5*ATR1&&BKVOL<MTC&&ISLASTBK,BK(TC1);//多头第2次加仓
C>=BKPRICE+0.5*ATR1&&BKVOL<MTC&&ISLASTBK,BK(TC1);////多头第3次加仓
C<=SKPRICE-0.5*ATR1&&SKVOL<MTC&&ISLASTSK,SK(TC1);//空头第一次加仓
C<=SKPRICE-0.5*ATR1&&SKVOL<MTC&&ISLASTSK,SK(TC1);//空头第二次加仓
C<=SKPRICE-0.5*ATR1&&SKVOL<MTC&&ISLASTSK,SK(TC1);//空头第三次加仓
C<(BKPRICE-2*ATR)&&BKVOL>0,SP(BKVOL);//最新价小于开仓价减去2倍的ATR,止损平仓
C>(SKPRICE+2*ATR)&&SKVOL>0,BP(SKVOL); //最新价大于开仓价加上2倍的ATR,止损平仓
CROSSUP(H,PK)&&SKVOL>0,BP(SKVOL);//最高价上穿小周期最高价,平仓
CROSSDOWN(L,PD)&&BKVOL>0,SP(BKVOL); //最低价下穿10周期的最低价,平仓
MULTSIG_MIN(0,0,4);
  
技术人员回复
日期:2018-8-16 16:49
您看一下,没有信号的时候,是不是只有一个第一次开仓的信号,然后开了0手呢,这样调整一下

TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//真实波幅
ATR:=MA(TR,100); //求100个周期内真实波幅的简单移动平均
TC..INTPART((REF(MONEYTOT,1)*0.003/10/(2*REF(ATR,1))));//根据权益的R%计算下单手数(此处以10吨/手为例,适合螺纹、豆粕等品种)
MTC:=4*TC; //总的持仓头寸
TC1:VALUEWHEN(CROSS(BKVOL,0.5)||CROSS(SKVOL,0.5),TC),NODRAW;
ATR1:VALUEWHEN(CROSS(BKVOL,0.5)||CROSS(SKVOL,0.5),ATR),NODRAW;
HH:HV(H,P);
LL:LV(L,P);
PD: LV(L,T);
PK:HV(H,T);
BARPOS>100&&CROSSUP(C,HH)&&ISLASTBK=0&&ISLASTSK=0,BK(TC);//最新价超过前高,首次买入开仓,手数为TC手
BARPOS>100&&CROSSDOWN(C,LL)&&ISLASTBK=0&&ISLASTSK=0,SK(TC); //最新价跌破前低,首次卖出开仓,手数为TC手
C>=BKPRICE+0.5*ATR1&&BKVOL<MTC&&ISLASTBK,BK(TC1);//多头第1次加仓
C>=BKPRICE+0.5*ATR1&&BKVOL<MTC&&ISLASTBK,BK(TC1);//多头第2次加仓
C>=BKPRICE+0.5*ATR1&&BKVOL<MTC&&ISLASTBK,BK(TC1);////多头第3次加仓
C<=SKPRICE-0.5*ATR1&&SKVOL<MTC&&ISLASTSK,SK(TC1);//空头第一次加仓
C<=SKPRICE-0.5*ATR1&&SKVOL<MTC&&ISLASTSK,SK(TC1);//空头第二次加仓
C<=SKPRICE-0.5*ATR1&&SKVOL<MTC&&ISLASTSK,SK(TC1);//空头第三次加仓
C<(BKPRICE-2*ATR)&&BKVOL>0,SP(BKVOL);//最新价小于开仓价减去2倍的ATR,止损平仓
C>(SKPRICE+2*ATR)&&SKVOL>0,BP(SKVOL); //最新价大于开仓价加上2倍的ATR,止损平仓
CROSSUP(H,PK)&&SKVOL>0,BP(SKVOL);//最高价上穿小周期最高价,平仓
CROSSDOWN(L,PD)&&BKVOL>0,SP(BKVOL); //最低价下穿10周期的最低价,平仓
MULTSIG_MIN(0,0,4);
投资者咨询:[求助]系统分时段,有时开仓,有时不开仓 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-16 16:33
 非常感谢!齐云老师!
是的,之前就是只是有一个第一次开仓的信号,后面什么都没有了。
但我看见您只是在首次开仓那一行,加了一个BARPOS>100,为什么就能解决这个问题呢,可否请释疑?谢谢了!
技术人员回复
日期:2018-8-16 22:30
 明日工作时间相关同事给您回复
技术人员回复
日期:2018-8-17 8:17
因为ATR被定义为MA(TR,100)是百周期均值,要在本地100根k线之后才会有值的

开仓手数tc是用atr计算出来的,也就是在100周期后才会有值

所以如果在100根k线内满足首次开仓,开仓手数就会为0

后续的加仓,平仓等条件都是基于持仓大于0才有满足的,所以第一次如果是0 后面也不会满足的

所以改了一下首次开仓位置,100之后的tc都是有值的
投资者咨询:[求助]系统分时段,有时开仓,有时不开仓 (文华财经WH8赢智V8.2)
来源:文华财经  日期:2018-8-16 16:33
 非常感谢老师!!