📖 還沒接過交易所 API?先看 Python 量化交易入門;想先用內建網格體驗,看 四大所合約網格比較。
一句話結論:網格機器人的本質就一句話——在一排價位掛買賣限價單,成交一個就在反方向補一個,反覆賺格子間的價差。交易所內建網格已經很好用,但自己寫能真正搞懂原理、能客製邏輯、能跨所統一。本文用 ccxt 從零寫一個。三鐵則:① 先用現貨網格+模擬盤練手(不會爆倉)② 以限價單為主、別追市價 ③ 一定要寫「斷線重啟接管既有掛單」,否則重啟會重複下單。
你已經知道四大所的內建網格怎麼用了,為什麼還要自己寫一個?三個理由:① 真正理解——自己寫過就懂網格底層在做什麼,不再是黑盒;② 客製化——內建網格的觸發、補單、止盈邏輯都固定,自己寫想怎麼改都行;③ 跨所統一——用 ccxt 一套程式碼能跑在幣安/OKX/Bybit/Bitget。
沒接過交易所 API 的話,先看 Python 量化交易入門把環境與金鑰搞定,再回來組這個機器人。下面每段程式碼都能獨立跑,照順序拼起來就是一個可動的網格機器人骨架。
自己寫 vs 交易所內建網格,怎麼選
追求穩定、省事、不想維護 → 用交易所內建網格(有風控、有強平保護、斷線也不怕)。想學原理、要客製策略、要跨所或接自己的訊號 → 自己寫。務實的路線是:先用內建網格理解體感,再用這篇自己寫一個來搞懂底層、做客製。自己寫的版本建議用現貨網格練手——邏輯一樣但不會爆倉,把風險降到最低。
網格機器人的核心邏輯(三句話)
- 撒網:在設定的價格區間裡,等距掛一排限價單——低於現價的掛買、高於現價的掛賣。
- 補單:每當一個買單成交,就在「上一格」掛一個賣單;每當一個賣單成交,就在「下一格」掛一個買單。
- 循環:價格在區間裡來回擺動,買賣單不斷成交又補上,每一對「低買高賣」就賺一格價差。
環境與金鑰安全
pip install ccxt python-dotenv。金鑰安全是底線——建立 API 金鑰時只勾「交易」、關閉「提現」、綁定 IP 白名單,金鑰放 .env 並加進 .gitignore(細節見 資金費率套利那篇的安全工程段)。建立連線:
import os, ccxt
from dotenv import load_dotenv
load_dotenv() # 讀 .env(務必加進 .gitignore,金鑰只開「交易」、關閉「提現」、綁 IP)
ex = ccxt.okx({
"apiKey": os.environ["OKX_API_KEY"],
"secret": os.environ["OKX_API_SECRET"],
"password": os.environ["OKX_API_PASSWORD"], # OKX 需要 passphrase
"options": {"defaultType": "spot"}, # 用現貨網格示範:不會爆倉,最適合練手
})
SYMBOL = "BTC/USDT"
第一步:算出網格價位
等差(每格價差固定)對短區間夠用;等比(每格漲跌幅固定)更適合波動大的加密。先把價位算出來:
def grid_levels(low, high, n, mode="arith"):
"""把 [low, high] 區間切成 n 格的價位串。
mode: arith=等差(每格價差固定), geo=等比(每格漲跌幅固定,較適合加密)"""
if mode == "geo":
ratio = (high / low) ** (1 / n)
return [round(low * ratio ** i, 2) for i in range(n + 1)]
step = (high - low) / n
return [round(low + step * i, 2) for i in range(n + 1)]
# 例:BTC 在 58000~68000 切 10 格
print(grid_levels(58000, 68000, 10))
第二步:在每個網格價掛限價單
低於現價的掛買、高於現價的掛賣。create_order 是 ccxt 的統一下單方法:
def place_grid(levels, amount_per_grid):
"""在每個網格價掛限價單:低於現價的掛買、高於現價的掛賣。"""
mid = ex.fetch_ticker(SYMBOL)["last"]
order_ids = []
for price in levels:
if abs(price - mid) / mid < 0.001:
continue # 太貼近現價的格子先跳過
side = "buy" if price < mid else "sell"
o = ex.create_order(SYMBOL, "limit", side, amount_per_grid, price)
order_ids.append(o["id"])
print(f"掛 {side:4s} {amount_per_grid} @ {price}")
return order_ids
第三步:主迴圈——偵測成交、反向補單
網格的靈魂在這:用輪詢比對「掛單前」和「現在」的開放訂單,消失的就是成交的,成交後在反方向補一格:
import time
def run_grid(low, high, n, amount, poll=10):
levels = grid_levels(low, high, n)
place_grid(levels, amount)
known = {o["id"] for o in ex.fetch_open_orders(SYMBOL)}
while True: # 主迴圈:盯成交→反向補單
time.sleep(poll)
open_now = {o["id"] for o in ex.fetch_open_orders(SYMBOL)}
filled = known - open_now # 消失的掛單 = 已成交
for oid in filled:
o = ex.fetch_order(oid, SYMBOL)
price, side = o["price"], o["side"]
i = levels.index(min(levels, key=lambda x: abs(x - price)))
# 買單成交→在上一格掛賣;賣單成交→在下一格掛買(賺一格價差)
if side == "buy" and i + 1 <= n:
new = ex.create_order(SYMBOL, "limit", "sell", amount, levels[i + 1])
elif side == "sell" and i - 1 >= 0:
new = ex.create_order(SYMBOL, "limit", "buy", amount, levels[i - 1])
else:
continue
open_now.add(new["id"])
print(f"{side} 成交 @ {price} → 已反向補單")
known = open_now
這是教學骨架,刻意簡化了:部分成交、下單精度與最小量(用 ex.load_markets() 拿規則)、API 限頻(別 poll 太快)、手續費都要實盤前自己補上。生產級會改用 WebSocket(watch_orders)取代輪詢。
第四步:斷線重啟別重複下單
機器人一定會斷線(網路、當機、重部署)。重啟時要先「接管」交易所上已存在的掛單,而不是再撒一輪,否則會掛出雙倍訂單:
# 斷線/重啟別從零開始:開機時先撈交易所「已存在的掛單」接管,而不是重撒一輪
def resume():
existing = ex.fetch_open_orders(SYMBOL)
print(f"接管 {len(existing)} 筆既有掛單,不重複下單")
return {o["id"] for o in existing}
自寫網格的風險與坑
- 單邊行情:價格衝出區間,現貨網格套牢、合約網格爆倉。網格只賺震盪,這點自己寫也躲不掉。
- 斷線時段:機器人掛掉期間成交沒補單,網格會「破洞」。要有監控與自動重啟+接管邏輯。
- API 限頻:poll 太頻繁會被交易所限流甚至封鎖,輪詢間隔別太短,或改用 WebSocket。
- 精度與最小下單量:沒處理會下單失敗或數量對不齊,務必先
load_markets()。 - 手續費:格子利潤要蓋過來回手續費,否則做白工——這也是要省手續費的原因。
網格高頻交易,手續費與返佣很關鍵
自寫網格一樣是高頻策略,費率與返佣直接決定淨利。OKX 合約 taker 0.05%、API 友好,常用來跑量化;用邀請碼可再壓成本:
※ 費率與返佣以官方為準,查證 2026-06-28。算一年差多少用 手續費返佣計算機。
常見問題 FAQ
自己寫網格機器人比交易所內建好嗎?
各有適用。內建網格穩定、有風控、斷線也不怕,適合不想維護的人;自己寫能搞懂原理、做客製化邏輯、用 ccxt 跨所統一,適合想學或要客製的人。建議先用內建理解體感,再自己寫一個搞懂底層。
用 ccxt 寫網格,現貨還是合約好?
新手強烈建議先用現貨網格:邏輯和合約一樣(掛單、成交、補單),但不會爆倉,最多套牢。等完全跑順、也理解風險後,再考慮合約網格並用最低槓桿。
為什麼一定要寫「斷線重啟接管」邏輯?
機器人一定會斷線(網路、當機、重部署)。如果重啟時直接重撒網格,會和交易所上原有的掛單疊加,變成雙倍訂單、打亂網格。正確做法是重啟時先 fetch_open_orders 接管既有掛單,再繼續運作。
輪詢(poll)會不會被交易所封鎖?
會。poll 太頻繁會觸發 API 限頻甚至封 IP。教學用輪詢好理解,但生產環境建議把間隔拉長,或改用 WebSocket 的 watch_orders 即時接收成交事件,更即時也更省請求。
這份程式碼可以直接拿去跑真錢嗎?
不建議。它是教學骨架,省略了下單精度、最小下單量、部分成交、手續費、限頻等實盤細節。請先用交易所模擬盤跑通、補齊這些處理、小額測試,完全理解每一行在做什麼之後,再考慮用真錢。
延伸閱讀:加密量化程式碼系列
網格/原理:四大所合約網格比較、OKX 網格設定教學、網格 30 天實測損益
程式/工具:Python 量化入門:30 行接 OKX API、資金費率套利 Python 腳本、策略回測教學
利益揭露:本文部分交易所連結含邀請碼,使用不增加你的成本,有些還有手續費折扣。本文為程式教學整理,所有程式碼僅供學習,不構成投資建議;網格與合約交易涉及風險,可能損失本金,請先用模擬盤測試並自行評估風險。
📚 延伸閱讀:剛入門、還不確定要不要一路寫到程式碼?這份總入口把「免程式 → 自己寫」的路徑排好了:量化交易入門完整指南(加密貨幣篇)。








發表迴響