Улучшения Pine Script®: более точный расчёт стратегий на графиках Хейкен Аши, новые сопособы отбражения значения аргументов, и многое другое

30 июн, 2023

Мы продолжаем улучшать Pine Script®, добавляя новые функции по вашим запросам, и сегодня хотим рассказать об обновлениях.

Расчёт стратегий на Хейкен Аши по стандартным ценам

Имитация исполнения заявок в стратегиях происходит по ценам, отображаемым на графике, однако для синтетических типов графиков вроде Хейкен Аши это даёт нереалистичные результаты, поэтому мы всегда предупреждаем наших пользователей об этом отдельным сообщением в тестере стратегий, а также в Справочном центре.

Теперь в свойства стратегий добавлена специальная опция Заполнять заявки со стандартными OHLC, при активации которой стратегии на графиках Хейкен Аши будут исполнять заявки не по синтетическим ценам графика, а по стандартным значениям OHLC выбранного инструмента, благодаря чему имитация расчёта стратегий на графиках Хейкен Аши станет более реалистичной.

Новый параметр display для функций пространства имён input

Для всех функций пространства имён input добавлен новый параметр display, который определяет, где будут отображаться значения аргументов индикатора: в строке статуса, в окне данных или в обоих местах сразу. В окне редактирования аргументы по-прежнему будут отображаться всегда.

Для привычного вам способа отображения аргументов индикатора мы сохранили место их отображения по умолчанию. Место отображения аргументов зависит от их типа: так большинство аргументов отображены и в строке состояния, и в окне данных, а булевые, цветовые и аргументы даты не отображаются нигде, кроме окна редактирования аргументов индикатора. Также теперь стало возможно включить отображение для булевых, цветовых и аргументов даты.

Для управления местом отображения аргументов индикатора можно использовать привычные константы отображения функций типа plot: display.status_line, display.data_window, display.all; или арифметические выражения с этими константами (display.alldisplay.data_window). Например:

//@version=5

indicator("RSI")

rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, "Source", display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, "RSI")

Новые константы с информацией о секторе, отрасли и стране инструмента

В пространство имен syminfo добавлены три новые строковые переменные, содержащую информацию об инструменте:

  • syminfo.sector — возвращает сектор инструмента.
  • syminfo.industry — возвращает отрасль инструмента.
  • syminfo.country — возвращает двухбуквенный код страны, где торгуется инструмент, в формате ISO 3166-1 alpha-2.

Отключение оповещений для исполненных заявок стратегий

Добавлена возможность отключения оповещений для отдельных заявок в стратегиях. Для этого нужно добавить параметр disable_alert = true в функцию, создающую заявки. Например:

//@version=5
strategy("My strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("Long", strategy.long, alert_message = "Go Long!")
    strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)

Это может быть полезно, если вы используете функцию alert() и формируете сообщение для оповещения во время исполнения стратегии или индивидуально сгенерированные сообщения для веб-хуков.

Изменение расчёта максимальной просадки и максимального роста для стратегий

Значение максимальной просадки и максимального роста теперь учитывают также потенциальный капитал, который мог быть достигнут внутри сделки. Раньше учитывались только значения капитала на момент входа и выхода. Таким образом, максимальные просадка и рост на самом деле могли не соответствовать своим максимально возможным значениям, которые достигались за счёт изменений цены внутри сделки. Новые способы расчёта максимальной просадки и максимального роста подробно и с примерами описаны в Справочном центре.

Поддержка модификатора varip для полей пользовательских типов

Модификатор varip позволяет не откатывать значения переменных к первоначальным после каждого тика инструмента. Это может пригодиться, если вам нужно сохранять состояние внутри одного бара. Теперь это доступно для полей пользовательских типов. Поля, не отмеченные модификатором varip, будут откатываться на каждом баре, даже если сам объект при создании имеет модификатор varip.

//@version=5
indicator("`varip` field")

type TypeWithVaripField
    varip int varipCounter = 0
    int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)

// This field preserves values between script executions.
myCounter.varipCounter := myCounter.varipCounter + 1
// This field does not because it wasn't declared using `varip`.
myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, "myCounter.varipCounter")
plot(myCounter.counter, "myCounter.counter")

Запрос коэффициента конвертации из одной валюты в другую

Добавлена новая функция request.currency_rate(), позволяющая запросить коэффициент конвертации одной валюты в другую. Функция принимает два обязательных параметра: from — валюта, из которой нужно конвертировать, и to — валюта, в которую нужно конвертировать. Валюта указывается строковым трехбуквенным кодом согласно ISO 4217.

Рассмотрим пример использования функции для перевода цены инструмента в фунты стерлингов:

//@version=5
indicator("Close in British Pounds")
rate = request.currency_rate(syminfo.currency, "GBP")
plot(close * rate)

Расширение функций пространства имен array

Мы добавили четыре новых функции для работы с массивами в Pine Script®:

  • array.first() — возвращает первый элемент массива.
  • array.last() — возвращает последний элемент массива.
  • array.every() — возвращает true, если каждый элемент массива true, иначе возвращает false.
  • array.some() — возвращает true, если хотя бы один элемент массива true, иначе возвращает false.

Более подробную информацию вы можете найти в нашем Справочном центре, а также в Руководстве пользователя и Справочнике по языку программирования Pine Script®.

Чтобы вовремя узнавать об обновлениях Pine, следите за разделом Release notes. Учётная запись PineCoders также транслирует новости об обновлениях в своём Telegram-канале Squawk Box и в публичном чате Pine Script® Q&A на TradingView.

Мы надеемся, это обновление будет вам полезно. Обязательно делитесь с нами своими отзывами и предложениями, так вы помогаете делать платформу лучше. Мы делаем TradingView для вас, поэтому нам важно знать, что вы думаете.

Команда TradingView

Look first Then leap

Мы создали TradingView, чтобы вы могли пользоваться самыми крутыми функциями.
Открыть график