PineScriptバックテストをオフラインで、自分のデータに対して実行する
PineForgeはPineScript v6をネイティブC++にトランスパイルし、Dockerを通じてローカルマシンで実行する。ローカルファースト、バイト単位で再現可能、Dockerが動く環境ならどこでも。OHLCV CSVは自分で用意する。
なぜオフラインか
ブラウザベースのバックテストはチャートを見ながら試行錯誤するには最適だ。オフラインバックテストが必要になるのは、戦略に本物の資金を投じる次のステップに進むとき — 監査証跡が必要なとき、コミットのたびにCIがゲートしなければならないとき、2ヶ月前の結果を今日ビット単位で再現しなければならないとき。
オフラインでバックテストを実行することで得られるのは、ブラウザベースのテスターには提供できないもの:結果が バイト単位で再現可能 — 同じ入力、同じ出力、毎回。エンジンのバージョンをピン留めし、結果をリポジトリにコミットし、コミット間でトレードリストを差分比較し、CIパイプラインでヘッドレスに実行できる。与えるCSVは自分のもの、動かすバイナリはローカル、受け取るレポートは監査可能だ。
オフラインで得られる実益の例:エンジンのバージョンをピン留めすれば、2か月前のコミットでも今日と同じトレードリストが得られる;カスタムデータ取り込みにより、自社取引所のティック再構成、データベンダーのポイントインタイム調整済み価格、OHLCVにシリアライズできるオルタナティブデータまで検証できる;CI連携によりリグレッションを本番投入前にビルドで検知できる;戦略ロジックが単一ファイルとしてプラットフォームに縛られないため、マルチブローカーでの持ち運びもしやすい。
バックテスト結果を同僚と共有する必要が生じて、共有する唯一の方法がチャートのスクリーンショットだと気づいたことがあるなら — オフライン実行こそが足りないものだ。
仕組み
3つのステップ。PineソースからJSONトレードレポートまでの完全なワークフローは、初回は2分未満、2回目以降は30秒未満で完了する。
ステップ1 — ランタイムを取得。 コンテナイメージ1つ。pipもキーもサインアップも不要 — トランスパイルもバックテストもその中でオフラインに動きます。個人トレードなら無料です。
ステップ2 — PineをC++へトランスパイル。 コンテナをトランスパイル専用モードで実行すると、お手元でPineScript v6を完結したC++ソースファイルへ変換します。実行時にPineインタプリタは一切動かず、エンジンがネイティブマシンコードへコンパイルします。
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++と並べてマウントし、コンテナを実行します。エンジンがデータファイルを読み込み、戦略をバーごとに実行し、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比などのサマリーブロックが含まれます。各フィールドは同一メジャーバージョン内のパッチでは安定しており、スクリプトからパースして問題ありません。
これがワークフローのすべてだ。GUIなし、アカウント再認証なし、チャート読み込みなし。Dockerが動くなら、PineForgeのオフラインバックテストが動く。
バックテストできる対象
短い答えは:OHLCVとしてシリアライズできるものなら何でも。PineForgeはどの市場データプロバイダーとも接続していない。データを持ち込み、エンジンが戦略を動かす。
ご利用取引所のマーケットデータ(暗号資産)。 Binance、Bybit、Kraken、あるいはRESTやWebSocket APIを持つ任意の取引所から生のトレードデータを取得する。戦略が使う時間足に集約し、CSVを直接与える。実際にトレードするペアと取引所の組み合わせでテストできる。
データベンダーの株式。 Polygon、Norgate、BarChart、Tiingo — ソースを選び、ポイントインタイムの修正済み価格をエクスポートし、実際の約定と生存バイアスなしのユニバースでバックテストを実行する。
ティック再構成。 Level 2データがあり、ティックから再構成した合成1秒足でテストしたい場合も可能だ。自分のティックデータからOHLCVを生成して渡せばよい。エンジンはバーがどこから来たかを知らないし、気にしない。
オルタナティブデータ。 センチメントスコア、オンチェーン指標、ファンディングレート、オプションのスキュー — バーインデックスに揃えた時系列として表現できれば、Pineのカスタムデータカラムとしてオフラインでテストできます。
ギャラリー内の246戦略参照スイートは、TradingViewのCSVエクスポート(パリティ検証用)とカスタムCSVデータセット(リグレッションテスト用)の両方に対してバックテストされた。246戦略中245戦略がカノニカルなstrict-excellentティア(比較ウィンドウでのPnLドリフト0.5%以下)に到達。残る1件はTV側の非決定性として深掘り解析済みで、TradingView側の状態に起因する。エンジン側のバグはゼロだ。