📈 網格交易策略實現與原理解析
🧠 什么是網格交易策略?
網格交易(Grid Trading)是一種經典的量化交易策略,其核心思想是在價格的不同區間(“網格”)中設置買入和賣出操作,通過不斷高拋低吸,從波動中獲利,而不是預測市場的方向。
?? 策略原理
? 核心邏輯
-
構建網格價格區間:
- 從某個基準價格開始,向上和向下按固定百分比(例如每 ±3%)構建多個價格“格子”;
- 每個格子代表一個買入或賣出信號點。
-
初始建倉:
- 策略啟動時不一定立刻交易;
- 會等待市場價格進入設定網格后再進行首次交易。
-
低買高賣:
- 若價格下跌到某個“買入格”,用部分資金買入;
- 若價格上漲到某個“賣出格”,賣出部分持倉。
-
每個格子交易固定金額(或倉位比例):
- 如:每次用總資金的 20% 買入或賣出。
-
每次只交易一格,避免頻繁操作
💡 策略適用場景
條件 | 是否適用 | 原因說明 |
---|---|---|
橫盤震蕩行情 | ? 非常適合 | 多次觸發買賣機會 |
明確單邊上漲/下跌 | ? 不適合 | 容易持續買在跌勢中,或賣在漲勢中 |
高頻率波動品種(如ETF) | ? 較適合 | 高頻小波動可積累收益 |
黑天鵝極端行情 | ?? 風險較大 | 無趨勢判斷和止損保護時可能大幅虧損 |
📋 策略參數設置
g.grid_interval = 0.03 # 網格間距:3%
g.grid_num = 5 # 上下各5格,總10層
g.position_ratio = 0.2 # 每個格子投入 20% 的初始資金
- 網格價格通過以下方式生成:
g.buy_grid = [base_price * (1 - 3% * i) for i in 1~5]
g.sell_grid = [base_price * (1 + 3% * i) for i in 1~5]
- 例如:當前價為 100 元,則買入網格為:
97、94、91、88、85 元
;賣出網格為103、106、109、112、115 元
💻 策略代碼(基于聚寬平臺)
# 導入函數庫
from jqdata import *# 初始化函數,設定基準等等
def initialize(context):# 設定滬深300作為基準set_benchmark('000300.XSHG')# 開啟動態復權模式(真實價格)set_option('use_real_price', True)# 輸出內容到日志 log.info()log.info('初始函數開始運行且全局只運行一次')g.security = '000300.XSHG'# 設置網格參數g.grid_interval = 0.03 # 網格間距:3%g.grid_num = 5 # 網格數量:中間上下各5層g.base_price = None # 后續初始化g.position_ratio = 0.2 # 每格倉位變動比例# 是否已初始化網格g.inited = False### 股票相關設定 #### 股票類每筆交易時的手續費是:買入時傭金萬分之三,賣出時傭金萬分之三加千分之一印花稅, 每筆交易傭金最低扣5塊錢set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')run_daily(market_open, time='open', reference_security='000300.XSHG')## 開盤時運行函數
def market_open(context):price = get_current_data()[g.security].last_price# 初始化網格價格和初始持倉if not g.inited:g.base_price = priceg.buy_grid = [g.base_price * (1 - g.grid_interval * i) for i in range(1, g.grid_num + 1)]g.sell_grid = [g.base_price * (1 + g.grid_interval * i) for i in range(1, g.grid_num + 1)]g.init_cash = context.portfolio.available_cashg.position_value_per_grid = g.init_cash * g.position_ratiolog.info(f"初始化完成,當前價格:{price}")g.inited = Truereturncurrent_position = context.portfolio.positions[g.security].valueavailable_cash = context.portfolio.available_cash# 買入邏輯:當前價格低于某個買入網格且有資金。。。# 賣出邏輯:當前價格高于某個賣出網格且有倉位。。。詳情見聚寬【搜索 “芒果量化”】 https://www.joinquant.com/view/community/detail/fc1595a15fabbfea7bd85d033ba3dbbe
📊 策略優缺點分析
? 優點:
- 不依賴市場預測,策略穩定;
- 自動化、紀律性強,適合程序化交易;
- 在震蕩行情中能頻繁盈利;
? 缺點:
- 無趨勢識別能力,單邊市可能持續虧損;
- 無止損機制,容易“越跌越買”;
- 需要較大資金以布置多個網格層級;
🧩 可擴展方向
擴展項 | 說明 |
---|---|
動態調整網格寬度 | 根據波動率自動增減間隔 |
加入均線趨勢過濾器 | 避免在明顯單邊市中開倉 |
多標的輪動交易 | 對多個ETF或股票運行并分配資金 |
止盈止損策略 | 保障大波動時及時鎖定收益或限制虧損 |
倉位自適應 | 跟隨賬戶收益動態調整資金使用比例 |
🧠 總結
網格交易是一種簡單而實用的自動化量化策略,尤其適合震蕩行情中獲得穩定收益。然而它本身對趨勢變化并不敏感,因此建議在使用過程中配合趨勢判斷機制或止損機制進行風控優化。
參考:joinQuant 芒果量化