LootX

Настройки и отрисовка

новое Обновлено 30 сентября 2026 г. Эта страница в PDF

Настройки input.* в окне индикатора, линии plot и их стили, уровни hline, заливки fill, фон и цвет свечей, маркеры, подписи, отрезки, прямоугольники, таблицы, цвета и прозрачность. Пределы: три рисуемых plot и 500 объектов каждого вида.

Эта страница о том, что пользователь видит и может менять. Здесь описаны настройки, которые скрипт выносит в окно индикатора, линии и их стили, уровни и заливки, фон и цвет свечей, маркеры, подписи, отрезки, прямоугольники и таблицы, а также цвета и прозрачность. В конце есть раздел о пределах, которые стоит знать заранее.

Настройки: input.*

Каждый вызов input.* становится строкой на вкладке Входные данные в окне настроек индикатора. Строки идут в том порядке, в каком вызовы написаны в скрипте. Первый аргумент задаёт значение по умолчанию, второй — подпись строки.

Вызов Что появится в окне настроек
input.int Поле для целого числа
input.float Поле для дробного числа
input.bool Флажок
input.color Выбор цвета
input.string Выпадающий список, если задан options; без него — текстовое поле
input.source Выпадающий список рядов: open, high, low, close, hl2, hlc3, ohlc4, hlcc4, volume
input.enum Выпадающий список из подписей перечисления
input.timeframe Текстовое поле; с options — выпадающий список
input.symbol Текстовое поле

Пример ниже собирает в одном скрипте пять видов настроек:

Loot
indicator("Средняя на выбор", overlay = true)

enum Basis {
    sma = "Простая"
    ema = "Экспоненциальная"
    wma = "Взвешенная"
}

basis     = input.enum(Basis.ema, "Тип средней")
length    = input.int(50, "Период", minval = 1, maxval = 500)
src       = input.source(close, "Источник")
lineColor = input.color(color.orange, "Цвет линии")
showBg    = input.bool(false, "Подсвечивать фон")

avg = switch basis {
    Basis.sma => ta.sma(src, length)
    Basis.ema => ta.ema(src, length)
    =>           ta.wma(src, length)
}

plot(avg, "Средняя", color = lineColor, linewidth = 2)
bgcolor(showBg and close > avg ? color.new(color.teal, 40) : na, title = "Фон")

В окне настроек получится выпадающий список «Тип средней» с пунктами «Простая», «Экспоненциальная» и «Взвешенная». Ниже будут поле периода, список источников, выбор цвета и флажок. Как объявлять перечисления, рассказано в разделе Свои типы и перечисления.

Параметры чисел и строк

  • minval и maxval задают границы: поле не примет период меньше minval или больше maxval.
  • step у input.float задаёт, сколько знаков после запятой показывает поле: при step = 0.1 виден один знак. Стрелок у поля нет, значение вводится с клавиатуры.
  • options у input.string и input.timeframe превращает поле в выпадающий список. Значение по умолчанию обязано быть одним из пунктов, иначе компилятор выдаст ошибку.
  • tooltip, group и inline компилятор принимает, но на вид окна настроек они пока не влияют.
Loot
indicator("Цена для расчёта")

mode  = input.string("Закрытие", "Считать по", options = ["Закрытие", "Середина свечи"])
price = mode == "Закрытие" ? close : hl2

plot(ta.rsi(price, 14), "RSI", color = color.purple)

У input.source умолчанием может быть и ряд рыночных данных, например delta.cum. Такой ряд встанет первым пунктом списка, перед ценовыми рядами. Если же умолчанием стоит выражение вроде (high + low) / 2, строки в окне настроек не будет: выбирать не из чего.

Отдельных настроек для времени, торговой сессии и цены, которую выбирают щелчком на графике, в языке пока нет.

Где хранятся выбранные значения

Значения запоминаются для каждого индикатора на каждом графике отдельно: две копии одного скрипта на разных панелях могут стоять с разными периодами. Кнопка По умолчанию в окне настроек возвращает значения, написанные в коде.

