Алерты из скриптов
Как скрипт на LootScript сообщает о сработке условия: alert() и alertcondition(), частота, взвод условий, куда приходит оповещение и чего у скриптовых алертов нет.
Скрипт может сообщить вам, что на живом рынке выполнилось условие: пробой уровня, всплеск дельты, пересечение линий. Для этого в LootScript есть две функции — alert(), который скрипт вызывает сам, и alertcondition(), условие, которое вы включаете вручную.
Сработка уходит в тот же конвейер, что и остальные оповещения терминала: запись в ленте Оповещения, звук, всплывающая плашка. Всё это считается внутри терминала на вашем компьютере: алерты работают, пока терминал запущен и скрипт стоит на графике.
Два способа
alert() |
alertcondition() |
|
|---|---|---|
| Кто решает, звенеть ли | Код скрипта | Вы: условие нужно взвести |
| Когда срабатывает | По выбранной частоте, в том числе на незакрытом баре | Только на закрытии бара, не чаще раза за бар |
| Текст | Любая строка, можно собрать из чисел | Фиксированный текст в коде |
| Где включается | Всегда, пока скрипт на графике | Галочкой в консоли редактора |
Если алерт нужен всегда — пишите alert(). Если скрипт объявляет несколько сигналов, а звенеть должны только некоторые — объявите их через alertcondition() и взводите нужные.
alert(): алерт из кода
alert(message, freq = alert.freq_once_per_bar_close)message — строка. Числа в неё вставляют через str.tostring: "Цена " + str.tostring(close). Текст приходит в оповещение как есть, терминал его не переводит и не правит.
Частота задаётся константой:
| Частота | Когда звенит |
|---|---|
alert.freq_once_per_bar_close |
По умолчанию. Один раз, когда бар закрылся: с первым обновлением следующего бара, по значениям закрытого |
alert.freq_once_per_bar |
В первый момент, когда вызов выполнился на этом баре, — даже если бар ещё формируется. Дальше до следующего бара молчит |
alert.freq_all |
На каждом пересчёте живого бара, где выполнился вызов |
Частота считается для каждого вызова alert() отдельно: два вызова в одном скрипте не глушат друг друга. За один пересчёт скрипт отправляет не больше 16 алертов, остальные отбрасываются.
Пример: алерт на всплеск дельты, как только он появился на формирующемся баре.
indicator("Всплеск дельты", overlay = false)
mult = input.float(3.0, "Во сколько раз больше обычного", minval = 1.5, step = 0.5)
base = ta.sma(math.abs(delta.value), 50)
spike = delta.available and math.abs(delta.value) > base * mult
plot(delta.value, "Дельта", style = plot.style_columns, color = delta.value >= 0 ? color.teal : color.red)
if spike {
alert("Всплеск дельты: " + str.tostring(delta.value, "#.##"), freq = alert.freq_once_per_bar)
}Там, где дельты нет, delta.available ложно и алерт молчит — подробнее о правиле na в разделе Данные рынка.
alertcondition(): условие, которое взводите вы
alertcondition(condition, title, message)condition — логическое выражение, title — название условия, message — текст оповещения. title и message — строки прямо в коде, собрать их из чисел нельзя. Без message в оповещение уйдёт title.
Условие звенит только на закрытии бара, не чаще раза за бар и только если оно взведено. По умолчанию все условия выключены.
Добавьте скрипт на график
В редакторе скриптов нажмите Добавить на график.
Откройте вкладку «Вывод»
В консоли под кодом выберите вкладку Вывод. Там показаны значения рядов на последнем баре и список «Условия алертов (alertcondition) — взведите нужные».
Взведите условия
Отметьте галочками условия, по которым хотите получать оповещения. Если скрипт стоит на нескольких графиках, у каждого свой список.
История молчит
Алерты звенят только на живых обновлениях. Первый расчёт после загрузки графика, после смены инструмента и после подгрузки более старой истории считается историей: на прошлых барах ни alert(), ни alertcondition() не срабатывают. Поэтому, добавив скрипт на график, вы не получите пачку оповещений за прошлое.
Проверить условие на истории можно глазами: нарисуйте его меткой plotshape — она покажет каждый бар, где алерт бы сработал.
Куда приходит алерт
Каждая сработка:
- Записывается в ленту «Оповещения» с источником «Скриптовый алерт». В записи — текст сообщения, имя скрипта и, для
alertcondition(), название условия. Лента открывается отдельным окном или панелью рабочего пространства; фильтр Источники оставляет в ней только скриптовые алерты. - Проигрывает звук. Его выбирают в Настройки → Оповещения, блок «Звуки», строка «Скриптовый алерт»: список звуков и переключатель, который выключает звук.
- Показывает плашку «Имя скрипта: текст».
- Подсвечивает вкладку рабочего пространства, где стоит график со скриптом.
Остальные оповещения терминала описаны на странице Алерты и уровни.
Журнал: log.*
Для отладки условий есть журнал. log.info, log.warning и log.error пишут строку во вкладку Журнал консоли редактора — туда же, где Проблемы и Вывод.
- Журнал, как и алерты, пишется только на живых обновлениях — на истории молчит.
- На один бар — не больше 16 строк, остальные отбрасываются.
- Консоль хранит последние 256 строк. Более старые вытесняются, их число показано как «вытеснено строк». Кнопка Очистить очищает журнал.
indicator("Проверка условия", overlay = true)
len = input.int(20, "Канал, баров", minval = 2, maxval = 500)
upper = ta.highest(high, len)[1]
plot(upper, "Верх канала", color = color.teal)
if barstate.islast {
log.info("Закрытие " + str.tostring(close) + ", верх канала " + str.tostring(upper))
}Пример: пробой канала
Скрипт рисует верхнюю границу канала, отмечает пробои треугольником и сообщает о них двумя способами: alert() звенит всегда, а условие «Пробой вверх» — только если вы его взвели.
indicator("Пробой канала с алертом", overlay = true)
len = input.int(20, "Канал, баров", minval = 2, maxval = 500)
upper = ta.highest(high, len)[1]
breakUp = ta.crossover(close, upper)
plot(upper, "Верх канала", color = color.teal)
plotshape(breakUp, "Пробой", style = shape.triangleup, location = location.belowbar, color = color.teal, size = size.small)
if breakUp {
alert("Пробой вверх, цена " + str.tostring(close), alert.freq_once_per_bar_close)
}
alertcondition(breakUp, "Пробой вверх", "Цена закрылась выше канала")Граница берётся со сдвигом [1] — по предыдущим барам, иначе текущий максимум всегда был бы внутри канала. Частота freq_once_per_bar_close значит, что алерт придёт после закрытия бара над каналом, а треугольник на графике останется ровно там, где алерт прозвенел. В реальном скрипте обычно оставляют один из двух способов — здесь оба для сравнения.