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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.