Значение привязано к имени переменной, в которую записан вызов input.*. Подпись строки можно менять свободно, выбранное значение сохранится. Строки можно и переставлять. А если переименовать переменную (length в period), настройка вернётся к значению из кода.

Окно настроек открывается двойным щелчком по строке индикатора в легенде графика или значком настроек в этой строке. Кроме вкладки Входные данные в нём есть Стиль и Видимость — о них ниже.

Линии: plot

plot рисует ряд, по одному значению на каждый бар. Обязателен только первый аргумент — сам ряд. Остальные параметры задаются по имени:

  • title — имя линии в легенде и в окне настроек;
  • color — цвет, постоянный или вычисляемый на каждом баре;
  • linewidth — толщина;
  • style — способ отрисовки, см. таблицу;
  • offset — сдвиг на заданное число баров: положительный вправо, отрицательный влево;
  • show_last — рисовать только последние N баров;
  • join = true — соединить линией точки стилей circles и cross;
  • editable = false — убрать линию из окна настроек;
  • display = display.none — скрыть линию при добавлении; включить её можно на вкладке Видимость.
Стиль Как выглядит
plot.style_line Ломаная линия, стиль по умолчанию
plot.style_linebr То же, что line
plot.style_stepline Ступеньки
plot.style_stepline_diamond Ступеньки с ромбами
plot.style_histogram Тонкие столбики от нуля толщиной в линию
plot.style_columns Столбики от нуля шириной в свечу
plot.style_area Область, закрашенная до нуля
plot.style_areabr То же, что area
plot.style_circles Точки
plot.style_cross Крестики

Линия всегда прерывается там, где у ряда нет значения (na), и не перепрыгивает пропуск прямым отрезком. Поэтому пары line/linebr и area/areabr рисуются одинаково.

Loot
indicator("Стили линий")

d = close - open

plot(d, "Тело свечи", style = plot.style_histogram, color = d >= 0 ? color.teal : color.red)
plot(ta.sma(d, 10), "Средняя 10", style = plot.style_stepline, color = color.orange, linewidth = 2)
plot(ta.sma(d, 30), "Средняя 30", style = plot.style_circles, color = color.gray)

Цвет по барам

Цвет может быть выражением: тогда он считается на каждом баре заново. Цвет na означает, что на этом баре линии нет:

Loot
indicator("Средняя только над ценой", overlay = true)

m = ta.sma(close, 50)
plot(m, "Средняя", color = close > m ? color.teal : na)

Что линия получает в окне настроек

  • На вкладке Стиль настраивается толщина каждой линии. Строка цвета появляется только у линии с постоянным цветом: если цвет выбирает скрипт на каждом баре, менять в окне нечего.
  • На вкладке Видимость у каждой линии есть флажок показа. Он появляется, если линий больше одной или если линия скрыта через display.
  • Линия с editable = false не получает строк ни на одной вкладке.

Уровни и заливки

hline рисует горизонтальную линию на постоянной цене — например, границы зон RSI. Цена должна быть числом или настройкой input.*: ряд, меняющийся от бара к бару, сюда не подходит. Для такой линии нужен plot. Стиль линии задают hline.style_solid, hline.style_dashed и hline.style_dotted.

fill закрашивает область между двумя границами. Чтобы получить границу, результат hline или plot записывают в переменную:

Loot
indicator("RSI с зонами")

length = input.int(14, "Период", minval = 1)
r = ta.rsi(close, length)

top    = hline(70, "Перекупленность", color = color.gray, linestyle = hline.style_dashed)
bottom = hline(30, "Перепроданность", color = color.gray, linestyle = hline.style_dashed)
fill(top, bottom, color = color.new(color.purple, 30), title = "Зона")

plot(r, "RSI", color = r > 70 ? color.red : r < 30 ? color.teal : color.purple)

Обе границы должны быть одного рода: два уровня hline или две линии plot. Заливку между линией и уровнем компилятор не примет.

Цвет заливки между двумя линиями может меняться от бара к бару. Так получается «облако» из двух средних:

