← К каталогу
Исходный код · ID 4612

Profile of Volume in Extreme Zones

profile of objema in the extreme zone.pine
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор отображает профиль объёма на графике цены, разбивая диапазон цен на заданное количество бинов и накапливая объём торгов в каждом бине за период анализа. Он определяет ключевые уровни: POC (точку контроля — уровень с максимальным объёмом), медианную цену и среднюю цену, взвешенную по объёму. Также индикатор выделяет экстремальные зоны (Зона A и Зона B), задаваемые пользователем в процентах от диапазона цен, и раскрашивает их в разные цвета.

Профиль может отображаться слева или справа от текущих свечей с возможностью сдвига. Ширина баров профиля пропорциональна объёму, а толщина и направление настраиваются пользователем. Все линии (POC, медиана, среднее, границы зон) рисуются как пунктирные линии, расширяющиеся от текущего бара.

Индикатор работает в режиме наложения на график цены и полностью настраивается через параметры ввода: период анализа, количество бинов, процентные пороги зон, цвета элементов и параметры отображения. Предназначен для образовательных целей.

Настройки программы

НастройкаОписание
lookback Период анализа в количестве баров, за который рассчитывается профиль объёма. Диапазон от 10 до 1000, по умолчанию 200.
bins Количество бинов (уровней цен), на которые разбивается диапазон цен для расчёта профиля объёма. Диапазон от 20 до 200, по умолчанию 120.
zone_b_pct Процент Зоны B от диапазона цен, определяющий ширину экстремальной зоны. Диапазон от 0.5 до 95.0, по умолчанию 2.5.
zone_a_pct Процент Зоны A от диапазона цен, определяющий ширину промежуточной зоны. Диапазон от 0.1 до 67.0, по умолчанию 14.0.
show_poc Включает или отключает отображение линии POC (уровня с максимальным объёмом).
show_median Включает или отключает отображение медианной линии.
show_mean Включает или отключает отображение линии средней цены, взвешенной по объёму.
show_zone_lines Включает или отключает отображение пунктирных линий границ зон.
zone_b_upper Цвет верхней части Зоны B — экстремальной зоны у максимума цены.
zone_a_upper Цвет верхней части Зоны A.
zone_center Цвет центральной зоны профиля — участка между границами Зоны A.
zone_a_lower Цвет нижней части Зоны A — промежуточной зоны между центральной и экстремальной.
zone_b_lower Цвет нижней части Зоны B — экстремальной зоны у минимума цены.
poc_color Цвет линии POC — уровня цены с максимальным объёмом торгов.
median_color Цвет медианной линии — середины диапазона цен.
mean_color Цвет линии средней цены, взвешенной по объёму.
zone_line_b_upper Цвет пунктирной линии верхней границы Зоны B.
zone_line_a_upper Цвет пунктирной линии верхней границы Зоны A.
zone_line_a_lower Цвет пунктирной линии нижней границы Зоны A.
zone_line_b_lower Цвет пунктирной линии нижней границы Зоны B.
bar_width_multiplier Множитель, определяющий максимальную ширину баров профиля. Значение по умолчанию 1.0, диапазон от 0.1 до 2.0.
bar_thickness Задаёт толщину линий и границ баров профиля объёма. Допустимые значения от 1 до 5.
profile_direction Направление отображения профиля объёма относительно свечей: «Справа» или «Слева».
profile_offset Сдвиг профиля в количестве баров от текущего бара. Диапазон от -100 до 100, по умолчанию 50.
Получить полный код

Поиск по коду файла

indicator("<[Профиль Объема в Экстремальных Зонах]>", shorttitle="<[VPEZ]>", overlay=true, max_bars_back=5000, max_boxes_count=500, max_lines_count=50)

lookback = input.int(200, "Период анализа", minval=10, maxval=1000)
bins = input.int(120, "Количество бинов", minval=20, maxval=200)
zone_b_pct = input.float(2.5, "Процент Зоны B", minval=0.5, maxval=95.0, step=0.5)
zone_a_pct = input.float(14.0, "Процент Зоны A", minval=0.1, maxval=67.0, step=0.1)

