以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- DrawLine为什么不划线? (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=57226) |
-- 作者:eacho -- 发布时间:2013/10/5 18:24:58 -- DrawLine为什么不划线? 以下代码,在if条件满足时,如何在左峰跟右峰的最高点之间画线呢,这时候什么ref,hhv之类的函数都不能用了,很困惑。 代码如下: variable:lastPeakLow:=0; variable:lastPeakHigh:=0,lastPeakIndex:=0,lastPeakBreak:=0; //右峰数据 lPeakLow:=Ref(Low,1); lPeakHigh:=Ref(High,1); //上一根K线是5根K线中的最高点,等待突破 lastPeak:=REF(H,1)=HHV(H,左腿长); if lastPeak then BEGIN lastPeakBreak:=0; lastPeakIndex:=BARPOS-1; lastPeakLow:=lPeakLow; lastPeakHigh:=lPeakHigh; //DrawIcon(1, lastPeakHigh, 1); end; //寻找左峰,先记录左峰数据: //寻找峰谷距离内的最高点 prePeakHigh:=HHV(H,峰谷最宽); //最高点与当前峰的距离 prePeakDist:=HHVBARS(H,峰谷最宽); //最高点K线的横坐标 prePeakIndex:=BARSCOUNT(c)-prePeakDist; //双峰间的最低点 preLow:=LLV(L,BARSCOUNT(c)-prePeakIndex); //判断最高点是否为一个峰,即:该K线的最高点是5根K线中最高的,最低点不是5根中最低的 prePeak:=REF(H,prePeakDist)=HHV(Ref(H,prePeakDist),左腿长);// and REF(L,prePeakDist)!=LLV(Ref(L,prePeakDist),左腿长); //如果不成立,则清除最高点数据,不记录为左峰 //成立,则计算双峰相关数据 if prePeak=0 then prePeakCount:=0; else //右峰必须达到的最低点 highLimit:=preLow+(prePeakHigh-preLow)*0.8; //右峰突破时,记录lastPeak信息 if lastPeakBreak=0 and Low<lastPeakLow then begin //DRAWICON(1, lastPeakHigh, 5); //DRAWNumber(1, lastPeakHigh+20, lastPeakIndex, 7); //DRAWNumber(1, lastPeakHigh+30, lastPeakLow, 2); //DRAWNumber(1, lastPeakHigh+20, lastPeakHigh, 2); //突破成立lastPeak时,比较lastPeak和prePeak,看看是不是一个M? //是M,则标记,不是,直接记录lastPeak为prePeak if prePeakHigh!=0 and lastPeakIndex-prePeakCount<峰谷最宽 and lastPeakIndex-prePeakCount>峰谷最窄 and lastPeakHigh<=prePeakHigh and lastPeakHigh>highLimit then begin DRAWICON(1, lastPeakLow, 5); DRAWTEXT(1, lastPeakHigh+100, \'上一个高点:\'+numtostr(prePeakHigh,0)+\';当前高点:\'+numtostr(lastPeakHigh,0),colorgreen); DrawText(1, lastPeakHigh+200,\'最低点:\'+numtostr(preLow,0), COLORYELLOW); DrawText(1, lastPeakHigh+300,\'上一个高点距离:\'+numtostr(lastPeakIndex-prePeakCount,0),COLORWHITE); DRAWLINE(barpos=prePeakIndex,prePeakHigh,barpos=lastPeakIndex,lastPeakHigh,1); end; else begin prePeakHigh:=lastPeakHigh; prePeakLow:=lastPeakLow; prePeakCount:=lastPeakIndex; end; lastPeakBreak:=1; end; 个人分析,运行到if中的时候,barpos已经不可能再等于左峰的barscount了,所以系统找不到对应K线。 那究竟如何画呢? 另外,如何使用Peak函数呢,有没有简便一点的方法来实现这样一个逻辑: 如果某一个K线,是5根K线中最高的,则当其低点被突破时,寻找左峰(上一个峰),如果存在一个左峰,则产生交易。 (换句话来说,就是捕捉一个M形态。当一个M形态的右峰最高K线的低点被突破时,产生交易) [此贴子已经被作者于2013/10/5 18:26:38编辑过]
|
-- 作者:jinzhe -- 发布时间:2013/10/8 9:35:52 -- 左腿长,峰谷最宽,峰谷最窄,这3个是什么? |
-- 作者:eacho -- 发布时间:2013/10/8 10:36:22 -- 这个是预设参数 左腿长:4 峰谷最宽:20 峰谷最窄:4
|
-- 作者:jinzhe -- 发布时间:2013/10/8 11:14:15 -- 最后加这么一句 DRAWLINE(REF(H,prePeakDist)=HHV(Ref(H,prePeakDist),左腿长),prePeakHigh,REF(H,1)=HHV(H,左腿长),lastPeakHigh,0); |