假设在1分钟周期下,从当天开盘开始,每到3分钟或3分钟整数倍,就把变量a增加1,见如下代码(以下代码无实际意义,仅供调试)
问题:当开盘第3分钟时,va确实变为1,但是当第4分钟时,vb的值还是0。如何才能在第4分钟正确的ref到第3分钟a的值?
RUNMODE:0; //使用逐周期运行模式
VARIABLE:a=0;
vb:ref(a,1),nodraw;
sCurOpenMin:OPENMINUTES(TIME),nodraw;
//开盘分钟数
if (sCurOpenMin = 1)
//在开盘第一分钟时,把a初始化为0
then a:=0;
if ((sCurOpenMin ) % 3 = 0)
//每到3的整数倍时,a加1
then a := a+1;
va:a,NODRAW;
已按照您说的操作,依然不起作用,请看截图,
当日开盘第4分钟各个变量的值
另外,我的程序中没有“费率设置”的按钮,不知有没有关系

此主题相关图片如下:qq截图20140228185033.png

RUNMODE:0; //使用逐周期运行模式
VARIABLE:a=0;
sCurOpenMin:OPENMINUTES(TIME),nodraw; //开盘分钟数
if (sCurOpenMin = 1) //在开盘第一分钟时,把a初始化为0
then a:=0;
if ((sCurOpenMin ) % 3 = 0) //每到3的整数倍时,a加1
then a := a+1;
vb:ref(a,1),nodraw;
va:a,NODRAW;
改下顺序
公式计算顺序是从上到下的,你的那种写法ref a取的是没有计算过的a值,修改过后就是正常计算了
疑问:在当前周期,ref(a,1)取上周期a的值,不管ref(a,1)放在代码的什么地方,上周期a的值都应该已经计算出来了?
另外,想实现下述效果应该怎么写?
//根据上一个周期a的值来计算本周期a的值
RUNMODE:0; //使用逐周期运行模式 VARIABLE:a=0;
va:ref(a,1),nodraw;
if (va % 3 = 0) then a: = a+2; else then a := a+1;
|
上面的需求看起来比较奇怪,改一下说法:
想实现下述效果应该怎么写?
//根据上N个周期a的值来计算本周期a的值(N是变量,当N不等于1的时候没有问题,当N等于1的时候,就出问题了)
RUNMODE:0; //使用逐周期运行模式 VARIABLE:a=0;
va:ref(a,n),nodraw;
if (va % 3 = 0) then a: = a+2; else then a := a+1; |
把else后面的then删了
RUNMODE:0; //使用逐周期运行模式
VARIABLE:a=0;
n:=1;
va:ref(a,n),nodraw;
if barpos>n then begin
if (va % 3 = 0)
then a: = a+2;
else
a := a+1;
end
aa:a;