关于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); } }

这个版本可以用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的