VARIABLE:I=0,S=0;
VAR1:=close>open; //变量申明
//为了加快运算速度,只有最后一个周期时才循环计算
IF NOT(ISLASTBAR) THEN EXIT;
FOR J=1 TO DATACOUNT DO BEGIN
if close>open then begin
S:=S+VAR1[J];
end;
if close<open then begin;
S:=0;
end;
MMM[j]:S;
END;
想实现目的:每出一根阳线记录数增加1,出阴数时记录数回零。
上面写的语句中的CLOSE<OPEN部分不起作用。
应该怎么写???
为什么if close<open then 没有作用呢???CLOSE<OPEN的情况不存在?
本人2.2版本,正常运行
VARIABLE:I=0,S=0;
VAR1:=close>open; //变量申明
//为了加快运算速度,只有最后一个周期时才循环计算
IF NOT(ISLASTBAR) THEN EXIT;
FOR J=1 TO DATACOUNT DO BEGIN
if close>open then begin
S:=S+var1[j];
end;
if close<open then begin
S:=0;
end;
END;
s1:s,linethick0;
CLOSE<OPEN 那么 S 回零。最终显示的结果应该不大于10才对,因为极少有十连阳的情况。
而上面的公式出来的结果是几百甚至上千,这是不可能的。
逐周期,是从头到尾的全部计算一遍的.
这样是计算不出来连阳的.
连阳,是要每次都从第一个最近的阳线周期开始算起的.
可结合BARSLAST函数试试.
把楼主的程序解读一下,如下:
VARIABLE:I=0,S=0; |
IF NOT(ISLASTBAR) THEN EXIT;//最后一个周期才执行以下语句
FOR J=1 TO DATACOUNT DO BEGIN
if close>open then begin //如果最后一个周期收阳线,则把所有阳线累加起来
S:=S+VAR1[J];
end;
if close<open then begin;//如果最后一个周期收阴线,则s=0
S:=0;
end;
MMM[j]:S;
END
所以结果要么是0,要么是所有阳线之和,是个很大的数值也就不足为怪了,肯定无线实现楼主想要的效果
如果这样:
VARIABLE:S=0;
VAR1:=close>open;
mmm:0;
//为了加快运算速度,只有最后一个周期时才循环计算
IF NOT(ISLASTBAR) THEN EXIT;
FOR J=1 TO DATACOUNT DO BEGIN
if close[j]>open[j] then begin
S:=S+VAR1[J];
end;
if close[j]<open[j] then begin;
S:=0;
end;
MMM[j]:=S;
END;
经过测试,完全符合楼主要求