您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

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编辑过]

     

  • 金字塔客服: 左腿长,峰谷最宽,峰谷最窄,这3个是什么?

     

  • 用户回复: 这个是预设参数左腿长:4峰谷最宽:20峰谷最窄:4

     

  • 网友回复:

    最后加这么一句

    DRAWLINE(REF(H,prePeakDist)=HHV(Ref(H,prePeakDist),左腿长),prePeakHigh,REF(H,1)=HHV(H,左腿长),lastPeakHigh,0);

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容