Senzoukria · Документация

Скрипты: как написать индикатор (JavaScript)

Скрипт индикатора определяет функцию compute(bars, params, ctx) и возвращает список выходов. На этой странице собраны формы, которые он может вернуть, источник его параметров и способ хранения скрипта.

Обновлено: сентябрь 2026Опубликовано: 19 сентября 2026 г.

На этой странице
  1. Где найти
  2. Что она делает
  3. Формы вывода
  4. Параметры
  5. Ограничения и подводные камни
  6. Связанные страницы
  7. В этом же разделе
  8. Эта страница на других языках
  9. Частые вопросы

Где найти

Где
Страница «Скрипты» → Новый индикатор
Точка входа
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—Точки по цене на баре — кружок, стрелка вверх или вниз, квадрат, с необязательной подписью.
levelsto = nullГоризонтальные уровни от одного бара до другого; пустой конец тянет уровень до правого края.
tableвыравнивание влевоПлавающая таблица в DOM — её можно читать, выделять и копировать.
panel—Небольшая панель из строк «подпись — значение», при желании цветных.

Параметры

Параметры можно объявить на панели редактора, но скрипт вправе читать ключ прямо из исходного кода. Считыватель параметров статически просматривает код и ищет три реально встречающиеся формы — params.get("key", default), params["key"] и params.key ?? default, — плюс однострочные псевдонимы вроде лямбды или стрелочной функции, оборачивающей params.

Именно это питает опцию ассистента бэктеста «Перебрать все читаемые параметры»: она задаёт до пяти осей из параметров, которые скрипт действительно читает, со значениями вокруг их значений по умолчанию. Это предложение в поле, которое вы можете поправить, а не контракт: построенный на лету ключ или обход словаря в цикле замечены не будут.

Ограничения и подводные камни

  • Возврат чего-то, не входящего в перечисленные формы, сообщается как нераспознанное возвращаемое значение и не рисуется.
  • Запуск, который завершился без ошибки и ничего не построил, чаще всего означает, что возвращённые значения не являются числами.
  • Скрипты живут в локальном хранилище этого компьютера; они не синхронизируются и не резервируются за вас.
  • table и panel — единственные формы, которые не рисуются на канве: они выводятся как DOM, потому что таблицу нужно уметь выделять.

В этом же разделе

Эта страница на других языках

Частые вопросы

Как вывести свой индикатор на график?
Сохраните его, затем включите «Показывать на графике». Он попадёт в панель индикаторов в группу «Мои скрипты», и оттуда его включают и выключают, как любой другой.
Может ли один скрипт вернуть несколько выходов?
Да. compute() возвращает массив, и встроенные индикаторы делают то же самое: VWAP, например, отдаёт один выход bands и один line.
Почему моя скользящая средняя отсутствует в начале графика?
Потому что значения прогрева возвращаются как null, а null поднимает перо. Рисовать сквозь них значило бы выдумать данные, которых период ещё не дал.
NEXT

Что почитать дальше