20 至 31 分鐘
, ,

「量化交易一定要會寫程式嗎?」

不一定。我在這篇文章裡介紹了三種不用寫 Code 的方法。但如果你願意花一個下午學一點 Python,你能做到的事情會完全不同。

用 Pine Script 你只能在 TradingView 上跑回測。用 Python 你可以直接連上交易所 API、自動下單、抓即時數據、跑自己的多因子模型。這是從「用別人的工具」到「自己造工具」的跨越。

這篇的目標:讓一個從沒碰過 Python 的人,在兩小時內跑出第一個能自動在 OKX 上下單的程式。不講廢話,每一行程式碼都會解釋。

環境安裝(15 分鐘)

安裝 Python

去 python.org 下載最新版 Python(建議 3.10 以上)。安裝時記得勾選「Add Python to PATH」。安裝完打開終端機(Windows 用 CMD 或 PowerShell,Mac 用 Terminal),輸入:

python --version

看到版本號就代表安裝成功。

安裝必要套件

pip install python-okx pandas

python-okx 是 OKX 的官方 Python SDK,封裝好了所有 API 呼叫。pandas 是數據處理神器,後面會用到。

取得 OKX API Key

登入 OKX,進入「個人中心」→「API」。點「建立 API Key」。給 API Key 取個名字(比如「python-bot」)。權限設定:勾選「讀取」和「交易」。不要勾「提幣」——這是安全原則,即使 API Key 洩漏也不會被轉走資金。設一個 API 密語(passphrase),記下來。點確認後,你會看到 API Key 和 Secret Key。把這兩個加上 passphrase 存到安全的地方——Secret Key 只會顯示一次。

安全提醒:API Key 不要寫在程式碼裡上傳到 GitHub。用環境變數或 .env 文件來管理。

第一個程式:查詢 BTC 價格

import okx.MarketData as MarketData

# 建立 API 連線(查詢市場數據不需要 API Key)
market = MarketData.MarketAPI(flag="0")  # 0=實盤, 1=模擬盤

# 查詢 BTC/USDT 最新價格
result = market.get_ticker(instId="BTC-USDT")
price = result["data"][0]["last"]
print(f"BTC 當前價格: {price} USDT")

把這段存成 check_price.py,在終端機跑 python check_price.py。如果你看到一個數字,恭喜——你已經成功連上 OKX API 了。flag="0" 是實盤環境,"1" 是模擬盤。建議你所有測試都先在模擬盤跑。

第二個程式:查詢帳戶餘額

import okx.Account as Account

api_key = "你的API_KEY"
secret_key = "你的SECRET_KEY"
passphrase = "你的PASSPHRASE"

account = Account.AccountAPI(api_key, secret_key, passphrase, flag="1")

result = account.get_balance()
for item in result["data"][0]["details"]:
    if float(item["cashBal"]) > 0:
        print(f"{item['ccy']}: {item['cashBal']}")

注意 flag="1"——我用的是模擬盤。在你確定程式邏輯完全正確之前,永遠用模擬盤測試。

核心程式:30 行自動下單

這個程式的邏輯是:查詢 BTC 當前價格 → 在當前價格下方 1% 掛一個限價買單 → 設好止盈止損。

import okx.Trade as Trade
import okx.MarketData as MarketData

# API 設定
api_key = "你的API_KEY"
secret_key = "你的SECRET_KEY"
passphrase = "你的PASSPHRASE"
flag = "1"  # 模擬盤

# 建立連線
market = MarketData.MarketAPI(flag=flag)
trade = Trade.TradeAPI(api_key, secret_key, passphrase, flag=flag)

# 查詢 BTC 當前價格
ticker = market.get_ticker(instId="BTC-USDT")
current_price = float(ticker["data"][0]["last"])
print(f"BTC 當前價格: {current_price}")

# 計算掛單價格(當前價格的 99%,即下方 1%)
buy_price = round(current_price * 0.99, 1)

# 計算止盈止損
tp_price = round(buy_price * 1.03, 1)  # 止盈 +3%
sl_price = round(buy_price * 0.98, 1)  # 止損 -2%

# 下限價買單
result = trade.place_order(
    instId="BTC-USDT",
    tdMode="cash",
    side="buy",
    ordType="limit",
    px=str(buy_price),
    sz="0.001",
    tpTriggerPx=str(tp_price),
    tpOrdPx=str(tp_price),
    slTriggerPx=str(sl_price),
    slOrdPx=str(sl_price),
)

if result["code"] == "0":
    print(f"下單成功!掛單價: {buy_price}")
    print(f"訂單ID: {result['data'][0]['ordId']}")
else:
    print(f"下單失敗: {result['data'][0]['sMsg']}")

30 行。做了四件事:連上 API → 查價格 → 算出掛單價和止盈止損 → 下單。

逐段解釋

連線部分(第 4-12 行):用你的 API Key 建立跟 OKX 的連線。MarketAPI 不需要認證(公開數據),TradeAPI 需要認證(涉及你的帳戶)。

查價和計算(第 15-22 行):先查 BTC 即時價格,然後算出比當前價格低 1% 的買入價、+3% 的止盈價、-2% 的止損價。這些百分比你可以根據自己的策略調整。

下單(第 25-35 行):place_order 是最核心的函數。tdMode="cash" 是現貨,合約改成 "isolated"(逐倉)。side="buy" 是買入。ordType="limit" 是限價單,改成 "market" 就是市價單。合約交易的完整教學可以看這篇

進階:定時查價 + 條件下單

