Высокочастотная динамическая стратегия прорыва диапазона открытия торговли

ORB RANGE BREAKOUT HFT EST OHLC SL TP
Дата создания: 2025-02-21 14:02:59 Последнее изменение: 2025-02-21 14:02:59
Копировать: 2 Количество просмотров: 519
2
Подписаться
319
Подписчики

Высокочастотная динамическая стратегия прорыва диапазона открытия торговли Высокочастотная динамическая стратегия прорыва диапазона открытия торговли

Обзор

Стратегия представляет собой высокочастотную торговую систему, основанную на прорыве в открытом диапазоне, которая фокусируется на ценовом диапазоне, формирующемся в течение 9:30-9:45 утра торгового дня. Стратегия принимает торговые решения, наблюдая за тем, будет ли цена преодолевать этот 15-минутный диапазон, а также сочетает в себе динамические параметры остановки и получения прибыли для достижения оптимального соотношения риска и прибыли. Система также включает в себя функцию отбора торгового дня, позволяющую выборочно торговать в зависимости от рыночных особенностей в разные периоды времени.

Стратегический принцип

Центральная логика стратегии заключается в создании ценового диапазона в течение 15 минут после открытия торгового дня (9:30-9:45 EST), чтобы зафиксировать максимальные и минимальные цены за это время. Как только диапазон формируется, стратегия будет следить за ценовым прорывом до 12 часов дня:

  • Когда цена прорывает интервал, открывайте позицию, чтобы сделать больше, с остановкой в 0,5 раза больше размера интервала и остановкой в 3 раза больше.
  • Когда цена прорывает диапазон, открытие позиции становится пустым, а принцип установки стоп-лосса и стоп-стопа одинаковый. Стратегия также включает в себя механизмы, предотвращающие повторные сделки, гарантирующие выполнение только одной сделки в день и ликвидацию всех позиций при закрытии.

Стратегические преимущества

  1. Временная эффективность: стратегия ориентирована на наиболее активные торговые периоды после открытия рынка, чтобы поймать значительные возможности для колебаний в ранних торговых точках
  2. Контроль риска: с использованием динамических параметров стоп-стоп, для определения параметров управления риском в зависимости от фактической величины колебаний
  3. Гибкость торговли: возможность выбора торговых дней в неделю, чтобы избежать неблагоприятных торговых дней в определенных рыночных условиях
  4. Ясное исполнение: четкие торговые сигналы, четкие условия входа и выхода, не подверженные субъективным суждениям
  5. Высокий уровень автоматизации: автоматизация всего процесса, снижение эмоционального воздействия человеческого вмешательства

Стратегический риск

  1. Риск ложного прорыва: первый прорыв после формирования отрыва может быть ложным, что приводит к убыточному выходу
  2. Временное ослабление: стратегия торгует только в утренние часы, может упустить хорошие возможности в другие часы
  3. Волатильность: в дни, когда рынок менее волатилен, стратегии могут иметь трудности с получением достаточного пространства для прибыли
  4. Влияние скольжения: как стратегия высокочастотного трейдинга, может иметь место большая потеря скольжения при исполнении
  5. Зависимость от рыночных условий: эффективность стратегии может быть заметно затронута общими рыночными условиями

Направление оптимизации стратегии

  1. Введение индикатора объема сделок: можно отфильтровать ложные сигналы прорыва, наблюдая за объемом сделок во время прорыва
  2. Динамическая адаптация времени торгов: оптимизация окна времени торгов в зависимости от особенностей активного периода для разных сортов
  3. Дополнительная фильтрация тенденций: повышение точности направления торговли в сочетании с определением тенденций на более широкие временные периоды
  4. Оптимизация стоп-устройств: можно рассмотреть возможность использования динамического ATR-показателя для настройки стоп-расстояния
  5. Добавление фильтра волатильности: оценка уровня волатильности перед открытием торгов и принятие решения о проведении сделки в тот же день

Подвести итог

Это стратегия, разработанная с разумной, логически строгой стратегией прорыва в открытые промежутки времени, чтобы захватить торговые возможности, сосредоточив внимание на наиболее активных периодах рынка. Преимущества стратегии заключаются в ее четкой логике торговли и совершенных механизмах контроля риска, но в то же время следует обратить внимание на потенциальные риски, такие как ложные прорывы и зависимость от рыночной среды.

