信号闪烁 不能用Global ,怎么来解决

Global 会带来闪烁,我如何解决开仓标签的问题?? 我的n1符值来代表开仓,还是没有开仓 现在不能用 Global 可以用什么方法来做,请技术老师支持一下!! 因为有底仓所以不能用MarketPosition 来判断, 问题核心:如何记录我已开仓了? 敬请老师给一个解决方案

没有能完全 理解您说的:2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1&hellip;&hellip;,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥 这一段的意思,麻烦您把我的这段代码改一下,这样我就要参考了 特别感谢老师的支持 我本就是一个低水平的 也是刚写TB的业余人员,敬请理解 Params Numeric kcjg(20000); // 开仓价格 Numeric pcjg(19000); // 平仓价格 Numeric Lots(1); // 交易手数 Vars Global Numeric n1(0); // 0代表没有开仓,1代表已经开仓 Events OnBar(ArrayRef<Integer> indexs) { // 开空仓 If (High >= kcjg And n1 == 0) { SellShort(Lots, kcjg); n1 = 1; } // 平空仓 If( Low <=pcjg And n1 == 1) { BuyToCover(Lots, pcjg); n1 = 0; } }

回复:Global Numeric n1(0); 改成 series<numeric> n1(0);

回复:这种写法,我用了,当天没有问题,第二天信号就消失了,出现了重复开仓了

回复:前期我们就是用的 series<numeric> n1(0); 这个方案,N1的值第二天就重新符为0了,所以就出现了重复开仓的 BUG

这段代码闪烁的原因,是没搞清楚全局变量在实时情况下的运行机制,全局变量在实时情况下是每一个tick都会改变以及保留相应的值,以开空仓代码为例,您的代码条件用了n1 == 0判断,判断后的操作 又 赋值 n1 = 1,那么n1 = 1 在第二个tick就会被保留,,,第一个tick开空仓的条件满足,,,,第二个tick由于全局变量的改变 n1 = 1,,导致条件又不满足,所以信号在第二个tick,信号消失了,,,,,,,1.不太理解为什么有底仓就不能用MarketPosition进行判断,我觉得一般情况下,就算是加仓,mp也是可以控制仓位的,您可以把mp理解为序列变量。。。2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1&hellip;&hellip;,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥

回复:没有能完全 理解您说的:2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1&hellip;&hellip;,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥 这一段的意思,麻烦您把我的这段代码改一下,这样我就好参考了 特别感谢老师的支持 我本就是一个低水平的 也是刚写TB的业余人员,敬请理解 Params Numeric kcjg(20000); // 开仓价格 Numeric pcjg(19000); // 平仓价格 Numeric Lots(1); // 交易手数 Vars Global Numeric n1(0); // 0代表没有开仓,1代表已经开仓 Events OnBar(ArrayRef<Integer> indexs) { // 开空仓 If (High >= kcjg And n1 == 0) { SellShort(Lots, kcjg); n1 = 1; } // 平空仓 If( Low <=pcjg And n1 == 1) { BuyToCover(Lots, pcjg); n1 = 0; } }

回复:因为我是一个循环程序,会多次开空仓,多次开多仓,会同时有空仓与多仓,所以没办法用MarketPosition 来判断,如果能用MarketPosition 来判断,就简单了!!