以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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 编写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 为什么要采用“编写2”这种编写顺序才正确 “编写1”那种编写顺序为什么如果连续三根都是阳线(就是连续满足连续加仓的条件),但只有第一根K线满足,第二第三根没满足?应用到图上就是第二根和第三根没有向上的箭头 老是麻烦你可以把这两种编写的方法应用到图上就知道有什么区别, |
-- 作者:jinzhe -- 发布时间:2015/6/25 14:09:14 -- 第一个写法是在第一个k线上,就加仓3次,你要的是每根k线加仓一次,就不要用什么全局变量了,直接if c>o then buy....;就行 |