Операторы – Robo.trading

Операторы

  • Арифметические операторы
  • Операторы сравнения
  • Логические операторы
  • ?: Условный оператор и функция iff
  • Справочный оператор истории []
  • Приоритет оператора

Арифметические операторы

В Pine Script есть пять арифметических операторов:

+ прибавление
вычитание
* умножение
/ деление
% По модулю (остаток от деления)

Все приведенные выше арифметические операторы являются двоичными, и — также служат унарными операторами.

При использовании арифметических операторов тип результата зависит от типа операндов. Если хотя бы один из операндов является серией, то результат также будет иметь тип серии. Если оба операнда являются числовыми, но хотя бы один из них имеет тип float, то результат также будет иметь тип float. Если оба операнда имеют тип integer, то результат также будет иметь тип integer. Если хотя бы один операнд, na то результат будет также na.

Оператор + также служит в качестве оператора конкатенации для строк. «EUR»+«USD» создает строку «EURUSD»

Операторы сравнения

В Pine Script есть шесть операторов сравнения:

 

< Меньше, чем
<= Меньше или равно
!= Не равно
== равно
> Больше чем
>= Больше или равно

Операции сравнения являются двоичными. Результат определяется типом операндов. Если хотя бы один из этих операндов имеет тип серии, то тип результата также будет серией (серия логических значений). Если оба операнда имеют числовой тип, то результатом будет логический тип bool.

Логические операторы

В Pine Script есть три логических оператора:

not Отрицание
and Логическое И
or Логическое ИЛИ

Все логические операторы могут работать с булевыми операндами, числовыми операндами или операндами серийного типа. Как и в случае с арифметическими операторами и операторами сравнения, если хотя бы один из операндов имеет тип серии, то результат также будет иметь тип серии. Во всех остальных случаях тип результата будет логическим типом bool.

Унарный оператор not. При применении к true операнду результат будет false, и наоборот.

and Таблица истинности оператора:

A  B  and B
true true true
true false false
false true false
false false false

or Таблица истинности оператора:

A  B  A or B
true true true
true false true
false true true
false false false

?: Условный оператор и функция iff

Условный тернарный оператор ?: вычисляет первое выражение (условие) и возвращает значение либо второго операнда (если условие true), либо третьего операнда (если условие false).

Синтаксис:

condition ? result1 : result2

Если условие истинно (true), то тернарный оператор вернет result1, в противном случае — result2.

Комбинация условных операторов может создавать конструкции, аналогичные операторам switch в других языках.

Например:

isintraday ? red : isdaily ? green : ismonthly ? blue : na

Пример вычисляется слева направо. Сначала вычисляется условие isintraday, если оно верно, то результатом будет красный цвет. Если условие isintraday ложное, то вычисляется isdaily, если оно истинно, то результатом будет зеленый цвет. Если ложно, то вычисляется ismonthly. Если значение переменной истинно, то результатом будет синий цвет, в противном случае результатом будет na.

Для тех, кто находит использование синтаксиса оператора ?: неудобным, есть альтернатива: встроенная функция iff.

Функция использует следующую форму записи:

iff(condition, result1, result2)

Функция действует идентично ?: оператору, т. е. Если выполняется условие, true она возвращается result1, в противном случае result2.

Это эквивалент предыдущего примера с использованием iff:

iff(isintraday, red, iff(isdaily, green,
iff(ismonthly, blue, na)))

Оператор исторических значений []

Можно обратиться к историческим значениям любой переменной типа серии с помощью оператора []. Исторические значения являются значениями переменных для предыдущих баров.

Большинство данных в Pine хранятся в виде серий (в некоторой степени похожих на массивы, но с динамическим индексом). Давайте посмотрим, как индекс может быть динамическим, и почему серии также сильно отличаются от массивов. В Pine переменная close, или close[0] которая эквивалентна, содержит цену на момент закрытия текущего бара. Если ваш код выполняется на третьем баре массива данных, то close будет содержать цену на момент закрытия этого бара, close[1] будет содержать цену на момент закрытия предыдущего бара (второго) и close[2] первого. close[3] возвратит, na потому что в этой позиции нет бара, поэтому его значение недоступно.

Когда этот же код выполняется на следующем баре, четвертый в наборе данных, close будет содержать цену закрытия этого бара, и так же close[1] которое используется в вашем коде, теперь будет относиться к закрытию третьего бара. Закрытие первого бара в наборе данных теперь будет close[3] и на этот раз close[4] возвратит na.

В среде выполнения Pine, так как ваш код выполняется один раз для каждого исторического бара в наборе данных, начиная слева от графика, Pine добавляет новый элемент в серию с индексом 0 и отталкивает ранее существовавшие элементы в серии на следующий индекс. Массивы для сравнения, как правило, имеют статический размер, а их содержимое или структура индексации не изменяется во время выполнения. Таким образом, серии Pine отличаются от массивов и схожи с ними в основном по синтаксису индексации; структуры данных массивов в Pine не существует.

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

У Pine есть переменная, которая отслеживает счетчик баров: bar_index. На первом баре значение переменной bar_index равно 0 и увеличивается на 1 на каждом новом баре, поэтому на последнем баре значение переменной bar_index равно количеству баров в наборе данных минус один.

Есть еще один важный момент, который следует учитывать при использовании оператора [] в Pine. Мы видели случаи, когда ссылка на историю может возвращать значение nana представляет собой значение, которое не является числом, и использование его в любом математическом выражении даст результат, который также является na (аналогично NaN). Такие случаи часто происходят во время вычислений скрипта на ранних барах набора данных, но при определённых условиях могут происходить и на более поздних барах. Если в вашем Pine-коде явно не предусмотрена обработка этих особых случаев, то они могут привнести в вычисления скрипта недействительные результаты, которые могут пройти через весь путь до реального бара. Функции na и nz предназначены для обработки таких случаев.

Примечание 1.

Почти все встроенные функции в стандартной библиотеке Pine возвращают результат серии. Поэтому можно применить оператор [] непосредственно к вызовам функций, как это сделано здесь:

sma(close, 10)[1]

Примечание 2.

Несмотря на то, что оператор [] возвращает результат типа серии, запрещено применять этот оператор к одному и тому же операнду снова и снова. Вот пример неправильного использования, которое приведет к ошибке компиляции:

close[1][2] // Error: incorrect use of [] operator

В некоторых ситуациях пользователь может захотеть сместить серию влево. Отрицательные аргументы для оператора [] запрещены. Это можно сделать с помощью offset параметра в plot аннотации, который поддерживает как положительные, так и отрицательные значения. Обратите внимание, что это визуальный сдвиг, т.е. он будет применяться после всех вычислений.

Приоритет операторов

Порядок расчетов определяется приоритетом операторов. Операторы с большим приоритетом вычисляются первыми. Ниже приведен список операторов, отсортированных по убыванию приоритета:

Старшинство Оператор
9 []
8 унарный +, унарный ,not
7 *%
6 +
5 ><>=,<=
4 ==!=
3 and
2 or
1 ?:

Если в одном выражении есть несколько операторов с одинаковым приоритетом, то они вычисляются слева направо.

Если выражение должно быть вычислено в другом порядке, то части выражения могут быть сгруппированы вместе с круглыми скобками.

/

Robo.Trading

eVe Developer
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять