用逐周期时在1分钟,5分钟试都正常,当然我是用在一小时的。
但是用序列计算的时候,开仓以后就立刻平仓,而且开仓是乱开的。
详情工作人员麻烦解答一下我的简单问题:
//多头止损,平仓,开仓
LSL:=tENTERPRICE-Z*0.1*REF(ATR,tENTERBARS-1);
LTP:=REF(ER,1)>=0.9 OR REF(C,1)<REF(AMA,1);
LO :=REF(C,1)>REF(SSMA,1) AND H>=REF(UP,1);
DEBUGOUT(‘多头止损=%.0F’,LSL);
DEBUGOUT(‘多头平仓=%.0F’,LTP);
DEBUGOUT(‘多头开仓=%.0F’,LO);
//空头止损,平仓,开仓
SSL:=tENTERPRICE+Z*0.1*REF(ATR,tENTERBARS-1);
STM:=REF(ER,1)>=0.9 OR REF(C,1)>REF(AMA,1);
SO :=REF(C,1)<REF(SSMA,1) AND L<=REF(DOWN,1);
DEBUGOUT(‘空头止损=%.0F’,SSL);
DEBUGOUT(‘空头平仓=%.0F’,STM);
DEBUGOUT(‘空头开仓=%.0F’,SO);
//平空开多
TSELLSHORT(STM AND THOLDING<0,THOLDING,MKT);
TSELLSHORT(THOLDING<0,THOLDING,STP,SSL);
TBUY(LO AND THOLDING=0,LOTS,MKT);
//平多开空
TSELL(LTP AND THOLDING>0,THOLDING,MKT);
TSELL(THOLDING>0,THOLDING,STP,LSL);
TBUYSHORT(SO AND THOLDING=0,LOTS,MKT);
这是用逐周期的时候,动态测试没问题。里面包括的指标用序列计算是没问题的。
但是改成序列计算的时候,就乱开单了,乱平仓了。
请问是不是下边两段改成以下这样就解决问题呢?因为序列计算是只计算一次?
//平空开多
IF H>=SSL THEN TSELLSHORT(THOLDING<0,THOLDING,MKT)
ELSE IF STM THEN TSELLSHORT(THOLDING<0,THOLDING,MKT);
IF LO THEN TBUY(THOLDING=0,LOTS,MKT);
//平多开空
IF L<=LSL THEN TSELL(THOLDING>0,THOLDING,MKT)
ELSE IF LTP THEN TSELL(THOLDING>0,THOLDING,MKT);
IF SO THEN TBUYSHORT(THOLDING=0,LOTS,MKT);
初步看了一下你的公式是有病句的
//平空开多
TSELLSHORT(STM AND THOLDING<0,THOLDING,MKT);
TSELLSHORT(THOLDING<0,THOLDING,STP,SSL);
TBUY(LO AND THOLDING=0,LOTS,MKT);
//平多开空
TSELL(LTP AND THOLDING>0,THOLDING,MKT);
TSELL(THOLDING>0,THOLDING,STP,LSL);
TBUYSHORT(SO AND THOLDING=0,LOTS,MKT);
THOLDING不要放在开平仓的条件里,详情请参考
http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=332 问题15