为什么初始化数据异常?请指导,谢谢!
此主题相关图片如下:tim截图20171115150432.png
RUNMODE:0;
//VARIABLE:XG=0,XD=0;
XGIF:=REF(H,1)>REF(H,2),NODRAW;//新高条件
XDIF:=REF(L,1)<REF(L,2),NODRAW;//新低条件
IF BARPOS=1 THEN BEGIN
XG:=H;
XD:=L;
END
XG:=VALUEWHEN(XGIF,REF(H,1)),COLORGREEN;
XD:=VALUEWHEN(XDIF,REF(L,1)),COLORRED;
SH:XG;
SL:XD;
XG:=VALUEWHEN(XGIF,REF(H,1)),COLORGREEN;
XD:=VALUEWHEN(XDIF,REF(L,1)),COLORRED;
这段调整下位置,调整到
IF BARPOS=1 THEN BEGIN
XG:=H;
XD:=L;
END
前面。
VALUEWHEN有一个取得前一个值的作用,问题是出在这里的。
具体是那个变量值,你觉得是有问题的呢。红绿线对应的值吗?但是看图的话,你标记的位置,值都是有的么。
XDIF:=REF(L,1)<REF(L,2),NODRAW;//新低条件
因为比较的REF(H,1)和REF(H,2),在调整代码顺序之后,第一根K(barpos=1的地方)的显示值对了,但第二根K(barpos=2的地方)的输出显示值明显的大于或者小于第一根K(barpos=1的地方)、第二根K(barpos=2的地方)这两者中的极值!
也就是说:除了第一根K(barpos=1的地方)——从这里开始,在XGIF、XDIF条件首次符合之前——到这里结束,在开始与结束之间的输出的显示数据都不对——输出显示值大于或者小于输出显示位置之前的最高值或最小值。
你这段描述没太明白。第一个K是满足条件的。后面的K的XG的返回值在满足XGIF条件之前(我们先说XGIF,不管XDIF条件),返回值应该都是一个值,也就是第一个K的H值。 这是valuewhen函数的特征。
*我这边注意到一点,你在图上看到的第一个K未必是指标使用的第一个K(bars=1),虽然你在图表上看到是第一个但是真实的数据位置未必是那样。你把barpos的值也输出下。
你第一根取得值,是因为去到了最新位置上xgif=1时的结果。
类似形成了一个环状结构。
基于8楼提到的那个问题:
建议不使用valuewhen函数了,可按照以下方式尝试下。
VARIABLE:XG=0;
XGIF:REF(H,1)>REF(H,2),NODRAW;//新高条件
temp:=REF(H,1);
if XGIF then XG:=temp;
IF BARPOS=1 THEN BEGIN
XG:=H;
END
K线位置:BARPOS;
SH:XG;