关于提前发单代码的疑问

按照官方提供的提单发单代码,我已经在单图层中使用了几个月均没有发现问题,但最近在一个双图层的区间突破策略中使用时遇到了执行异常,请各位老师指导。

策略使用了两个图层,图层一为日线,图层二为30分钟K线,主要代码如下:

OnBarOpen(ArrayRef<Integer> indexs)

{

Range[1:1]

{

Numeric advancesec(5); //提前多少秒

Array<Numeric> timePoint;

Numeric ret = DateTimeAdd(RealEndDateTime, -1*advancesec);

ret = StringToTime(TimeToString(ret));

ArrayPushBack(timePoint, ret);

SetTriggerBarClose(timePoint);

}

       //此处有一些计算Buyline和SellLine的代码,略去不计

    }


OnBarClose(ArrayRef<Integer> indexs)

{

Range[1:1]

    {

           If(time == 0.093 and high < BuyLine AND MarketPosition == 1 and BarsSinceToday==0)

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

{

Sell(lot,Close);

PlotString("Cover","平多",low,Yellow);

}

    }

}

这段代码在实盘执行的结果,并不是在9:30这根k线执行前5秒平仓,而是在开盘就平仓了。交易开始前系统还提示存在信号闪烁。

请老师们指导应如何编码

关于提前发单代码及OnBarClose的疑问
收盘价模型的收盘提前发单案例
收盘提前N秒发单的通用方法
关于setbaseperiod的几个疑问
老师,请教一些关于盘口bar上开仓信号和实际发单关系的疑问
关于OnTimer的疑问
关于多数据源对齐的 SetBeginBarMaxCount疑问
在线等待:关于不发单的问题
关于MLRS使用的疑问
关于 SetGlobalVar 的疑问

1、先设定好K线用开始时间还是结束时间来界定

2、OnbarClose域,arrayFind一下是否1号图层触发的

两个图层都是同一种商品,是0号图层还是1号图层应该没关系吧

K线不是都以开始时间来界定吗?比如9点半开盘的期指,第一根K线的time==0.093,还有其他设置方法吗?

RealEndDateTime 你代码一个用的结束时间

其他不知道你配置没有


所有数据源应该先设定统一的时间标识

AddDataFlag(Enum_Data_FullPeriod);//完全交易时段枚举值

AddDataFlag(Enum_Data_EndTime);//使用结束时间的枚举值

在Init域先统一好


很多时候,就这种小细节折腾坏


所以我不喜欢用Date\Time

习惯用TradingEndDateTime/TradingBeginDateTime

类似于RealEndDateTime 一个概念


虽然TBQ提供了很多函数

还是尽可能自己养成习惯

包括是否需要指定图层

特别是涉及到多数据源

否则有的时候人要搞崩溃

就像我昨天刚问老师的问题

文档和理论上

编码都没问题

ReStatr-开拓者社区  https://bbs.tbquant.net/thread/20250312183351227056

但是需要自己去摸索、揣摩底层机制

否则心态就崩了

你这还刚多图层

信号闪烁问题接踵而来


翻翻我以前的回复

做点储备

谢谢兄弟,我就是被多图层搞崩溃了,现在都敢用单图层。用一次多图层+onbarclose+提前发单,就报信号闪烁了。猜软件的底层机制真是太难了🤝

1、我自己是不用OnBarClose的SetTriggerBarClose;我记得23年8-9月写的时候,好像没有这玩意,或者我没注意;我是OnBar中自己完成同样的功能,不复杂

2、多数据源对齐必须校验,历史数据默认对齐,实时行情用代码校验一下

3、上面说的,有些触发要考虑哪个图层,那就ArrFind一下对应图层再操作

4、序列价格计算用系统的序列变量;标志类的控制开关,用全局变量,换句话说,少用序列变量,至今我都心有余悸、落下了心理阴影

5、A 要么接受在OnBarOpen中用Close[1]这类延迟性;B 要么接受在OnBarClose中当前Bar满足条件,但是偶尔还是会出现信号消失,这就要看你接受度和策略包容度;C 如果想要完全不闪烁,也可以做到,一个是要自己反算价格,还得用到High/Low;我是接受B种,认为是最自然、最合理、最简便、最优解

6、交易买卖信号,需要放在小周期的切片上


我甚至认为,Close[1]/Open/High/Low是很Low思维,大多量化系统传承下来的恶习;

SetTriggerBarClose是个不错的思维,但是由此带来一些问题,官方也不推荐,甚至更早一段时间,客服认为没有意义,直接建议不用

用的时候自己慢慢揣摩吧

一是我觉得很好

二是我自己没直接用,但重构一样的功能

Onbar中该如何实现在收盘前几秒发单的效果呢?兄弟有资料推荐学习吗?

你先把老师的此类各种视频消化一下

了解各个事件域驱动机制


至于在onbar中重构onbarclose 的SetTriggerBarClose

如果你理解了它现有处理机制

几秒钟就明白了

不太确定哪里有问题,一般需要加诊断语句记录执行日志才能分析。

猜测可能是因为多图层驱动时机不一致导致的

两个图层,一个是日线,一个是30分钟,能对齐。另外onbarclose 中 ,已经用range[1:1]指定了图层,还会因为多图层驱动时机不一致导致问题吗?

不清楚,所以需要拿到代码,写一些demo测试去验证猜想啦确定问题