全端開發2026

LazyBacktest

台股輕量回測系統,React 網頁介面整合 6 種技術指標策略、網格搜尋參數最佳化和 9 項績效指標分析。

LazyBacktest

專案概述

LazyBacktest 是一個全端 Web 應用,用於回測台股(TWSE)交易策略。React 前端讓用戶選擇股票代號、日期範圍、策略和參數,並以資產曲線、年/月報酬率熱力圖和 9 項關鍵指標(CAGR、最大回撤、Sharpe、Sortino 等)視覺化結果。FastAPI 後端獲取歷史價格資料(本地 DB 快取 → yfinance → CSV 備援),執行回測,並支援以 Sharpe Ratio 排序的網格搜尋參數最佳化。

技術挑戰與解決方案

策略抽象設計

各策略(SMA、RSI、MACD、KD、布林帶、價格突破)的信號邏輯不同,但回測引擎需要統一的介面。

解決方案:
設計帶有抽象 generate_signals() 方法的 Strategy 基類,各策略分別實作。回測引擎統一呼叫 generate_signals(),並套用倉位大小和資金管理,讓新增策略非常直觀。

網格搜尋參數最佳化

透過手動試誤找到最佳參數組合(如 SMA 快/慢週期)既繁瑣又不可靠。

解決方案:
實作網格搜尋引擎,對用戶定義範圍內的所有參數組合進行窮舉測試,每種組合執行完整回測,並以 Sharpe Ratio 排序結果。前端顯示前 N 個組合供比較。

歷史資料可靠性

yfinance API 呼叫可能失敗或返回不完整資料,尤其是已下市的台股代號。

解決方案:
實作三層資料來源策略:先查詢本地 PostgreSQL 快取,快取未命中時備援至 yfinance,對已知 API 問題的代號最終備援至本地 CSV 檔案。結果回寫快取以加速未來查詢。

系統架構

前端:React 18 + TypeScript + Vite + TailwindCSS + Recharts,Docker + Nginx 部署。後端:Python 3.11+ + FastAPI + SQLAlchemy(ORM)+ Alembic 遷移 + Pandas/NumPy 計算 + yfinance 市場資料 + PostgreSQL(正式)/ SQLite(測試)+ Redis 快取。一鍵啟動:docker-compose up --build。

學習與心得

建立 LazyBacktest 深化了我的量化金融知識和 Python 資料處理技能。設計帶有解耦進出場邏輯的策略抽象層,讓新增策略變得直觀。使用 pytest TDD 和嚴格的 Mypy 型別檢查早期發現邊緣案例,讓金融計算邏輯更可靠。

技術棧

前端

React 18TypeScriptViteTailwindCSS

資料視覺化

Recharts

後端

Python 3.11+FastAPISQLAlchemyAlembic

資料分析

PandasNumPy

金融資料

yfinance

資料庫

PostgreSQLRedisSQLite (test)

部署

Docker ComposeNginx