コンテンツにスキップ

TradingView への Pine Script 反映

alpha-forge pine generate で生成した .pine ファイルを TradingView に貼り付けてアラートを設定します。

発注連携まで一気に: --with-webhook

alpha-strike への自動発注まで繋ぐ場合は alpha-forge pine generate --strategy <id> --with-webhook で生成してください。input.stringpassphrase=REPLACE_ME / confirm=true)+ make_payload() + alert() が配線済みの Pine が出力され、手書きで alert() を組む必要がなくなります。下記アラート手順で Message 欄を空のまま Webhook URL を指定するだけで発注ブリッジが完成します(ペイロード仕様・受信側設定は TradingView と alpha-strike の連携)。

1. Pine エディタを開く

TradingView でチャートを開き、画面下部の「Pine エディタ」タブをクリックします。

2. スクリプトを貼り付ける

生成した .pine ファイルの内容をエディタに貼り付け、「スクリプトを追加」(▶ ボタン)をクリックします。

3. アラートを設定する

チャート右上のベルアイコン(アラート)→「アラートを追加」をクリック。

  • 条件: 追加したスクリプト名を選択
  • Webhook URL: チェックを入れ、alpha-strike のエンドポイントを入力
  • メッセージ: 後述の JSON ペイロードを入力(alpha-strike 連携ガイド 参照)

4. アラートメッセージのヒント

Pine Script 内でシグナル変数(例: longSignal)を定義しておくと、アラートの条件設定が簡単になります。

// Pine Script 内でのアラート定義例
longSignal = ta.crossover(ema_fast, ema_slow)
shortSignal = ta.crossunder(ema_fast, ema_slow)
alertcondition(longSignal, title="Long Entry", message="long")

次のステップ

Webhook 受信側の設定は TradingView と alpha-strike の連携 を参照してください。


