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

Flow Region

flow region.pine
Вы автор или правообладатель?

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

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

О программе

Flow Region — индикатор TradingView, который отображает на графике объёмный профиль цены (footprint-стиль) для сгруппированных свечей. Он агрегирует данные нижнего таймфрейма (1 минута) и распределяет объём по ценовым уровням внутри каждой группы, визуализируя результат в виде блоков с информацией о объёме.

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

Также индикатор рисует кастомную свечу для каждой группы с настраиваемыми ширинами теней и телом, цветами роста и падения. Высота ценовых блоков профиль рассчитывается на основе ATR(14), а количество блоков ограничивается пользовательским параметром для сохранения читаемости.

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

НастройкаОписание
groupSizeInput Количество свечей для агрегации в один профиль (от 1 до 10). 1 — стандартное поведение, каждая свеча обрабатывается отдельно.
maxBoxesInput Максимальное количество объёмных блоков на один профиль (от 5 до 200). При большом диапазоне цены блоки объединяются для сохранения читаемости.
showBoxBgInput Показывать полупрозрачный фон блоков профиля поверх цветового текста.
colorModeInput Режим окраски блоков профиля: пользовательский градиент по ценовым уровням или цвет свечи с затуханием.
usePresetInput Включает использование предустановленной палитры вместо пользовательских цветов градиента.
presetPaletteInput Предустановленная цветовая палитра для блоков профиля, активна при включённой опции «Использовать палитру».
startColorInput Цвет нижнего (низкого) ценового уровня градиента в режиме пользовательского градиента.
midColorInput Цвет среднего ценового уровня градиента в режиме пользовательского градиента.
endColorInput Цвет верхнего (высокого) ценового уровня градиента в режиме пользовательского градиента.
fadePercentageInput Процент затухания (прозрачности) градиента в режиме «Цвет свечи» (от 0 до 95 с шагом 5).
summaryBgColorInput Цвет фона сводного блока, отображающего суммарный объём и дельту покупок/продаж.
showWickInput Отображать ли кастомную свечу группы (тень и опционально тело) на графике.
showBodyInput Отображать ли линию тела кастомной свечи группы. Активно только при включённом отображении кастомной свечи.
wickWidthInput Ширина линии тени кастомной свечи группы (от 1 до 5). Видна только при включённом отображении свечи.
bodyWidthInput Ширина линии тела кастомной свечи группы (от 1 до 10). Видна только при включённом отображении тела.
candleUpColorInput Цвет линий кастомной свечи группы при росте (закрытие выше открытия).
candleDownColorInput Цвет линий кастомной свечи группы при падении (закрытие ниже открытия).
Получить полный код

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

indicator("<[Область потока]>", "<[Flow Scope]>", overlay=true, max_boxes_count=500, max_lines_count=500, max_bars_back=1000)

int FOOTPRINT_BLOCKS_PER_BAR = 10

enum ColorMode
    CUSTOM = "Пользовательский градиент"
    CANDLE = "Цвет свечи"

enum Palette
    SOLAR_FLARE     = "Солнечная вспышка"
    DEEP_SPACE      = "Глубокий космос"
    EMERALD_SEA     = "Изумрудное море"
    ROYAL_GOLD      = "Королевское золото"
    CYBERPUNK_NIGHT = "Киберпанк-ночь"
    PHOENIX_FIRE    = "Огненный феникс"
    ARCTIC_DAWN     = "Арктический рассвет"
    STARLIGHT       = "Звездный свет"
    NEON_GLOW       = "Неоновое свечение"
    GILDED_ONYX     = "Золоченый оникс"

type CandleProfile
    float profileHigh
    float profileLow
    int   numBoxes
    float boxHeight
    array<float> volumeDistribution
    float maxVolumeInProfile
    int   maxVolumeIndex

string GRP_PROFILE = "Настройки профиля"
int    groupSizeInput = input.int(1, "Группировать свечи"     , minval=1, maxval=10, group=GRP_PROFILE, tooltip="Количество свечей для агрегации в один профиль. 1 = стандартное поведение.")
int    maxBoxesInput  = input.int(50, "Макс. блоков профиля", minval=5, maxval=200, group=GRP_PROFILE, tooltip="Задает максимальное количество объемных блоков на профиль для сохранения читаемости.")

string    GRP_STYLE       = "Стиль"
bool      showBoxBgInput  = input.bool(false, "Показывать фон профиля", group=GRP_STYLE)
ColorMode colorModeInput  = input.enum(ColorMode.CUSTOM, "Цветовая схема", group=GRP_STYLE)

bool isCustomColorMode = colorModeInput == ColorMode.CUSTOM
bool isCandleColorMode = colorModeInput == ColorMode.CANDLE

string GRP_COLORS     = "Цвета профиля"
bool   usePresetInput = input.bool(false, "Использовать палитру", group=GRP_COLORS, tooltip="Если отмечено, используется предустановленная цветовая палитра. Если нет, позволяет выбрать пользовательские цвета ниже.")

Palette presetPaletteInput = input.enum(Palette.SOLAR_FLARE, "Палитра", group=GRP_COLORS, active=usePresetInput)

