Strategi ini adalah sistem perdagangan komprehensif yang menggabungkan analisis pelbagai jangka masa, jurang nilai adil (FVG), dan pecah struktur (BOS). Ia mengenal pasti entri perdagangan berpotensi dengan mengesan pecah struktur pada jangka masa yang lebih tinggi sambil mencari peluang jurang nilai wajar pada jangka masa yang lebih rendah. Strategi ini juga menggabungkan sistem pengurusan risiko dengan tetapan stop-loss dan mengambil keuntungan automatik.
Logik teras dibina di atas tiga tiang utama: Pertama, ia menggunakan jangka masa yang lebih tinggi (default 1 jam atau lebih tinggi) untuk mengenal pasti Break of Structure (BOS), yang menyediakan rangka kerja asas untuk arah perdagangan. Kedua, ia mencari Jurang Nilai Adil (FVG) pada jangka masa yang lebih rendah, menunjukkan potensi ketidakseimbangan bekalan-permintaan di kawasan tersebut. Akhirnya, ia menggabungkan keadaan ini dengan kedudukan harga semasa untuk mencetuskan isyarat perdagangan apabila harga berada di lokasi yang menguntungkan. Sistem menguruskan risiko melalui nisbah risiko-balasan dan faktor berhenti-kerugian.
Strategi ini membina sistem perdagangan yang lengkap melalui penggunaan analisis pelbagai jangka masa, penembusan struktur harga, dan jurang nilai wajar. Kekuatannya terletak pada pendekatan analisis berbilang dimensi dan mekanisme pengurusan risiko yang komprehensif, tetapi peniaga masih perlu mengoptimumkan parameter dan mengawal risiko mengikut keadaan pasaran sebenar. Pengoptimuman lanjut boleh memberi tumpuan kepada pengesahan isyarat, penyesuaian parameter dinamik, dan penapisan persekitaran pasaran untuk meningkatkan lagi kestabilan dan kebolehpercayaan strategi.
/*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)