关于onbarclose开仓信号的触发问题


描述:我所有的开仓信号都是在 onbarclose() 域完成,另外设置了定时器 每个小节点提前3秒开;白糖SR000在120分钟运行策略(K线 自然分割)


定时器如下:

        Array<Numeric> timePoint;
		Integer i;
		Print("GetSessionCount: " + Text(GetSessionCount));

		For i = 0 To GetSessionCount() - 1
		{
			Print("GetSessionEndTime: " + Text(GetSessionEndTime(i),6));               
			Numeric ret = DateTimeAdd(GetSessionEndTime(i), -3);

			if(ret < 0)
			{
				ret = DateTimeAdd(GetSessionEndTime(i), 86400 - 1);
			}
			ret = StringToTime(TimeToString(ret));
			Print("SetTriggerBarClose: " + Text(ret));
			ArrayPushBack(timePoint, ret);
		}
		Print("tarryszie: " + text(GetArraySize(timePoint))+"; arrytime: "+ TextArray(timePoint));
		
		If(True) SetTriggerBarClose(timePoint);  // 按小节 
		
		
		Print("------");


问题:

为什么会存在 11:24:38 开仓的信号?而且提示“闪烁”

预期应该在 11:29:57 开


商品名称	委托时间	委托价格	状态	买卖	开平	委托数量	成交数量	成交价	成交额	剩余数量	对手价	理论价	委托编号	委托来源	状态消息
白糖605	2026/03/16 11:24:38	5483	全部成交	买入	开仓	21	21	5473	1,149,330	0	5473	5473	100002	 
时间	消息类型	消息级别	内容
2026-03-16 11:24:42.241	策略运行	警告	策略运行,S03@myunit@SR000_M120发生信号闪烁,合约:SR000.CZCE,上次执行信号个数:1,本次执行信号个数:0,发生Bar时间:20260316.100000,发生Bar=5005


关于 OnBarClose
关于OnBarClose()回溯的问题
实盘交易跨周期OnBarClose触发问题
OnBarClose的触发时间和设置的触发时间点不一致
OnBarClose设置提前触发,有提前触发却没有发出委托
关于OnBarClose
怎么实现在K线收盘前几秒触发OnBarClose
全新事件收盘价触发onbarclose即将上线
关于日内收盘最后一根bar的OnBarClose
OnBarClose模式的一个问题

目前的解决办法是,取消

SetTriggerBarClose()


😀

希望问题得到解决~

希望大家看看是否遇到类似问题~

你要这么说的话

镍也不对吧


应该是时间切片的问题

起码最小的切片

能够和Close的时间点配合上


120分钟

绝大多数收盘都不在你划分的时间点上?

不是的,有的品种周期有区别,但都是正规的分钟数 如:60/120分钟

你贴的代码不全

这个机制的实现也没给源代码


https://bbs.tbquant.net/thread/forum12343


这么给你说吧

这个机制本质就是把onbarclose改成了onbar

你的策略需求可以用两种方法实现

1、如果你要固定的时间点开平仓,还不如把这些时间点写死放到数组,然后判断系统当前时间是否在这个区间内,比如≥11:29:57<11:30:00,做相应的开平仓动作。因为

SetTriggerBarClose机制本来就是要在实时行情阶段才有效

2、根据你设定的K线切割,在K线收盘前3秒做相应的开平仓操作,这个也是最合理的逻辑


无论使用哪种方案

都比系统提供的

SetTriggerBarClose机制来的简洁有效

理解了逻辑

重构SetTriggerBarClose非常简单

1-2行代码

避免官方的冗余方案、且官方都不建议的这个机制何乐不为?

参考下您的重构代码~

原贴已经更新

一行代码的事情

看你们折腾死了

最终还是取决于你用上面的1还是2模式

两种都行

性质略有不同


但是本质上来说你的K线切割方式本身是有问题的

。。。

至于闪烁

根本原因在于

开仓前的IF块

必须确保不变

这是闪烁的根本原因


理解这个

就没有闪烁

原贴链接 发一下~

有没有叠加合约?


单图层,单品种,单策略

如果仅仅是差几秒,可能是本地时间问题。但是差了好几分钟。。。正常自然时间分割 120分钟线