一个比较简单的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线,其他品种也都不一致。
因为是这样子的,你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: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编辑过]
不是很理解什么意思,有没有相关文档或帖子介绍?
按照你给出的例子:
当前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 并不一样。
不知道这样说你能不能理解。
以下是引用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),有解决方法吗?
没办法。。上面的方式看似逻辑相同,实则REF中嵌套的hhv也是序列变量,在ref执行过程中,是先找到前几根,然后再hhv(),这时的hhv取的已经向前找到n根以后的k线所对应的值。而使用定值作为其周期参数的值,是属于完全两种不同的逻辑。
[此贴子已经被作者于2018/4/21 23:24:41编辑过]
以下是引用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线的值吗,有什么变通方法吗?