4.5 Pine v6 出力の自動検証(issue #786)

alpha-forge pine generate / pine preview は、出力した Pine スクリプトに対して内部の Pine v6 シグネチャ DB と照合する post-generate validator を自動で走らせます。Pine v6 で廃止された引数(例: strategy.exit(trail_percent=...) / strategy.entry(allow_short=...))や typo を検出し、TradingView Pine Editor に貼り付ける前に CLI 段階で停止します。

  • エラー(exit code 2): 廃止引数 / 未知引数を検出した場合。問題箇所が行番号付きで stderr に表示されます。
  • 警告のみ: DB 未登録の v6 関数を検出した場合は warning にとどまり、コマンドは正常終了します(false positive 抑止のため)。
  • 緊急バイパスが必要な場合は --no-validate フラグでスキップ可能ですが、TradingView 上で syntax error になる可能性が高いため、原則として戦略 JSON や生成器側の修正を優先してください。

_optimized 接尾辞について

以下の例で使う sma_crossover_v1_optimized は、alpha-forge optimize apply <result.json> --to-strategy sma_crossover_v1 を実行したときに CLI が自動で登録する ID です。apply 直前のベース ID が <base> なら、登録される最適化済み戦略 ID は <base>_optimized になります(--to-strategy には接尾辞なしのベース ID を渡してください)。

# 通常の生成(validator 自動実行)
alpha-forge pine generate --strategy sma_crossover_v1_optimized

# 緊急時のバイパス
alpha-forge pine generate --strategy sma_crossover_v1_optimized --no-validate

シグネチャ DB (alpha_forge/pinescript/v6_signatures.yaml) は strategy.* / ta.* / input.* / request.security の主要 API をカバーしています。Pine v6 の API 変更や生成器の新規対応に応じて更新されます。


4.6 Pine 出力に期間フィルタを焼き込む(issue #823)

--backtest-period 'YYYY-MM-DD:YYYY-MM-DD' を指定すると、Pine 出力の冒頭に in_backtest_period = time >= timestamp("from") and time <= timestamp("to") 変数を宣言し、すべての entry condition に and in_backtest_period を AND します(exit には付与しない)。

alpha-forge pine generate --strategy sma_crossover_v1_optimized \
  --backtest-period 2022-01-01:2024-12-31

用途: TradingView の Strategy Tester は Date Range UI が有料プラン(Premium 以上)依存で、Essential プランでは Custom date range の自動変更が動かないケースがあります。Pine 側に期間ガードを焼き込めばこの問題を完全に回避でき、scripts/tv_cross_validate.py update --from/--to 経由でも自動的にこの方式が使われます。

実機検証 (TradingView Essential プラン、SPY 2022-01-01~2024-12-31):

戦略 alpha-forge trades TV trades (修正前) TV trades (本機能適用後)
sma_crossover_v1 17 207 17 (完全一致)
bollinger_mr_v1 69 1317 128 (90% 縮減)

設計: exit にはガードを入れないため、period 終了時に open している position は通常 exit ロジックでクローズします。


4.7 SL/TP 戦略の intra-bar fill 差(issue #827)

risk_management.stop_loss_pct / take_profit_pct を持つ戦略では、alpha-forge と TV で trade 数の解釈が異なります。これは backtest engine の仕様差で、利用者として事前に知っておく必要がある制約です。

  • alpha-forge (vectorbt) は SL/TP を 次バー close fill で約定
  • TVstrategy.exit(stop=..., limit=...)毎バー intra-bar fill で約定(high/low が水準に触れた瞬間に同バー内で約定)

同じ Pine スクリプトでも TV の trade 数が alpha-forge より大幅に増える傾向があります。

戦略 SL/TP alpha-forge TV
sma_crossover_v1 なし 17 17 0% (完全一致)
bollinger_mr_v1 あり (2%/4%) 69 128 86%

比較指標の信頼度:

指標 intra-bar fill 影響 解釈
win_rate_pct 高信頼
profit_factor 高信頼
total_trades 要注意
total_return_pct 要注意

bollinger_mr_v1 の win_rate は 41.18% (alpha) vs 41.41% (TV) と 0.23pp 差で signal 品質は同一、trade 数だけがペアの数え方差で 1.86x ズレることが確認できます。

自動切替: --tolerance-profile auto (alpha-forge issue #828)

SL/TP 戦略を cross-validation する際は、scripts/tv_cross_validate.py check--tolerance-profile auto(既定)で許容差分プロファイルが自動切替されます。

scripts/tv_cross_validate.py はソースリポジトリ専用

scripts/tv_cross_validate.py および golden fixture(tests/fixtures/tv_golden/)は alpha-forge のソースリポジトリにのみ含まれ、配布バイナリには同梱されません。配布バイナリ版を利用している場合、本節のコマンドはそのままでは実行できません(cross-validation は alpha-forge のソースを clone した開発環境で行ってください)。

# alpha-forge ディレクトリで実行
uv run python scripts/tv_cross_validate.py check \
  --strategy bollinger_mr_v1 --symbol SPY \
  --golden tests/fixtures/tv_golden/bollinger_mr_v1__SPY__1d.json
# auto (既定): 戦略 JSON の risk_management から SL/TP / trailing 有無を判定
#   → sl_tp profile が自動で適用される
profile total_trades win_rate total_return profit_factor 用途
default ±20% ±5pp ±15pp ±0.30 event-based (SL/TP 無し) 戦略
sl_tp ±100% ±5pp ±20pp ±0.50 SL/TP / trailing 戦略 (intra-bar fill 差を吸収)
auto (既定) 戦略 JSON から判定

total_return の単位 (alpha-forge #828 follow-up)

total_return_pct は当初 相対 % 差 で判定していましたが、alpha=-4.22 / tv=2.15 のような sign 反転 + 小さい分母 で相対差が暴騰する問題が判明し、絶対 pp 差に変更されました(PR #834)。これにより bollinger_mr_v1 (alpha 69 vs TV 128 trades) が 4/4 PASS で overall_pass=True になります。

auto の判定は risk_management.stop_loss_pct / take_profit_pct / trailing_stop_pct のいずれかが設定されていれば sl_tp profile、無しなら default profile。明示指定 (--tolerance-profile sl_tp 等) と個別フラグ (--total-trades-rel-pct 200.0 等) で override も可能です。


5. Pine Script を MCP server で検証する(issue #523)

有料プラン限定

alpha-forge pine verify有料プラン(Lifetime / Annual / Monthly)でのみ利用できます。Trial プランでの制限は Trial 制限 を参照してください。

alpha-forge pine verify を使うと、生成した Pine Script を TradingView Desktop + サードパーティ MCP server に投げて検証できます。コンパイル可否だけでなく、Strategy Tester のメトリクスや個別トレードを alpha-forge のバックテストと比較し、Pine 変換の正確性を機械的に確認できます。

5.1 前提セットアップ

  1. TradingView Desktop を --remote-debugging-port=9222 で起動
  2. サードパーティ MCP server を別プロセスで起動:
  3. tradesdontlie/tradingview-mcp — コンパイル検証・チャート操作向け
  4. oviniciusramosp/tradingview-mcp(vinicius fork)— Strategy Tester 集計に強い。metrics / signal モードでは こちら推奨
  5. forge.yaml でエンドポイントと flavor を設定:
tv_mcp:
  pine_verify:
    enabled: true
    endpoint: "node /opt/tv-mcp/server.js"
    runtime: node
    flavor: vinicius     # metrics/signal を使うなら vinicius
    timeout_seconds: 60

5.2 verify モード一覧

モード 検証内容 推奨 flavor
compile_only Pine Script の構文・コンパイルだけ tradesdontlie で十分
metrics TV Strategy Tester の集計(PF・勝率・トレード数等)と alpha-forge のメトリクスを比較 viniciustradesdontlie には data_get_strategy_results バグあり)
signal tradesdontlie: TV のトレードリストを alpha-forge trades と時刻ベースで突合し一致率を算出。
vinicius: 時刻情報を返さないため count-based 比較(件数のみ)に自動切替(issue #580)
tradesdontlie(時刻照合が必要なら) / vinicius(件数だけで十分なら)
regime 未実装(保留中) — upstream MCP server に時系列 study tool が無いため、HMM 状態列を bar 単位で取り出せない(issue #581)。指定すると明示的エラーで停止する

5.3 ワークフロー

# 1. コンパイル可否のみ確認(最速)
alpha-forge pine verify --strategy spy_sma_v1 \
  --mcp-server "node /opt/tv-mcp/server.js"

# 2. Strategy Tester メトリクス比較(vinicius 推奨)
alpha-forge pine verify --strategy spy_sma_v1 \
  --check-mode metrics \
  --symbol SPY --interval D \
  --mcp-server-flavor vinicius \
  --auto-backtest \
  --output reports/verify_spy.md

# 3. トレード単位で時刻一致を見る(誤差±60 秒、95% 一致を要求)
alpha-forge pine verify --strategy spy_sma_v1 \
  --check-mode signal \
  --symbol SPY --interval D \
  --mcp-server-flavor vinicius \
  --auto-backtest \
  --match-tolerance-seconds 60 \
  --min-match-rate 0.95

5.4 期間ミスマッチを避けるヒント

metrics モードで total_trades の差が大きいときは、データ期間のミスマッチ(yfinance ~5 年 vs TradingView 数十年)が原因のことが多いです。長期バックテストを TV 側に揃えたい場合は、データ取得を TradingView MCP に切り替えてください:

alpha-forge data fetch SPY --provider tv_mcp \
  --mcp-server "node /opt/tv-mcp/server.js" --period max

詳細は alpha-forge data コマンドリファレンス を参照してください。

5.5 出力レポート

--output reports/xxx.md を指定すると、Markdown レポートに以下が含まれます:

  • 戦略 ID と検証モード
  • 比較メトリクス表(alpha-forge ↔ TradingView)
  • 不一致の検出(許容誤差を超えた項目)
  • 判定(PASS / FAIL)と推奨アクション

alpha-forge journal report --with-chart --symbol SPY --interval D と組み合わせると、戦略履歴 + 検証結果 + TV チャート画像を 1 ページで確認できます。