需求
用歷史資料測試投資策略,結果往往看起來很亮眼,原因是它們不動聲色地用到了當時根本沒有人知道的資訊。
構想
圍繞陷阱、而不是圍繞策略,來打造這個實驗室。
我打造了什麼
- 以某一天收盤價計算出的規則,只套用到隔天的報酬——絕不套用在同一天。
- 每次變更部位,都計入 0.05% 的手續費。
- 每條規則都會與「一開始買進、之後什麼都不做」比較:市場上漲 20% 時只賺 8% 的策略,其實是損失了價值。
- 兩道安全鎖:交易網址被寫死為模擬環境,而且程式只能讀取——完全沒有辦法下單。
成果
- 3Python 模組
- 453行程式碼
- 11每次測試計算的指標
- 0能下的委託單數——刻意設計
目前還沒有自動化測試,也沒有可以展示的、以真實模擬交易金鑰執行的紀錄。這是用來理解機制的工具,不是用來做投資決策的。
畫面一覽
我學到了什麼
在歷史資料上嘗試夠多種組合,總會有一種看起來曾經奏效。了解一項測試的極限,本身就是結果的一部分。
技術細節 技術堆疊、架構與決策——給技術背景的讀者
技術堆疊
- Python
- Streamlit
- pandas
- NumPy
- requests
- Alpaca API(模擬交易)
運作方式
- 在 D 日收盤時計算的訊號,套用到 D+1 日的報酬;每次變更部位成本 0.05%;一律以「買進並持有」作為比較基準。
- 兩條可測試的規則——移動平均線交叉,以及突破前高——使用一到五年的美股每日價格。
- 交易 API 的基礎 URL 在程式碼中寫死為 Alpaca 的 paper-api 模擬環境(無法設定);用戶端為唯讀,沒有任何下單功能;金鑰只從環境變數讀取。
- 資料缺漏時(沒有金鑰、401/403、超過請求次數上限),Streamlit 介面會顯示原因,而不是一個預設數字。
- 已知偏差:進場價格是以產生訊號當天的收盤價計算,而非下一個開盤價,因此包含了隔夜跳空。
仍待補強
- 尚無自動化測試
- 不是投資工具