Finance

PTT 爆文:工程師靠 Python 打造「AI 自動印鈔機」,績效輾壓 00878,鄉民全跪了!

量子操盤手 (Quantum Trader)January 06, 20265 min read
PTT 爆文:工程師靠 Python 打造「AI 自動印鈔機」,績效輾壓 00878,鄉民全跪了!

作者與來源揭露

作者
量子操盤手 (Quantum Trader)
審核
由 CULTIVATE 編輯團隊完成最終審閱
生成模型
N/A
主要來源
SYSTEM_CLI

本文可能包含 AI 輔助撰寫,並經人工編輯審核。 編輯政策 · 服務條款

揭秘工程師如何利用 Python 開源框架 Backtrader 與台股 API,打造結合「動能因子」與「高股息」的量化策略,實現比單純存股 00878 更高的夏普比率。

最近在 PTT Stock 版與 Soft_Job 版瘋傳一篇「神級」文章,一名竹科工程師分享自己利用下班時間,用 Python 自幹了一套「AI 自動交易機器人」,號稱回測績效在過去三年不僅輾壓高股息 ETF 00878,更在大盤修正時展現驚人的抗跌性。這篇文章瞬間引爆鄉民熱議,不僅是因為績效驚人,更因為他無私公開了核心的「開源技術棧」與「策略邏輯」。

今天,我們就從量化專家的角度,來拆解這台傳說中的「AI 印鈔機」到底是怎麼運作的,以及你該如何複製(並改良)它。

1. 核心引擎:不花錢的頂級軍火庫

這位工程師並沒有購買昂貴的看盤軟體,而是使用了全球最受歡迎的 Python 開源回測框架 —— Backtrader。

為什麼選 Backtrader?

  • 靈活度極高:它是純 Python 編寫,可以輕鬆串接 Pandas 數據處理庫與 Scikit-learn 機器學習庫。
  • 事件驅動 (Event-driven):模擬真實市場的逐筆交易(Tick-by-tick),比簡單的向量回測(Vectorized Backtesting)更精準,能考慮到滑價與手續費。
  • 社群強大:擁有海量文檔與範例,遇到問題隨時有 StackOverflow 支援。

台股在地化神隊友: 光有引擎不夠,還需要燃料(數據)與輪子(下單)。在台灣,開源社群通常會搭配 Shioaji (永豐金 API) 或 FinLab 來抓取台股即時報價與歷史數據。這讓原本設計給美股用的 Backtrader,也能完美運行在台積電 ($TSM) 與聯發科身上。

2. 策略揭秘:「增強版 00878」 (Smart Beta + Momentum)

很多散戶的迷思是「越跌越買」,這在多頭市場沒問題,但在空頭市場就是接刀子。這位工程師的策略邏輯其實非常硬核且科學,他改良了傳統的高股息策略,加入了「動能因子 (Momentum Factor)」。

策略邏輯拆解:

  • 選股池 (Universe):直接鎖定 00878 或 0056 的成分股(確保流動性與基本面)。
  • 進場濾網 (Entry Filter):
  • 濾網 A:殖利率 > 4%(高股息基底)。
  • 濾網 B (關鍵):股價必須位於「60 日均線 (季線)」之上,且 RSI 指標未過熱 (< 70)。這就是所謂的「右側交易」,只在股票強勢時持有,弱勢時空手。
  • 出場機制 (Exit):
  • 跌破 20 日均線,或殖利率小於 3% 時獲利了結。
  • 資金管理 (Position Sizing):凱利公式 (Kelly Criterion) 或固定風險比例(例如單筆虧損不超過總資產 2%)。

為什麼能贏 00878? 00878 是被動追蹤指數,成分股表現再爛都得持有(直到季度調整)。但這個 AI 機器人能做到「微米級」的反應,一旦成分股轉弱(例如某檔 AI 概念股炒過頭開始崩盤),機器人會在幾毫秒內賣出,避開了主跌段。這就是所謂的「避險」。

3. 技術實戰:三十行代碼的威力

雖然我們不能直接貼出完整源碼,但核心的 Backtrader 邏輯結構如下:

import backtrader as bt

class SmartDividendStrategy(bt.Strategy):
params = (('ma_period', 60), ('rsi_period', 14),)

def __init__(self):
self.ma = bt.indicators.SimpleMovingAverage(period=self.params.ma_period)
self.rsi = bt.indicators.RSI(period=self.params.rsi_period)

def next(self):
# 避免 Look-ahead bias,只看當前與過去的數據
if not self.position:
# 進場邏輯:股價在季線之上 且 RSI 健康
if self.data.close[0] > self.ma[0] and self.rsi[0] < 70:
self.buy()
else:
# 出場邏輯:跌破季線
if self.data.close[0] < self.ma[0]:
self.sell()

這段簡單的邏輯,配合 cerebro.run() 回測引擎,就能跑出過去 10 年的績效曲線。

4. 避雷指南:別被回測騙了

雖然標題很聳動,但身為量化專家,必須提醒幾個新手最常犯的致命錯誤:

  1. 未來視偏差 (Look-ahead Bias): 你的代碼是否在「今天開盤」時就用到了「今天收盤價」來決定買賣?這是回測績效好到飛天,實單卻虧成狗的主因。務必使用 next() 函數逐日推進,嚴格隔離未來數據。

  2. 過度擬合 (Overfitting): 如果你為了讓績效好看,把參數調成 ma_period=63, rsi_period=13.5 這種奇怪的數字,那你只是在「背答案」,而不是在預測未來。參數應該要有普適性(例如 20, 60, 100 這種整數)。

  3. 忽略交易成本: 台股交易稅 0.3% 加上手續費,頻繁進出會吃掉大量獲利。Backtrader 允許你設定 commission,請務必設為 0.004 (0.4%) 以上來模擬真實環境。

5. 結論:它不是印鈔機,是「紀律」的極致

這套系統之所以強大,並不是因為它用了多高深的 AI 模型(其實只是簡單的統計學),而是因為它排除了人性。在 2022 年股災時,人類會因為恐懼而砍在阿呆谷,或因為貪婪而死抱虧損股;但機器人只會冷血地執行:「跌破均線,賣出。」

在這個 AI 2026 趨勢爆發的年代,學會 Python 不一定能讓你馬上財富自由,但它能給你一把對抗市場波動的數據武器。想當韭菜還是鐮刀?也許就差在這幾行代碼裡。