На этой странице
Где найти
- Где
- Возвращаемое значение 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. Рендерер поднимет перо; ноль нарисовал бы ложный отрезок.
- Можно ли передвинуть карточку таблицы и сохранить её место?
- Да. Перетащите её за шапку; позиция сохраняется по каждому выходу в локальном хранилище и восстанавливается при следующем открытии графика.