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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 循环语句中peak() ,peakbars() 函数失效

   

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


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

主题:循环语句中peak() ,peakbars() 函数失效

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


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
循环语句中peak() ,peakbars() 函数失效  发帖心情 Post By:2017/2/12 15:20:17    Post IP:36.110.68.226[只看该作者]

代码功能是找出当日高点、次高点。

目前 i的值传不进去,
如果写成 PEAKBARS(4,N,3) ,用2 ,3 等常熟代替i,可以正确返回。
麻烦给看看,谢谢。


for  i=1  to 20  do begin
zigH:=PEAK(4,0.1,i);
peakbar:=PEAKBARS(4,0.1,i);//第i个波峰位置
 
//找高、次高点
peakH:=HIGH[peakbar];
if peakH > peak1PosH then BEGIN
peak2Pos: = peak1Pos;
peak2PosH: = peak1PosH;
peak1Pos: = peakbar;
peak1PosH:= peakH;
end; 
else if peakH > peak2PosH then BEGIN
peak2Pos: = peakbar;
peak2PosH: = peakH;
end;  
  str:='找高 '+NUMTOSTR(TIME,0) +' ,i= '+numtostr(i,0)+' ,peakbar '+numtostr(peakbar,0)+','+numtostr(peakH,0) +','+numtostr(zigH,0)+' ,         高'+numtostr(peak1Pos,0)+','+numtostr(peak1PosH,0)+' ,次高'+numtostr(peak2Pos,0)+','+numtostr(peak2PosH,0);
MSGOUT(1 ,str);
end;


输出:

2017/02/12 14:29:24  找高 150000 ,i= 1 ,peakbar 92,3142,3183 ,高92,3142 ,次高0,0
2017/02/12 14:29:24  找高 150000 ,i= 2 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 3 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 4 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 5 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 6 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 7 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 8 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 9 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 10 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 11 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 12 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 13 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 14 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 15 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 16 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 17 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 18 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 19 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142
2017/02/12 14:29:24  找高 150000 ,i= 20 ,peakbar 92,3142,3183 ,高92,3142 ,次高92,3142




 回到顶部
帅哥哟,离线,有人找我吗?
boomer
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
  发帖心情 Post By:2017/2/12 15:38:11    Post IP:36.110.68.226[只看该作者]

另,如果i相同,若都是2

peakbar:=PEAKBARS(4,0.1,2);
peakH:=HIGH[peakbar];

PEAK(4,0.1, 2)  与 peakH 的值应该相同,但输出却是不同,不解。


 回到顶部
帅哥哟,离线,有人找我吗?
boomer
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
  发帖心情 Post By:2017/2/12 15:42:30    Post IP:36.110.68.226[只看该作者]

金字塔版本 X86 V4.01

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2017/2/12 17:11:19    Post IP:180.154.239.32[只看该作者]

目前没有办法的,因为PEAKBARS是未来函数,因此是没法实时计算的,因此调用参数只能是常数,在运行前将序列数据预先计算好的。

如果你有明确的策略需求,可以考虑自行用FOR循环计算BAR数据的。

另外peakH:=HIGH[peakbar];你这句话的用意是什么?如果您还不了解金字塔的数组使用,建议您认真参考一下

 

金字塔数组使用的高级编程技巧

http://www.weistock.com/bbs/dispbbs.asp?boardid=10&id=30380



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
boomer
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
  发帖心情 Post By:2017/2/12 17:46:42    Post IP:36.110.68.226[只看该作者]

谢谢,我想想办法

peakbar:=PEAKBARS(4,0.1,2);得到峰的位置。

peakH:=HIGH[peakbar]; 

peakH 是 peak所在K线的高点
[此贴子已经被作者于2017-2-12 17:47:30编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
boomer
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
  发帖心情 Post By:2017/2/12 18:23:38    Post IP:36.110.68.226[只看该作者]

 

peakbar:=PEAKBARS(4,0.1,2);得到峰的位置。

peakH:=HIGH[peakbar]; 

peakH 是 peak所在K线的高点

我的用法对吗?


 回到顶部
帅哥哟,离线,有人找我吗?
boomer
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
  发帖心情 Post By:2017/2/12 20:33:08    Post IP:36.110.68.226[只看该作者]

以下是引用王锋在2017-2-12 17:11:19的发言:

目前没有办法的,因为PEAKBARS是未来函数,因此是没法实时计算的,因此调用参数只能是常数,在运行前将序列数据预先计算好的。

如果你有明确的策略需求,可以考虑自行用FOR循环计算BAR数据的。

另外peakH:=HIGH[peakbar];你这句话的用意是什么?如果您还不了解金字塔的数组使用,建议您认真参考一下

 

金字塔数组使用的高级编程技巧

http://www.weistock.com/bbs/dispbbs.asp?boardid=10&id=30380

另,如果i相同,若都是2

peakbar:=PEAKBARS(4,0.1,2);
peakH:=HIGH[peakbar];

PEAK(4,0.1, 2)  与 peakH 的值应该相同,但输出却是不同

这个问题依旧,为什么?为什么没从 HIGH[]取到正确的值。 
虽然我能绕过这个问题,但代码太丑了。

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2017/2/12 21:41:37    Post IP:180.154.239.32[只看该作者]

对于金字塔的数组使用解释如下:

 

HIGH[BARPOS]  等于 HIGH

HIGH[BARPOS-1] 等于 REF(HIGH,1) 

 

你的问题按照我的理解应该这样做 peakH:=HIGH[barpos-peakbar];



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
boomer
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:47 积分:0 威望:0 精华:0 注册:2016/11/20 22:24:53
  发帖心情 Post By:2017/2/12 22:50:12    Post IP:36.110.68.226[只看该作者]

谢谢,这么一改果然对了。
开发文档可以没说可以这么写,有这样的关系。
长知识了。

 回到顶部