Скрипты: как написать индикатор (JavaScript)
Скрипт индикатора определяет функцию compute(bars, params, ctx) и возвращает список выходов. На этой странице собраны формы, которые он может вернуть, источник его параметров и способ хранения скрипта.
Senzoukria · Документация · Обновлено: сентябрь 2026
Где найти
- Где
- Страница «Скрипты» → Новый индикатор
- Точка входа
- compute(bars, params, ctx), возвращает массив выходов
- Куда рисуется
- «На графике» (наложение) или «Отдельная панель»
- Язык по умолчанию
- JavaScript; скрипт без записанного языка читается как JavaScript
- Бюджет
- 2 секунды на запуск, в воркере без сети, без доступа к файлам и без API платформы
Что она делает
compute() получает бары, значения параметров и контекст, а возвращает список выходов. Рендерер знает только эти выходы и никогда не знает, какой скрипт их породил, поэтому добавление индикатора не затрагивает конвейер.
Время несёт временная метка бакета каждого бара в наносекундах — временной ключ всего конвейера футпринта. Точка со значением null — это разрыв: рендерер поднимает перо вместо того, чтобы провести ложную прямую через прогрев или сброс сессии.
Две договорённости стоит соблюдать, потому что им следуют встроенные индикаторы: дельта уровня — это объём покупок минус объём продаж, а дельта бара — сумма дельт его уровней; и шаг цены берётся из контекста, а не прописывается в коде.
Формы вывода
| Форма | По умолчанию | Что меняет |
|---|---|---|
| line | толщина 1 | Серия, выровненная по барам; значения null — разрывы. |
| histogram | — | Столбцы с положительным и отрицательным цветом; бар без значения не даёт точки. |
| bands | заливка 0,12 | Верхняя, базовая и нижняя серии с прозрачностью заливки, ограниченной диапазоном от 0 до 1. В JavaScript нет помощника lib.bands: объект строится через of.bands в Python или возвращается как обычный объект. |
| markers | — | Точки по цене на баре — кружок, стрелка вверх или вниз, квадрат, с необязательной подписью. |
| levels | to = null | Горизонтальные уровни от одного бара до другого; пустой конец тянет уровень до правого края. |
| table | выравнивание влево | Плавающая таблица в DOM — её можно читать, выделять и копировать. |
| panel | — | Небольшая панель из строк «подпись — значение», при желании цветных. |
Параметры
Параметры можно объявить на панели редактора, но скрипт вправе читать ключ прямо из исходного кода. Считыватель параметров статически просматривает код и ищет три реально встречающиеся формы — params.get("key", default), params["key"] и params.key ?? default, — плюс однострочные псевдонимы вроде лямбды или стрелочной функции, оборачивающей params.
Именно это питает опцию ассистента бэктеста «Перебрать все читаемые параметры»: она задаёт до пяти осей из параметров, которые скрипт действительно читает, со значениями вокруг их значений по умолчанию. Это предложение в поле, которое вы можете поправить, а не контракт: построенный на лету ключ или обход словаря в цикле замечены не будут.
Ограничения и подводные камни
- Возврат чего-то, не входящего в перечисленные формы, сообщается как нераспознанное возвращаемое значение и не рисуется.
- Запуск, который завершился без ошибки и ничего не построил, чаще всего означает, что возвращённые значения не являются числами.
- Скрипты живут в локальном хранилище этого компьютера; они не синхронизируются и не резервируются за вас.
- table и panel — единственные формы, которые не рисуются на канве: они выводятся как DOM, потому что таблицу нужно уметь выделять.
Связанные страницы
Эта страница на других языках
Частые вопросы
- Как вывести свой индикатор на график?
- Сохраните его, затем включите «Показывать на графике». Он попадёт в панель индикаторов в группу «Мои скрипты», и оттуда его включают и выключают, как любой другой.
- Может ли один скрипт вернуть несколько выходов?
- Да. compute() возвращает массив, и встроенные индикаторы делают то же самое: VWAP, например, отдаёт один выход bands и один line.
- Почему моя скользящая средняя отсутствует в начале графика?
- Потому что значения прогрева возвращаются как null, а null поднимает перо. Рисовать сквозь них значило бы выдумать данные, которых период ещё не дал.