Loot
indicator("Облако", overlay = true)

fast = ta.ema(close, 9)
slow = ta.ema(close, 21)

pf = plot(fast, "Быстрая", color = color.teal)
ps = plot(slow, "Медленная", color = color.orange)
fill(pf, ps, color = fast > slow ? color.new(color.teal, 50) : color.new(color.red, 50), title = "Облако")

Есть и градиентная заливка. Задайте top_value и bottom_value, чтобы указать высоты, где цвет равен top_color и bottom_color; между ними цвет плавно переходит. Эти высоты должны быть постоянными числами. Если нужна заливка до постоянного уровня, сделайте его линией, plot(50). Но помните, что это одна из трёх рисуемых линий.

Loot
indicator("RSI с градиентом")

r  = ta.rsi(close, 14)
pr = plot(r, "RSI", color = color.purple)
pm = plot(50, "Середина", color = color.gray)
fill(pr, pm, top_value = 80, bottom_value = 50,
     top_color = color.new(color.teal, 160), bottom_color = color.new(color.teal, 0))

Фон и цвет свечей

bgcolor закрашивает фон под баром, barcolor перекрашивает саму свечу. Оба принимают цвет, вычисляемый на каждом баре; на барах с цветом na ничего не меняется.

Loot
indicator("Подсветка объёма", overlay = true)

avgVol = ta.sma(volume, 20)
spike  = volume > avgVol * 2

bgcolor(spike ? color.new(color.orange, 40) : na, title = "Всплеск объёма")
barcolor(close > open ? color.teal : color.red, title = "Цвет свечей")

Маркеры: plotshape и plotchar

plotshape ставит значок на тех барах, где условие истинно. plotchar делает то же с любым символом.

Loot
indicator("Пересечения", overlay = true)

fast = ta.ema(close, 9)
slow = ta.ema(close, 21)

plotshape(ta.crossover(fast, slow), "Вверх", style = shape.triangleup,
          location = location.belowbar, color = color.teal, size = size.small)
plotshape(ta.crossunder(fast, slow), "Вниз", style = shape.triangledown,
          location = location.abovebar, color = color.red, size = size.small)
plotchar(volume > ta.sma(volume, 20) * 3, "Объём", char = "●", location = location.top, color = color.orange)
  • Форма, shape.*: triangleup, triangledown, arrowup, arrowdown, circle, square, diamond, cross, xcross, flag, labelup, labeldown.
  • Место, location.*: abovebar — над свечой, belowbar — под свечой, top и bottom — у верхнего и нижнего края панели. В отдельной панели под графиком «над свечой» и «под свечой» тоже означают верхний и нижний край: у такой панели своя шкала, и цены свечей на ней не отложены.
  • Размер, size.*: auto, tiny, small, normal, large, huge.
  • text добавляет к значку короткую подпись. Когда график сильно отдалён и свечи узкие, подписи скрываются, а значки остаются.

Графические объекты

Кроме рядов, скрипт может рисовать отдельные объекты: подписи label.new, отрезки line.new, прямоугольники box.new и таблицы table.new. Каждый вызов *.new возвращает объект. Его можно передвинуть функциями set_* (label.set_xy, line.set_x2, box.set_top и так далее), прочитать через get_*, скопировать через copy или удалить через delete.

По горизонтали объект по умолчанию привязан к номеру бара, bar_index. С параметром xloc = xloc.bar_time координата задаётся временем бара. Отрезку и прямоугольнику параметр extend (extend.right, extend.left, extend.both) продлевает край до границы графика.

Объект остаётся на графике, пока его не удалят. Скрипт выполняется на каждом баре, поэтому label.new без условия создаст по подписи на каждый бар. Чтобы держать один объект и двигать его, храните его в переменной var, а старый удаляйте:

Loot
indicator("Последний пивот", overlay = true, maxLabelsCount = 50)

ph = ta.pivothigh(high, 10, 10)

