Импорт из Pine Script
Как перенести индикатор с Pine Script в LootScript: где кнопка импорта, что конвертер меняет сам, что отмечает для проверки и как довести результат.
Если индикатор уже написан на Pine Script, переписывать его руками не нужно. Терминал конвертирует файл .pine в LootScript: меняет синтаксис и имена, добавляет недостающее и записывает в начало файла заметки — что изменено и где конвертеру пришлось угадывать.
Конвертер — переводчик, а не слой совместимости. Он не обещает тех же чисел, что в исходной среде, и не добавляет в терминал функций, которых там нет. Поэтому после импорта скрипт нужно открыть, прочитать заметки и проверить на графике. LootScript разработан независимо и не связан с TradingView: синтаксис похож намеренно, но языки не совместимы.
Как импортировать
Откройте окно индикаторов
Нажмите ƒ на панели графика — откроется окно Индикаторы.
Нажмите «Импорт…»
Кнопка стоит рядом со строкой поиска. Выберите файл .pine, .loot или .txt. Файл .loot ляжет в библиотеку как есть. Файл .pine — и текстовый файл, похожий на Pine Script, — пройдёт через конвертер.
Прочитайте итог
Под строкой поиска появится одна из строк:
- «Импортировано «…»» — заметок нет, скрипт готов;
- «Импортировано «…»: заметок конвертера — N, см. шапку скрипта»;
- «Импортировано «…», но скрипт не компилируется (ошибок: N)…» — рядом с текстом первой ошибки.
Окно переключится на раздел Мои скрипты, а в поиск подставится имя нового скрипта.
Откройте скрипт в редакторе
Прочитайте шапку с заметками и поправьте то, на что она указывает. Как — ниже.
Импорт не перезаписывает скрипт с тем же именем: новый получит суффикс, например -2. Исходный файл не меняется.
Через папку скриптов
Можно просто положить файл имя.pine в папку скриптов — на Windows это %APPDATA%\TradingTerminal\scripts. При следующем запуске терминал создаст рядом имя.loot. Если имя.loot уже есть, он не трогается — ваши правки не пропадут. Чтобы сконвертировать заново, например после обновления терминала, удалите .loot.
Что делает конвертер
- Отступы → фигурные скобки. Блоки
if,else if,else, циклов и функций получают скобки. Строки-продолжения склеиваются в одну. - Функции.
f(x) =>становитсяfunc f(x), а последнее выражение функции — явнымreturn. - Циклы. Включительный
for i = 0 to 9становится полуоткрытымfor i in 0 .. 10. Направление берётся из шага или из литералов границ; если его не видно, конвертер считает цикл восходящим и пишет об этом. - Условия-значения.
ifс одним выражением в ветках превращается в тернарный оператор,switchполучает скобки. - Прозрачность → альфа. В Pine Script прозрачность идёт от 0 до 100, где 0 — непрозрачно. В LootScript альфа — от 0 до 255, где 255 — непрозрачно.
color.new(c, 50)станетcolor.new(c, 128), а аргументtransp=превратится вcolor.new(…)вокруг цвета. - Имена. Старые имена без пространства получают его:
sma→ta.sma.study→indicator,security→request.security,tostring→str.tostring,syminfo.*→sym.*,timeframe.*→tf.*. Короткая формаinput(…)получает тип:input.int,input.sourceи так далее. - Занятые имена. Переменная, чьё имя в LootScript — ключевое слово или пространство (
delta,oi,tf,sym,func…), получает подчёркивание в конце везде, где встречается:delta→delta_. - Лишние аргументы — те, которых у функции в LootScript нет, — снимаются.
- Объявление. Если в файле не было
indicator(…)илиstrategy(…), конвертер добавитindicatorс именем файла. - Комментарии и пустые строки остаются на своих местах.
Конвертер не отказывает ни на каком файле. Строку, которую он не понял, он не выбрасывает, а оставляет комментарием // [не разобрано] … на прежнем месте.
Шапка с заметками
Первая строка шапки говорит, откуда файл, — «Импортировано из скрипта на Pine Script (версия 5). Заметки конвертера:». Дальше по строке на каждую правку, по порядку строк исходника: «Строка N: вид: что — подробности». Заметки пишутся на языке интерфейса.
| Вид заметки | Что значит | Проверить? |
|---|---|---|
| переименовано | Имя заменено на аналог в LootScript | нет |
| пересчитано | Прозрачность переведена в альфу | нет |
| переписано | Изменилась форма: цикл, return, тип короткого input |
взглянуть |
| имя «…» занято в LootScript | Переменной добавлено подчёркивание | нет |
| объявления indicator(…) не было | Объявление добавлено из имени файла | нет |
| аргумент снят | У функции в LootScript нет такого параметра | да |
| допущение | Конвертер угадал: направление цикла, тип ввода, который не удалось вывести | да |
| нет в этой сборке | Такой функции в терминале нет — скрипт не скомпилируется с ошибкой «неизвестное имя» | да |
| не разобрано | Строку не удалось разобрать, она сохранена комментарием | да |
Когда проверите, шапку можно удалить — это обычные комментарии.
Пример
Небольшой индикатор на Pine Script: столбики размаха бара, подсвеченные, когда размах вдвое больше среднего.
//@version=5
indicator("Range spike", overlay=false)
len = input.int(20, "Length")
avgRange(n) =>
r = high - low
ta.sma(r, n)
base = avgRange(len)
spike = high - low > base * 2
plot(high - low, style=plot.style_columns, color=spike ? color.orange : color.new(color.gray, 60))
plot(base, color=color.blue, trackprice=true)Так его записывает конвертер:
// Импортировано из скрипта на Pine Script (версия 5). Заметки конвертера:
//
// Строка 6: переписано: avgRange — неявный возврат последнего оператора записан как return
// Строка 9: пересчитано: transp → alpha — прозрачность 0…100 пересчитана в альфу 0…255
// Строка 10: аргумент снят: plot: trackprice — такого параметра в LootScript нет
indicator("Range spike", overlay = false)
len = input.int(20, "Length")
func avgRange(n) {
r = high - low
return ta.sma(r, n)
}
base = avgRange(len)
spike = high - low > base * 2
plot(high - low, color = spike ? color.orange : color.new(color.gray, 102), style = plot.style_columns)
plot(base, color = color.blue)Функция получила скобки и return, прозрачность 60 стала альфой 102, а trackprice снят — такого параметра нет. Заметка «аргумент снят» просит проверить, не нужен ли этот параметр по смыслу. Здесь он лишь рисовал линию последнего значения, и скрипт работает без него.
Как проверить и доработать
- Прочитайте шапку. Начните со строк с видами «аргумент снят», «допущение», «нет в этой сборке» и «не разобрано».
- Посмотрите вкладку «Проблемы» в консоли редактора. Скрипт с ошибками на график не добавится.
- Добавьте на график и сравните с тем, что показывал оригинал, на нескольких участках истории.
- Попросите помощника. Откройте ИИ-помощника и наберите
/fix— он скомпилирует скрипт, прогонит его на свечах и исправит ошибки. Можно добавить уточнение:/fix разбери заметки конвертера в шапке./explainрасскажет, что делает скрипт.
Что не переносится
- Функции, которых нет в терминале. Имя остаётся в коде, заметка «нет в этой сборке» и ошибка компилятора указывают на одно и то же место. Замените вызов вручную или попросите помощника подобрать аналог.
- Многострочные строки, импорт чужих библиотек, экспорт функций. Конвертер переносит то, что может записать, и отмечает остальное.
- Больше трёх линий. Панель графика рисует только первые три
plotскрипта. Лишние ряды разнесите по отдельным скриптам. - Реальная торговля. Объявление
strategy(…)переносится, но стратегия LootScript торгует только в тестере стратегий — на симулированном счёте.