这边举例子是 tbuy和debugout. 应该交易相关的函数都是最后一个周期生效吧?
前面的运行结果只产生虚拟信号和持仓方便接下类能正确显示仓位。
10、对于最后一个周期才起作用的函数,如果使用了全局变量进行控制,千万记得加上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);
上述公式将无法正常工作,因为variable声明的变量是在整个计算周期内的全局变量,对于tbuy和debugout函数,他们都是在公式的最后的一个周期才执行的函数,所以将导致最后一个周期到来时a实际已经等于6而不会去正确执行开仓语句。
解决办法是 if a=10 and islastbar then begin 这样加上最后周期判断,或者去掉 variable 变量声明,让a变为一个周期之内的变量
一般的后台程序化交易,PLAYSOUND,SENDMAIL,DEBUGFILE等这些函数都是最后一个周期才有效的,
做为初学者不必去刻意背诵这些函数,使用时多注意看看函数的使用说明