在OnBarClose中编写的交易代码,却在bar开始时执行,这是什么原因

各位老师好,我在编写策略的时候,想实现一个需求:即在开盘第一根K线未突破上轨时,马上出局。于是选择使用了onbarclose代码,但今天开盘时程序立即执行了程序,如下图所示:

data-href=

于是我打开程序检查代码,如下所示:

OnBarClose(ArrayRef<Integer> indexs)

{

       //如果在10:00前没有向上突破,且昨日有持仓,则平仓

If(data1.time == 0.093 and Data1.High <= BuyLine)

{

data1.Commentary(data1.time= + TimeToString(data1.time));

data1.Commentary(Data1.High[1]= + text(Data1.High[1]));

data1.Commentary(BuyLine= + text(BuyLine));

Range[2:datacount-1]

{

if(MarketPosition==1)

{

SellForIndexOption(lots,Close);

FileAppend(c:\\\\DT_Option_Debug,data1.time= + Text(data1.Time) +    CurrentDate= + DateToString(CurrentDate) +  CurrentTime= + TimeToString(CurrentTime)

+ Data1.High[1]= + Text(Data1.High[1]) +  Buyline= + Text(BuyLine) +  SellLine= + Text(SellLine) +   此时价格为

+ Text(data1.close) + ,未向上突破buyline,平仓所有合计 + text(lots) + 张看涨期权 );

data1.PlotString(Cover,平仓,low,red);

lots = 0;

}

}

       }

}

对上文的代码简单解释一下:

1、代码是在onbarclose中执行,已用红色字段加粗,

2、限制time==0.093这根K线才执行,即9:30这根K线收盘后才执行。

3、SellForIndexOption(lots,Close);是我自己封装的函数,里面的代码就是平仓函数sell

4、使用了多图层,结构如下所示:

data-href=


事后我查看了交易的实数数据,发现程序在9点29分29秒即触发了交易,而我希望其在10:00才触发。


data-href=

这与onbarclose的设计并不相符,这是为何?是我对这个函数的机制理解不对吗?请老师指导。



多周期在OnBarClose内的执行问题
请问这是什么原因呢,在旗舰版中没有,在TBQ中总警告。
怎么实现每根Bar结束前2秒触发ONbarclose执行
关于OnBarClose
onbarclose为什么会在刚开盘执行
onbarclose函数中range问题
交易条件达成后,并不执行卖出,是什么原因?
能否在一根Bar上执行代码后延迟一小段时间再在下一根Bar上执行
关于提前发单代码及OnBarClose的疑问
这是什么原因?

onbarclose如果没有设置settrigger的话 实际上是在下一根bar的onbaropen前驱动的,只不过bar数据还是当前bar

你是数据叠加了吧

这个onbarclose实际上应该是另外一个图层驱动的

你应该检查一下驱动参数indexs是不是你想进行操作的data1

我盲猜实际上indexs里驱动的应该是0

如果我希望使用图层1的数据进行驱动,是否应该相关的代码要加上range[1:1]?但代码需要轮询每个期权合约,将其进行平仓操作,此时也要用到range[],可TB不允许range进行嵌套,该如何编写此项需求?

是否在应该把raneg[1:1]改为 if(indexs,1) ?