请教,信号闪烁问题。

最近在调试程序,写了一个简单的开仓策略。开仓逻辑:【前一根为阳线】且【dt=0】用模拟账号,云端回测,总是出现信号闪烁。不知道什么原因,求解。如果在开仓条件中去掉【dt==0】则不会出现闪烁。【我写dt==0的目的:我准备在实盘时,每次下单用FileAppend记录1次交易日志,防止在开仓bar多次记录日志】【测试平台:TB V3 版本3.2.42】Vars //此处添加变量 Global Integer dt(0); Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { PrintClear; } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { //dt=0 前一根为阳线时开多 If(MarketPosition !=1 && BarStatus==2 && Close[1]>Open[1] && dt==0) { Bool ret = Buy(1, Open); String fhz = IIFString(ret, "成功", "失败"); String str = fhz; If(ret) { Print(str); Commentary(str); dt = dt + 1; } } }

请问解决了吗?也好奇这个怎么做,按自己理解逻辑,既然全局的变动了,下一次再到if,应该是不成立,防止了进入判断,但也因为这样出现闪烁?也就是永远只能用过去固定数据做判断和计算了吗?

回复:我建议你先看看零基础课程理关于全局变量 图表信号机制 序列变量的教学

解决闪烁的核心逻辑是IF块的内容不变理解这个怎么写都不会闪烁代码中直接改变了DT这个是低级错误

回复:是我对程序运行机制理解不够透彻,这机制与普通的编程差别还不小。谢谢

回复:算是量化平台传统的控制开仓次数传统机制各个品种基本都都这样和正常写代码有区别如果基于MarketP、BuySell等图表/虚拟账户为基准就用序列变量吧逻辑是一致的如果基于行情触发等实盘逻辑研究一下全局变量两种方式都需要琢磨

回复:没有那种方式好坏看自己癖好😁

你用global做开仓条件那不是明摆着要闪烁么?这种错误有点过于低级了哦,零基础课程里都是讲过数据特点的,特别是用来做状态变量的时候

回复:老刘不是global问题撒...

回复:用全局不是原罪😭

回复:那是哪里的问题呢?

回复:dt值他在改变啊当然闪烁但是原罪不在全局当然用序列是对的

回复:你再看看他的设计目标和逻辑和用啥没关系

回复:明显dt不能用global啊dt定义成series就不会闪烁了