代码如下,不使用marketposition开仓,会出现错误。均线1用小数,均线2用大数 在K线前的十几根K线就会改变我的upflag,dnflag的值,就象已经交易一样。实际上均线都没画出来。这个问题能否解决,否则会影响我多次开仓的代码编写。
Params
Numeric lots(1);
Numeric length1(3);
Numeric length2(30);
Vars
Global Bool upflag(false);
Global Bool dnflag(false);
Series<bool> upcross;
Series<bool> dncross;
Series<Numeric> MA1;
Series<Numeric> MA2;
Events
OnBar(ArrayRef<Integer> indexs)
{
Commentary(barcount: + Text(CurrentBar));
ma1 = Average(Close,length1);
ma2 = Average(close,length2);
PlotNumeric(ma1,ma1);
PlotNumeric(ma2,ma2);
upcross = CrossOver(ma1[1],ma2[1]);
dncross = CrossUnder(ma1[1],ma2[1]);
if(MarketPosition == 1){
if(dncross){
Sell(0,Open);
upflag = False;
}
}
if(MarketPosition == -1){
if(upcross){
BuyToCover(0,Open);
dnflag = False;
}
}
if(upflag == False and upcross ){
upflag = true;
Buy(1,Open);
}
if(dnflag == False and dncross ){
dnflag = true;
SellShort(1,Open);
}
Commentary(upflag: + IIFString(upflag,true,false));
Commentary(dnflag: + IIFString(dnflag,true,false));
}
您好,这个问题是因为系统在K线根数不足以输出均线指标时,做了一些特殊处理,但只是对指标和交易信号进行了特殊处理,对其它序列变量的计算没有进行特殊处理。我建议您在所有序列变量的计算之后,交易指令执行之前,做一个人为的判断,K线不足时直接Return,这样就不会发出交易指令,也不会修改upflag和dnflag的值。
修改的代码如下,供您参考: