
Chiến lược này là một hệ thống giao dịch toàn diện kết hợp phân tích nhiều khung thời gian, khoảng cách giá trị hợp lý (FVG) và đột phá cấu trúc (BOS). Nó xác định các điểm vào lệnh tiềm năng bằng cách xác định sự đột phá trong cấu trúc giá ở các khung thời gian cao hơn trong khi tìm kiếm các khoảng cách giá trị hợp lý hình thành ở các khung thời gian thấp hơn. Chiến lược này cũng tích hợp hệ thống quản lý rủi ro, bao gồm tự động thiết lập mục tiêu dừng lỗ và lợi nhuận.
Logic cốt lõi của chiến lược này được xây dựng trên ba trụ cột chính: Đầu tiên, sử dụng khung thời gian cao hơn (mặc định là 1 giờ trở lên) để xác định sự đột phá trong cấu trúc giá (BOS), cung cấp khuôn khổ cơ bản cho hướng giao dịch. Thứ hai, hãy tìm Khoảng cách giá trị hợp lý (FVG) trên các khung thời gian thấp hơn. Việc hình thành FVG cho thấy có sự mất cân bằng cung cầu tiềm ẩn trên thị trường trong khu vực này. Cuối cùng, hai điều kiện này được kết hợp với vị thế giá hiện tại để kích hoạt tín hiệu giao dịch khi giá ở vị thế thuận lợi. Hệ thống quản lý rủi ro của mỗi giao dịch thông qua tỷ lệ rủi ro-lợi nhuận và hệ số dừng lỗ.
Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh bằng cách kết hợp phân tích nhiều giai đoạn thời gian, đột phá về cấu trúc giá và khoảng cách giá trị hợp lý. Ưu điểm của nó nằm ở phương pháp phân tích đa chiều và cơ chế quản lý rủi ro hoàn hảo, nhưng các nhà giao dịch vẫn cần phải thực hiện tối ưu hóa thông số phù hợp và kiểm soát rủi ro dựa trên các điều kiện thực tế của thị trường. Quá trình tối ưu hóa tiếp theo có thể bắt đầu từ xác nhận tín hiệu, điều chỉnh tham số động và lọc môi trường thị trường để cải thiện hơn nữa tính ổn định và độ tin cậy của chiến lược.
/*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)