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

Параметры

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

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

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

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

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

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

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