color startColorInput = input.color(color.new(#00BCD4, 0), "Низкая цена", group=GRP_COLORS, inline="custom", active=not usePresetInput and isCustomColorMode)
color midColorInput   = input.color(color.new(#FFEB3B, 0), "Средняя цена", group=GRP_COLORS, inline="custom", active=not usePresetInput and isCustomColorMode)
color endColorInput   = input.color(color.new(#F44336, 0), "Высокая цена", group=GRP_COLORS, inline="custom", active=not usePresetInput and isCustomColorMode)

int fadePercentageInput = input.int(95, "Затухание градиента %", minval=0, maxval=95, step=5, group=GRP_STYLE, 
     tooltip="Управляет прозрачностью градиента в режиме 'Цвет свечи'.", 
     active=isCandleColorMode)
color summaryBgColorInput = input.color(color.new(#673AB7, 75), "Фон сводного блока", group=GRP_STYLE)

string GRP_CANDLE          = "Отображение свечи"
bool  showWickInput        = input.bool(true, "Показывать кастомную свечу", group=GRP_CANDLE)
bool  showBodyInput        = input.bool(true, "Показывать тело", group=GRP_CANDLE, active=showWickInput)
int   wickWidthInput       = input.int(1, "Ширина тени", minval=1, maxval=5, group=GRP_CANDLE, active=showWickInput)
int   bodyWidthInput       = input.int(7, "Ширина тела", minval=1, maxval=10, group=GRP_CANDLE, active=showBodyInput)
color candleUpColorInput   = input.color(color.green, "Цвет роста", group=GRP_CANDLE, inline="candlecolor", active=showWickInput)
color candleDownColorInput = input.color(color.red, "Цвет падения", group=GRP_CANDLE, inline="candlecolor", active=showWickInput)

color finalStartColor = na, color finalMidColor = na, color finalEndColor = na
if usePresetInput
    [s, m, e] = switch presetPaletteInput
        Palette.SOLAR_FLARE     => [color.new(#780000, 0), color.new(#FF4500, 0), color.new(#FFD700, 0)]
        Palette.DEEP_SPACE      => [color.new(#4B0082, 0), color.new(#FF00FF, 0), color.new(#00FFFF, 0)]
        Palette.EMERALD_SEA     => [color.new(#004D40, 0), color.new(#00C853, 0), color.new(#A7FFEB, 0)]
        Palette.ROYAL_GOLD      => [color.new(#4A148C, 0), color.new(#FFD700, 0), color.new(#FFF8E1, 0)]
        Palette.CYBERPUNK_NIGHT => [color.new(#00BFFF, 0), color.new(#FF69B4, 0), color.new(#E6E6FA, 0)]
        Palette.PHOENIX_FIRE    => [color.new(#FEEA3B, 0), color.new(#DC143C, 0), color.new(#4B0082, 0)]
        Palette.ARCTIC_DAWN     => [color.new(#483D8B, 0), color.new(#87CEEB, 0), color.new(#F0FFFF, 0)]
        Palette.STARLIGHT       => [color.new(#2C3E50, 0), color.new(#BDC3C7, 0), color.new(#FFFFFF, 0)]
        Palette.NEON_GLOW       => [color.new(#FF007F, 0), color.new(#00FFFF, 0), color.new(#ADFF2F, 0)]
        Palette.GILDED_ONYX     => [color.new(#1C1C1C, 0), color.new(#D4AF37, 0), color.new(#F5F5DC, 0)]
    finalStartColor := s, finalMidColor := m, finalEndColor := e
else
    finalStartColor := startColorInput, finalMidColor := midColorInput, finalEndColor := endColorInput

var array<float> groupLtfHighs = array.new<float>(), var array<float> groupLtfLows = array.new<float>(), var array<float> groupLtfVolumes = array.new<float>()
var array<float> groupBuyVolumes = array.new<float>(), var array<float> groupSellVolumes = array.new<float>()
var float groupHigh = na, var float groupLow = na, var float groupOpen = na, var float groupClose = na

f_buildVolumeBar(int filledBlocks, int totalBlocks) =>
    string result = ""
    for i = 1 to totalBlocks
        result += i <= filledBlocks ? "█" : "░"
    result

f_createProfile(float candleHigh, float candleLow, float targetBoxHeight, array<float> ltfH, array<float> ltfL, array<float> ltfV) =>
    float barRange = candleHigh - candleLow
    int numBoxes = math.max(1, int(math.round(barRange / targetBoxHeight)))
    float adjustedBoxHeight = barRange / numBoxes
    array<float> volDist = array.new_float(numBoxes, 0.0)
    for i = 0 to array.size(ltfH) - 1
        float ltfBarH = array.get(ltfH, i), float ltfBarL = array.get(ltfL, i), float ltfBarV = array.get(ltfV, i)
        float ltfBarRange = math.max(ltfBarH - ltfBarL, syminfo.mintick)
        for boxIndex = 0 to numBoxes - 1

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

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

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

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

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

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

Стоимость полного кода
984,20₽ ≈ $12.24