把上面的程式加一個循環,就變成一個簡單的自動交易機器人。以下是一個每小時檢查 RSI,超賣就買入的範例:

import time
import okx.Trade as Trade
import okx.MarketData as MarketData

# (API 設定省略,同上)
market = MarketData.MarketAPI(flag="1")
trade = Trade.TradeAPI(api_key, secret_key, passphrase, flag="1")

def get_rsi(instId, period=14):
    candles = market.get_candlesticks(instId=instId, bar="1H", limit=str(period+1))
    closes = [float(c[4]) for c in candles["data"]]
    closes.reverse()
    gains, losses = [], []
    for i in range(1, len(closes)):
        change = closes[i] - closes[i-1]
        gains.append(max(change, 0))
        losses.append(max(-change, 0))
    avg_gain = sum(gains) / period
    avg_loss = sum(losses) / period
    if avg_loss == 0: return 100
    return 100 - (100 / (1 + avg_gain / avg_loss))

while True:
    rsi = get_rsi("BTC-USDT")
    ticker = market.get_ticker(instId="BTC-USDT")
    price = float(ticker["data"][0]["last"])
    print(f"BTC: {price} | RSI: {rsi:.1f}")
    if rsi < 30:
        print("RSI 超賣!買入...")
        trade.place_order(instId="BTC-USDT", tdMode="cash",
                         side="buy", ordType="market", sz="0.001")
    time.sleep(3600)

這就是你在回測教學裡學的 RSI 策略——只不過現在它是自動執行的。

安全注意事項

API Key 安全。不要把 API Key 寫死在程式碼裡。用環境變數:

import os
api_key = os.environ.get("OKX_API_KEY")
secret_key = os.environ.get("OKX_SECRET_KEY")
passphrase = os.environ.get("OKX_PASSPHRASE")

IP 白名單。在 OKX 的 API 設定裡,把你的電腦 IP 加入白名單。即使 Key 洩漏,別人也無法從其他 IP 呼叫。

模擬盤先跑。任何新策略都先在模擬盤上跑至少一週。確認邏輯正確後再切實盤。

錯誤處理。網路會斷、API 會逾時。你的程式需要有 try-except 來處理這些情況。

資金上限。在程式裡硬編碼一個最大下單金額。即使程式出 bug 連續下單,也不會超過上限。

從這裡往哪走?

學完這篇你已經能用 Python 連上 OKX API 自動查價和下單了。接下來可以:把七種量化策略的任何一種用 Python 實現、用 pandas 處理歷史 K 線跑本地回測、把程式部署到雲伺服器 24 小時運行。

延伸閱讀

從零開始:量化交易入門。不想寫程式?三種不用 Code 的方法。先用 Pine Script 練手:Pine Script 中文教學。學會回測再上線:回測教學。搞懂合約操作:OKX 合約交易教學

常見問題 FAQ

完全不會程式,學 Python 量化交易要多久?

如果你只是要連上 OKX API 做基本的自動下單(像本文的 30 行程式),一個下午就能跑起來。但如果你想寫更複雜的策略(多因子模型、數據分析、風控系統),需要花 2-4 週學 Python 基礎和 pandas 數據處理。建議先用本文的程式碼在模擬盤上跑通,再逐步擴展。

OKX API Key 洩漏了怎麼辦?

立刻到 OKX 個人中心刪除該 API Key 並建立新的。如果你建 Key 時沒有勾選「提幣」權限(本文強烈建議不勾),那最壞情況是別人能用你的帳戶交易,但不能把錢轉走。如果設了 IP 白名單,即使 Key 洩漏別人也無法從其他 IP 使用。這就是為什麼安全設定這麼重要。

模擬盤和實盤的差異大嗎?

API 介面完全一樣(只差 flag 參數),所以程式邏輯的驗證是準確的。但模擬盤不會有真實的滑點和流動性問題——你的市價單永遠能以理想價格成交,但實盤在大波動時可能滑點很大。建議模擬盤跑通後,先用最小金額(0.001 BTC)在實盤驗證一週。

Python 量化交易程式需要 24 小時運行嗎?

取決於你的策略頻率。如果是每小時檢查一次 RSI 的策略,關電腦就停了。解決方案有三個:把程式部署到雲伺服器(AWS、DigitalOcean 等,月費約 5-10 美元);用 OKX 的條件單功能讓交易所幫你監控觸發條件;或用 交易機器人平台來跑策略,它們的伺服器 24 小時運行。

Mr. Slash 不是你的理財顧問。本文的程式碼僅用於教學目的,不構成投資建議。自動交易有程式錯誤和市場風險,請務必先用模擬盤測試,並且只用你虧得起的資金。

關於Mr. Slash

「Mr. Slash 的系統性人生」,創立於 2024年,由 Mr. Slash 本人及專業編輯團隊經營的財經內容平台。

我們的宗旨是透過投資、財經、自動化與新興科技等領域的深入解說與應用,幫助讀者打造穩定的被動收入系統。內容涵蓋加密貨幣、股息資產、量化工具、平台分潤等實用策略,協助你用更聰明的方法配置資金、累積資產,走在財務自由的路上,少走冤枉路。

若為商業合作邀稿,將會清楚標註「不代表本站立場」。

商業合作

如果您有任何關於我們團隊或網站內容的疑問或建議,歡迎您前往IG 私訊 @slash.Capital聯繫我們,謝謝!

發表迴響

Trending

探索更多來自 Mr. Slash|系統流人生 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading

Join Mr. Slash