以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 循环语句中peak() ,peakbars() 函数失效 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=147673) |
|
-- 作者:boomer -- 发布时间:2017/2/12 15:20:17 -- 循环语句中peak() ,peakbars() 函数失效 代码功能是找出当日高点、次高点。 目前 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 -- 发布时间:2017/2/12 15:38:11 -- 另,如果i相同,若都是2 peakbar:=PEAKBARS(4,0.1,2); peakH:=HIGH[peakbar]; PEAK(4,0.1, 2) 与 peakH 的值应该相同,但输出却是不同,不解。 |
|
-- 作者:boomer -- 发布时间:2017/2/12 15:42:30 -- 金字塔版本 X86 V4.01 |
|
-- 作者:王锋 -- 发布时间:2017/2/12 17:11:19 -- 目前没有办法的,因为PEAKBARS是未来函数,因此是没法实时计算的,因此调用参数只能是常数,在运行前将序列数据预先计算好的。 如果你有明确的策略需求,可以考虑自行用FOR循环计算BAR数据的。 另外peakH:=HIGH[peakbar];你这句话的用意是什么?如果您还不了解金字塔的数组使用,建议您认真参考一下
金字塔数组使用的高级编程技巧 http://www.weistock.com/bbs/dispbbs.asp?boardid=10&id=30380 |
|
-- 作者:boomer -- 发布时间:2017/2/12 17:46:42 -- 谢谢,我想想办法 peakbar:=PEAKBARS(4,0.1,2);得到峰的位置。 peakH 是 peak所在K线的高点 [此贴子已经被作者于2017-2-12 17:47:30编辑过]
|
|
-- 作者:boomer -- 发布时间:2017/2/12 18:23:38 --
|
|
-- 作者:boomer -- 发布时间:2017/2/12 20:33:08 -- 以下是引用王锋在2017-2-12 17:11:19的发言: 目前没有办法的,因为PEAKBARS是未来函数,因此是没法实时计算的,因此调用参数只能是常数,在运行前将序列数据预先计算好的。 如果你有明确的策略需求,可以考虑自行用FOR循环计算BAR数据的。 另外peakH:=HIGH[peakbar];你这句话的用意是什么?如果您还不了解金字塔的数组使用,建议您认真参考一下
金字塔数组使用的高级编程技巧
|
|
-- 作者:王锋 -- 发布时间:2017/2/12 21:41:37 -- 对于金字塔的数组使用解释如下:
HIGH[BARPOS] 等于 HIGH HIGH[BARPOS-1] 等于 REF(HIGH,1)
你的问题按照我的理解应该这样做 peakH:=HIGH[barpos-peakbar]; |
|
-- 作者:boomer -- 发布时间:2017/2/12 22:50:12 -- 谢谢,这么一改果然对了。 开发文档可以没说可以这么写,有这样的关系。 长知识了。
|