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

 

Global 会带来闪烁,我如何解决开仓标签的问题??

我的n1符值来代表开仓,还是没有开仓

现在不能用 Global 可以用什么方法来做,请技术老师支持一下!!

因为有底仓所以不能用MarketPosition  来判断, 问题核心:如何记录我已开仓了?

敬请老师给一个解决方案

【信号闪烁】信号不闪烁的方法
《信号闪烁是什么?怎么解决?一次性全部讲清!》
如何解决信号闪烁
如何判断是否有委托单来防止信号闪烁
使用指令价模型的话,我想用盘中价来计算,信号闪烁一般怎么处理
股指期货无法回测;信号闪烁;开仓不按信号。
老师,信号闪烁怎么处理
信号闪烁
信号闪烁问题求解决!
信号闪烁

没有能完全 理解您说的:2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1……,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥 

这一段的意思,麻烦您把我的这段代码改一下,这样我就要参考了

特别感谢老师的支持

我本就是一个低水平的 也是刚写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……,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥

没有能完全 理解您说的:2.如果一定要用全局变量控制,那么可以用多个全局变量形成闭环,n1控制条件,n2控制结果或者n2控制n1……,最终就是要满足全局变量在实时情况下的机制才可以,不要形成条件与赋值结果的互斥 

这一段的意思,麻烦您把我的这段代码改一下,这样我就好参考了

特别感谢老师的支持

我本就是一个低水平的 也是刚写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 来判断,就简单了!!