VCP Screener - ミネルヴィニ・ボラティリティ収縮パターン
S&P 500銘柄を対象に、マーク・ミネルヴィニのボラティリティ収縮パターン(VCP)をスクリーニングし、ブレイクアウトのピボットポイント付近で収縮するボラティリティを持つステージ2上昇トレンド銘柄を特定します。
使用タイミング
- ユーザーがVCPスクリーニングやミネルヴィニスタイルのセットアップを依頼した場合
- ユーザーがタイトベース/ボラティリティ収縮パターンを探したい場合
- ユーザーがステージ2モメンタム銘柄スキャンを依頼した場合
- ユーザーがリスクが明確なブレイクアウト候補を求めた場合
- ユーザーが「の過去のVCPをすべて検出して」と依頼し、特定のティッカーの過去VCPセットアップをフォワードアウトカム付きで調べたい場合(
--history --ticker SYM)
前提条件
- FMP APIキー(環境変数
FMP_API_KEYを設定するか、--api-keyで渡す) - 無料枠(250コール/日)はデフォルトのスクリーニング(上位100候補)に十分
- 有料プランは全S&P 500スクリーニング(
--full-sp500)に推奨
ワークフロー
ステップ1:スクリーニングの準備と実行
VCPスクリーナースクリプトを実行します:
# デフォルト:S&P 500、上位100候補
python3 skills/vcp-screener/scripts/screen_vcp.py --output-dir skills/vcp-screener/scripts
# カスタムユニバース
python3 skills/vcp-screener/scripts/screen_vcp.py --universe AAPL NVDA MSFT AMZN META --output-dir skills/vcp-screener/scripts
# 全S&P 500(有料APIプラン)
python3 skills/vcp-screener/scripts/screen_vcp.py --full-sp500 --output-dir skills/vcp-screener/scripts
ストリクトモード(ミネルヴィニ純粋セットアップ)
valid_vcp=Trueかつexecution_stateが(Pre-breakout, Breakout)の銘柄のみを返します:
python3 skills/vcp-screener/scripts/screen_vcp.py --strict --output-dir reports/
ヒストリカル単一ティッカーモード
1つのティッカーの複数年履歴をウォークスルーし、過去に形成されたすべてのVCPを検出し、検出ごとにフォワードアウトカム統計(ブレイクアウト/ストップヒット/タイムアウト、アウトカムまでの日数、最大利益、最大損失)を付与します。パターン研究やバックテストのコンテキストに有用です。リアルタイムのスクリーナーではありません。
# デフォルト:約5年(1260取引日)、5日ストライド、60日アウトカムウィンドウ
python3 skills/vcp-screener/scripts/screen_vcp.py \
--history --ticker FIX --output-dir reports/
# カスタムスキャン長:750取引日(約3年)、90日アウトカムウィンドウ
python3 skills/vcp-screener/scripts/screen_vcp.py \
--history 750 --ticker TSLA \
--stride-days 5 --outcome-days 90 \
--output-dir reports/
# 長期スキャン:10年(2520取引日)
python3 skills/vcp-screener/scripts/screen_vcp.py \
--history 2520 --ticker NVDA --output-dir reports/
出力(タイムスタンプ付き):
vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.json— 検出のタイムライン(完全なアナライザーペイロード + 検出ごとのforward_outcome+ サマリー統計)vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.md— 人間が読みやすいタイムライン
モード固有のフラグ:
| パラメーター | デフォルト | 範囲 | 効果 |
|---|---|---|---|
--history [DAYS] | (オフ)/ 1260(値なし) | 100-5040 | ヒストリカルモードを有効にする。オプションで取引日スキャンウィンドウを指定(--tickerが必要) |
--ticker SYM | — | — | スキャンするティッカー |
--stride-days | 5 | 1-60 | as-ofカーソル位置間の取引日ステップ |
--outcome-days | 60 | 5-252 | 検出ごとに評価するフォワードウィンドウ |
注意:
- スキャンごとに2回のFMP APIコール(ティッカー + SPY履歴)。クロスセクションパイプラインのように100回以上は必要ありません。
marketCapと絶対RSパーセンタイルは、ライブスクリーニングユニバースではなく、単一ティッカーのみを反映します。パターン研究には使用できますが、ポートフォリオサイジングには使用しないでください。- 検出は
(T1_high_date, last_low_date, pivot)で重複排除されるため、カーソルが古くなるにつれて同じVCPが繰り返し報告されることはありません。
アドバンストチューニング(バックテスト用)
リサーチおよびバックテスト用にVCP検出パラメータを調整します:
python3 skills/vcp-screener/scripts/screen_vcp.py \
--min-contractions 3 \
--t1-depth-min 12.0 \
--breakout-volume-ratio 2.0 \
--trend-min-score 90 \
--atr-multiplier 1.5 \
--output-dir reports/
| パラメーター | デフォルト | 範囲 | 効果 |
|---|---|---|---|
--min-contractions | 2 | 2-4 | 高いほどパターン数は減るが品質は向上 |
--t1-depth-min | 10.0% | 1-50 | 高いほど浅い最初の調整を除外 |
--breakout-volume-ratio | 1.5x | 0.5-10 | 高いほど出来高確認が厳格に |
--trend-min-score | 85 | 0-100 | 高いほどステージ2フィルターが厳格に |
--atr-multiplier | 1.5 | 0.5-5 | 低いほどスイング検出が敏感に |
--contraction-ratio | 0.70 | 0.1-1 | 低いほどよりタイトな収縮が必要 |
--min-contraction-days | 5 | 1-30 | 高いほど最低収縮期間が長く |
--lookback-days | 120 | 30-365 | 長いほど古いパターンを発見 |
--max-sma200-extension | 50.0% | — | オーバーエクステンデッド状態およびペナルティのSMA200距離しきい値 |
--wide-and-loose-threshold | 15.0% | — | 最終収縮の深さがこの値を超えるとワイド&ルースフラグがトリガー |
--strict | off | — | ミネルヴィニストリクトモード:Pre-breakoutまたはBreakoutでvalid VCPのみ |
ステップ2:結果の確認
- 生成されたJSONおよびMarkdownレポートを読む
references/vcp_methodology.mdをパターン解釈のコンテキストとして読み込むreferences/scoring_system.mdをスコアしきい値ガイダンスとして読み込む
ステップ3:分析の提示
各上位候補について提示します:
- 品質(
composite_score/ レーティング)— VCPパターンはどれだけよく形成されているか? - 実行状態(
execution_state)— 今買えるか?(Pre-breakout / Breakout = アクション可能) - パターンタイプ(
pattern_type)— Textbook VCP / VCP-adjacent / Post-breakout / Extended Leader / Damaged - 状態キャップが適用された場合の
★マーカー(生スコアが引き下げられた) - 収縮の詳細(T1/T2/T3の深さと比率)
- トレードセットアップ:ピボット価格、ストップロス、リスクパーセンテージ
- 出来高乾上がり比率とbreakout_volume_score
- 相対強度ランク
ステップ4:実行可能なガイダンスの提供
実行状態別(主要フィルター):
- Pre-breakout / Breakout: パターンはアクティブなエントリーウィンドウ内 — レーティングベースのサイジングを適用
- Early-post-breakout: ブレイクアウト進行中だが理想的なエントリーを超えている — サイズを減らすか押し目を待つ
- Extended / Overextended: トレードを逃した — ウォッチリストに追加して次のベースを待つ
- Damaged / Invalid: セットアップ無効 — エントリーしない
レーティング別(補助フィルター、状態がアクション可能であることを確認後):
- Textbook VCP (90+): ピボットで積極的なサイジング(1.5-2x)で買う
- Strong VCP (80-89): ピボットで標準サイジング(1x)で買う
- Good VCP (70-79): ピボットを上回る出来高確認で買う(0.75x)
- Developing (60-69): ウォッチリストに追加、よりタイトな収縮を待つ
- Weak/No VCP (<60): 監視のみ、またはスキップ
3フェーズパイプライン
- 事前フィルター - クォートベースのスクリーニング(価格、出来高、52週位置)〜101 APIコール
- トレンドテンプレート - 260日履歴を用いた7ポイントのステージ2フィルター 〜100 APIコール
- VCP検出 - パターン分析、スコアリング、レポート生成(追加APIコールなし)
出力
vcp_screener_YYYY-MM-DD_HHMMSS.json- 構造化結果vcp_screener_YYYY-MM-DD_HHMMSS.md- 人間が読みやすいレポート
リソース
references/vcp_methodology.md- VCP理論とトレンドテンプレートの説明references/scoring_system.md- スコアリングしきい値とコンポーネントの重みreferences/fmp_api_endpoints.md- APIエンドポイントとレート制限