//-------金魔方智能交易公式--------------
//例8_1 點(diǎn)數(shù)圖突破交易策略
{策略:
1.價格升破點(diǎn)數(shù)圖最近幾列的最高點(diǎn)時平空開多
2.價格跌破點(diǎn)數(shù)圖最近幾列的最低點(diǎn)時平多開空
***點(diǎn)數(shù)圖的算法和畫法請問度娘***
}
input:
格值(30),轉(zhuǎn)向格(5),突破列數(shù)(3),偏移量(1);
const: 最大列數(shù)(10); //突破列數(shù)應(yīng)小于此數(shù)
array: 極點(diǎn)值[最大列數(shù)](0); //上漲列為最高格值,下跌列為最低格值
variable: 轉(zhuǎn)向價(0),漲跌方向(0),
突破買價(99999),突破賣價(0);//初始化
if BarPos <= 1 then begin
轉(zhuǎn)向價 := Round(Close);
漲跌方向 := 0; //初始化為無方向
突破買價 := High + 偏移量;
突破賣價 := Low - 偏移量;
end
else begin
if 漲跌方向 = 0 then begin //尚未確定方向
if High >= 轉(zhuǎn)向價 + 格值 * 轉(zhuǎn)向格 then begin
極點(diǎn)值[0] := 轉(zhuǎn)向價 + 格值 * 轉(zhuǎn)向格;
漲跌方向 := 1; //上漲
end
else if Low <= 轉(zhuǎn)向價 - 格值 * 轉(zhuǎn)向格 then begin
極點(diǎn)值[0] := 轉(zhuǎn)向價 - 格值 * 轉(zhuǎn)向格;
漲跌方向 := -1; //下跌
end;
end
else if 漲跌方向 = 1 then begin //當(dāng)前列為上漲
if High >= 極點(diǎn)值[0] + 格值 then begin //增加向上的X格子
while High >= 極點(diǎn)值[0] + 格值 do begin
極點(diǎn)值[0] := 極點(diǎn)值[0] + 格值;
轉(zhuǎn)向價 := 極點(diǎn)值[0] - 格值 * 轉(zhuǎn)向格; //抬高轉(zhuǎn)向價
end;
end
else if Low <= 轉(zhuǎn)向價 then begin //上漲轉(zhuǎn)為下跌
for n = 0 to 最大列數(shù)-1 do begin //數(shù)組移位
極點(diǎn)值[最大列數(shù)-n] := 極點(diǎn)值[最大列數(shù)-n-1];
end;
//以下使點(diǎn)數(shù)圖新增下跌列
極點(diǎn)值[0] := 轉(zhuǎn)向價;
漲跌方向 := -1; //轉(zhuǎn)為下跌
轉(zhuǎn)向價 := 極點(diǎn)值[0] + 格值 * 轉(zhuǎn)向格;
while Low <= 極點(diǎn)值[0] - 格值 do begin
極點(diǎn)值[0] := 極點(diǎn)值[0] - 格值;
轉(zhuǎn)向價 := 極點(diǎn)值[0] + 格值 * 轉(zhuǎn)向格;
end;
end;
end //當(dāng)前列為上漲
else begin //當(dāng)前列為下跌
if Low <= 極點(diǎn)值[0] - 格值 then begin //增加向下的O格子
while Low <= 極點(diǎn)值[0] - 格值 do begin
極點(diǎn)值[0] := 極點(diǎn)值[0] - 格值;
轉(zhuǎn)向價 := 極點(diǎn)值[0] + 格值 * 轉(zhuǎn)向格;
end;
end
else if High >= 轉(zhuǎn)向價 then begin //下跌轉(zhuǎn)為上漲
for n = 0 to 最大列數(shù)-1 do begin
極點(diǎn)值[最大列數(shù)-n] := 極點(diǎn)值[最大列數(shù)-n-1];
end;
極點(diǎn)值[0] := 轉(zhuǎn)向價;
漲跌方向 := 1;
轉(zhuǎn)向價 := 極點(diǎn)值[0] - 格值 * 轉(zhuǎn)向格;
while High >= 極點(diǎn)值[0] + 格值 do begin
極點(diǎn)值[0] := 極點(diǎn)值[0] + 格值;
轉(zhuǎn)向價 := 極點(diǎn)值[0] - 格值 * 轉(zhuǎn)向格;
end;
end;
end; //當(dāng)前列為下跌 //根據(jù)最近若干列的極點(diǎn)值計算突破價位
value1:= 0;
value2:= 99999;
for n = 1 to 突破列數(shù) do begin
if 極點(diǎn)值[n] > value1 then value1 := 極點(diǎn)值[n];
if 極點(diǎn)值[n] < value2 then value2 := 極點(diǎn)值[n];
end;
突破買價 := value1 + 偏移量;
突破賣價 := value2 - 偏移量;
end;
Buy('', DEFAULT, 突破買價, -1, OT_STOP);
SellShort('', DEFAULT, 突破賣價, -1, OT_STOP);
買線: 突破買價, Precision0;
賣線: 突破賣價, Precision0;
盈利因子: -GrossProfit/GrossLoss, Precision2, LineThick0;
盈虧比: -(GrossProfit/NumWinTrades)/(GrossLoss/NumLosTrades), Precision2, LineThick0;
勝率%: PercentProfit, Precision2, LineThick0;
凈利: NetProfit, Precision2,LineThick0;
當(dāng)前連虧次數(shù): NumConsecLosers, Precision0, LineThick0;
{注解:
1.用variable定義變量可增加可讀性,在本例其實(shí)可以省略
2.Precision指定輸出數(shù)值的小數(shù)位數(shù)
3.盈虧比=平均盈利/平均虧損,GrossLoss返回值為負(fù)數(shù)
}
點(diǎn)數(shù)圖算法的代碼比較復(fù)雜,如果每個涉及到點(diǎn)數(shù)圖的公式都包含那么多代碼會比較難看,我們是否可以把它做成公共代碼供其它公式調(diào)用呢?用傳統(tǒng)的調(diào)用指標(biāo)公式的方法不太好使,而且一次調(diào)用只能返回一個結(jié)果,本例的點(diǎn)數(shù)圖就需要返回“突破買價”和“突破賣價”兩個結(jié)果,用戶能否自編函數(shù),并且讓這個函數(shù)能同時返回多個結(jié)果呢?
敬請關(guān)注本攻略!