strategy.pine自分で書いた戦略。渡せば、すべてを渡すのと同じ。strategy.cppトランスパイラが戦略から生成するC++。手元で今すぐ。strategy.so購入者が実行するバイナリ。ライセンス機能は計画中。
バイナリ配布モデル
構想はこうです。PineScript v6をネイティブの.soライブラリにコンパイルし、購入者はソースを見ることなく自分のデータで実行し、ライセンスの制限は販売者自身が設定します。ただし、まだ何も実装されていません。
今日Pine戦略を販売することの問題は、Pineがソースコードであるという点に尽きる。誰かに.pineファイルを渡せば、ロジックもパラメータもエッジも、すべてを渡したことになります。購入者がそれを改変したり、転売したり、公開したりするのを止める手段はありません。TradingViewでは公開スクリプトのソースを非表示にできますが(保護スクリプトと招待専用スクリプト)、その場合スクリプトはTradingView上でしか動きません。
MetaQuotesはMQL5でコンパイル方式を採用しました。MQL5マーケットでは、.ex5バイナリを販売します。購入者はコンパイル済みのファイルをダウンロードし、ソースを見ることなく、MetaTraderで自分の口座に対して実行します。ライセンスは購入者のマシンに紐付けられ、アクティベーション数は販売者が設定します。配信と支払いはマーケットプレイスが処理します。
PineForgeは、同じモデルをPineに適用することを計画しています。戦略はC++にトランスパイルされ、.so共有ライブラリにコンパイルされます。これが配布物になります。購入者はPineForgeのランタイムを使って自分のデータで実行し、ランタイムは実行前にライセンスを確認する想定です。ライセンスサーバーはまだ存在しません。
トランスパイルとコンパイルは、現在すでにローカルで実行できます(pineforge-releaseイメージ)。そのため、ソースが手元のマシンから出る必要はありません。コンパイル済みのライブラリはネイティブのマシンコードで、Pineよりはるかに読みにくくなりますが、本気で解析しようとするエンジニアなら、ロジックをリバースエンジニアリングすることも可能です。
MQL5マーケットは、2011年からこのモデルで運営されています。PineForgeは、同じモデルをPineで実現するためのインフラとなる構想です。
計画中のライセンス制限
計画では、戦略を公開する際に販売者がライセンスを定義し、ランタイムがそれを適用します。制限は次の6つです。
- 期限付き。
- ライセンスは指定した日に失効します。たとえば、支払いのたびに更新する月額サブスクリプションに使えます。
- マシン紐付け。
- ライセンスは1台のマシンに紐付けられ、別のマシンに移すには販売者の承認が必要です。
- ブローカー紐付け。
- ライセンスは、指定したブローカーや取引所のデータでのみ有効です。
- シンボル紐付け。
- ライセンスは許可したシンボルと時間足でのみ有効なため、1時間足のBTC-USD向けに作った戦略が、ほかの市場で評価されることはありません。
- 入力範囲紐付け。
- 購入者が入力パラメータを調整できるのは許可した範囲内だけなので、正確なパラメータは非公開のままです。
- いつでも失効。
- チャージバックの後などに、ライセンスを失効させることができます。次回のライセンス確認が失敗し、戦略は実行されなくなります。
計画の概要については、/sellページ。
提供開始日は未定
率直に言うと、マーケットプレイス(閲覧、購入、サブスクリプション、評価、紛争対応)は計画段階で、提供開始日は決まっていません。必要となるライセンスサーバー、販売者向けツール、支払い機能は、まだ存在しません。
現状は次のとおりです。
- 現在:ローカルでコンパイル。pineforge-releaseイメージは、対応しているPine v6の戦略であれば、お手元のマシンでトランスパイルとコンパイルを行います。パイプラインのこの部分は実際に動いています。
- 計画中:ライセンス機能。ライセンスの発行と、ランタイムでのライセンス確認。
- 計画中:マーケットプレイス。出品された戦略の検索、支払い、評価、パリティレポート。
すでにオーディエンスに向けて戦略を販売していて、この仕組みを使いたい方は、販売者向けウェイトリストにご登録ください。最初にお話しする相手を決める参考にします。