Pine Script v5 и v6: что изменилось

Обложка статьи «Pine Script v5 и v6: что изменилось»: Две карточки кода рядом: на левой строки и жёлтая метка версии, на правой те же строки и зелёная метка, между ними стрелка перехода

Как узнать версию Pine Script в примере

Смотрите на аннотацию в начале кода. По руководству TradingView строка вида //@version=6 сообщает компилятору, на какой версии написан скрипт, а номер может быть от 1 до 6. Аннотация не обязательна: если её нет, компилятор считает, что это версия 1. Поэтому пример без аннотации нельзя молча читать как v5 или v6.

Для примеров из интернета это важнее, чем кажется. Код, скопированный без аннотации или с другой цифрой, может не собраться или считать по другим правилам. Сам язык и его устройство разобраны в руководстве Pine Script: что это за язык.

Старые скрипты при этом никто не ломал. В блоге TradingView сказано, что обновления v6 не затрагивают личные и опубликованные скрипты на прежних версиях. Новые возможности добавляют только в последнюю версию. Версии библиотек - отдельная тема, она разобрана в руководстве про библиотеки Pine Script.

Какие различия v5 и v6 меняют результат

Первое различие - деление целых чисел. В v5 деление двух целых констант отбрасывает дробную часть, в v6 дробь сохраняется. Ниже разбор спецификации на вымышленных константах. Это не результат запуска кода в редакторе.

ВыражениеPine Script v5Pine Script v6
7 / 233.5
7.0 / 2.03.53.5
int(7 / 2)33

Есть оговорка. В v5 дробь терялась только когда оба числа были константами. Если хотя бы одно целое приходило из настроек или менялось от бара к бару, v5 уже сохранял дробь. Целочисленное деление встречается и в других языках: в C#, например, 13 / 5 даёт 2. Если в v6 нужен целый результат, руководство советует обернуть деление в int().

Второе различие - логические значения.

Что проверяемPine Script v5Pine Script v6
Значения типа booltrue, false или naтолько true или false
Число вместо условия0, 0.0 и na считаются false, остальное trueнеявного приведения нет, нужен bool()
Выражение, которое в v5 давало логическое nanafalse

Третье различие - порядок вычисления условий с and и or. В v5 обе части условия вычисляются всегда. В v6 вычисление ленивое: вторая часть может не выполняться, если ответ ясен по первой. Руководство приводит случай с ta.rsi() внутри условия: функция вызывается не на каждом баре, и это мешает её внутренней истории. Значения на графике после этого расходятся со старыми. Такое расхождение идёт от другого правила вычисления, и это не перерисовка.

Для стратегий есть своё изменение: в v6 маржа по умолчанию равна 100 процентам. Поэтому бэктест одной и той же стратегии до и после перехода стоит сравнивать заново.

Как разбирать старый пример перед переходом на v6

Начните с того, что пример на v5 должен собираться без ошибок. Конвертер запускается в редакторе: меню Manage script, пункт Convert code to v6. По руководству он работает, только если код v5 успешно компилируется. Скрипт на v4 и старше переводят по одной версии за шаг. Как открыть редактор и сохранить копию, описано в руководстве про редактор Pine Script.

Дальше пройдите по коду руками, по трём вопросам.

  1. Есть ли деление двух целых чисел, записанных прямо в коде, например 7 / 2. Посчитайте его по таблице выше для обеих версий. Если число приходит из настроек, например длина периода, дробь сохранялась и в v5, и результат тут не меняется.
  2. Стоит ли где-то число на месте условия. В v6 его нужно явно обернуть в bool().
  3. Есть ли внутри условий с and и or вызовы функций, которым нужна история баров. Руководство советует вынести такой вызов в отдельную переменную до условия.

После конвертации сравните значения старой и новой версии на одном инструменте и одном таймфрейме. В блоге TradingView прямо сказано, что автоматически конвертируются не все скрипты и иногда нужны ручные правки.

Риски и ограничения. Таблицы выше построены по документации, а не по запуску кода, и охватывают только часть изменений v6. Полный список есть в руководстве по переходу. Успешная конвертация означает, что код собрался, но не что расчёты совпали с прежними. Версия языка ничего не говорит о качестве торговой идеи: v6 не делает стратегию прибыльнее. Торговля связана с риском потери капитала, прошлые результаты не гарантируют будущих. Материал образовательный и не является индивидуальной инвестиционной рекомендацией.

Источники

График TradingView с сигналами Buy и Sell индикатора Midas
Midas multi-индикатор for TradingViewОдин из самых продвинутых индикаторов для трейдинга
  • Сигналы без перерисовки
  • Интерактивный теханализ
  • 7 стратегий на выбор
Midas multi-индикатор for TradingViewСигнал, стоп и 3 цели - прямо на графике
  • Сигнал фиксируется по закрытию свечи
  • Стоп и 3 цели строятся автоматически
  • План сделки виден до входа