以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助]为什么初始化数据异常?  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=159567)

--  作者:lizhi
--  发布时间:2017/11/15 15:06:32
--  [求助]为什么初始化数据异常?

为什么初始化数据异常?请指导,谢谢!


图片点击可在新窗口打开查看此主题相关图片如下: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;


--  作者:FireScript
--  发布时间:2017/11/15 15:34:38
--  

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有一个取得前一个值的作用,问题是出在这里的。

[此贴子已经被作者于2017/11/15 15:37:28编辑过]

--  作者:lizhi
--  发布时间:2017/11/15 18:51:33
--  

如上2楼那样修改代码后,数据还异常如下图,该怎么办?

 


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

--  作者:FireScript
--  发布时间:2017/11/16 8:49:40
--  
以下是引用lizhi在2017/11/15 18:51:33的发言:

如上2楼那样修改代码后,数据还异常如下图,该怎么办?

 


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

具体是那个变量值,你觉得是有问题的呢。红绿线对应的值吗?但是看图的话,你标记的位置,值都是有的么。


--  作者:lizhi
--  发布时间:2017/11/16 10:03:20
--  
XGIF:=REF(H,1)>REF(H,2),NODRAW;//新高条件

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条件首次符合之前——到这里结束,在开始与结束之间的输出的显示数据都不对——输出显示值大于或者小于输出显示位置之前的最高值或最小值。


--  作者:FireScript
--  发布时间:2017/11/16 10:32:29
--  

你这段描述没太明白。第一个K是满足条件的。后面的K的XG的返回值在满足XGIF条件之前(我们先说XGIF,不管XDIF条件),返回值应该都是一个值,也就是第一个K的H值。 这是valuewhen函数的特征。

 

*我这边注意到一点,你在图上看到的第一个K未必是指标使用的第一个K(bars=1),虽然你在图表上看到是第一个但是真实的数据位置未必是那样。你把barpos的值也输出下。

 

 

 

[此贴子已经被作者于2017/11/16 10:40:39编辑过]

--  作者:lizhi
--  发布时间:2017/11/16 12:55:41
--  

老师看图,还是第二根K线上的值输出的不对!??????我想让XGIF条件首次成立之前的所有的K线处的输出值都是第一根K线的最高值。

 


图片点击可在新窗口打开查看此主题相关图片如下:333.jpg
图片点击可在新窗口打开查看


--  作者:wenarm
--  发布时间:2017/11/16 13:12:06
--  

你第一根取得值,是因为去到了最新位置上xgif=1时的结果。

类似形成了一个环状结构。


--  作者:FireScript
--  发布时间:2017/11/16 13:28:29
--  

基于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;