
Strategi ini adalah sistem perdagangan komprehensif yang menggabungkan berbagai analisis kerangka waktu, kesenjangan nilai wajar (FVG) dan terobosan struktur (BOS). Ia mengidentifikasi entri perdagangan potensial dengan mengidentifikasi terobosan dalam struktur harga pada jangka waktu yang lebih tinggi sambil mencari kesenjangan nilai wajar yang terbentuk pada jangka waktu yang lebih rendah. Strategi ini juga memadukan sistem manajemen risiko, termasuk pengaturan otomatis stop-loss dan target laba.
Logika inti strategi ini dibangun atas tiga pilar utama: Pertama, menggunakan kerangka waktu yang lebih tinggi (default 1 jam atau lebih) untuk mengidentifikasi penembusan dalam struktur harga (BOS), yang menyediakan kerangka dasar untuk arah perdagangan. Kedua, carilah Fair Value Gap (FVG) pada kerangka waktu yang lebih rendah. Pembentukan FVG mengindikasikan adanya potensi ketidakseimbangan antara penawaran dan permintaan di pasar pada area ini. Akhirnya, kedua kondisi ini digabungkan dengan posisi harga saat ini untuk memicu sinyal perdagangan ketika harga berada dalam posisi yang menguntungkan. Sistem mengelola risiko setiap perdagangan melalui rasio risiko-hadiah dan faktor stop-loss.
Strategi ini membangun sistem perdagangan lengkap dengan menggabungkan analisis multi-periode waktu, terobosan struktur harga, dan kesenjangan nilai wajar. Keunggulannya terletak pada metode analisis multidimensi dan mekanisme manajemen risiko yang sempurna, tetapi pedagang masih perlu melakukan optimalisasi parameter dan pengendalian risiko yang tepat berdasarkan kondisi pasar sebenarnya. Optimalisasi selanjutnya dapat dimulai dari konfirmasi sinyal, penyesuaian parameter dinamis, dan penyaringan lingkungan pasar untuk lebih meningkatkan stabilitas dan keandalan 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)