以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  Ref(Hhv,X)返回值不一致  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=162928)

--  作者:jimcnab
--  发布时间:2018/4/21 20:47:51
--  Ref(Hhv,X)返回值不一致

一个比较简单的MACD相关的副图指标,全部代码如下:

 

INPUT:S(12,1,100,1),P(26,1,100,1),M(9,1,100,1);
DIF:EMA(C,S)-EMA(C,P);
DEA:EMA(DIF,M);
MACD:2*(DIF-DEA),COLORSTICK;
A := BARSLAST(MACD<0);     
B := Ref(BARSLAST(MACD>0),A ) ; 
D := Ref(BARSLAST(MACD<0),A + B); 
MaxClose : Ref(Hhv(Close,D),B + A),NODRAW;
REFHHV: Ref(Hhv(Close,2),1),NODRAW,COLORYELLOW;

 


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

如图,在中证500日K线副图中,2018年4月13日,运行变量查看器可看到,A=0,B=1,D=2, 所以

MaxClose = Ref(Hhv(Close,D),B + A) = Ref(Hhv(Close,2),1)

按理来说 MaxClose 的值与REFHHV 相等,但实际上却不相等,MAXCLOSE: 6180.110 REFHHV: 6086.610

自己手算REFHHV的值正确,MAXCLOSE的值不正确,为什么?

不只是这条K线出现不一致,只要是A=0,B=1,D=2的K线,其他品种也都不一致。


--  作者:FireScript
--  发布时间:2018/4/21 22:07:25
--  
因为是这样子的,你ref(hhv(close,d),a+b);
这句代码 这里面a+b是对应当前K的a+b的值,比如说是1.
但是这个d却不是当前K对应的d,而是ref(d,a+b)对应的d。这个和ref的原理有关。
[此贴子已经被作者于2018/4/21 22:19:17编辑过]

--  作者:jimcnab
--  发布时间:2018/4/21 22:29:02
--  
以下是引用FireScript在2018/4/21 22:07:25的发言:
因为是这样子的,你ref(hhv(close,d),a+b);
这句代码 这里面a+b是对应当前K的a+b的值,比如说是1.
但是这个d却不是当前K对应的d,而是ref(d,a+b)对应的d。这个和ref的原理有关。
[此贴子已经被作者于2018/4/21 22:19:17编辑过]

不是很理解什么意思,有没有相关文档或帖子介绍?
--  作者:FireScript
--  发布时间:2018/4/21 22:37:53
--  


按照你给出的例子:
当前K的a+b是1,d是2

MaxClose : Ref(Hhv(Close,D),B + A),NODRAW; 

maxclose计算的是上一个K位置的hhv(close,d),这里的d的值相应的也是上一个K位置对应的D指,比如说是5 ,那么这里计算的就是ref(hhv(c,5),1)

REFHHV: Ref(Hhv(Close,2),1),NODRAW,COLORYELLOW;

REFHHV计算的是上一个K位置的Hhv(Close,2)  ,最终计算的是ref(hhv(c,2),1)
因此在你的例子里REFHHV和MaxClose  并不一样。


不知道这样说你能不能理解。

--  作者:jimcnab
--  发布时间:2018/4/21 23:02:32
--  
以下是引用FireScript在2018/4/21 22:37:53的发言:


按照你给出的例子:
当前K的a+b是1,d是2

MaxClose : Ref(Hhv(Close,D),B + A),NODRAW; 

maxclose计算的是上一个K位置的hhv(close,d),这里的d的值相应的也是上一个K位置对应的D指,比如说是5 ,那么这里计算的就是ref(hhv(c,5),1)

REFHHV: Ref(Hhv(Close,2),1),NODRAW,COLORYELLOW;

REFHHV计算的是上一个K位置的Hhv(Close,2)  ,最终计算的是ref(hhv(c,2),1)
因此在你的例子里REFHHV和MaxClose  并不一样。


不知道这样说你能不能理解。

我想要maxclose 中的D值也取本周期的,也就是计算ref(hhv(c,2),1),有解决方法吗?

--  作者:wenarm
--  发布时间:2018/4/21 23:22:24
--  
没办法。。上面的方式看似逻辑相同,实则REF中嵌套的hhv也是序列变量,在ref执行过程中,是先找到前几根,然后再hhv(),这时的hhv取的已经向前找到n根以后的k线所对应的值。而使用定值作为其周期参数的值,是属于完全两种不同的逻辑。
[此贴子已经被作者于2018/4/21 23:24:41编辑过]

--  作者:jimcnab
--  发布时间:2018/4/21 23:53:48
--  
以下是引用wenarm在2018/4/21 23:22:24的发言:
没办法。。上面的方式看似逻辑相同,实则REF中嵌套的hhv也是序列变量,在ref执行过程中,是先找到前几根,然后再hhv(),这时的hhv取的已经向前找到n根以后的k线所对应的值。而使用定值作为其周期参数的值,是属于完全两种不同的逻辑。
[此贴子已经被作者于2018/4/21 23:24:41编辑过]

那个REFHHV: Ref(Hhv(Close,2),1) 只是我发现结果不对后测试用的,实际还是使用MaxClose : Ref(Hhv(Close,D),B + A) 的计算方式,这里的D没办法取当前K线的值吗,有什么变通方法吗?
--  作者:wenarm
--  发布时间:2018/4/22 9:37:13
--  
没有办法