飛狐金魔方大交易師智能交易使用教程(6)-自動趨勢線交易策略 [飛狐金魔方]
之前介紹過畫水平線,金魔方還可以通過波峰、波谷點函數自動畫出趨勢線并據此交易,讓我們看看這個公式:
//-------金魔方智能交易公式--------------
//例6_1 自動趨勢線交易加分級鎖定盈利策略
//用于5分鐘周期
{策略:
1.在當天5分鐘周期走勢上自動畫出下降趨勢線
2.突破下降趨勢線買入
3.當最大浮盈達到10點后,把盈利鎖定在買入價之上1點
4.當最大浮盈達到20點后,把盈利鎖定在買入價之上8點
5.當最大浮盈達到30點后,把盈利鎖定在買入價之上10點
6.買入價之上50點為止盈位,買入價之下10點為止損位
}
input: 波峰強度(3);
const: 點數量(5);
array: 波峰點日期[點數量](0),波峰點時間[點數量](0),波峰點數值[點數量](0);
variable: 下降線ID(-1), 起點下標(0);
if Date <> Date[1] then begin //每個交易日內重新找趨勢線
// print('=============', Date, '=============');
下降線ID := -1;
for pos=0 to 點數量 do begin //清空數組
波峰點日期[pos]:=0; 波峰點時間[pos]:=0; 波峰點數值[pos]:=0;
end
end
位置 : SwingHighBar(1,High,波峰強度,波峰強度+1),linethick0;
if 位置 = 波峰強度 then begin //出現新的波峰點
//該波峰點是當天的且沒被記錄過
if Date[位置] = Date And Time[位置] <> 波峰點時間[0] then begin
// print('時間:', Time/100, ' 波峰強度: ', 波峰強度);
for pos = 點數量-1 DownTo 0 do begin
波峰點日期[pos+1] := 波峰點日期[pos];
波峰點時間[pos+1] := 波峰點時間[pos];
波峰點數值[pos+1] := 波峰點數值[pos];
end
//將新波峰點存入數組下標0的位置
波峰點日期[0] := Date[波峰強度];
波峰點時間[0] := Time[波峰強度];
波峰點數值[0] := High[波峰強度];
// print('時間:', 波峰點時間[0]/100,' 數值:', 波峰點數值[0]);
if MarketPosition < 1 then begin //如果未持多倉,更新趨勢線
//找趨勢線起點,起點應比最近的新波峰點高,才能形成下降趨勢線
for pos = 1 to 點數量 do begin
if 波峰點數值[pos] > 波峰點數值[0] then begin//有更高的
起點下標 := pos;
pos := 點數量+1; //For語句中再加1,然后跳出循環
end
end
if pos <> 點數量+1 then begin //表示找到有更高的波峰點
// print('TL_SetBegin:', 波峰點時間[起點下標]/100,' 數值:', 波峰點數值[起點下標]);
// print('TL_SetEnd :', 波峰點時間[0]/100,' 數值:', 波峰點數值[0]);
// if 下降線ID = -1 then
下降線ID := TL_New(Date,Time,High,Date,Time,High);
TL_SetBegin(下降線ID, 波峰點日期[起點下標],波峰點時間[起點下標],波峰點數值[起點下標]);
TL_SetEnd(下降線ID, 波峰點日期[0],波峰點時間[0],波峰點數值[0]);
end
end
end
end
else begin
TL_SetEnd(下降線ID,Date,Time,TL_GetValue(下降線ID,Date,Time));
end
TLValue:=TL_GetValue(下降線ID,Date,Time);
bEnterLong := CrossOver(C, TLValue);
if Time < 143000 And 下降線ID > -1 And bEnterLong then Buy;
if MarketPosition>0 then begin //持有多頭倉位
Sell('', DEFAULT, EntryPrice+50, 0, OT_LIMIT, OB_NEXTBAR, '止盈');
Sell('', DEFAULT, EntryPrice-10, -1, OT_STOP, OB_NEXTBAR, '止損');
if MaxContractProfit>10*BigPointValue then
Sell('', DEFAULT, EntryPrice+1, -1, OT_STOP, OB_NEXTBAR, '鎖盈1');
if MaxContractProfit>20*BigPointValue then
Sell('', DEFAULT, EntryPrice+8, -1, OT_STOP, OB_NEXTBAR, '鎖盈2');
if MaxContractProfit>30*BigPointValue then
Sell('', DEFAULT, EntryPrice+10, -1, OT_STOP, OB_NEXTBAR, '鎖盈3');
end
SetExitOnClose;
{
注解:
1.const:點數量(5) 聲明'點數量'為常量并賦值為5
2.array: 波峰點日期[點數量](0) 聲明'波峰點日期'為一維數組并賦初值為0
3.找出最近5個波峰點,波峰點的H大于前后各N個周期的H,這個N即為波峰強度
4.新出現一個波峰點后,就向前找到一個比它更高的波峰點作為起點,連接這兩個點形成下降趨勢線
5.周期收盤價上叉下降趨勢線時買入
6.MarketPosition函數返回當前持倉方向
7.MaxContractProfit為以單口計算的最大浮動盈利,BigPointValue為1整數點的單口價值。
8.print函數輸出到[公式日志],可用于調試公式
}
可以看到,9月5日做了2筆趨勢線交易,第1筆“鎖盈1”平倉,第2筆日內交易平倉。
這個公式比較復雜,本ID在編寫時用print函數在一些重要位置輸出(到【公式日志】,可在【量化交易】主菜單下打開)、觀察數據進行調試,調試通過后再把print語句注釋掉。
各位可以試著把本公式中的print語句前的注釋去掉,運行公式,看看【公式日志】,有助于理解公式逐根執行的邏輯,提升調試技巧。
公式逐根執行及其與逐行執行的不同解釋如下:
逐行執行:對整個K線序列逐行地執行語句
逐根執行:對K線序列逐根地執行整個公式
假設當前有100根K線,公式有2行計算指標值1和指標值2的語句
MA1:MA(C,5);
MA2:MA(C,10);
逐行執行:
1.執行第1行語句,計算這100根K線的MA1
2.執行第2行語句,計算這100根K線的MA2
逐根執行:
1.對第1根K線,執行整個公式,計算第1根K線的MA1和MA2
2.對第2根K線,執行整個公式,計算第2根K線的MA1和MA2
...
100.對第100根K線,執行整個公式,計算第100根K線的MA1和MA2
繼續,當有新行情生成第101根K線時
逐行執行:
3.執行第1行語句,計算全部101根K線的MA1
4.執行第2行語句,計算全部101根K線的MA2
逐根執行:
101.對第101根K線,執行整個公式,計算第101根K線的MA1和MA2
智能交易公式默認為逐根執行,為了能夠對交易進行各種控制
技術指標類公式默認為逐行執行,為了兼容國內的主流公式
逐根執行是更靈活的執行方式,它能實現逐行執行做不到的功能
對技術指標類公式,可以用編譯開關#RunMode設置執行模式
#RunMode RUN_BY_BAR //逐根執行
#RunMode RUN_BY_SERIES //逐行執行
只要控制好風險,加上人工干預,網格交易也是一種不錯的方法,特別是在外匯市場,金魔方公式如何實現呢?
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 511411198 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容