想用 Python 開發股票策略、實現自動化交易?不管你是剛接觸程式交易的新手,還是已經熟悉 Python 的工程背景投資人,「股票程式交易」絕對是最值得學習的應用方向之一。這篇文章將帶你從資料來源、策略邏輯、回測系統到下單實作,一步步了解用 Python 做股票交易的完整流程。
為什麼選擇 Python 來做股票程式交易?
Python 結合了語法簡潔、套件齊全與金融社群活躍等優勢,特別適合股票交易領域,原因如下:
- 套件完整:處理時序資料的 pandas、策略回測用的 backtrader、下單串接的 API,如 IB_insync、ccxt
- 可擴展性高:能整合機器學習、AI 模型、Web API 與雲端服務
- 支援多市場:美股、港股、加密貨幣,甚至台股(搭配券商 API)
股票資料從哪裡來?如何用 Python 抓取
1. Yahoo Finance(適合初學者)
套件:yfinance
- 支援台股、美股、ETF 等多種商品
- 可取得日線、週線、財報、股利等基本資訊
- 免費且不需註冊帳號
import yfinance as yf
df = yf.download("AAPL", start="2022-01-01", end="2023-01-01")
print(df.head())
2. Alpha Vantage / Polygon.io(API 為主)
- 支援即時報價、技術指標、財報資料
- 多數需申請 API Key,免費版有使用次數限制
3. 台股資料來源(難度較高)
- Goodinfo、TEJ、台灣券商 API(如元大、永豐)
- 多需爬蟲或自建資料庫,有使用門檻
股票策略邏輯怎麼寫?簡單範例一次看
Python 程式交易常見的股票策略包含:
- 均線交叉(MA Cross)
- RSI 超買超賣
- 價格突破追漲
- 布林通道上下軌反轉
範例:簡易的 5MA/20MA 交叉策略(邏輯範例)
df['ma5'] = df['Close'].rolling(5).mean()
df['ma20'] = df['Close'].rolling(20).mean()
df['signal'] = (df['ma5'] > df['ma20']).astype(int)
你也可以用 ta
套件快速計算技術指標:
import ta
df['rsi'] = ta.momentum.RSIIndicator(df['Close']).rsi()
如何進行回測?用 backtrader 模擬績效
backtrader
是 Python 中最受歡迎的回測框架,支援:
- 多商品、多策略測試
- 繪製資金曲線、報酬率、最大回落
- 擴充模組多(如連接 IB API)
簡單架構:
import backtrader as bt
class TestStrategy(bt.Strategy):
def next(self):
if self.data.close[0] > self.data.close[-1]:
self.buy()
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.addstrategy(TestStrategy)
cerebro.run()
cerebro.plot()
Python 股票實盤下單怎麼做?
1. 使用 ib_insync
串接 IB 證券
- 適用於美股、港股、ETF、期貨
- 安裝:
pip install ib_insync
- 支援下單、查詢、訂閱報價等完整功能
2. 使用 futu-api
串接富途證券
- 適用港股、美股,介面友善
- 支援下單、訂閱實時資料
3. 台灣券商 API(難度高)
- 元大、永豐、國泰等券商提供 API,但支援度低
- 常需要 Win32 COM 或 DLL 介接,不適合新手
架設自動化交易機器人:Python 自動下單架構參考
模組 | 工具/技術 |
---|---|
策略撰寫 | pandas + ta / 自製邏輯 |
回測 | backtrader / bt |
資料來源 | yfinance / Alpha Vantage |
下單執行 | ib_insync / futu-api / CCXT |
自動排程 | schedule / APScheduler / cron |
日誌記錄 | logging 模組 |