
【有碼】用 MultiCharts 實現股票/現貨網格交易
2022/5/30 - MultiCharts, TOUCHANCE , 達錢, 股票, 程式交易, 網格交易, 網格交易機器人
網格交易(Grid Trading)
網格交易這個名詞最早是從加密貨幣市開始發光發熱,其中比較有名是「派網(Pionex)」推廣的多種交易機器人(如網格交易、期現套利)工具,而最多人使用就是「網格交易」這個功能。
使用網格交易投資人只要把錢存進去後,設定好參數,接著就可以讓網格交易機器人 24 小時不停地運作,幫助投資人避免人性、紀律等因素,造成無謂的進出而產生虧損。
簡單的說,網格交易是以價格為基礎,在盤整的價格區間不斷的進行低買高賣獲利的動作。
圖片來源:桑幣筆記
![]() |
證券交易加值服務免費 30 天試用達錢 TOUCHANCE 與元富證券提供了【證券交易的加值服務】,即日起完成【元富證券開戶申請】即可向 line@touchance 客服申請 30 天的免費試用。 》立即申請 |
用 MultiCharts 實現股票/現貨網格交易
相關名詞解釋
網格交易是一種量化/程式交易策略,因此我們可以用 MultiCharts 來進行實作一個網格交易機器人,實作前我們必須對網格交易的運作邏輯做一些解釋與名詞定義:
- 價格上限:價格區間的上限,當市價高於價格上限時,將停止執行交易操作。
- 價格下限:價格區間的下限,當市價低於價格下限時,將停止執行交易操作。
- 網格數量:將價格區間分為相應的數量。(範例使用”等比“做切分)。
從上圖來觀察,假設我們覺得 2412 中華電信的股票價格的會在 115-100 的區間來回震蕩,那麽我們就可以對我們範例的網格機器人設定下列的參數設定:
- 價格上限:115,當市價高於 115 時將停止執行交易操作。
- 價格下限:100,當市價低於 100 時將停止執行交易操作。
- 網格數量:5,請特別注意,你的網格切的越細代表你需要準備更多的資金來進行操作。
MultiCharts 回測結果(回測參考用非真實數據)
風險提示:本文範例實作的網格交易作為交易輔助工具,不應被視為金融或投資的建議。投資人使用本範例作爲參考建立交易策略是您的自主行為,所有交易策略的邏輯與參數内容均由您自行決定並自擔風險, TOUCHANCE 不承擔任何責任。
從範例的 2412 中華電信回測看起來結果滿香的,通常股票/現貨的網格交易使用的是【正向網格】,因此當你選擇的股票行情走勢不如預期跌出區間時,那麽本範例便會停止交易直到價格回到設定的區間内才會開始進行交易。
範例程式説明:
範例程式實現的股票/現貨網格交易,使用時必須搭配文末 MultiCharts 策略部位限制( Position Limits)相關設定説明使用才能正常運作。
同時,由於台灣股票有 10% 的漲跌幅度限制,如果你的網格間距超過 10%時委托的限價單(Limit Order)就會發生委托失敗的狀況,解決的方法請參考:如何避免限價單委托超過漲跌幅度説明。
指標:_grid_line_show.pla
説明:輔助用,根據你設定的參數繪製出網格。
inputs: hb(0),lb(0),steps(5);
vars: index(0), _steps(0), stpValue(0), ct("");
array: stps_arry[](0);
once cleardebug;
once Array_SetMaxIndex( stps_arry, steps - 1 );
once _steps = steps - 1;
once stpValue = Round(( hb - lb ) / _steps, 0);
once for index=0 to _steps begin
stps_arry[ index ] = lb + ( index * stpValue );
value1 = TL_new( D, time_S, stps_arry[ index ], D, time_S, stps_arry[ index ]);
TL_setextright(value1,True);
TL_setextleft(value1,True);
end;
訊號:@ml_stk_grid_trader.pla
説明:交易範例用,根據你設定的參數執行網格交易。
inputs: hb(0),lb(0),steps(3),bString(""), sString("");
vars: index(0), _steps(0), stpValue(0),mp(0),currentLv(999);
vars: bs(""), ss("");
array: stps_arry[](0);
once cleardebug;
once _steps = steps - 1;
once Array_SetMaxIndex( stps_arry, _steps );
once stpValue = Round(( hb - lb ) / _steps, 0);
once for index=0 to _steps begin
stps_arry[ index ] = lb + ( index * stpValue );
end;
if c < lb then currentLv = -999;
if c > hb then currentLv = 999;
if bString = "" then bs = "low-buy" else bs = bString;
if sString = "" then ss = "high-sell" else ss = sString;
for index=0 to _steps-1 begin
if c > stps_arry[index] and c < stps_arry[ index + 1 ] then begin
currentLv = index;
end;
end;
if ( currentlv <> 999 and currentlv <> -999 ) then begin
if currentLv < _steps then begin
buy ( text( bs,currentLv ) ) 1000 contracts next bar at stps_arry[ currentLv ] limit;
end;
sell (text( ss,currentLv ))from entry(text( bs,currentLv )) next bar at stps_arry[ currentLv+1 ] limit;
end;
MultiCharts Position Limits 相關設定
MultiCharts 交易策略屬性(Strategy Properites)的部位限制(Position Limits)預設是沒有勾選啓用加碼功能,由於網格交易在區間時必須建立對應數量的部位,因此必須啓用部位限制(Allow up to ...)才能正常的建立對應數量的部位。
請依照下列説明完成設定:
- 勾選 Allow up _______ entry orders in the same direction as the currently held position:
(提醒: Allow up ______ entry, 的數字請設定大於你的網格數量。) - 選擇 When the order is generated by a different entry order.
如何避免限價委托超過漲跌幅度
台灣的股票有漲跌幅限制,要避開委托價格超過漲跌幅度的限制時,可以利用 TC 内建下單機提供的【本地洗價】功能,來達成觸及價格後以【市價】委托的方式送出即可。
MultiCharts x 元富證券 x 達錢
股票程式交易完美呈現!
》立即瞭解