Реализация стратегии ORB с учетом таймзон в Pine Script v5

Реализация стратегии ORB с учетом таймзон в Pine Script v5 НАЛОГИ, ИП и САМОЗАНЯТОСТЬ
Пошаговое руководство по созданию стратегии Opening Range Breakout (ORB) в Pine Script v5 с корректной обработкой часовых поясов (timezone) для точного интрадей-трейдинга.
Суть: Реализация классической стратегии Opening Range Breakout (ORB) в Pine Script v5 с динамическим определением торговых сессий через IANA-таймзоны. Это исключает смещение уровней при изменении часового пояса графика пользователем и гарантирует точное построение утреннего диапазона.

Исходный код

Ниже представлен готовый к использованию код стратегии ORB для Pine Script v5. Он автоматически определяет максимум и минимум заданного интервала (например, первые 30 минут сессии NYSE) с учетом указанного часового пояса, строит уровни и осуществляет вход на пробой с динамическим ATR-стопом.

//@version=5
strategy('Opening Range Breakout (ORB) with Timezone', overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Inputs
string tzInput      = input.string('America/New_York', title='Timezone', tooltip='Use standard IANA timezone database names, e.g., America/New_York')
string sessionInput = input.string('0930-1000', title='Opening Range Session', tooltip='Format: HHMM-HHMM')
string tradeSession = input.string('1000-1600', title='Trading Window', tooltip='Format: HHMM-HHMM')
float atrMultiplier = input.float(1.5, title='ATR Stop Multiplier', minval=0.1)
int atrLength       = input.int(14, title='ATR Length')

// Time calculations
inSession = not na(time(timeframe.period, sessionInput + ':23456', tzInput))
inTradeWindow = not na(time(timeframe.period, tradeSession + ':23456', tzInput))

// State variables
var float orbHigh = na
var float orbLow = na
var bool sessionStarted = false

// Detect session transition
sessionNew = inSession and not inSession[1]

if sessionNew
    orbHigh := high
    orbLow := low
    sessionStarted := true
else if inSession
    orbHigh := math.max(orbHigh, high)
    orbLow := math.min(orbLow, low)

// Reset at the end of the trading day or before next session
if not inTradeWindow and not inSession
    sessionStarted := false

// Plotting
plotColor = sessionStarted and not inSession ? color.blue : color.new(color.blue, 100)
plot(orbHigh, title='ORB High', color=plotColor, style=plot.style_linebr, linewidth=2)
plot(orbLow, title='ORB Low', color=plotColor, style=plot.style_linebr, linewidth=2)

// ATR for dynamic SL/TP
atr = ta.atr(atrLength)

// Strategy Execution
longCondition = inTradeWindow and sessionStarted and not inSession and ta.crossover(close, orbHigh) and strategy.position_size == 0
shortCondition = inTradeWindow and sessionStarted and not inSession and ta.crossunder(close, orbLow) and strategy.position_size == 0

if longCondition
    stopLoss = orbHigh - (atr * atrMultiplier)
    takeProfit = orbHigh + (atr * atrMultiplier * 2.0)
    strategy.entry('ORB Long', strategy.long)
    strategy.exit('Exit Long', 'ORB Long', stop=stopLoss, limit=takeProfit)

if shortCondition
    stopLoss = orbLow + (atr * atrMultiplier)
    takeProfit = orbLow - (atr * atrMultiplier * 2.0)
    strategy.entry('ORB Short', strategy.short)
    strategy.exit('Exit Short', 'ORB Short', stop=stopLoss, limit=takeProfit)

// Force close at the end of trading window
if not inTradeWindow and strategy.position_size != 0
    strategy.close_all(comment='End of Day Close')

Разбор параметров

  • tzInput: Строковый идентификатор часового пояса в формате IANA (например, 'America/New_York'). Позволяет жестко зафиксировать время расчета уровней независимо от настроек отображения графика в TradingView.
  • sessionInput: Временной интервал для формирования утреннего диапазона (по умолчанию '0930-1000').
  • tradeSession: Разрешенное окно для совершения сделок (по умолчанию '1000-1600'). Вне этого окна новые позиции не открываются, а открытые принудительно закрываются в конце дня.
  • atrMultiplier: Множитель индикатора ATR для расчета динамического Stop Loss и Take Profit.
  • atrLength: Период скользящей средней для расчета ATR.

Как запустить

Для запуска стратегии выполните следующие шаги:

1. Откройте платформу TradingView и перейдите на вкладку Pine Editor в нижней панели.

2. Скопируйте представленный выше код и вставьте его в редактор, заменив стандартный шаблон.

3. Нажмите кнопку Add to Chart (Добавить на график).

4. В настройках стратегии (иконка шестеренки на графике) укажите нужный часовой пояс актива в параметре Timezone. Например, для американских акций используйте America/New_York, а для европейских индексов — соответствующий европейский часовой пояс.

Для более глубокого анализа рыночных расхождений и арбитража рекомендуем изучить наш материал про Индикатор TVWAP Spread в Pine Script v5: Арбитраж в TradingView.

Если вы торгуете криптовалютой или макро-активами, полезным дополнением к пробойным стратегиям станет Pine Script v5: Поиск Интрадей Раскорреляции BTC и DXY с ta.correlation.

Чтобы оценить эффективность полученной стратегии, вы можете использовать наше руководство по созданию кастомной таблицы статистики в Pine Script v5: Winrate и Profit Factor.

Оцените статью
FinFluct