Выходы скрипта: line, histogram, bands, markers, levels, table, panel
Пользовательский скрипт возвращает массив выходов, каждый со своей формой. Пять форм рисуются на канве (line, histogram, bands, markers, levels), две выводятся как перетаскиваемые карточки DOM (table, panel). Каждый выход приводится к норме до передачи рендереру, а всё нераспознанное сообщается, а не отбрасывается молча.
Senzoukria · Документация · Обновлено: сентябрь 2026
Где найти
- Где
- Возвращаемое значение compute() в любом пользовательском скрипте; рисуется на графике, когда скрипт показан
- Цели
- «На графике» (наложение) или «Отдельная панель» (панель высотой 90 px под графиком)
- Ограничения DOM
- Таблица: 50 строк и 8 колонок; панель: 50 записей; лишнее обрезается
- Ключ времени
- point.time должно совпадать с bucketTsNs бара (эпоха в наносекундах); прочие точки отбрасываются
Что это даёт
Рендерер знает только значения SeriesOutput и никогда не видит скрипта, который их создал. Поэтому встроенные индикаторы и пользовательские скрипты пользуются одними формами и одними правилами нормализации: точка за пределами видимых баров отбрасывается, неконечное значение становится разрывом (value: null), а null, записанный намеренно — например, на прогреве скользящей средней, — сохраняется как поднятое перо, а не как ложный отрезок.
Цель отрисовки выбирается для каждого скрипта. «На графике» накладывается на цену; «Отдельная панель» резервирует панель, высоту которой рендерер фиксирует на 90 px. Поскольку таблицы и карточки — элементы DOM, скрипт для панели, у которого остались только выходы table, пустую панель не резервирует: разделение выходов на канву и DOM происходит до того, как рендерер считает панели.
Формы и их поля
| Форма | Поля | Применяемые значения по умолчанию |
|---|---|---|
| line | points [{time, value|null}], style {color, width, style} | цвет #7ed321; толщина ограничена 0,5–12; стиль solid, dashed или dots |
| histogram | points [{time, value}], positiveColor, negativeColor | #22c55e для положительных, #ef4444 для отрицательных; бар без конечного значения не даёт точки |
| bands | массивы точек upper, basis, lower, fillAlpha, style | fillAlpha 0,12, ограничен 0–1; стиль как у line |
| markers | markers [{time, price, kind, color, label?}] | kind — dot, если не указаны arrow-up, arrow-down или square; цвет #7ed321 |
| levels | levels [{price, from, to|null, color, label?, style?}] | to null = тянется до правого края; обязательны только price и from |
| table | title?, columns [{key, label, align?}], rows [{key: string|number|null}] | Отклоняется без колонок; максимум 8 колонок и 50 строк; неизвестные ключи строк отбрасываются |
| panel | title?, entries [{label, value, color?}] | Максимум 50 записей; запись без строки или конечного числа в value пропускается |
Карточки таблицы и панели
Таблицы и панели рисуются плавающими карточками поверх графика, потому что таблицу нужно читать, выделять и копировать, а канва этого не даёт, и потому что панель высотой 90 px вмещает лишь три строки. Каждая карточка озаглавлена именем скрипта, затем идёт « · » и заголовок выхода, если он задан. Карточки перетаскиваются за шапку; их положение сохраняется по каждому выходу под ключом orderflow.seriesTables.v1 в конце перетаскивания. Без сохранённой позиции карточки раскладываются каскадом от правого верхнего угла (60 px вниз и 12 px внутрь, со смещением 26 px и 14 px на каждую следующую), поэтому две карточки никогда не совпадают точно.
DOM обновляется один раз за кадр анимации, а не в темпе публикации баров 4 Гц, и пустая ячейка печатается как «—», а не как 0. Выравнивание колонки по умолчанию левое; скрипт, которому нужны числа справа, задаёт колонке align: "right".
Как этим пользоваться
Помощники lib строят распространённые формы: lib.line(chronoBars, values, color, width), lib.histogram, lib.markers, lib.levels, lib.table(columns, rows, title) и lib.panel. Массивы, передаваемые помощникам lib, идут в хронологическом порядке, поэтому сначала разверните бары, приходящие от новых к старым. Скрипт может вернуть несколько выходов — например, один bands и один line для VWAP с полосами сигмы.
Отклонённая форма не исчезает бесследно: скрипт помечается в панели индикаторов, и строка под его именем вместо цели отрисовки превращается в «Нераспознанное возвращаемое значение. Индикатор возвращает серию, линии или метки — см. «Индикатор: что возвращать».» Скрипт, чьи выходы ничего не рисуют, помечается как «empty», что отличает «не работает» от «показывать было нечего».
Ограничения и подводные камни
- Толщина меньше 0,5 или больше 12 px ограничивается; неизвестные имена стилей сводятся к solid.
- Точки histogram со значением null или неконечным удаляются целиком — в отличие от линий, где null является разрывом.
- Уровни — это отрезки по ключу price и from; они не фильтруются по времени бара, поэтому метка from старше загруженной истории просто начинается от левого края.
- Таблица длиннее 50 строк обрезается; если количество важно, напишите об обрезке в заголовке сами.
Связанные страницы
- Редактор пользовательских индикаторов на графике
- Скрипты на C++ (движок WASM)
- VWAP: объяснение
- Индикатор полос VWAP сессии
Эта страница на других языках
Частые вопросы
- Почему моя таблица не в той панели, которую я выбрал?
- Таблицы и панели всегда рисуются карточками DOM поверх графика, какой бы ни была цель отрисовки. Цель влияет только на формы на канве — линии, гистограммы и прочее.
- Как показать разрыв вместо линии на нуле во время прогрева?
- Возвращайте для этих точек value: null. Рендерер поднимет перо; ноль нарисовал бы ложный отрезок.
- Можно ли передвинуть карточку таблицы и сохранить её место?
- Да. Перетащите её за шапку; позиция сохраняется по каждому выходу в локальном хранилище и восстанавливается при следующем открытии графика.