Налаштування та відображення
1Налаштування та відображення
Налаштування 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 |
Текстове поле |
Приклад нижче збирає в одному скрипті п’ять видів налаштувань:
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компілятор приймає, але на вигляд вікна налаштувань вони поки не впливають.
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 малюються однаково.
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 означає, що на цьому барі лінії немає:
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 записують у змінну:
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. Заливку між лінією та рівнем компілятор не прийме.
Колір заливки між двома лініями може змінюватися від бара до бара. Так виходить «хмара» з двох середніх:
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). Але пам’ятайте, що це одна з трьох ліній, які малюються.
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 нічого не змінюється.
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 робить те саме з будь-яким символом.
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, а старий видаляйте:
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. Зручно робити це лише на останньому барі, щоб не переписувати таблицю на всій історії:
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замість кольору означає «не малювати».
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 = "Зоны")Далі
https://docs.lootx.trade/uk/loot/inputs-drawing