show_poc = input.bool(true, "Показывать линию POC")
show_median = input.bool(true, "Показывать медианную линию")
show_mean = input.bool(true, "Показывать линию среднего")
show_zone_lines = input.bool(true, "Показывать линии зон")

zone_b_upper = input.color(#ff5252cc, "Верхняя Зона B")
zone_a_upper = input.color(#ff9800b3, "Верхняя Зона A")
zone_center = input.color(#787b8633, "Центральная Зона")
zone_a_lower = input.color(#00897bb3, "Нижняя Зона A")
zone_b_lower = input.color(#00e676cc, "Нижняя Зона B")

poc_color = input.color(#787b86, "Линия POC")
median_color = input.color(#9c27b0, "Медианная линия")
mean_color = input.color(#e040fb, "Линия среднего")

zone_line_b_upper = input.color(#ff5252, "Линия верхней B")
zone_line_a_upper = input.color(#ff9800, "Линия верхней A")
zone_line_a_lower = input.color(#00897b, "Линия нижней A")
zone_line_b_lower = input.color(#00e676, "Линия нижней B")

bar_width_multiplier = input.float(1.0, "Множитель ширины баров", minval=0.1, maxval=2.0, step=0.1)
bar_thickness = input.int(1, "Толщина баров", minval=1, maxval=5)

profile_direction = input.string("Слева", "Направление профиля", options = ["Справа", "Слева"])
profile_offset = input.int(50, "Сдвиг профиля", minval = -100, maxval = 100)

var float[] volume_bins = array.new<float>()
var float[] price_levels = array.new<float>()
var box[] volume_boxes = array.new<box>()
var line[] zone_lines = array.new<line>()

if barstate.isfirst or array.size(volume_bins) != bins
    array.clear(volume_bins)
    array.clear(price_levels)
    for i = 0 to bins - 1
        array.push(volume_bins, 0.0)
        array.push(price_levels, 0.0)

get_price_range() =>
    var float max_price = na
    var float min_price = na
    max_price := high
    min_price := low

    for i = 1 to math.min(lookback - 1, bar_index)
        max_price := math.max(max_price, high[i])
        min_price := math.min(min_price, low[i])

    [min_price, max_price]

get_bin_index(price, min_price, max_price) =>
    if max_price == min_price
        0
    else
        bin_idx = math.floor((price - min_price) / (max_price - min_price) * bins)
        math.max(0, math.min(bins - 1, bin_idx))

clear_drawings() =>
    for box_item in volume_boxes
        box.delete(box_item)
    array.clear(volume_boxes)

    for line_item in zone_lines
        line.delete(line_item)
    array.clear(zone_lines)

if barstate.isconfirmed or barstate.islast
    clear_drawings()

    for i = 0 to bins - 1
        array.set(volume_bins, i, 0.0)

    [min_price, max_price] = get_price_range()

    bin_height = (max_price - min_price) / bins

    for i = 0 to bins - 1
        array.set(price_levels, i, min_price + (i + 0.5) * bin_height)

    for i = 0 to math.min(lookback - 1, bar_index)
        bar_high = high[i]
        bar_low = low[i]
        bar_volume = volume[i]

        start_bin = get_bin_index(bar_low, min_price, max_price)
        end_bin = get_bin_index(bar_high, min_price, max_price)

        bins_touched = math.max(1, end_bin - start_bin + 1)
        volume_per_bin = bar_volume / bins_touched

        for j = start_bin to end_bin
            current_volume = array.get(volume_bins, j)
            array.set(volume_bins, j, current_volume + volume_per_bin)

    float total_volume = 0.0
    float max_volume = 0.0
    float poc_price = 0.0

    for i = 0 to bins - 1
        bin_volume = array.get(volume_bins, i)
        total_volume += bin_volume
        if bin_volume > max_volume
            max_volume := bin_volume
            poc_price := array.get(price_levels, i)

    float zone_b_upper_price = min_price + (max_price - min_price) * (100 - zone_b_pct) / 100
    float zone_a_upper_price = min_price + (max_price - min_price) * (100 - zone_b_pct - zone_a_

Показано первые 50% кода (символов: 6489)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
648,90₽ ≈ $8.05