教程上有个关于全局变量的例子:若当前K线是阳线,且之前加仓次数为0,则开仓。
若当前K线是阳线,且之前加仓次数为1,则加仓。
若当前K线是阳线,且之前加仓次数为2,则加仓,这次以后不再加仓。
若当前K线是阴线,则平仓。
Variable:flag=0;
If close>open and flag=0 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,4);
Flag:=1;
End
If close>open and flag=1 then begin//若当前K线是阳线,且之前加仓次数为1,则加仓。
drawicon(1,low,4);
Flag:=2;
End
If close>open and flag=2 then begin//若当前K线是阳线,且之前加仓次数为2,则开仓。
drawicon(1,low,4);
Flag:=3;
End
If close<open and flag=3 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,5);
Flag:=0; //重置flag到初始状态
End
若把上述代码编译后应用于图,会发现图上的信号与预想的不符,这个主要是由于代码自上而下运行,所以当第一次开仓后,flag值变为1,后面的条件也都满足。
请问,这样的编写顺序为什么不符,“主要是由于代码自上而下运行,所以当第一次开仓后,flag值变为1,后面的条件也都满足。”这个怎么理解,后面的条件怎么也满足?
代码是从上往下计算的,能理解接受吗?
If close>open and flag=0 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,4);
Flag:=1;
End
代码从上往下计算,那么close>open and flag=0 这个条件满足后,接着计算begin后面,flag变成了1
然后下面一句的 close>open and flag=1 这个条件也满足,接着计算begin后面,flag变成了2
。。。。。
后面的也就全部满足条件了
[此贴子已经被作者于2015/6/25 11:08:26编辑过]
代码从上往下计算,当close>open and flag=0 这个条件满足后,接着计算begin后面的,执行drawicon(1,low,4);这个时候标注了一个向上的箭头,然后flag变成1了,接下来下面一句的 close>open and flag=1 这个条件也满足,接着计算begin后面的drawicon(1,low,4);这个时候如果是还是阳线应该有第二个向上的箭头,然后flag变成了2
。。。。依次类推,但是为什么应用到图上不是这样的,
要改成这样的编写顺序才行?
Variable:flag=0;
If close>open and flag=2 then begin//若当前K线是阳线,且之前加仓次数为2,则开仓。
drawicon(1,low,4);
Flag:=3;
End
If close>open and flag=1 then begin//若当前K线是阳线,且之前加仓次数为1,则加仓。
drawicon(1,low,4);
Flag:=2;
End
If close>open and flag=0 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,4);
Flag:=1;
End
If close<open and flag=3 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,5);//这里的参数1表示恒成立,0表示平掉所有持仓。
Flag:=0; //重置flag到初始状态
End
老师可以直接把上面的代码复制下应用到K线图上,
Variable:flag=0;
If close>open and flag=2 then begin//若当前K线是阳线,且之前加仓次数为2,则开仓。
drawicon(1,low,4);
Flag:=3;
End
If close>open and flag=1 then begin//若当前K线是阳线,且之前加仓次数为1,则加仓。
drawicon(1,low,4);
Flag:=2;
End
If close>open and flag=0 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,4);
Flag:=1;
End
If close<open and flag=3 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,5);//这里的参数1表示恒成立,0表示平掉所有持仓。
Flag:=0; //重置flag到初始状态
End
这种编写顺序才与策略一致,
然后就是搞不懂为什么这种编写方式才符合

编写1:
Variable:flag=0;
If close>open and flag=0 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,4);
Flag:=1;
End
If close>open and flag=1 then begin//若当前K线是阳线,且之前加仓次数为1,则加仓。
drawicon(1,low,4);
Flag:=2;
End
If close>open and flag=2 then begin//若当前K线是阳线,且之前加仓次数为2,则开仓。
drawicon(1,low,4);
Flag:=3;
End
If close<open and flag=3 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,5);
Flag:=0; //重置flag到初始状态
End
此主题相关图片如下:1111.png

编写2:
Variable:flag=0;
If close>open and flag=2 then begin//若当前K线是阳线,且之前加仓次数为2,则开仓。
drawicon(1,low,4);
Flag:=3;
End
If close>open and flag=1 then begin//若当前K线是阳线,且之前加仓次数为1,则加仓。
drawicon(1,low,4);
Flag:=2;
End
If close>open and flag=0 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,4);
Flag:=1;
End
If close<open and flag=3 then begin//若当前K线是阳线,且之前加仓次数为0,则开仓。
drawicon(1,low,5);//这里的参数1表示恒成立,0表示平掉所有持仓。
Flag:=0; //重置flag到初始状态
End

此主题相关图片如下:22222.png

为什么要采用“编写2”这种编写顺序才正确
“编写1”那种编写顺序为什么如果连续三根都是阳线(就是连续满足连续加仓的条件),但只有第一根K线满足,第二第三根没满足?应用到图上就是第二根和第三根没有向上的箭头
老是麻烦你可以把这两种编写的方法应用到图上就知道有什么区别,
第一个写法是在第一个k线上,就加仓3次,你要的是每根k线加仓一次,就不要用什么全局变量了,直接if c>o then buy....;就行