過去のバックテストに基づく複数期間の公正価値ギャップ突破戦略

FVG BOS HTF RR SL
作成日: 2025-01-17 14:45:10 最終変更日: 2025-01-17 14:45:10
コピー: 0 クリック数: 454
1
フォロー
1617
フォロワー

過去のバックテストに基づく複数期間の公正価値ギャップ突破戦略

戦略概要

この戦略は、複数の時間枠分析、公正価値ギャップ (FVG)、構造のブレイクアウト (BOS) を組み合わせた包括的な取引システムです。より長い時間枠で価格構造のブレイクアウトを特定し、より短い時間枠で形成される公正価値のギャップを探すことで、潜在的な取引エントリを特定します。この戦略には、ストップロスと利益目標の自動設定を含むリスク管理システムも統合されています。

戦略原則

この戦略のコアロジックは、3 つの主要な柱に基づいています。まず、より長い時間枠 (デフォルトでは 1 時間以上) を使用して、価格構造のブレイクアウト (BOS) を特定します。これにより、取引方向の基本的なフレームワークが提供されます。次に、より短い時間枠で公正価値ギャップ (FVG) を探します。FVG の形成は、この分野の市場で潜在的な需要と供給の不均衡があることを示しています。最後に、これら 2 つの条件が現在の価格位置と組み合わされ、価格が有利な位置にあるときに取引シグナルがトリガーされます。システムは、リスク報酬比率とストップロス係数を通じて各取引のリスクを管理します。

戦略的優位性

  1. 多次元分析: 複数の期間の分析を組み合わせることで、取引シグナルの信頼性が向上します。
  2. 完璧なリスク管理: リスクリターン比率設定とストップロス制御メカニズムが組み込まれているため、すべての取引で明確なリスク管理が確保されます。
  3. 視覚的なフィードバック: この戦略では、FVG ボックスの表示や潜在的な取引機会のマークなど、明確な視覚的なフィードバックが提供されます。
  4. 強力な適応性: パラメータ調整により、戦略はさまざまな市場状況や取引スタイルに適応できます。

戦略リスク

  1. 誤ったブレイクアウトのリスク: 市場で誤ったブレイクアウトが発生し、誤った取引シグナルが発生する可能性があります。解決策は、信号確認メカニズムを追加することです。
  2. 信号遅延: より長い時間枠のデータを使用しているため、信号遅延が発生する可能性があります。他のテクニカル指標と組み合わせて確認することをお勧めします。
  3. 市場変動リスク: 変動率が高い期間中は、FVG の形成が十分に安定しない可能性があります。これは、FVG の観測長さを調整することで対応できます。

戦略最適化の方向性

  1. 信号フィルタリング: ボリュームがサポートしている場合にのみ信号を確認するためのボリューム確認メカニズムを追加できます。
  2. 動的パラメータ: リスクリターン比率とストップロス係数は、市場のボラティリティに応じて動的に調整できます。
  3. トレンドフィルタリング:トレンド判断インジケーターを追加し、トレンド方向にのみポジションを開きます。
  4. 時間フィルター: 不利な市場時間帯での取引を避けるために、取引期間フィルターを追加します。

要約する

この戦略は、複数期間の分析、価格構造のブレークスルー、公正価値のギャップを組み合わせることで、完全な取引システムを構築します。その利点は多次元分析方法と完璧なリスク管理メカニズムにありますが、トレーダーは実際の市場状況に基づいて適切なパラメータの最適化とリスク管理を実行する必要があります。その後の最適化は、シグナルの確認、動的パラメータの調整、市場環境のフィルタリングから開始して、戦略の安定性と信頼性をさらに向上させることができます。

ストラテジーソースコード
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("ICT Strategy with Historical Backtest", overlay=true)

// === Настройки ===
tf = input.timeframe("60", title="Higher Timeframe (1H or above)")  // Таймфрейм для анализа BOS
fvg_length = input(3, title="FVG Lookback Length")                   // Длина для поиска FVG
risk_reward = input(2, title="Risk-Reward Ratio")                    // Риск-вознаграждение
show_fvg_boxes = input(true, title="Show FVG Boxes")                 // Показывать FVG
stop_loss_factor = input.float(1.0, title="Stop Loss Factor")         // Множитель для стоп-лосса

// === Переменные для анализа ===
var float bos_high = na
var float bos_low = na

// Получаем данные с более старшего таймфрейма
htf_high = request.security(syminfo.tickerid, tf, high)
htf_low = request.security(syminfo.tickerid, tf, low)
htf_close = request.security(syminfo.tickerid, tf, close)

// Определение BOS (Break of Structure) на старшем таймфрейме
bos_up = ta.highest(htf_high, fvg_length) > ta.highest(htf_high[1], fvg_length)
bos_down = ta.lowest(htf_low, fvg_length) < ta.lowest(htf_low[1], fvg_length)

// Обновляем уровни BOS
if (bos_up)
    bos_high := ta.highest(htf_high, fvg_length)
if (bos_down)
    bos_low := ta.lowest(htf_low, fvg_length)

// === Определение FVG (Fair Value Gap) ===
fvg_up = low > high[1] and low[1] > high[2]
fvg_down = high < low[1] and high[1] < low[2]

// Визуализация FVG (Fair Value Gap)
// if (show_fvg_boxes)
//     if (fvg_up)
//         box.new(left=bar_index[1], top=high[1], right=bar_index, bottom=low, bgcolor=color.new(color.green, 90), border_color=color.green)
//     if (fvg_down)
//         box.new(left=bar_index[1], top=high, right=bar_index, bottom=low[1], bgcolor=color.new(color.red, 90), border_color=color.red)

// === Логика сделок ===
// Условия для входа в Лонг
long_condition = bos_up and fvg_up and close < bos_high
if (long_condition)
    strategy.entry("Long", strategy.long, stop=low * stop_loss_factor, limit=low + (high - low) * risk_reward)

// Условия для входа в Шорт
short_condition = bos_down and fvg_down and close > bos_low
if (short_condition)
    strategy.entry("Short", strategy.short, stop=high * stop_loss_factor, limit=high - (high - low) * risk_reward)

// === Надписи для прогнозируемых сделок ===
if (long_condition)
    label.new(bar_index, low, text="Potential Long", color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

if (short_condition)
    label.new(bar_index, high, text="Potential Short", color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)