在多图层的商品截面策略中,日线级别,如果参考OnBarClose示例。
我希望是每日尾盘收盘前发单调仓。
但是会因为每个品种每日开盘时间的不一样,有3次不同的开盘时间:21:00, 9:00和国债9:30。
如图最后一根bar,早开盘的品种执行了OnBarClose里的内容:PlotNumeric("MA1",AvgValue1); PlotNumeric("MA2",AvgValue2);
这样是否会因为9:00,9:30不同开盘时间发生信号闪烁误下单?按理说OnBarOpen定义了执行的时间,有点糊涂了。

Params
Numeric FastLength(5);// 短期指数平均线参数
Numeric SlowLength(20);// 长期指数平均线参数
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Events
//每根BAR开始的时候设置触发时间点
OnBarOpen(ArrayRef<Integer> indexes)
{
Range[0:DataSourceSize()-1]
{
Numeric advancesec(10); //提前多少秒
Array<Numeric> timePoint;
Numeric ret = DateTimeAdd(RealEndDateTime, -1*advancesec);
ret = StringToTime(TimeToString(ret));
Print("endtime="+text(RealEndDateTime)+" SetTriggerBarClose:" + Text(ret));
ArrayPushBack(timePoint, ret);
SetTriggerBarClose(timePoint);
}
}
OnBarClose(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize()-1]
{
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
If(MarketPosition <>1 && AvgValue1 > AvgValue2)
{
Buy(0,Close);
}
If(MarketPosition <>-1 && AvgValue1 < AvgValue2)
{
SellShort(0,Close);
}
}
}getsessionendtime
我暂时想到的解决办法是:
If(0.1430 < CurrentTime() Or CurrentBar + 1 < BarCount)
{
If(MarketPosition <>1 && AvgValue1 > AvgValue2)
{
Buy(0,Close);
}
If(MarketPosition <>-1 && AvgValue1 < AvgValue2)
{
SellShort(0,Close);
}
}0.1430 < CurrentTime()用于实盘防止9:00, 9:15发生的信号闪烁
CurrentBar + 1 < BarCount用于历史回测
请教一下这样能够解决我的问题么,以及还有什么好的解决方法么?