在白银连续K线图,1小时级别,计算出空单开仓价格8875(策略为出现信号时,k线闭合前5秒以收盘价交易)
看白银2508对应的K线收盘价也为8875
但是最终委托价却是8798,与计算出来的开单价格不一致,委托时间也不是按策略来的,时间问题分析后原因应该如下:
设定出发时间点代码,无问题
OnBarOpen(ArrayRef<Integer> indexes)
{
Numeric advancesec(20); // 提前触发秒数(默认5秒)
Array<Numeric> timePoint; // 存储触发时间点数组
// 计算触发时间(当前K线结束时间前5秒)
Numeric ret = DateTimeAdd(RealEndDateTime, -1*advancesec);
ret = StringToTime(TimeToString(ret)); // 格式化为标准时间
// 调试输出时间信息
Print("endtime="+text(RealEndDateTime)+" SetTriggerBarClose:" + Text(ret));
// 设置触发时间点
ArrayPushBack(timePoint, ret);
SetTriggerBarClose(timePoint); // 注册触发事件
Commentary("CurrentTimeBarOpen="+Text(CurrentTime));
}
开仓计算,持仓处理均放在OnBar(ArrayRef<Integer> indexs)部分,
// 每根K线结束时触发
OnBar(ArrayRef<Integer> indexs)
{
这样是不是错的,正常是不是要改成
// 每根K线结束时触发
OnBarClose(ArrayRef<Integer> indexs)
{
麻烦老师帮忙看下这两个问题:
1.实际委托价与计算委托价不一样的原因是什么
2.委托时间与策略不一样的原因是不是因为应该用OnBarClose,实际用了OnBar
你好像完全没搞清楚这个交易是怎么发生的吧?
第一步,先明确这个信号是什么时候发生的。
按tb的信号机制,信号一旦出现,就会马上发委托。所以这个信号发生时间 就是委托时间,那就是6月13日,9点01分45秒。
按照这个委托时间,ag2508合约的价格如果是在8798问题是没有任何问题的。
所以你的核心问题就在于,为什么早上9点01分45秒会出信号?这个信号到底是从那一行代码,哪一个事件域驱动做的?
而你目前提供的线索,无法回答上面这两个问题。
你虽然提供了settriggerbarclose的代码,但是onbarclose里写了什么,onbar里写了什么,都不得而知。
改为onbarclose后,是不是只有在k线闭合前20秒才会判断是否有交易信号呢
SetTriggerBarClose后
就是onBar机制
我看教程里写的是触发OnBarClose的时间,是我理解有问题吗,这里的OnBarClose不是指的OnBarClose(ArrayRef<Integer> indexs)?
你的理解没问题
但需要更加深入理解
等你猛烈地深入理解了
就发现用这个机制绕来绕去
还需要牵扯三个事件域
又用数组无谓的消耗资源
不如自己用一行代码搞定
我至今都没懂TBQ工程师是怎么这么拧巴的给出这个机制
又半公开的承认没用
不建议使用😂
无论官方还是自己实现这个机制
就是一个advancesec参数+一行代码
如果要只执行一次
就是两个参数+二行代码
你再思考一下
非常简单
我刚开始用这个平台,还不太熟悉,你是指advancesec+要执行的代码,就可以达到在k线闭合前一段时间才执行吗