老师,请教一下,
我的程序是按小时执行的,但是有信号闪烁,看了视频后,添加了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的