欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → Ref(Hhv,X)返回值不一致

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2934人关注过本帖树形打印复制链接

主题:Ref(Hhv,X)返回值不一致

帅哥哟,离线,有人找我吗?
jimcnab
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:66 积分:0 威望:0 精华:0 注册:2018/3/27 11:07:36
Ref(Hhv,X)返回值不一致  发帖心情 Post By:2018/4/21 20:47:51    Post IP:114.255.160.184[只看该作者]

一个比较简单的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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/4/21 22:07:25    Post IP:59.63.206.81[只看该作者]

因为是这样子的,你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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:66 积分:0 威望:0 精华:0 注册:2018/3/27 11:07:36
  发帖心情 Post By:2018/4/21 22:29:02    Post IP:116.25.42.38[只看该作者]

以下是引用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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/4/21 22:37:53    Post IP:59.63.206.81[只看该作者]



按照你给出的例子:
当前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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:66 积分:0 威望:0 精华:0 注册:2018/3/27 11:07:36
  发帖心情 Post By:2018/4/21 23:02:32    Post IP:116.25.42.38[只看该作者]

以下是引用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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/4/21 23:22:24    Post IP:180.170.178.32[只看该作者]

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


编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
jimcnab
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:66 积分:0 威望:0 精华:0 注册:2018/3/27 11:07:36
  发帖心情 Post By:2018/4/21 23:53:48    Post IP:116.25.42.38[只看该作者]

以下是引用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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/4/22 9:37:13    Post IP:180.170.178.32[只看该作者]

没有办法


编程无捷径,技巧靠积累。
 回到顶部