以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于全局变量的理解问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=80117)

--  作者:gsqh_zyp
--  发布时间:2015/6/25 10:59:47
--  关于全局变量的理解问题
教程上有个关于全局变量的例子:若当前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,后面的条件也都满足。”这个怎么理解,后面的条件怎么也满足?

--  作者:jinzhe
--  发布时间:2015/6/25 11:07:36
--  

代码是从上往下计算的,能理解接受吗?

 

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编辑过]

--  作者:gsqh_zyp
--  发布时间:2015/6/25 11:24:24
--  
代码从上往下计算,当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


--  作者:jinzhe
--  发布时间:2015/6/25 11:28:18
--  
那么图上的是什么样子的?
--  作者:gsqh_zyp
--  发布时间:2015/6/25 12:24:36
--  
老师可以直接把上面的代码复制下应用到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
这种编写顺序才与策略一致,
然后就是搞不懂为什么这种编写方式才符合

--  作者:jinzhe
--  发布时间:2015/6/25 13:09:00
--  
应用在图上错在哪里?
--  作者:gsqh_zyp
--  发布时间:2015/6/25 14:05:54
--  
编写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线满足,第二第三根没满足?应用到图上就是第二根和第三根没有向上的箭头
老是麻烦你可以把这两种编写的方法应用到图上就知道有什么区别,





--  作者:jinzhe
--  发布时间:2015/6/25 14:09:14
--  

第一个写法是在第一个k线上,就加仓3次,你要的是每根k线加仓一次,就不要用什么全局变量了,直接if c>o then buy....;就行