Hamdy Tabsissi
繁體中文

交易實驗室 實驗環境 個人專案

不用真錢,誠實地檢驗投資規則

一個小工具,用過去的市場資料測試簡單的投資規則——設計上既無法作弊,也無法真的下單。

需求

用歷史資料測試投資策略,結果往往看起來很亮眼,原因是它們不動聲色地用到了當時根本沒有人知道的資訊。

構想

圍繞陷阱、而不是圍繞策略,來打造這個實驗室。

我打造了什麼

  • 以某一天收盤價計算出的規則,只套用到隔天的報酬——絕不套用在同一天。
  • 每次變更部位,都計入 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 介面會顯示原因,而不是一個預設數字。
  • 已知偏差:進場價格是以產生訊號當天的收盤價計算,而非下一個開盤價,因此包含了隔夜跳空。

仍待補強

  • 尚無自動化測試
  • 不是投資工具