另外请注意:
对于最后一个周期(图表上看就是最新的那个周期)才起作用的函数,如果使用了全局变量进行控制,千万记得加上islastbar控制条件,比如下面例子:
variable:a=10;
debugout('a1=%.0f',a);
if a=10 then begin
debugout('a2=%.0f',a);
tbuy(1,1,mkt);
a:=6;
debugout('a3=%.0f',a);
end;
debugout('a4=%.0f',a);
上面这个例子将无法得到下单买入的目的,因为当程序运行后,在第一周期TBUY并不执行,因为不是最新的周期,而此时a即被赋值为6,那么当程序一遍遍扫描运行到最新周期后,IF语句检测到a=6就不执行买操作了,所以您永远都不会有下单触发。
上述公式将无法正常工作,是因为variable声明的变量是在整个计算周期内的全局变量,对于tbuy和debugout函数,他们都是在公式的最后的一个周期(最新周期的数据才能用于下单或者输入调试结果)才执行的函数,所以将导致最后一个周期到来时a实际已经等于6而不会去正确执行开仓语句。
解决办法是:if a=10 and islastbar then begin 这样加上最后周期判断,以避免a被过早赋新值,或者去掉 variable 变量声明,让a变为一个周期之内的变量即可。
上面的范例只是针对全局变量运行时赋值的一种解释,只是针对某一种特定情况,并不是表示所有后台程序都需要这样做.
不清你的专业版是否是正式账号还是测试账号,如果你还不是专业版的正式用户,那么我们强烈建议新手用户不要上来就去研究后台,先把图表交易搞明白,循序渐进的学习.
就是最新k线,后台只会在最新k线算;但是variable不会,所以要用islastbar来限定
如果不能理解,那么就请记住结论
明白了。还有一个问题:
variable:a=10;
debugout('a1=%.0f',a);
if a=10 then begin
debugout('a2=%.0f',a);
tbuy(1,1,mkt);
a:=6;
debugout('a3=%.0f',a);
end;
debugout('a4=%.0f',a);
在逐K模式下,在lastbar之前 if begin ... end之间的代码其实是只有第一根K线才会走到,对吧?那么tbuy()其实也是被走到的,只是因为不是最后一个K线,直接忽略了,对吗?
谢谢