Помилки компіляції та виконання
Усі коди LS, які показує редактор і графік LootScript: текст повідомлення, причина та спосіб виправлення, часті помилки з прикладами, межі виконання й випадки, коли замість помилки виходить na.
Кожне повідомлення компілятора й виконувача LootScript починається з коду виду LS2008. Код не змінюється між версіями і не залежить від мови інтерфейсу, тому за ним зручно шукати: тут зібрані всі коди, які може показати термінал, з текстом повідомлення, причиною та способом виправлення.
Повідомлення виводяться російською, якщо інтерфейс терміналу російською, і англійською на будь-якій іншій мові. Спочатку — помилки, які трапляються найчастіше, потім помилки виконання і повна таблиця.
Де видно помилки
При компіляції. Редактор компілює скрипт при кожній паузі набору. Знайдене потрапляє у вкладку «Проблеми» у нижній частині редактора: код, текст і позиція виду «Рядок 6:6». Подвійний клік по рядку переводить курсор до місця помилки. У заголовку редактора відображається підсумок: «ок · 12 мс», «попереджень: 2» або «помилок: 1».
При виконанні. Скрипт без помилок компіляції може зупинитися на якомусь барі: закінчився бюджет операцій, індекс вийшов за межі масиву, невідомий інструмент. Тоді у вкладці «Вивід» з’явиться рядок «Скрипт зупинено: LS6004: …», а у вікні тестера стратегій — та сама причина. Інші скрипти, панелі й сам термінал продовжують працювати.
Діагностики бувають трьох рівнів:
| Рівень | Що означає | Що з графіком |
|---|---|---|
| Помилка | Скрипт не зібраний | На графік не додається: «Скрипт з помилками на графік не кладёться — див. вкладку «Проблеми»». Якщо скрипт уже на графіках, там залишається попередня робоча версія |
| Попередження | Скрипт зібраний, але результат може вводити в оману: наприклад, перемальовується на живому барі | Скрипт працює |
| Зведення | Скрипт зібраний, але якась його налаштування нічого не робить | Скрипт працює |
Як влаштовані коди
| Коди | Етап | Про що |
|---|---|---|
| LS0001–LS0009 | Читання тексту | Символи, рядки, числа, кольори, директива #version |
| LS1000–LS1012 | Розбір | Дужки, блоки, порядок операторів, оголошення скрипта |
| LS2000–LS2030 | Типи й імена | Невідомі імена, типи, аргументи, na |
| LS3000–LS3033 | Зміст програми | ta.* у гілках, рекурсія, стратегії, бібліотеки, request.security |
| LS4000–LS4009 | Межі компіляції | Надто багато рядів, виводів, викликів |
| LS5000–LS5013 | Перемальовування і чесність тесту | Значення, які на історії виглядають інакше, ніж у живому режимі |
| LS6000–LS6036 | Виконання | Бюджети, індекси, колекції, рядки, об’єкти малювання |
| LS0999 | Внутрішній збій | Дефект компілятора — про нього потрібно повідомити |
Часті помилки компіляції
LS1009 — немає оголошення скрипта
«Немає оголошення скрипта — почніть з indicator(“Назва”)». Першим оператором файлу має стояти indicator(...), strategy(...) або library(...). Та сама помилка з’являється, якщо оголошення є, але вище нього щось написано. Коментарі й директива #version 1 не заважають.
// Так не можна: оголошення не перше
len = input.int(14, "Довжина")
indicator("RSI")indicator("RSI")
len = input.int(14, "Довжина")Друге оголошення в тому ж файлі дає LS1008: у скрипта воно одне.
LS2002 — невідоме ім’я
«Невідоме ім’я «…» — перевірте написання або оголосіть його вище». Найчастіше це опечатка або функція без простору імен: всі індикаторні функції в ta, математика — в math, кольори — в color.
avg = sma(close, 20)avg = ta.sma(close, 20)Та сама помилка буде, якщо змінну читають раніше рядка, де її оголосили. Повний список імен — у довіднику функцій.
LS2008 — порівняння з na
«Порівняння з na завжди хибне — використовуйте na(x)». Будь‑яке порівняння з na, включно з == і !=, дає false, тому компілятор таку запис не пропустить.
x = ta.sma(close, 50)
plot(x == na ? close : x)x = ta.sma(close, 50)
plot(na(x) ? close : x)Коротше те саме пишеться через ??: plot(x ?? close).
LS2014 — значення змінюється від бару до бару там, де потрібна константа
««…» в «…» вимагає значення не слабшого за input, а передано series — візьміть input.*(…) або літерал». Довжина вікна ta.* має бути відома до першого бару. Довжина, яку вибирають за умовою на кожному барі, не підходить.
len = close > open ? 10 : 20
avg = ta.sma(close, len)Порахуйте обидва варіанти і вибирайте результат, а не довжину:
fast = ta.sma(close, 10)
slow = ta.sma(close, 20)
avg = close > open ? fast : slowЯкщо довжину має задавати користувач, візьміть її з input.int(...).
LS3004 — виклик ta.* залежить від змінної з гілки
«Аргумент «…» не можна обчислити поза гілкою — винесіть виклик ta.* на верхній рівень». Функції ta.* пам’ятають попередні бари, тому компілятор обчислює їх на кожному барі, навіть якщо виклик написаний всередині if. Якщо аргумент оголошено лише всередині гілки, на інших барах його просто нема.
var float avgBody = na
if close > open {
body = close - open
avgBody := ta.sma(body, 10)
}body = close - open
avgBody = ta.sma(body, 10)LS2017, LS2007, LS1006 — рядки, умови й порівняння
У цих трьох помилок спільна причина: LootScript не приводить типи мовчки.
| Код | Повідомлення | Як виправити |
|---|---|---|
| LS2017 | «Рядок не можна додавати до числа (… + …) — використовуйте str.tostring(…)» | "RSI " + str.tostring(r) замість "RSI " + r |
| LS2007 | «Умова має бути bool, а тут …» | if volume > 0 замість if volume — числа не мають істинності |
| LS1006 | «Порівняння не ланцюжаться — напишіть a < b and b < c» | low < close and close < high замість low < close < high |
LS2018 і LS2019 — ім’я вже зайнято
««…» вже оголошено в цій області» (LS2018) — змінну оголосили вдруге через =. Щоб змінити значення, використовуйте :=.
level = high
level := low««…» затемнює вбудоване ім’я — оберіть інше» (LS2019) — змінна, функція чи тип названі так само, як вбудований ряд чи функція: close, time, hour, volume. Перейменуйте: startHour замість hour. Імена просторів на кшталт color або position для змінних можна використовувати.
LS2004 і LS2005 — аргументи виклику
««…» очікує … аргумент(ів), а передано …» (LS2004) і «У «…» немає параметра «…»» (LS2005). Звірте виклик із сигнатурою в довіднику: імена параметрів пишуться точно так, як там вказано.
plot(close, colour = color.red)plot(close, color = color.red)LS3011 і LS5011 — стратегії
«strategy.* доступно лише в strategy(…)» (LS3011): заявки і стан позиції є тільки у скрипта, оголошеного через strategy(...). Замініть indicator("…") на strategy("…").
«Стратегія читає «…»: у біржового стакана і стрічки угод немає історії, бектест був би фікцією» (LS5011): стратегія перевіряється на історії, а у book.* і tape.* історії нема — на кожному минулому барі там na.
strategy("Перекіс стакана")
if book.imbalance(10) > 0.5 {
strategy.entry("L", strategy.long)
}Для історії стакана є простір depth: там, де стакан записано, воно дає значення на кожному барі.
strategy("Перекіс стакана")
if depth.imbalance(1.0) > 0.5 {
strategy.entry("L", strategy.long)
}LS5000–LS5006 — попередження про перемальовування
Ці попередження не заважають скрипту працювати. Вони кажуть, що лінія на історії виглядатиме інакше, ніж її бачили вживу:
- LS5001 — на графік доходить значення, яке є лише на живому барі (
barstate.isrealtime,barstate.isnew). - LS5000 — на графік доходить змінна
varip: вона накопичує тики живого бара, яких в історії нема. - LS5006 — на графік доходять
book.*абоtape.*: на історії ряд пустий. - LS5003 — значення старшого таймфрейму з
request.securityбез[1]: незакритий бар ще зміниться. - LS5002 —
lookahead = trueвrequest.security: на історії скрипт бачить майбутнє. - LS5005 — на графік доходить
math.randomабоtimenow: два прогони дадуть різні лінії.
Якщо так і задумано — наприклад, індикатор потрібен лише для живої торгівлі — попередження можна залишити.
LS3016 — налаштування прийнята і нічого не робить
Це зведення, а не помилка. Воно трапляється в скриптах, перенесених з інших платформ: параметр існує для сумісності, але в терміналі на нього нічого не впливає. Друга частина повідомлення пояснює чому.
| Що написано | Пояснення в повідомленні |
|---|---|
maxBarsBack в оголошенні |
історія завантажується колонкою цілком |
format, precision, scale в оголошенні |
шкалою значень і її форматом керує термінал |
timeframe в оголошенні |
скрипт рахується на таймфреймі графіка, інший дає request.security |
Товщина, стиль або інша налаштування виводу, задана виразом, а не константою (колір plot та відміток може змінюватися по барам) |
ця збірка читає таку налаштування лише як константу |
color у четвертого і наступних plot |
панель малює тільки перші три ряди |
location.absolute у plotshape або plotchar |
у відмітки немає ряду, до значення якого її можна притиснути |
display, якого у ряду немає |
у цього ряду немає такої поверхні |
Помилки виконання
Помилка виконання зупиняє скрипт на тому барі, де вона трапилася. Текст з’являється у вкладці «Вивід» у вигляді «Скрипт зупинено: LS6004: …».
LS6004 і LS6005 — скрипт працює занадто довго
«Скрипт вичерпав бюджет операцій на бар — спростіть цикл» (LS6004) і «Скрипт перевищив ліміт часу на проходження» (LS6005). На кожному барі є бюджет у 2 000 000 операцій. Час теж обмежено: весь прогін по історії — 2 секунди, один тік живого бара — 20 мс. Майже завжди причина — цикл, який не завершується або обходить забагато даних на кожному барі.
var int n = 0
i = 0
while i < 10 {
n := n + 1
}var int n = 0
i = 0
while i < 10 {
n := n + 1
i := i + 1
}LS6002 і LS5004 — читання майбутнього
Індекс історії x[n] не може бути від’ємним: close[-1] означав би наступний бар. Якщо від’ємне число написано прямо в тексті, компілятор зупинить його відразу (LS5004). Якщо воно вийшло при обчисленні, скрипт зупиниться на барі з помилкою «Від’ємне зміщення історії — читати майбутнє не можна» (LS6002). Індекс, більший за число завантажених барів, помилкою не вважається — він дає na.
LS6001, LS6007, LS6019 — колекції й об’єкти
- LS6001 «Індекс … поза межами» —
array.get,array.setабоmatrix.getпоза розміром. Перевіряйтеarray.size(a)перед зверненням. - LS6007 «Звернення до порожнього об’єкта (na)» — колекцію оголосили, але не створили:
var array<float> a = na, а потімa.push(x). Створіть її черезarray.new<float>(). - LS6019 «Об’єкт малювання вже видалено або витіснено по стелі — створіть його заново». Одночасно живе 500 об’єктів одного виду, найстаріший витісняється. Підніміть ліміт через
maxLinesCount,maxLabelsCountабоmaxBoxesCountв оголошенні або пере використайте об’єкт черезset_*.
LS6017 і LS6018 — інструмент і таймфрейм у request.security
«Символ «…» невідомий — перевірте формат «МАЙДАНЧИК:СИМВОЛ» або задайте ignore_invalid_symbol = true» (LS6017) і «Таймфрейм «…» не розбирається — очікується «5», «60», «4h», «1D», «1W»» (LS6018). З ignore_invalid_symbol = true невідомий інструмент дає na замість зупинки.
Межі виконання
| Що обмежено | Межа | Код при перевищенні |
|---|---|---|
| Операцій на бар | 2 000 000 | LS6004 |
| Час проходу по історії / тика живого бара | 2 с / 20 мс | LS6005 |
| Елементів масиву | 100 000 | LS6003 |
| Пар у словнику | 50 000 | LS6003 |
| Елементів матриці | 1 000 000 | LS6003 |
Довжина вікна ta.* |
100 000 барів | LS6034 |
| Довжина одного рядка | 100 000 символів | LS6014 |
| Ячейок у таблиці | 2000 | LS6029 |
| Слойів теплового поля | 4 (від 0 до 3) | LS6036 |
| Об’єктів малювання одного виду | 500 за замовчуванням | старі витісняються |
Різних пар «інструмент + таймфрейм» у request.security |
8 | — |
Викликів request.security |
32 | LS4009 при компіляції |
Коли помилки немає, але значення відсутнє
Багато ситуацій, які в інших мовах зламали б програму, в LootScript дають na — пропуск на графіку, а не зупинку:
- арифметика з
naдаєna:close - xпри порожньомуx— теж порожньо; x[n]глибше за початок історії —na;- цілочисельний поділ на нуль —
na, а дробовий поділ на нуль скрипт не зупиняє; book.*,tape.*іscreener.*на історичних барах —na;- кластери, дельта, відкритий інтерес і історія біржового стакана —
naна барах, де даних нема. Перевіряйтеcluster.available,delta.availableі суміжні прапорці; ta.*на перших барах, поки вікно не заповнилося, —na.
na на графіку ніколи не малюється нулем: лінія переривається. Щоб підставити значення, використовуйте nz(x), x ?? запасне або fixnan(x).
Усі коди
LS0001–LS0009 і LS0999 — читання тексту
| Код | Повідомлення | Що робити |
|---|---|---|
| LS0001 | Неочікуваний символ «…» | Приберіть символ, якого немає в мові |
| LS0002 | Рядок не закрито — додайте закриваючу лапку до кінця рядка | Закрийте лапку на тій же стрічці |
| LS0003 | Блочний коментар не закрито — додайте */ | Закрийте /* … */ |
| LS0004 | Невідома escape-послідовність «…» у рядку | Допустимі \n, \r, \t, \0, \\, \", \' і \u{…}; одиночну \ подвоїте |
| LS0005 | Невірний числовий літерал «…» | Перевірте запис числа |
| LS0006 | Число «…» не вміщується в тип | Зменшіть число |
| LS0007 | Невірний літерал кольору «…» — очікується #RRGGBB або #RRGGBBAA | Шість або вісім шістнадцяткових цифр |
| LS0008 | Роздільник розрядів «_» стоїть на початку, наприкінці або подвоєний | Пишіть 1_000_000 |
| LS0009 | Невірна директива версії — очікується #version <число> першою рядком | #version 1 у першому рядку |
| LS0999 | Компілятор не впорався з цим файлом — це дефект збірки, повідомте про нього | Повідомте в підтримку, додайте скрипт |
LS1000–LS1012 — розбір
| Код | Повідомлення | Що робити |
|---|---|---|
| LS1000 | Неочікувано: … | Перевірте рядок на зайві символи |
| LS1001 | Очікувалося «…», а зустрілося … | Найчастіше не закрито дужку |
| LS1002 | Очікувалося вираження, а зустрілося … | Після оператора або коми бракує значення |
| LS1004 | Очікувалося ім’я, а зустрілося … | Після var, func, . потрібно ім’я |
| LS1005 | Очікувався блок в фігурних дужках, а зустрілося … | Додайте { … } |
| LS1006 | Порівняння не ланцюжаться — напишіть a < b and b < c | Розбийте на два порівняння через and |
| LS1008 | Друге оголошення скрипта — у скрипта може бути тільки одне | Залиште одне оголошення |
| LS1009 | Немає оголошення скрипта — почніть з indicator(“Назва”) | Першим рядком — indicator, strategy або library |
| LS1010 | Занадто глибока вкладеність (більше 64) — винесіть частину в функцію | Розбийте вираз або блок |
| LS1012 | Тіло if / for / while пишеться в фігурних дужках: if cond { … } | Додайте фігурні дужки |
LS2000–LS2030 — типи і імена
| Код | Повідомлення | Що робити |
|---|---|---|
| LS2000 | Невідповідність типів: очікувався …, а отримано … | Передайте значення потрібного типу |
| LS2001 | Немає перетворення … в … | Перетворіть явно: str.tostring, math.round |
| LS2002 | Невідоме ім’я «…» — перевірте написання або оголосіть його вище | Виправте опечатку, додайте простір (ta.), оголосіть вище |
| LS2003 | «…» — не функція, викликати не можна | Приберіть дужки: це ряд або константа |
| LS2004 | «…» очікує … аргумент(ів), а передано … | Звірте число аргументів зі довідником |
| LS2005 | У «…» немає параметра «…» | Виправте ім’я параметра |
| LS2006 | Аргумент «…» передано двічі | Приберіть повтор |
| LS2007 | Умова має бути bool, а тут … | Порівняйте явно: x > 0, not na(x) |
| LS2008 | Порівняння з na завжди хибне — використовуйте na(x) | na(x) замість x == na |
| LS2014 | «…» в «…» вимагає значення не слабшого за …, а передано … — візьміть input.*(…) або літерал | Літерал, input.* або константа замість ряду |
| LS2015 | «…» оголошено константою — присвоювати не можна; оголосіть через var | Налаштування input.*, змінну циклу і параметр функції змінювати не можна — скопіюйте значення в свою змінну |
| LS2017 | Рядок не можна додавати до числа (… + …) — використовуйте str.tostring(…) | str.tostring або str.format |
| LS2018 | «…» вже оголошено в цій області | := для нового значення або інше ім’я |
| LS2019 | «…» затемнює вбудоване ім’я — виберіть інше | Перейменуйте |
| LS2020 | Гілки дають різні типи: … і … | Приведіть гілки до одного типу |
| LS2021 | switch без гілки за замовчуванням «=> …» — додайте її | Додайте => значення |
| LS2022 | У «…» не виведено тип елемента — вкажіть його: … | array.new<float>() |
| LS2028 | У поля «…» типу «…» не вказано тип — напишіть його перед іменем: float … | float price в оголошенні type |
| LS2029 | export «…»: у експортованої функції мають бути вказані типи всіх параметрів і тип результату | Вкажіть типи |
| LS2030 | «…» в «…» читається до першого бару — потрібен літерал або іменована константа | В оголошенні — лише постійні значення |
LS3000–LS3033 — зміст програми
| Код | Повідомлення | Що робити |
|---|---|---|
| LS3002 | «…» викликає саму себе — рекурсія в LootScript заборонена | Замініть рекурсію циклом |
| LS3003 | Взаємна рекурсія заборонена: … | Розірвіть коло викликів |
| LS3004 | Аргумент «…» не можна обчислити поза гілкою — винесіть виклик ta.* на верхній рівень | Обчисліть аргумент і виклик поза if |
| LS3006 | «…» затемнює ім’я з зовнішньої області (попередження) | Перейменуйте внутрішню змінну |
| LS3007 | «…» поза циклом | break і continue — тільки в циклі |
| LS3008 | return поза функцією | return — тільки в тілі функції |
| LS3009 | export «…» можливий тільки в library(…) | Приберіть export або зробіть файл бібліотекою |
| LS3010 | «…» без жодного рівня (profit/loss/stop/limit/trail) — порожня операція (попередження) | Задайте стоп, тейк або трейлінг |
| LS3011 | strategy.* доступно тільки в strategy(…) | Оголосіть скрипт через strategy(...) |
| LS3012 | У бібліотеці не можна малювати і оголошувати входи: … | Перенесіть вивід і налаштування в індикатор |
| LS3013 | «…» всередині request.security не стане рядком налаштувань — оголосіть вхід вище і передайте його значення | Оголосіть input.* вище і передайте змінну |
| LS3016 | Налаштування «…» прийнята і нічого не робить: … (зведення) | Можна залишити або видалити |
| LS3018 | Бібліотека «…» не знайдена в папці бібліотек — ім’я береться з її library(“…”, N), а не з імені файлу | Перевірте ім’я в оголошенні бібліотеки |
| LS3019 | Бібліотеки «…» версії … немає; встановлені: … | Вкажіть встановлену версію |
| LS3020 | «…» всередині request.security: у біржового стакана і стрічки угод немає історії на чужій серії | Приберіть book.*, tape.* з виразу |
| LS3025 | Функція «…» оголошена, але не викликається — її тіло перевірено лише пробно (попередження) | Викличіть функцію або видаліть |
| LS3026 | «…» вимагає стоп, від якого рахувати розмір: loss/stop у вході або в strategy.exit |
Додайте стоп до входу або strategy.exit |
| LS3028 | Ця збірка не підтримує: … | Перепишіть без цієї конструкції |
| LS3029 | Ветка switch для «…» повторюється — друга недосяжна | Приберіть повтор |
| LS3030 | «…» — змінна графіка, а вираз request.security рахується на іншій серії; передайте значення через input.* або порахуйте його в середині виразу |
Пообчислюйте всередині виразу |
| LS3031 | Бібліотеки імпортують одна одну по колу: … | Розірвіть коло імпортів |
| LS3032 | У бібліотеці «…» допустимі тільки оголошення функцій і імпорти — тут … | Приберіть інший код з бібліотеки |
| LS3033 | Бібліотека «…» не компілюється (…) — відкрийте її в редакторі і виправте | Виправте помилку в самій бібліотеці |
LS4000–LS4009 — межі компіляції
| Код | Повідомлення | Що робити |
|---|---|---|
| LS4000 | Забагато рядів: … при ліміті 512 — приберіть зайві ta.* або пере використайте змінні |
Скоротіть число викликів ta.* і змінних з історією |
| LS4001 | Програма надто велика (більше 4096 вбудувань) — спростіть функції | Зменшіть число викликів користувацьких функцій |
| LS4002 | Забагато plot — панель малює не більше трьох рядів |
Виводів — рядів plot, відміток plotshape і plotchar, фону bgcolor — не більше 64; малюються перші три plot |
| LS4009 | Забагато викликів request.security: …, ліміт 32 |
Об’єднайте виклики |
LS5000–LS5013 — перерисовка і тестер
| Код | Повідомлення | Що робити |
|---|---|---|
| LS5000 | Значення varip доходить до виводу — на історії воно буде іншим (перемальовування) (попередження) |
Використайте var, якщо потрібна однакова історія |
| LS5001 | Значення лише живого бара доходить до виводу — на історії його нема (перемальовування) (попередження) | Використайте barstate.isconfirmed |
| LS5002 | lookahead = true читає майбутнє — на історії результат недосяжний у реальному часі (попередження) |
Приберіть lookahead = true |
| LS5003 | Старший таймфрейм без зсуву — незакритий бар перемалюється; додайте [1] (попередження) |
request.security(…, close[1]) |
| LS5004 | Від’ємне зміщення зсуває вивід у минуле — на історії лінія знає майбутнє | Приберіть від’ємний індекс x[-n] |
| LS5005 | Недіетерміноване значення доходить до виводу — два прогони дадуть різний ряд (попередження) | Не виводьте math.random і timenow на графік |
| LS5006 | Дані є лише в реальному часі — на історії ряд пустий (попередження) | Для історії біржового стакана використайте depth.* |
| LS5011 | Стратегія читає «…»: у біржового стакана і стрічки угод немає історії, бектест був би фікцією | Приберіть book.*, tape.* зі стратегії |
| LS5012 | Стратегія заглядає вперед («…») — звіт позначено як недосяжний у реальному часі (попередження) | Приберіть lookahead = true |
| LS5013 | «…» увімкнено: заявки виконуються по закриттю бара, звіт позначено (зведення) | Приберіть processOrdersOnClose, якщо потрібен реалістичний звіт |
LS6000–LS6036 — виконання
| Код | Повідомлення | Що робити |
|---|---|---|
| LS6001 | Індекс … поза межами | Перевірте розмір колекції перед зверненням |
| LS6002 | Від’ємне зміщення історії — читати майбутнє не можна | Індекс історії має бути ≥ 0 |
| LS6003 | Перевищено ліміт розміру колекції (…) — колекція створена в рядку … | Обмежте ріст: видаляйте старі елементи |
| LS6004 | Скрипт вичерпав бюджет операцій на бар — спростіть цикл | Перевірте умову виходу з циклу |
| LS6005 | Скрипт перевищив ліміт часу на проходження | Зменшіть роботу на кожному барі |
| LS6007 | Звернення до порожнього об’єкта (na) | Створіть колекцію або об’єкт до звернення |
| LS6014 | Рядок довший за ліміт у 100000 знаків — скоротіть її або збирайте по частинах | Скоротіть рядок |
| LS6015 | Невідомий часовий пояс «…» — потрібен ідентифікатор IANA, наприклад «Europe/Berlin» | Пояс у форматі IANA |
| LS6017 | Символ «…» невідомий — перевірте формат «МАЙДАНЧИК:СИМВОЛ» або задайте ignore_invalid_symbol = true | Виправте символ |
| LS6018 | Таймфрейм «…» не розбирається — очікується «5», «60», «4h», «1D», «1W» | Виправте таймфрейм |
| LS6019 | Об’єкт малювання вже видалено або витіснено по стелі — створіть його заново | Перевіряйте об’єкт або підніміть ліміт |
| LS6020 | str.format: плейсхолдеру {…} не передано аргумент | Передайте аргумент для кожного {n} |
| LS6021 | str.match: шаблон вичерпав бюджет кроків — спростіть його | Спростіть регулярний вираз |
| LS6026 | Вичерпано загальний бюджет колекцій скрипта (… ячеєк) — не влізла колекція з рядка … | Скоротіть число або розмір колекцій |
| LS6027 | Недопустимий аргумент «…» в … | Наприклад, від’ємний розмір в array.new |
| LS6028 | Вичерпано бюджет рядків скрипта (…) — пере використайте рядки замість нових на кожному барі | Не збирайте нові рядки на кожному барі |
| LS6029 | У таблиці більше 2000 ячеєк — це ліміт панелі | Зменшіть таблицю |
| LS6030 | Ячейка таблиці поза сіткою: … | Номер стовпця і рядка — у межах розміру таблиці |
| LS6031 | Вбудована функція «…» оголошена, але не реалізована — це дефект збірки, повідомте про нього | Повідомте в підтримку |
| LS6032 | Хендл не вказує на об’єкт потрібного виду — об’єкт звільнено або хендл з іншого прогона | Не зберігайте посилання на видалені об’єкти |
| LS6033 | Поле … поза оголошенням типу «…» — це дефект збірки, повідомте про нього | Повідомте в підтримку |
| LS6034 | Довжина вікна … більша за ліміт 100000 — таке вікно не поміститься в пам’ять | Зменшіть довжину вікна |
| LS6035 | Крок циклу дорівнює нулю — лічильник не зрушує, і кінець недосяжний | by у циклі for не може бути нулем |
| LS6036 | Слой тепла … поза 0…3 | layer від 0 до 3 |
Коди, які ця версія не видає
Ці номери закріплені в мові, але поточна версія терміналу їх не показує: LS1003, LS1007, LS1011, LS2016, LS3000, LS3001, LS3005, LS4003, LS4004, LS5007, LS6000, LS6006, LS6008, LS6022, LS6023. Наприклад, оголошення не першою рядком зараз повідомляється як LS1009, а ділення на нуль не зупиняє скрипт з LS6000.