
Стратегия, объединяющая прорыв в открытом диапазоне с прорывом в справедливой стоимости, является количественной торговой стратегией, которая объединяет прорыв в открытом диапазоне (ORB) и прорыв в справедливой стоимости (FVG) в концепции умных денег (SMC). Эта стратегия сначала определяет ценовой диапазон в начале торгового дня (обычно в течение 5 минут после открытия), а затем ищет ситуацию, когда цена пересекает границу этого диапазона и пересекается с прорывом в справедливой стоимости в качестве торгового сигнала.
Основные принципы стратегии основаны на двух ключевых концепциях технического анализа:
Прорыв в открытом пространстве (ORB)- Стратегия сначала определяет наивысшую и наименьшую цены в течение определенного периода времени после открытия торгового дня (например, 5 минут), чтобы сформировать ценовой диапазон. Этот диапазон рассматривается как предварительное суждение участников рынка о ценовом движении в течение дня, и его прорыв может указывать на формирование краткосрочной тенденции.
Пробел в справедливой стоимости (FVG)- Аналитический подход из концепции умных денег (SMC), когда текущий максимум ниже предыдущего минимума, образуется позитивный FVG, когда текущий минимум выше предыдущего максимума, образуется падежный FVG. Эти пробелы считаются зонами, в которых в будущем цены могут компенсироваться, и представляют собой дисбаланс в структуре рынка.
Торговые сигналы для стратегии возникают при следующих условиях:
При выполнении сделок стратегия использует риск-ориентированный метод управления позициями, рассчитывая конкретный размер позиции для каждой сделки в соответствии с расстоянием стоп-лосс, чтобы гарантировать, что риск для каждой сделки является единым. Стоп-лосс устанавливается на предыдущую низкую отметку для многоторговых сделок или на предыдущую высокую отметку для коротких сделок.
Объединение различных методов технического анализа- Благодаря интеграции двух методов технического анализа ORB и FVG, стратегия может отфильтровывать ложные сигналы, которые могут быть вызваны одним показателем, и повышать качество торговых сигналов.
Четкие временные рамки для торгов- Стратегия четко определяет временные рамки торговли (сигнальные и торговые периоды), что помогает трейдерам сосредоточиться на наиболее активных и высококачественных сигналах рынка и избегать недействительных сделок в периоды низкой активности.
Управление позициями на основе риска- Стратегия использует риск-ориентированный метод расчета позиций, чтобы гарантировать, что риск каждой сделки составляет одинаковую долю в общем капитале счета (по умолчанию 1%), что способствует долгосрочному управлению капиталом и контролю риска.
Гибкая конфигурация параметров- Стратегия предоставляет несколько регулируемых параметров, включая настройку периода торговли, продолжительность ORB, продолжительность сигнального периода, соотношение риска и соотношение возврата риска, что позволяет трейдерам оптимизировать в соответствии с различными рынками и личными предпочтениями риска.
Визуальная помощь- Стратегия предоставляет богатые визуальные элементы, включая горизонтальную линию ORB, маркировку торговых сигналов, фоновую яркость в разные торговые периоды и таблицы статистических данных в реальном времени, которые позволяют трейдерам контролировать и анализировать реализацию стратегии.
Поддержка многостороннего управления- Стратегическая конструкция поддерживает одновременное владение несколькими торговыми позициями (контроль за параметрами пирамидирования), позволяя захватывать нескольких торговых возможностей в течение одного торгового дня, повышая эффективность использования средств.
Зависимость от конкретного рынка- Стратегия разработана в основном для обычных торговых часов на американском фондовом рынке, и может не работать хорошо на других рынках или в торговые часы. Характеристики открытия и модели колебаний в разных рынках сильно различаются, поэтому требуется адаптировать параметры.
Параметр Чувствительность- Показатели эффективности стратегии зависят от нескольких ключевых параметров, таких как продолжительность ORB, продолжительность цикла сигналов и коэффициент возврата риска. Неправильная настройка параметров может привести к чрезмерной торговле или упущению важных торговых возможностей.
Зависимость от состояния рынка- В условиях высокой волатильности или низкой волатильности рынка, стратегия может быть непоследовательной. Особенно в низко волатильных рынках, ORB-диапазон может быть слишком узким, что приводит к частому запускам ложных сигналов прорыва.
Риск остановки позиции- Стратегия использует высокие/низкие точки предыдущего столбца в качестве стоп-позиции, что может привести к слишком широким стоп-позициям в быстрых рынках, что снижает коэффициент возврата риска или приводит к слишком маленькому размеру позиции.
Зависимость от исторической ценовой модели- Стратегическая гипотеза предполагает, что прорыв в FVG-зоне и ORB имеет прогнозирующий смысл, но повышение эффективности рынка или изменение торговой среды могут ослабить эффективность этих моделей.
Риски технического исполнения- в реальной сделке могут возникнуть проблемы, связанные со скольжениями, задержкой выполнения заказов, что может повлиять на согласованность результатов реальной сделки с результатами обратной измерения;
Длительность динамического ORB- Можно рассмотреть возможность автоматической корректировки продолжительности ORB в зависимости от волатильности рынка, например, использование более длительного времени ORB в условиях высокой волатильности рынка для предотвращения ложных прорывов, сокращение времени ORB в условиях низкой волатильности для захвата большего количества торговых возможностей.
Добавить условия фильтрации- введение дополнительных фильтрующих условий для улучшения качества сигнала, например, в сочетании с направлением общей рыночной тенденции ((продолжайте только в восходящем тренде, делайте пустоту в нисходящем тренде) или добавьте подтверждение объема сделок ((торгуйте только тогда, когда прорыв сопровождается увеличением объема сделок))
Оптимизация стоп-позиции- Рассмотрите возможность использования динамических стоп-установок, основанных на ATR или волатильности, вместо текущих методов фиксированного стоп-установок, основанных на предыдущих высоких и низких точках, которые могут обеспечить более разумный контроль риска.
Добавление части механизма прибыли- реализация стратегии поэтапного получения прибыли, например, ликвидация части позиций при достижении соотношения риска и прибыли 1:1, а оставшаяся часть - установка стоп-лосса или более отдаленной цели получения прибыли, чтобы сбалансировать необходимость блокирования прибыли и отслеживания тенденций;
Фильтр времени- включить временные фильтры, чтобы избежать известных низкокачественных периодов торговли, таких как низкая волатильность во время обеда или высокая волатильность до и после публикации важных экономических данных.
Добавление параметров адаптации- введение адаптивных параметров, позволяющих стратегии автоматически корректировать параметры в зависимости от недавней рыночной активности, например, динамически корректировать коэффициент возврата риска или корректировать процент риска в зависимости от недавней выигрышной ставки.
Стратегия, объединяющая прорыв в открытом диапазоне и разрыв в справедливой стоимости, является тщательно разработанной системой торговли в течение дня, которая ищет высоковероятные торговые возможности, используя в сочетании методы технического анализа ORB и FVG. Стратегия работает в пределах четко определенных торговых часов, использует риск-ориентированный метод управления позициями и предоставляет богатые визуализационные и статистические инструменты для поддержки торговых решений.
Основные преимущества стратегии заключаются в ее четкой логике торговли, гибкой установке параметров и всеобъемлющем механизме управления рисками. Однако, стратегия также сталкивается с такими рисками, как рыночная зависимость, чувствительность параметров и зависимость от состояния рынка. Для повышения устойчивости стратегии рекомендуется рассмотреть такие направления оптимизации, как корректировка динамических параметров, увеличение фильтрующих условий, оптимизация методов остановки убытков и внедрение механизмов поэтапного получения прибыли.
Следует отметить, что эта стратегия не применима ко всем рыночным условиям и всем видам торговли, и трейдеры должны провести полное обратное и перспективное тестирование, чтобы убедиться, что стратегия соответствует их рисковым предпочтениям и торговым целям, прежде чем применять ее на практике. Благодаря постоянной оптимизации и адаптации к изменениям на рынке, эта стратегия имеет потенциал стать эффективным инструментом в инструментарии дневного трейдера.
/*backtest
start: 2025-06-18 00:00:00
end: 2025-06-25 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// Based on https://www.youtube.com/watch?v=mzFXoK2pbNE
//@version=5
strategy("[Myth Busting] [ORB] Casper SMC - 16 Jun", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, pyramiding = 10)
// Input settings
show_orb = input.bool(true, "Show 5m Opening Range")
show_signals = input.bool(true, "Show FVG Intersection Signals")
show_stats = input.bool(true, "Show Statistics Table")
risk_per_trade = input.float(1.0, "Risk Per Trade (%)", minval=0.1, maxval=10.0, step=0.1)
use_stop_loss = input.bool(true, "Use Stop Loss")
use_take_profit = input.bool(true, "Use Take Profit")
risk_reward_ratio = input.float(2.0, "Risk:Reward Ratio", minval=1.0, step=0.1)
// Session time inputs
session_start_hour = input.int(9, "Session Start Hour", minval=0, maxval=23, group="Session Settings")
session_start_minute = input.int(30, "Session Start Minute", minval=0, maxval=59, group="Session Settings")
session_end_hour = input.int(16, "Session End Hour", minval=0, maxval=23, group="Session Settings")
session_end_minute = input.int(0, "Session End Minute", minval=0, maxval=59, group="Session Settings")
session_timezone = input.string("America/New_York", "Session Timezone", group="Session Settings")
orb_duration_minutes = input.int(5, "ORB Duration (Minutes)", minval=1, maxval=60, group="Session Settings")
signal_end_offset = input.int(90, "Signal Period Duration (Minutes)", minval=30, maxval=300, group="Session Settings")
// Style settings
orb_high_color = input.color(color.new(color.green, 50), "ORB High Color")
orb_low_color = input.color(color.new(color.red, 50), "ORB Low Color")
bullish_signal_color = input.color(color.green, "Bullish Signal Color")
bearish_signal_color = input.color(color.red, "Bearish Signal Color")
// Variables to store ORB levels
var float orb_high = na
var float orb_low = na
var int orb_start_time = na
var int orb_end_time = na
var bool orb_set = false
// Position tracking
var int position_counter = 0
var int active_positions = 0
// Function to get current time in specified timezone
get_session_time() =>
current_hour = hour(time, session_timezone)
current_minute = minute(time, session_timezone)
current_hour * 60 + current_minute
// Calculate session times in minutes
session_start_minutes = session_start_hour * 60 + session_start_minute
session_end_minutes = session_end_hour * 60 + session_end_minute
orb_end_minutes = session_start_minutes + orb_duration_minutes
signal_end_minutes = session_start_minutes + signal_end_offset
// Check if we're in the ORB period
is_orb_period() =>
current_time = get_session_time()
current_time >= session_start_minutes and current_time < orb_end_minutes
// Check if we're in the signal period
is_signal_period() =>
current_time = get_session_time()
current_time >= orb_end_minutes and current_time < signal_end_minutes
// Check if we're in the overall trading session
is_trading_session() =>
current_time = get_session_time()
current_time >= session_start_minutes and current_time < session_end_minutes
// Reset ORB at the start of each trading session
new_session = is_trading_session() and not is_trading_session()[1]
if new_session or ta.change(dayofweek)
orb_high := na
orb_low := na
orb_start_time := na
orb_end_time := na
orb_set := false
position_counter := 0
// Capture ORB levels during the ORB period
if is_orb_period()
if na(orb_high) or na(orb_low)
orb_high := high
orb_low := low
orb_start_time := time
else
orb_high := math.max(orb_high, high)
orb_low := math.min(orb_low, low)
orb_end_time := time
// Mark ORB as set after the period ends
if not is_orb_period() and not na(orb_high) and not orb_set
orb_set := true
// Fair Value Gap detection
bullish_fvg = high[2] < low and not na(orb_high)
bearish_fvg = low[2] > high and not na(orb_low)
// Check for FVG intersection with ORB boundaries during signal period
bullish_intersection = false
bearish_intersection = false
// Count active positions
active_positions := strategy.opentrades
if is_signal_period() and orb_set
// Bullish FVG intersecting upper boundary
if bullish_fvg
if open[1] <= orb_high and close[1] >= orb_high
bullish_intersection := true
// Bearish FVG intersecting lower boundary
if bearish_fvg
if open[1] >= orb_low and close[1] <= orb_low
bearish_intersection := true
// Calculate position size based on risk per trade
calculate_position_size(entry, stop, is_long) =>
risk_amount = strategy.equity * (risk_per_trade / 100)
price_diff = is_long ? entry - stop : stop - entry
position_size = risk_amount / price_diff
position_size
// Strategy execution - Modified for multiple positions
if bullish_intersection
position_counter += 1
entry_price = close
stop_loss_price = low[1]
risk = entry_price - stop_loss_price
take_profit_price = entry_price + (risk * risk_reward_ratio)
// Calculate position size
qty = calculate_position_size(entry_price, stop_loss_price, true)
// Create unique entry ID
entry_id = "Long_" + str.tostring(position_counter)
exit_id = "LongExit_" + str.tostring(position_counter)
// Enter long position
strategy.entry(entry_id, strategy.long, qty=qty)
// Set stop loss and take profit
if use_stop_loss
strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)
if bearish_intersection
position_counter += 1
entry_price = close
stop_loss_price = high[1]
risk = stop_loss_price - entry_price
take_profit_price = entry_price - (risk * risk_reward_ratio)
// Calculate position size
qty = calculate_position_size(entry_price, stop_loss_price, false)
// Create unique entry ID
entry_id = "Short_" + str.tostring(position_counter)
exit_id = "ShortExit_" + str.tostring(position_counter)
// Enter short position
strategy.entry(entry_id, strategy.short, qty=qty)
// Set stop loss and take profit
if use_stop_loss
strategy.exit(exit_id, entry_id, stop=stop_loss_price, limit=use_take_profit ? take_profit_price : na)
// Close all positions at end of trading session
if not is_trading_session() and strategy.position_size != 0
strategy.close_all("End of Trading Session")
// Plot ORB levels
plot(show_orb and orb_set ? orb_high : na, "ORB High", color=orb_high_color, linewidth=2, style=plot.style_line)
plot(show_orb and orb_set ? orb_low : na, "ORB Low", color=orb_low_color, linewidth=2, style=plot.style_line)
// Plot intersection signals
plotshape(series=show_signals and bullish_intersection, title="Bullish FVG Intersection", style=shape.triangleup, location=location.belowbar, color=bullish_signal_color, size=size.normal)
plotshape(series=show_signals and bearish_intersection, title="Bearish FVG Intersection", style=shape.triangledown, location=location.abovebar, color=bearish_signal_color, size=size.normal)
// Background highlights for different session periods
bgcolor(is_orb_period() ? color.new(color.yellow, 90) : na, title="ORB Period")
bgcolor(is_signal_period() and orb_set ? color.new(color.blue, 95) : na, title="Signal Period")
bgcolor(is_trading_session() and not is_signal_period() and not is_orb_period() ? color.new(color.gray, 98) : na, title="Trading Session")
// Plot session boundaries
plot(is_trading_session() ? high : na, "Session High", color=color.new(color.orange, 80), linewidth=1)
plot(is_trading_session() ? low : na, "Session Low", color=color.new(color.orange, 80), linewidth=1)