DrawLine為什么不劃線?
作者:金字塔 來源:cxh99.com 發布時間:2014年04月29日
- 咨詢內容:
以下代碼,在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);