離線回測

離線跑 PineScript 回測,用自己的資料

PineForge 將 PineScript v6 轉成原生 C++,透過 Docker 在你本機執行。Local-first、位元可重現,Docker 能跑的地方就能跑。自備 OHLCV CSV。

為什麼離線?

瀏覽器回測適合圖表旁快速試錯。離線回測是下一步要押資金時該拿的:需要稽核軌跡、CI 要擋每次 commit、兩個月前的結果今天要逐位元重現。

離線回測給你瀏覽器測試器做不到的:結果是 位元級可重現 — 同輸入、同輸出、每次皆然。你釘引擎版本、把結果 commit、在版本間 diff 成交列表,並在 CI 流水線無頭執行全套。餵進去的 CSV 是你的;跑的二進位在本機;拿回來的報告可稽核。

離線解鎖的實務清單:釘版本引擎讓兩個月前的 commit 今日仍產出同一成交列表;自訂資料 ingest 可對交易所報價重建、資料商的 point-in-time 股價、或任何能序列成 OHLCV 的另類資料測試;CI 整合讓迴歸在進生產前就擋 build;多券商可攜因策略邏輯不受平台綁死 — 它就是一份檔案。

若你曾要跟同事分享回測結果,卻發現只能「截圖圖表」— 你缺的就是離線執行。

怎麼跑

三步。從 Pine 原始碼到 JSON 成交報告,首次全流程不到兩分鐘,之後每次不到三十秒。

步驟 1 — 拉下 runtime。 一個 container image。免 pip、免 key、免註冊 — transpile 和回測都在裡面離線完成。個人交易免費。

步驟 2 — 把你的 Pine 轉成 C++。 用 transpile-only 模式跑這個 container,它就會在本機把你的 PineScript v6 轉成一份完整的 C++ 原始檔。執行時不跑任何 Pine 直譯器 — engine 直接把它編成原生機器碼。

docker run --rm --network=none \
  -e PINEFORGE_TRANSPILE_ONLY=1 \
  -v "$(pwd)/my_strategy.pine":/in/strategy.pine:ro \
  ghcr.io/pineforge-4pass/pineforge-engine:latest > strategy.cpp

步驟 3 — 回測。 把你的 OHLCV CSV 跟產生的 C++ 一起掛載進去,再跑這個 container。engine 會讀資料檔、逐棒執行策略,再把 JSON 報告寫到 stdout。

docker run --rm --network=none \
  -v "$(pwd)/strategy.cpp":/in/strategy.cpp:ro \
  -v "$(pwd)/ohlcv.csv":/in/ohlcv.csv:ro \
  ghcr.io/pineforge-4pass/pineforge-engine:latest > report.json

JSON 含完整成交列表(進出價、棒索引、部位大小)與摘要區塊(淨損益、最大回撤、總成交、獲利因子、Sharpe)。同一大版本內 patch 欄位穩定 — 適合腳本解析。

流程就這樣。無 GUI、無反覆登入、無載圖。會跑 Docker,就會跑 PineForge 離線回測。

能回測什麼

簡答:任何能序列成 OHLCV 的東西。PineForge 不接行情商。你帶資料;engine 跑策略。

來自交易所的加密資產。 從 Binance、Bybit、Kraken 或任何 REST/WebSocket 交易所拉原始成交。聚合成策略時間框架。直接餵 CSV。用你實際會交易的商品與場所組合測試。

資料商的個股。 Polygon、Norgate、BarChart、Tiingo — 選來源,匯出 point-in-time 調整價,用你的實際成交與無存活者偏誤 universe 回測。

報價重建。 有 Level 2 想在合成 1 秒棒(由報價重建)上測,可以。從報價生成 OHLCV 再餵入。engine 不在乎棒從哪來。

另類資料。 情緒分數、鏈上指標、資金費率、選擇權 skew — 只要能對齊棒索引表達成時間序列,就能透過自訂資料欄塞進 Pine 並離線測試。

畫廊內 246 支參考題庫對 TradingView CSV(對齊驗證)與自訂 CSV(迴歸)皆跑過回測。246 支中 245 支落在標準的 strict-excellent 級(比較窗口內 PnL drift ≤ 0.5%)。剩下 1 支為 TV 端異常 — 圖表狀態非決定性,深入分析後追到 TradingView 自身狀態。0 個真正的 engine bug。

開始使用