Pine Script v5: Скрипт для выделения Order Blocks с проверкой объема

Pine Script v5: Скрипт для выделения Order Blocks с проверкой объема Pine Script
Подробное руководство по созданию Pine Script v5 индикатора для автоматического выделения Order Blocks (блоков ордеров) на графике с обязательной проверкой проторгованного объема. Улучшите свой анализ Smart Money Concepts.
Суть: Данная техническая статья-инструкция предоставляет готовый скрипт на Pine Script v5 для автоматического обнаружения и выделения Order Blocks (блоков ордеров) на графике. Ключевой особенностью является интеграция проверки проторгованного объема, что позволяет фильтровать менее значимые блоки и фокусироваться на тех, где наблюдалась активность крупных игроков. Скрипт визуализирует найденные блоки, помогая трейдерам в применении концепций Smart Money.

Исходный код

Представленный ниже Pine Script v5 код реализует индикатор, который сканирует график на предмет формирования бычьих и медвежьих Order Blocks. Для каждого потенциального блока выполняется проверка объема: объем свечи, формирующей Order Block, должен превышать средний объем за заданный период, умноженный на настраиваемый коэффициент. Это помогает отфильтровать блоки, не подкрепленные значительной активностью. Обнаруженные Order Blocks визуализируются на графике в виде прямоугольников, которые расширяются вправо на заданное количество баров, а также содержат метку с объемом.


//@version=5
indicator("Order Blocks with Volume Validation", overlay=true)

// --- Input Parameters ---
i_lookback = input.int(20, "Volume Lookback Period", minval=1)
i_volumeMultiplier = input.float(1.5, "Volume Multiplier for OB", minval=0.5, step=0.1)
i_obExtendBars = input.int(50, "Extend OB for N Bars", minval=1, maxval=500)
i_bullishColor = input.color(color.new(color.green, 80), "Bullish OB Color")
i_bearishColor = input.color(color.new(color.red, 80), "Bearish OB Color")
i_showLabels = input.bool(true, "Show OB Labels")

// --- Calculate Average Volume ---
avgVolume = ta.sma(volume, i_lookback)

// --- Order Block Detection Logic ---
var box[] bullishOBs = array.new_box()
var box[] bearishOBs = array.new_box()

// Function to check if a candle is a potential bullish OB
// A down-close candle (or doji) followed by a strong move up
isBullishOB(index) =>
    isDownCandle = close[index] < open[index]
    isDoji = math.abs(close[index] - open[index]) < (high[index] - low[index]) * 0.1 // Small body
    isSignificantVolume = volume[index] > avgVolume[index] * i_volumeMultiplier

    // Look for a strong move up after the potential OB candle
    // The next candle's close is significantly above the potential OB's high
    // This creates an "imbalance" or "gap"
    isStrongUpMove = close > high[index] // Current candle (index 0) closes above the potential OB's high (index 1)

    (isDownCandle or isDoji) and isSignificantVolume and isStrongUpMove

// Function to check if a candle is a potential bearish OB
// An up-close candle (or doji) followed by a strong move down
isBearishOB(index) =>
    isUpCandle = close[index] > open[index]
    isDoji = math.abs(close[index] - open[index]) < (high[index] - low[index]) * 0.1 // Small body
    isSignificantVolume = volume[index] > avgVolume[index] * i_volumeMultiplier

    // Look for a strong move down after the potential OB candle
    // The next candle's close is significantly below the potential OB's low
    // This creates an "imbalance" or "gap"
    isStrongDownMove = close < low[index] // Current candle (index 0) closes below the potential OB's low (index 1)

    (isUpCandle or isDoji) and isSignificantVolume and isStrongDownMove

// --- Detect and Draw Order Blocks ---
if bar_index > i_lookback then // Ensure enough bars for volume average
    // Bullish Order Block: Last down-close candle before a strong up move
    if isBullishOB(1) then // Check the previous candle (index 1) as the potential OB
        obLow = low[1]
        obHigh = high[1]
        
        // Create a new box for the bullish OB
        newBox = box.new(x1=bar_index - 1, y1=obLow, x2=bar_index, y2=obHigh, 
                         bgcolor=i_bullishColor, border_color=color.new(color.green, 0), 
                         extend=extend.right, text_size=size.tiny)
        box.set_right(newBox, bar_index + i_obExtendBars) // Extend for N bars
        if i_showLabels
            box.set_text(newBox, "Bullish OB\nVol: " + str.tostring(volume[1], "#.##"))
        array.push(bullishOBs, newBox)

    // Bearish Order Block: Last up-close candle before a strong down move
    if isBearishOB(1) then // Check the previous candle (index 1) as the potential OB
        obLow = low[1]
        obHigh = high[1]

        // Create a new box for the bearish OB
        newBox = box.new(x1=bar_index - 1, y1=obLow, x2=bar_index, y2=obHigh, 
                         bgcolor=i_bearishColor, border_color=color.new(color.red, 0), 
                         extend=extend.right, text_size=size.tiny)
        box.set_right(newBox, bar_index + i_obExtendBars) // Extend for N bars
        if i_showLabels
            box.set_text(newBox, "Bearish OB\nVol: " + str.tostring(volume[1], "#.##"))
        array.push(bearishOBs, newBox)

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

  • i_lookback: Период для расчета скользящей средней объема. Используется для определения «нормального» объема и сравнения с ним объема потенциального Order Block. Чем больше период, тем более сглаженным будет средний объем.
  • i_volumeMultiplier: Множитель, применяемый к среднему объему. Объем свечи Order Block должен быть больше средний_объем * i_volumeMultiplier. Увеличение этого значения сделает индикатор более строгим, выделяя только Order Blocks с исключительно высоким объемом. Это схоже с подходом к фильтрации пин-баров с аномальным объемом.
  • i_obExtendBars: Количество баров, на которое Order Block будет продлен вправо. Это позволяет видеть зону влияния блока на будущее движение цены.
  • i_bullishColor: Цвет для визуализации бычьих Order Blocks. Используется полупрозрачный зеленый по умолчанию.
  • i_bearishColor: Цвет для визуализации медвежьих Order Blocks. Используется полупрозрачный красный по умолчанию.
  • i_showLabels: Булевый параметр, определяющий, отображать ли текстовые метки с объемом внутри каждого Order Block.

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

Чтобы использовать этот скрипт в TradingView, выполните следующие шаги:

  1. Откройте TradingView и перейдите на график нужного актива.
  2. В нижней части экрана найдите панель «Pine Editor» и откройте ее.
  3. Удалите весь существующий код в редакторе (если он есть).
  4. Скопируйте предоставленный выше Pine Script код и вставьте его в «Pine Editor».
  5. Нажмите кнопку «Добавить на график» (Add to Chart) в правом верхнем углу панели «Pine Editor».
  6. Индикатор появится на вашем графике, автоматически выделяя Order Blocks с учетом объема. Вы можете настроить параметры индикатора, такие как период объема или множитель, через меню настроек индикатора на графике.

Этот индикатор может быть полезным дополнением к вашему арсеналу инструментов для анализа рынка, особенно если вы используете концепции Smart Money. Для более глубокого анализа рыночных сессий, которые часто влияют на формирование Order Blocks, рекомендуем ознакомиться с нашей статьей Как отрисовать сессии в Pine Script v5: Азия, Лондон, Нью-Йорк. А для продвинутого анализа объема, такого как кумулятивная дельта объема, изучите Session-Anchored CVD в Pine Script v5: Полное руководство.

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