Исходный код стратегии
/*backtest
start: 2025-01-21 00:00:00
end: 2025-01-24 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
args: [["MaxCacheLen",580,358374]]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © UKFLIPS69

//@version=6
strategy("ORB", overlay=true, fill_orders_on_standard_ohlc = true)

trade_on_monday = input(false, "Trade on Monday") 
trade_on_tuesday = input(true, "Trade on Tuesday") 
trade_on_wednesday = input(true, "Trade on Wednesday")
trade_on_thursday = input(false, "Trade on Thursday")
trade_on_friday = input(true, "Trade on Friday")
// Get the current day of the week (1=Monday, ..., 6=Saturday, 0=Sunday)
current_day = dayofweek(time) 
current_price = request.security(syminfo.tickerid, "1", close)
// Define trading condition based on the day of the week
is_trading_day = (trade_on_monday and current_day == dayofweek.monday) or
                 (trade_on_tuesday and current_day == dayofweek.tuesday) or
                 (trade_on_wednesday and current_day == dayofweek.wednesday) or
                 (trade_on_thursday and current_day == dayofweek.thursday) or
                 (trade_on_friday and current_day == dayofweek.friday)
// ─── Persistent variables ─────────────────────────
var line  orHighLine       = na   // reference to the drawn line for the OR high
var line  orLowLine        = na   // reference to the drawn line for the OR low
var float orHigh           = na   // stores the open-range high
var float orLow            = na   // stores the open-range low
var int   barIndex930      = na   // remember the bar_index at 9:30
var bool  rangeEstablished = false
var bool  tradeTakenToday  = false  // track if we've opened a trade for the day

// ─── Detect times ────────────────────────────────
is930  = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") == 30)
is945  = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") == 45)

// Between 9:30 and 9:44 (inclusive of 9:30 bar, exclusive of 9:45)?
inSession = (hour(time, "America/New_York") == 9 and minute(time, "America/New_York") >= 30 and minute(time, "America/New_York") < 45)

// ─── Reset each day at 9:30 ─────────────────────
if is930
    // Reset orHigh / orLow
    orHigh := na
    orLow  := na
    rangeEstablished := false
    tradeTakenToday  := false
    // Record the bar_index for 9:30
    barIndex930 := bar_index
// ─── ONLY FORM OR / TRADE IF TODAY IS ALLOWED ─────────────────────
if is_trading_day
// ─── Accumulate the OR high/low from 9:30 to 9:44 ─
    if inSession
        orHigh := na(orHigh) ? high : math.max(orHigh, high)
        orLow  := na(orLow)  ? low  : math.min(orLow, low)

// ─── Exactly at 9:45, draw the lines & lock range ─
    if is945 and not na(orHigh) and not na(orLow)

    // Mark that the OR is established
        rangeEstablished := true

// ─── TRADING LOGIC AFTER 9:45, but BEFORE NOON, and if NO trade taken ─
    if rangeEstablished and not na(orHigh) and not na(orLow) 
    // Only trade if it's still BEFORE 12:00 (noon) EST and we haven't taken a trade today
        if hour(time, "America/New_York") < 12 and (not tradeTakenToday)
        // 1) Compute distances for stops & targets
            float stopSize   = 0.5 * (orHigh - orLow)      // half the OR size
            float targetSize = 3 * stopSize      // 3x the stop => 1.5x the entire OR
    
        // 2) Check if price breaks above OR => go long
            if close > orHigh 
            // Only enter a new long if not already in a long position (optional)
                if strategy.position_size <= 0
                    strategy.entry("ORB Long", strategy.long)
                    strategy.exit("Long Exit", from_entry = "ORB Long", stop = orHigh - stopSize, limit  = strategy.position_avg_price + targetSize)
                // Flag that we've taken a trade today
                    tradeTakenToday := true
    
        // 3) Check if price breaks below OR => go short
            if close < orLow 
            // Only enter a new short if not already in a short position (optional)
                if strategy.position_size >= 0
                    strategy.entry("ORB Short", strategy.short)
                    strategy.exit("Short Exit", from_entry = "ORB Short", stop = orLow + stopSize, limit  = strategy.position_avg_price - targetSize)
                // Flag that we've taken a trade today
                    tradeTakenToday := true
if hour(time, "America/New_York") == 16 and minute(time, "America/New_York") == 0
    strategy.close_all()