全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
在OnBarClose中编写的交易代码,却在bar开始时执行,这是什么原因
hongqida 分享到
2024-03-28 10:14

各位老师好,我在编写策略的时候,想实现一个需求:即在开盘第一根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的设计并不相符,这是为何?是我对这个函数的机制理解不对吗?请老师指导。



kyover

你是数据叠加了吧

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

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

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

2024-03-28 10:20
hongqida
@kyover

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

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

2024-03-29 11:14
kyover

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

2024-03-28 10:25
您未登录,请先 登录注册 后发表评论
顶部