複数の時間枠の CPR ブレイクアウト モメンタム取引戦略

CPR EMA RSI BC TC SMA MA
作成日: 2025-02-21 11:45:06 最終変更日: 2025-02-21 11:45:06
コピー: 1 クリック数: 454
2
フォロー
319
フォロワー

複数の時間枠の CPR ブレイクアウト モメンタム取引戦略 複数の時間枠の CPR ブレイクアウト モメンタム取引戦略

概要

この戦略は,複数のタイムサイクル分析に基づく取引システムであり,主に中央価格区間 ((CPR),インデックス移動平均 ((EMA) と相対的に強い指標 ((RSI) を利用して取引を行う.この戦略は,日線CPRレベル,週開場価格および20サイクルEMAを使用して,市場動向と重要なサポートレジスタンスレベルを識別し,取引を遂行するために,取引量確認を合成します.

戦略原則

戦略の核心は,価格とCPRレベルとの関係を分析することによって取引機会を探すことである.CPRは,枢軸点 (Pivot),底部中央線 (BC) と上部中央線 (TC) で構成されている.価格がTCを突破し,市場が多頭期にあるとき,システムは複数の信号を発信し,価格がBCを突破し,市場が空頭期にあるとき,システムは空の信号を発信する.システムは20サイクルEMAをトレンドフィルターとして使用し,取引量が20ライン以上である周期を均等に突破の有効性を確認するために要求する.さらに,戦略は,選択的にRSI偏差を追加の確認指標として使用する.

戦略的優位性

  1. 多重確認メカニズム:価格行動,トレンド方向,取引量の三重確認を組み合わせて,取引信号の信頼性を向上させる
  2. ダイナミックなリスク管理:CPRの幅をベースに動的ストップ損失を設定し,異なる市場環境に対応
  3. 柔軟なカスタマイズオプション:CPRの周期,EMAの長さ,およびRSI偏差確認のオン/オフを調整できます
  4. 不対称的利益率:1.5:1の利益リスク比が採用され,長期的な収益性を向上させる
  5. 多時間周期分析:日線と周線データを統合することで,より包括的な市場視点を提供する

戦略リスク

  1. 偽突破リスク: 揺れ動いている市場では偽突破シグナルが発生し,より厳しい取引量フィルタリング条件を使用することを推奨する
  2. トレンド反転リスク: トレンドの転換点で大きな反転が起こりうるため,ストップ範囲を縮小することでリスクをコントロールできます.
  3. パラメタセンシビリティ:戦略のパフォーマンスは,EMA長さや交付量値などのパラメータに敏感であり,定期的に最適化する必要があります.
  4. 市場環境依存:低波動の環境では,期待される利益リスク比は達成することが困難である
  5. 実行滑点: 急速な状況で,実際の取引の効果に影響を与える大きな滑点に直面する可能性があります.

戦略最適化の方向性

  1. 波動率自調機構の導入:市場の波動率の動向に合わせてストップ・ローズと利益目標の調整
  2. 市場状態の分類を増やす:トレンドを分割し,異なる取引パラメータを使用して市場をまとめます.
  3. トランジメントフィルターを最適化:単純平均線比較ではなく,相対的なトランジメントの変化を考慮する
  4. 出場メカニズムの改善:移動の止損と部分的な利益の終了機能を追加
  5. タイムフィルターを追加:市場開店前と閉店後の高波動期などの特定の時間帯での取引を避ける

要約する

これは,構造が整った,論理が明確なトレンド追跡戦略であり,複数の技術指標の配合使用により,取引リスクを効果的に制御する.戦略の主要な優点は,その柔軟なパラメータ設定と完善したリスク管理機構にあるが,同時に,トレーダーは,市場環境の変化に注意し,戦略パラメータを適時に調整する必要がある.推奨された最適化方向によって,戦略の安定性と収益性がさらに向上する見込みがある.

ストラテジーソースコード
//@version=5
strategy("Ahmad Ali Khan CPR Strategy", overlay=true, margin_long=100, margin_short=100)

// ———— Inputs ————
use_daily_cpr = input.bool(true, "Use Daily CPR Levels")
ema_length = input.int(20, "EMA Trend Filter Length")
show_week_open = input.bool(true, "Show Weekly Open Price")
enable_divergence = input.bool(true, "Enable RSI Divergence Check")

// ———— Daily CPR Calculation ————
daily_high = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
daily_low = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
daily_close = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)

pivot = (daily_high + daily_low + daily_close) / 3
bc = (daily_high + daily_low) / 2
tc = pivot + (pivot - bc)

// ———— Weekly Open Price ————
weekly_open = request.security(syminfo.tickerid, "W", open, lookahead=barmerge.lookahead_on)

// ———— Trend Analysis ————
ema_trend = ta.ema(close, ema_length)
market_phase = close > ema_trend ? "Bullish" : "Bearish"

// ———— Momentum Confirmation ————
rsi_length = 14
rsi = ta.rsi(close, rsi_length)
bullish_div = ta.valuewhen(ta.crossover(rsi, 30), low, 0) > ta.valuewhen(ta.crossover(rsi, 30), low, 1)
bearish_div = ta.valuewhen(ta.crossunder(rsi, 70), high, 0) < ta.valuewhen(ta.crossunder(rsi, 70), high, 1)

// ———— Plotting ————
// CPR Levels
plot(pivot, "Pivot", color=color.blue, linewidth=2)
plot(bc, "BC", color=color.red, linewidth=2)
plot(tc, "TC", color=color.green, linewidth=2)
fill(plot(bc), plot(tc), color=color.new(color.purple, 90))

// Weekly Open
plot(show_week_open ? weekly_open : na, "Weekly Open", color=color.orange, linewidth=2)

// EMA Trend
plot(ema_trend, "EMA Trend", color=color.white, linewidth=2)

// ———— Strategy Logic ————
long_condition = 
  close > tc and 
  market_phase == "Bullish" and 
  (not enable_divergence or bullish_div) and
  volume > ta.sma(volume, 20)

short_condition = 
  close < bc and 
  market_phase == "Bearish" and 
  (not enable_divergence or bearish_div) and
  volume > ta.sma(volume, 20)

// ———— Risk Management ————
cpr_width = tc - bc
stop_loss_long = bc - (0.5 * cpr_width)
take_profit_long = tc + (1.5 * cpr_width)
stop_loss_short = tc + (0.5 * cpr_width)
take_profit_short = bc - (1.5 * cpr_width)

// ———— Execute Orders ————
if long_condition
    strategy.entry("Long", strategy.long)
    strategy.exit("XL", "Long", stop=stop_loss_long, limit=take_profit_long)
    
if short_condition
    strategy.entry("Short", strategy.short)
    strategy.exit("XS", "Short", stop=stop_loss_short, limit=take_profit_short)

// ———— Signal Plotting ————
plotshape(long_condition, "Buy", shape.labelup, location.belowbar, color=color.green, text="BUY", textcolor=color.white)
plotshape(short_condition, "Sell", shape.labeldown, location.abovebar, color=color.red, text="SELL", textcolor=color.white)