关于SetBasePeriod(\\\"5m\\\")

老师,请教一下,

我的程序是按小时执行的,但是有信号闪烁,看了视频后,添加了SetBasePeriod(\"5m\");来进行信号闪烁的追踪,现在有两个问题想请教一下,

一是:添加了SetBasePeriod(\"5m\");后

原本想在1小时OnbarOpen执行的控制变量,在5分钟的周期内被执行多次,导致控制变量在盘中交易时失去控制意义,这个如何解决?

二是:SetBasePeriod(\"5m\");只能显示有信号闪烁,但是无法具体定位到是哪个代码或者变量产生的信号闪烁,这个有好一点的办法追踪吗?

谢谢拉!


补充一下代码:

OnInit()

   {

       SetBasePeriod(\"5m\");

   }

OnBarOpen(ArrayRef<Integer> indexs)

{

           if(fsDonchianHi == DonchianHi)

           {  

               count = count +1;

               falg = false;

           }

       }

OnBar(ArrayRef<Integer> indexs)

{

       if (falg ==false && count >=7)    //5分钟内的多次执行,导致小时级别的控制完全失效。

           {

               SellShort(1, c);

               }

       }

第二帖,关于SetBasePeriod(\\\\\\\"5m\\\\\\\")
第三帖,关于SetBasePeriod(\\\\\\\\\\\\\\\"5m\\\\\\\\\\\\\\\")
关于setbaseperiod的几个疑问
setbaseperiod只是用来做图表回测的吧?
使用SetBasePeriod函数的K线显示与使用问题
SetBasePeriod多周期回测固定时间点发生信号闪烁
setbaseperiod函数没有被声明
请问各位老师,准备用 阿里云服务器跑策略。新手。买2核2g,5M带宽的服务器够用吗?
关于套利的问题
关于代码订阅tbf000指数数据的问题

这个版本可以用indexes参数来判断一下。只有第一次驱动的时候indexes会返回图层编号,剩下几次bar内驱动返回的都是空数组

用indexs怎么判断?能帮忙写个示例么?感谢了

OnBarOpen(ArrayRef<Integer> indexs)

{

   Numeric i;

   for i=0 to GetArraySize(indexs)-1

   {

       if(indexs[i] == 1 && fsDonchianHi == DonchianHi)

           {


              count = count +1;

              falg = false;

           }

       }

}


另外,我print了一下,index[0]不等于1,index[1]也不等于1,都是0

是不是因为我实际上只有一个图层,只是用到了SetBasePeriod(\"5m\"),所以图层的indexs也是无效的?

不是,是因为:

(1)你并没有按照刘老师的原话要求的做法修改:【剩下几次bar内驱动返回的都是空数组】

(2)你也不清楚indexs的数组内部数据的真正的含义

Vars
    Series<Integer> count;
    Bool flag;
    Numeric fsDonchianHi;
    Numeric DonchianHi;
    
Events
    OnInit(){
        SetBasePeriod(\"5m\");
    }
    
    OnBarOpen(ArrayRef<Integer> indexes){
        If(GetArraySize(indexes) == 0) Return;
        If(fsDonchianHi == DonchianHi){
            count = count + 1;
            flag = False;
        }
    }
    
    OnBar(ArrayRef<Integer> indexes){
        If(flag == False && count >= 7) SellShort(1, Close);
    }

感谢老师!没想到indexs控制这么简单,就是直接加这一句就可以了。

If(GetArraySize(indexes) == 0) Return;

确实对indexs这个参数不够了解。现在确实可以很准确的控制计数器了。

但是加了上面这个语句,不会影响5分钟颗粒度的执行吧?

不会的

应该下个版本会优化成只执行一次

第一个是个好问题,我想了一下确实用户端也没有太好的解决方案,我会转发给研发人员看看

第二个问题,这个没办法系统去追踪,一般是通过print变量值来debug的