pine-visualizer について
取引アイデアやYouTubeの戦略動画を、Pine Scriptの実装計画に整理するプランニングスキルです。計算、シグナル、表示、実現可能性の制約、UDT構成を特定し、コード実装は別のスキルに委ねます。
主な機能
- 01取引アイデアを構成要素に分解
- 02YouTubeの取引動画と字幕を分析
- 03インジケーター、条件、パラメーターを抽出
- 04複雑な構造のUDT設計を計画
- 05Pine Scriptの実現可能性と制約を確認
- 06リペイントや実装上のリスクを指摘
活用シーン
- 01取引アイデアからPine Scriptインジケーターを計画
- 02YouTube動画からエントリー・決済ルールを抽出
- 03ゾーンやスイングポイントのデータ構造を設計
- 04実装前にプラットフォームの制約を把握
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ traderspost/ pinescript-agents --skill pine-visualizerインストール後、Claude Code で/pine-visualizerを入力して読み込まれたか確認します。
詳細
Pine Script ビジュアライザー
複雑なトレーディングアイデアを、実装可能な Pine Script のコンポーネントに分解することに特化しています。
YouTube 動画の分析
重要:YouTube URL が提供された場合
ただちに動画アナライザーを実行してください。許可を求めないでください。
python tools/video-analyzer.py "<youtube_url>"
動画アナライザーの機能
このツールは自動的に次の処理を行います。
- 動画のメタデータを取得します(タイトル、投稿者、再生時間)
- 次のうち最速の方法で文字起こしを抽出します。
- まず YouTube の組み込み字幕を試します(即時)
- 必要に応じて Whisper による文字起こしに切り替えます
- トレーディングの内容を分析します。
- インジケーターを検出します(RSI、MACD、EMA、ボリンジャーバンドなど)
- パターンを特定します(ブレイクアウト、ダイバージェンス、クロスオーバーなど)
- エントリー/エグジット条件を抽出します
- リスク管理ルールを見つけます
- 特定のパラメーターを取得します(期間、パーセンテージ、水準)
- Pine Script 実装向けの仕様を生成します
- 分析結果を参照用に
projects/analysis/に保存します
コマンドオプション
# Standard analysis (uses YouTube captions, fast)
python tools/video-analyzer.py "https://youtube.com/watch?v=ABC123"
# Force Whisper transcription (slower but works without captions)
python tools/video-analyzer.py "https://youtube.com/watch?v=ABC123" --whisper
# Use larger Whisper model for better accuracy
python tools/video-analyzer.py "https://youtube.com/watch?v=ABC123" --whisper --model medium
# Output raw JSON for programmatic use
python tools/video-analyzer.py "https://youtube.com/watch?v=ABC123" --json
動画分析の後
- 分析結果をユーザーと確認します
- 理解を確認します。抽出した概念が期待どおりか、ユーザーに尋ねてください
- 必要に応じて調整します。ユーザーは変更点を説明できます
- 実装に進みます。pine-developer スキルに引き継いでください
重要な指示
- YouTube 動画に WebSearch を絶対に使用しないでください。ローカルアナライザーを使用してください
- 許可を求めないでください。URL を検出したらただちに分析を実行してください
- 確認のため、必ず要約をユーザーに提示してください
- 文字起こしはキャッシュされます。同じ動画を再分析する場合、処理は即時です
⚠️ 重要:UDT を最優先した計画
トレーディングアイデアを分解する際は、必ず最初に UDT アーキテクチャを計画してください。
UDT を計画するケース
トレーディングアイデアに次の内容が含まれる場合は、UDT アーキテクチャを計画してください。
- 関連する複数のデータポイント(例:回帰の傾き、切片、R 値)
- 一括管理が必要な描画オブジェクト(線、塗りつぶし、ラベル)
- 類似項目のコレクション(例:スイング高値、オーダーブロック、ゾーン)
- 5000 本を超えるバーを遡る過去データ参照
UDT 計画テンプレート
トレーディングアイデアを分解する際は、次のセクションを含めてください。
UDT ARCHITECTURE:
1. Type Definition
- What fields does each instance need?
- Include time + bar_index for coordinates
- Include drawing objects as fields
2. Storage
- Single var array for collection
- Named instances for special cases (original, live, current)
3. Methods
- delete(): Clean up drawing objects
- draw(): Create visuals using xloc.bar_time
- calculateY(): If line-based calculations needed
4. Coordinate Strategy
- Store TIME when events occur (for unlimited lookback drawing)
- Store bar_index for Y calculations (slope * bar + intercept)
例:スイング高値検出器の計画
ユーザーの依頼:「スイング高値に印を付け、そこから水準線を描くインジケーターを作成してください」
UDT を最優先した分解:
UDT ARCHITECTURE:
1. Type Definition:
type SwingHigh
int detectedTime // When swing was detected
int detectedBar // For Y calculations
float price // The high price
int confirmedTime // When confirmed
line levelLine = na // Horizontal level from swing
label marker = na // Label marking the swing
2. Storage:
var array<SwingHigh> swingHighs = array.new<SwingHigh>()
var SwingHigh currentPending = na // Unconfirmed swing
3. Methods:
method delete(SwingHigh this) =>
if not na(this.levelLine)
line.delete(this.levelLine)
if not na(this.marker)
label.delete(this.marker)
method draw(SwingHigh this, color lineColor) =>
this.delete()
// Use xloc.bar_time for unlimited lookback!
this.levelLine := line.new(this.detectedTime, this.price,
time, this.price, xloc=xloc.bar_time, ...)
this.marker := label.new(this.detectedTime, this.price,
"SH", xloc=xloc.bar_time, ...)
4. Coordinate Strategy:
When swing detected:
capturedTime := time // For drawing
capturedBar := bar_index // For calculations
早い段階で指摘するべきアンチパターン
トレーディングアイデアの分析時に、次の問題点を指摘してください。
| アイデアに含まれる内容... | 指摘する問題点... | 代わりに推奨する方法... |
|---|---|---|
| 関連する複数の値 | 並行配列を使用しない | 単一の UDT 配列を使用する |
| 過去の描画オブジェクト | bar_index には 5000 の上限がある | xloc.bar_time を使用する |
| 繰り返される描画コード | DRY 原則への違反 | UDT の draw() メソッド |
| 手動での線の削除 | エラーが発生しやすい | UDT の delete() メソッド |
Pine Script v6 の 2025 年計画上の考慮事項
実装を分析して計画する際は、2025 年の次の重要な更新を考慮してください。
早い段階で指摘するべき破壊的変更
2025 年 3 月:コレクションには for...in を使用する
ループベースの実装(オーダーブロック、スイング検出、パターンスキャン)を計画する場合:
// ✅ BEST: Use for...in for arrays (safe, clean, preferred)
for element in myArray
// Process element directly - no boundary issues
// ✅ BEST: With index when needed (e.g., order blocks, swing points)
for [index, element] in myArray
// Have both index and value
// ✅ Works with matrices and maps too
for [key, value] in myMap
// Process key-value pairs
// ⚠️ FALLBACK: If traditional for needed, cache boundary
arrSize = array.size(arr) // MUST cache before loop
for i = 0 to arrSize - 1
// Process...
行継続ルール(2025 年 12 月)
- 括弧内:インデントはどの形式でも使用できるようになりました
- 括弧外:引き続き 4 の倍数以外のインデントが必要です
- 三項演算子:必ず 1 行に収めてください
可能性を広げる新機能
入力の active パラメーター(2025年7月)
ユーザー入力を計画する際は、条件付き表示を提案します。
- 追加設定を表示する「詳細モード」トグル
- 戦略モード固有の入力(該当するモードが選択されている場合のみ表示)
- 「ビジュアルを表示」が有効な場合にのみ表示されるビジュアル設定
プロットの線種(2025年9月) ビジュアライゼーションを計画する際は、線種による区別を提案します。
- 主要なシグナル:実線
- 二次的なシグナル/予測:破線
- 目標/レベル:点線
文字列の長さの拡張(2025年8月:40,960文字) より詳細な情報パネルやレポートを作成できるようになりました。
- 詳細な戦略レポート
- 複数セクションから成る分析テーブル
- 拡張されたツールチップ情報
スコープ数の無制限化(2025年2月) 複雑なネスト構造のロジックを作成できるようになりました。
- 深くネストされた型メソッド
- 複雑な複数条件の評価
- よりモジュール化された関数設計
実現可能性の評価に関する更新
実現可能な内容を評価する際は、以下を含めます。
| 機能 | 2025年の状況 | 計画時の注意点 |
|---|---|---|
| 複雑なループ | ✅ 可能 | 境界をキャッシュし、無限ループを避ける |
| 条件付き入力 | ✅ ネイティブ対応 | active パラメーターを使用する |
| ビジュアルの階層化 | ✅ 強化 | 線種で区別する |
| 長いレポート | ✅ 40K文字 | 詳細なテーブルを作成可能 |
| 深いネスト | ✅ 無制限 | 550スコープの制限なし |
| ティックデータ | ⚠️ 制限あり | bid/ask は1T時間足でのみ使用可能 |
コンポーネント計画チェックリスト
アイデアを分解する際は、以下を確認します。
UDT アーキテクチャ(最初に確認!)
- 複雑なデータ構造に対応する UDT 型を定義する
- 座標には
timeとbar_indexの両方を保存する - 描画オブジェクトを UDT フィールドに含める
-
delete()メソッドとdraw()メソッドを計画する - 並列配列ではなく、単一の UDT 配列を使用する
- 過去の描画には
xloc.bar_timeを使用する計画を立てる
コード品質
- ループベースのロジックでは
for...in(推奨)またはキャッシュ済みの境界を使用する - 条件付き入力を
activeパラメーターと組み合わせる - ビジュアル要素にスタイルの階層を設ける
- 文字列の出力を40K文字以内に収める
- スコープの複雑さが妥当である(ただし制限は設けない)
主な責務
アイデアの分解
- 取引の概念を、個別に実装可能なタスクに分解する
- 必要な計算、インジケーター、ロジックフローをすべて特定する
- 抽象的なアイデアを具体的な Pine Script の機能に対応づける
- 明確な実装ロードマップを作成する
- 実装に影響する2025年の考慮事項を明示する
コンポーネントの特定
- 必要な組み込みインジケーターを判断する
- 必要なカスタム計算を特定する
- データの入力と出力を指定する
- ビジュアライゼーションの要件(プロット、ラベル、テーブル)を定義する
ワークフローの計画
- 論理的な実装順序を作成する
- コンポーネント間の依存関係を特定する
- 起こり得る課題を予測する
- 必要に応じて代替アプローチを提案する
Pine Script の実現可能性分析
- アイデアが Pine Script の制限内で実装可能か確認する
- TradingView プラットフォームの制約を特定する
- 制約に対する回避策を提案する
- リペイントの可能性がある問題を早期に明示する
作業プロセス
概念に関する質問の場合
- ユーザーの取引アイデアを注意深く聞く
- 必要に応じて明確化の質問をする
- アイデアを以下の項目に分解する。
- 必要な入力パラメーター
- 必要な計算
- ロジック条件
- 出力/表示要件
- アラート条件(該当する場合)
- 構造化された実装計画を作成する
- TodoWrite を使用してすべてのタスクを記録する
- 実装を担当するスキルを特定する
YouTube 動画の場合
- URL を検出したら、直ちに動画アナライザーを実行する
- ユーザーに分析の概要を表示する
- 理解が合っているか確認する — 「これはご希望の内容に合っていますか?」
- 必要に応じて内容を調整する — ユーザーは調整や補足を行えます
- 確認済みの分析に基づいて実装計画を作成する
- コードの実装をpine-developer に引き継ぐ
出力形式
概念分析の場合
CONCEPT SUMMARY:
[Brief restatement of the trading idea]
UDT ARCHITECTURE:
Type: [Name]
Fields:
- int startTime, endTime // For xloc.bar_time drawing
- int startBar, endBar // For Y calculations
- [data fields] // Core data
- line/box/label [name] = na // Drawing objects
Storage:
- var array<[Type]> items = array.new<[Type]>()
- var [Type] current = na // If needed
Methods:
- delete() - cleanup drawings
- draw() - create visuals with xloc.bar_time
- [custom methods]
COMPONENTS NEEDED:
1. [Component 1]
2. [Component 2]
...
IMPLEMENTATION STEPS:
1. Define UDT type with all fields
2. Add UDT methods (delete, draw, etc.)
3. [Additional steps]
...
POTENTIAL CHALLENGES:
- [Challenge 1]
- [Challenge 2]
REQUIRED RESOURCES:
- [Template or utility to use]
動画分析の場合
動画アナライザーは、以下を含む形式化された概要を出力します。
- 動画ソース情報
- 検出されたスクリプトの種類(インジケーター/ストラテジー)
- 複雑さのスコア(1~10)
- 検出された主なインジケーターとパターン
- 抽出されたエントリー/エグジット条件
- 提案される機能
- 実装上の注意事項
主な考慮事項(2025年更新)
プラットフォームの制限
- Pine Script v6 の構文と機能(2025年の更新)
- TradingView の500本のバー遡及制限
- plot 出力の上限は500
- security() 呼び出しの上限は40
- コンパイル済みスクリプトのサイズ上限は100KB
- 文字列:最大40,960文字(2025年8月に拡大)
- スコープ:無制限(2025年2月に撤廃)
実行モデル
- リペイント防止の戦略
- リアルタイム計算と過去データ計算の違い
- アラートシステムの制約
bid/askは1T時間足でのみ利用可能(2025年2月)
構文上の考慮事項
- for ループの境界は反復ごとに再評価されます(2025年3月)
- 行継続のルール(括弧内では柔軟、括弧外では厳格)
- 三項演算子は1行に収める必要があります
例:概念の分解
ユーザー:「価格が50 EMAを上抜け、RSIが売られすぎのときに買うストラテジーがほしいです」
応答:
CONCEPT SUMMARY:
Long entry strategy using EMA crossover with RSI filter
UDT ARCHITECTURE:
(Simple strategy - UDT not required for this use case.
UDTs are best for: swing points, order blocks, zones, regressions, etc.)
COMPONENTS NEEDED:
1. 50-period EMA calculation
2. RSI calculation with oversold threshold
3. Price crossover detection
4. Entry condition logic
5. Strategy entry commands
IMPLEMENTATION STEPS:
1. Define input parameters (EMA length, RSI length, RSI oversold level)
2. Calculate 50 EMA using ta.ema()
3. Calculate RSI using ta.rsi()
4. Detect crossover with ta.crossover()
5. Combine conditions with logical AND
6. Implement strategy.entry() for positions
7. Add visual markers for entries
8. Include backtest metrics
POTENTIAL CHALLENGES:
- Repainting if using security() on higher timeframes
- Need to handle na values in early bars
- Consider position sizing and risk management
REQUIRED RESOURCES:
- templates/strategies/trend-following/ema-cross.pine
- templates/utilities/risk-management/position-size.pine
例:UDT が必要な分解
ユーザー:「オーダーブロックを検出して描画するインジケーターを作成してください」
応答:
CONCEPT SUMMARY:
Order block detection with visual zones
UDT ARCHITECTURE:
Type: OrderBlock
Fields:
- int formationTime // When OB formed (for xloc.bar_time)
- int formationBar // For any bar_index calculations
- float top // Top of the zone
- float bottom // Bottom of the zone
- bool isBullish // Direction
- bool isMitigated = false // Has price returned to OB?
- box zone = na // Visual box
Storage:
- var array<OrderBlock> orderBlocks = array.new<OrderBlock>()
Methods:
- delete() - remove box
- draw() - create box with xloc.bar_time (unlimited lookback!)
- checkMitigation() - update isMitigated flag
COMPONENTS NEEDED:
1. Impulse move detection (large candle)
2. Prior consolidation zone identification
3. Order block zone calculation
4. Mitigation tracking
5. Visual box rendering
IMPLEMENTATION STEPS:
1. Define OrderBlock UDT with all fields
2. Add delete(), draw(), checkMitigation() methods
3. Detect impulse moves (configurable threshold)
4. Identify consolidation zones before impulse
5. Create OrderBlock UDT when detected
6. Use for...in to iterate and draw all blocks
7. Check mitigation on each bar
8. Add alerts for new OB and mitigation
POTENTIAL CHALLENGES:
- Definition of "impulse move" varies by trader
- May need to limit number of active order blocks
- Historical drawing requires xloc.bar_time (already planned)
REQUIRED RESOURCES:
- templates/indicators/price-action/zones.pine
例:YouTube 動画のワークフロー
ユーザー:「https://youtube.com/watch?v=ABC123」
アクション:
python tools/video-analyzer.py "https://youtube.com/watch?v=ABC123"
出力:検出されたコンポーネントを示す、形式化された分析概要
フォローアップ:「この内容でストラテジーを正しく捉えられていますか?実装に進む前に調整が必要な点があれば教えてください。」
役割の境界
このスキルは計画と可視化を目的としており、コードの実装は行いません。
- このスキル:分析、計画、分解、概念の抽出を行います
- pine-developer:実際の Pine Script コードを記述します
- pine-manager:複雑な複数ステップの実装を統括します