var line level = na
if not na(ph) {
    label.new(bar_index - 10, ph, str.tostring(ph), style = label.style_label_down,
              color = color.orange, textcolor = color.white, size = size.small)
    line.delete(level)
    level := line.new(bar_index - 10, ph, bar_index, ph, extend = extend.right,
                      color = color.orange, style = line.style_dashed)
}

Скрипт подписывает каждый найденный максимум и тянет пунктир от последнего из них вправо. Прежний пунктир он при этом удаляет.

Живых объектов каждого вида одновременно бывает не больше 500. Когда появляется пятьсот первый, самый старый исчезает. Параметры maxLinesCount, maxLabelsCount и maxBoxesCount в indicator() уменьшают этот предел. Значение больше 500 урезается до 500.

Таблицы

Таблица привязана не к барам, а к углу или краю панели и не двигается при прокрутке графика. Место задаёт position.*: top_left, top_center, top_right, middle_left, middle_center, middle_right, bottom_left, bottom_center, bottom_right. Ячейки заполняет table.cell. Удобно делать это только на последнем баре, чтобы не переписывать таблицу на всей истории:

Loot
indicator("Сводка", overlay = true)

var t = table.new(position.top_right, 2, 2, bgcolor = color.new(color.black, 160))
if barstate.islast {
    table.cell(t, 0, 0, "RSI", text_color = color.white)
    table.cell(t, 1, 0, str.tostring(math.round(ta.rsi(close, 14), 1)), text_color = color.white)
    table.cell(t, 0, 1, "ATR", text_color = color.white)
    table.cell(t, 1, 1, str.tostring(math.round(ta.atr(14), 2)), text_color = color.white)
}

У таблицы не больше 200 столбцов и 200 строк. Таблица, в которой больше 2000 ячеек, не создаётся.

Цвета

Именованные цвета: color.red, color.green, color.blue, color.teal, color.orange, color.purple, color.yellow, color.white, color.black, color.gray, color.silver, color.maroon, color.navy, color.olive, color.lime, color.aqua, color.fuchsia.

Цвет можно записать и кодом: #FF8800 — непрозрачный, #FF880040 — с прозрачностью. Последняя пара цифр задаёт непрозрачность: 00 — полностью прозрачный, FF — сплошной.

  • color.rgb(r, g, b) собирает цвет из составляющих от 0 до 255. Четвёртый аргумент — непрозрачность, по умолчанию 255.
  • color.from_gradient(value, bottomValue, topValue, bottomColor, topColor) возвращает цвет между двумя крайними по положению value в диапазоне. Удобно раскрашивать осциллятор от холодного к горячему.
  • na вместо цвета значит «не рисовать».
Loot
indicator("RSI в цвете")

r = ta.rsi(close, 14)
heat = color.from_gradient(r, 30, 70, color.rgb(0, 150, 136), color.rgb(244, 67, 54))

plot(r, "RSI", color = heat, linewidth = 2)
bgcolor(r > 70 ? color.new(color.red, 30) : r < 30 ? color.new(color.teal, 30) : na, title = "Зоны")

Дальше

FAQ

Почему четвёртая линия моего скрипта не видна на графике?
Панель рисует только первые три вызова plot по порядку в тексте. Остальные компилируются, но на графике не появляются. Маркеры, фон, уровни и графические объекты в этот предел не входят.
Как сделать цвет полупрозрачным?
Через color.new(цвет, alpha), где alpha от 0 (цвета не видно) до 255 (сплошной). Для фона и заливок удобны значения 30–60. В коде цвета #RRGGBBAA последняя пара цифр — непрозрачность.
Почему после правки скрипта настройка вернулась к значению по умолчанию?
Выбранное значение привязано к имени переменной, в которую записан вызов input.*. Если переменную переименовать, связь теряется. Подпись строки и порядок настроек менять можно.
Почему fill не закрашивает область между линией и уровнем?
Обе границы заливки должны быть одного рода: две линии plot или два уровня hline. Постоянный уровень можно нарисовать линией plot(50), но это займёт одну из трёх рисуемых линий.