なぜ作ったか PineForge.
選ばなかった3つの道。2年かけて詰め続けたStrongティアの2ケース。そして確信——PineScriptにはプロダクション級のランタイムが必要です。
なぜオフラインの再現性が必要か
Pine戦略の多くはTradingView上で生まれる。それは当然で、チャートを見ながら即座に試せ、コミュニティも大きく、シェアも簡単だ。ただ、TradingViewにはオフラインランタイムが存在しない。エンジンのバージョンをピン留めできず、CIでバックテストを走らせられず、別のマシンでトレードリストをビット単位で再現することもできない。
チャートのアイデアを眺めるだけなら、それで十分だ。しかし本物の資金を背負う戦略を構築するなら、そのすべてが重要になる。「ブラウザで数値が見えた」と「監査証跡がある」の間にある溝を、Pine言語を手放さずに埋めることが、私たちの出発点だった。
なぜPyneCoreにコントリビュートしなかったか
PyneCoreは最も野心的なオープンソースPineScriptエンジンだ。私たち自身もセカンドオピニオンとして活用しており、構築したすべてをアップストリームに送ることも検討した。しなかった理由は2つある:
- ランタイムモデル。 PyneCoreはPineをPythonで解釈実行する。PineForgeはPineをC++にトランスパイルして`.so`にコンパイルする。速度もパリティのトレードオフも配布の話も、根本的に異なる。どちらが正しいというわけではないが、両者を組み合わせるには両方を書き直す必要がある。
- 配布。 コンパイル済み`.so`があれば、販売者はソースを見せずに購入者へ戦略を配布できる。それがマーケットプレイスの構想(2027年設計)だ。PyneCoreのロードマップにはなく、あるべきでもない。別のプロダクトだから。
PyneCoreはセカンドソースとして位置づけています。PineForgeの各リリースでは、PyneCoreとTradingViewの両方に対してパリティスイープを実行しています。Excellentティアの達成率が十分に高いため、2つのエンジンが食い違うときは、どちらかにバグがあるとほとんど言い切れます。多くの場合は当方側です。
なぜBacktraderを拡張しなかったか
BacktraderはPythonアルゴトレーディングの定番で、堅牢で愛されているツールだ。ただ、この用途には形が合わない。Python標準のバックテストフレームワークであり、カスタム戦略クラスをサポートするが、Pineは異なる言語で異なるセマンティクスを持つ。`request.security()`のルックアヘッド、バー内の注文処理、`oca_name`による決済グループは、Pythonをいくら書いても再現できない。
そして繰り返しになるが、Backtraderの戦略はPythonソースであり、Pythonソースとして配布される。コンパイル済みバイナリのマーケットプレイスには、デプロイ可能なアーティファクトを生成するトランスパイルステップが必要であり、Backtraderはそのインターフェースを持っていない。
245/246を追い続けた話
最初は9戦略、厳密パリティ76%だった。2年後には246戦略、245戦略が厳密パリティに達した。76%から99.6%への道はコード生成を増やすことで作られたのではなく、何週間もかけて小数点4桁の差異を1件ずつ追い続けることで作られた。
その多くの週は、TradingViewが「exit」「fill」「trail」という言葉をどう定義しているかを正確に突き止めることに費やされた。PineのドキュメントはAPIを説明するが、注文処理の細かいセマンティクスはトレードリストをバーごとに差分を取って初めて見えてくる。それを繰り返し、自分たちの結果とリファレンスが食い違う理由を問い続け、差異を1件ずつ解消してきた。
残る1件はTV側の非決定性として深掘り解析済みだ — Apr 5–14の特定ウィンドウにおけるチャート状態の非決定性(Supertrendの<code>var direction</code>)。当初3件あった非決定性のうち2件(ブローカー側マージン境界でのオーバーシュート、セッション境界で<code>time()</code>がnaを返す挙動)はクリーンルーム再実装によって解消された。残る1件はTradingView側の状態から再現でき、エンジン側のロジックはPineのセマンティクスに照らして正しい。エンジン側のバグはゼロだ。
今後の予定
2026年Q3: Optuna連携をリリース。Sharpe、ドローダウン、プロフィットファクター、あるいは独自のPythonラムダ式など、任意の1行目的関数でどんな戦略でも最適化できます。ウォークフォワード分析を標準搭載し、アウトオブサンプルは後付けではなくデフォルトです。
2026年Q4: ホスト型Studioをローンチ。プロジェクトワークスペース、バックテスト、最適化、比較、ペーパートレード — すべてブラウザ上で、今日CLIでローカル実行している同じ`.so`を使って動く。Wave-1アクセスは先行アクセスウェイトリストの登録者に優先して提供。
2027年: マーケットプレイスを開設。販売者がコンパイル済み`.so`バイナリを、販売者自身が設定したライセンス条件(期限、マシン、ブローカー、シンボル、入力範囲)で公開できる。購入者は自分のデータで実行し、ソースは見えない。MQL5で機能した配布モデルと同じ — ただし戦略はPineで書かれ、ランタイムは監査可能で、ライセンスは失効できる。
手作業では埋められない1%
パリティエンジンの多くは、進捗が9割を過ぎたところで手が止まります。残り1割は地味で骨が折れ、キラ舞台ではありません。それでも二つのトレードリストが0.0001でも食い違う理由を説明できるチームだけが、最後まで仕上げられます。
それがこのチームの強みであり、規律であり、実資金を載せうるランタイムである理由です。