Язык Loot
Скриптовый язык LootX: индикаторы, алерты и торговые правила прямо в терминале.
1Обзор языка
Зачем нужен Loot, как выглядит скрипт и чем он отличается от привычных языков индикаторов.
Loot — небольшой язык для расчётов по рыночным сериям. Скрипт выполняется на каждой новой свече и возвращает то, что нужно нарисовать или сделать.
// Импульсный уровень: свеча с объёмом выше среднего в N раз
study("Impulse Levels", overlay = true)
input mult = 2.5 // во сколько раз объём выше среднего
input len = 20 // длина окна
let avgVol = sma(volume, len)
let impulse = volume > avgVol * mult
plot(impulse ? high : na, color = colors.teal, style = "cross")
alert(impulse, "Импульсная свеча по {symbol}")Чем он отличается
| Loot | Привычные языки индикаторов | |
|---|---|---|
| Переменные | let, изменяемые явно |
часто неявные серии |
| Типы | проверяются до запуска | в основном во время |
| Отсутствующее значение | отдельный na, не 0 |
часто 0 или NaN |
| Доступ к истории | close[1] |
как правило так же |
| Исполнение | локально, в вашем терминале | на сервере сервиса |
Устройство скрипта
Объявление
study(...) для индикатора или strategy(...) для торгового правила. Ровно одно на файл.
Входные параметры
input создаёт поле в настройках индикатора — пользователь меняет значение, не трогая код.
Расчёты
Обычные выражения над сериями. Серия — это значение на каждой свече; close[1] — предыдущее.
Вывод
plot, fill, label, alert — то, что попадёт на график и в уведомления.
Торговое правило
strategy("Пересечение средних", overlay = true)
input fast = 9
input slow = 21
let f = ema(close, fast)
let s = ema(close, slow)
plot(f, color = colors.teal)
plot(s, color = colors.blue)
when crossover(f, s) {
signal.long(qty = risk.byStop(stop = low[1]), comment = "ema cross up")
}
when crossunder(f, s) {
signal.close(comment = "ema cross down")
}Дальше
https://docs.lootx.trade/ru/loot/overview
2Справочник функций
Серии, математика, встроенные индикаторы, рисование и сигналы.
Серии и доступ к истории
| Имя | Описание |
|---|---|
open, high, low, close |
Цены текущей свечи |
volume |
Объём |
time |
Время открытия свечи, UTC |
hl2, hlc3, ohlc4 |
Производные средние цены |
x[n] |
Значение x n свечей назад |
na |
Отсутствующее значение |
Математика
abs(x) min(a, b) max(a, b) round(x, digits)
sqrt(x) pow(x, y) log(x) exp(x)
sum(series, len) highest(series, len) lowest(series, len)Индикаторы
| Функция | Возвращает |
|---|---|
sma(src, len) |
Простая скользящая |
ema(src, len) |
Экспоненциальная скользящая |
rma(src, len) |
Сглаживание Уайлдера |
rsi(src, len) |
Индекс относительной силы |
atr(len) |
Средний истинный диапазон |
stdev(src, len) |
Стандартное отклонение |
macd(src, fast, slow, signal) |
Кортеж (macd, signal, hist) |
bb(src, len, mult) |
Кортеж (basis, upper, lower) |
let (macdLine, signalLine, hist) = macd(close, 12, 26, 9)
plot(hist, style = "histogram", color = hist >= 0 ? colors.green : colors.red)Условия
crossover(a, b) // a пересекла b снизу вверх на этой свече
crossunder(a, b) // сверху вниз
barsSince(cond) // сколько свечей прошло с последнего true
valueWhen(cond, x) // значение x в момент последнего trueРисование
plot(series, color = colors.teal, width = 2, style = "line")
fill(upper, lower, color = colors.teal, opacity = 0.08)
label(condition, text = "Пробой {symbol}", position = "above")
hline(0, color = colors.muted, style = "dashed")Сигналы и алерты
| Вызов | Что делает |
|---|---|
alert(cond, text) |
Уведомление в терминале и на телефоне |
signal.long(qty, stop, take, comment) |
Предложение открыть длинную позицию |
signal.short(...) |
То же для короткой |
signal.close(comment) |
Закрыть текущую позицию |
risk.byStop(stop) |
Объём из заданного в настройках риска на сделку |
Подстановки в тексте алерта
{symbol}, {price}, {tf}, {time}, а также любое значение скрипта через {= выражение}:
alert(rsi(close, 14) > 70, "{symbol} перегрет: RSI {= round(rsi(close, 14), 1)}")https://docs.lootx.trade/ru/loot/reference