Циклы – Robo.trading

Циклы

Оператор for 

Оператор for позволяет выполнить ряд инструкций повторно:

<var_declarationX> = for <i> = <from> to <to> by <step>
<var_decl0>
<var_decl1>
...
continue
...
break
...
<var_declN>
<return_expression>

Где:

  • i — переменная счетчика цикла.
  • from — начальное значение счетчика.
  • to — конечное значение счетчика. Когда счетчик становится больше чем to (или меньше чем to, from > to), цикл останавливается.
  • step — шаг цикла. Опционально. По умолчанию 1. Если from больше чем to, то шаг цикла автоматически изменит направление; не нужно использовать отрицательный шаг.
  • var_decl0,… var_declN, return_expression— тело цикла. Он должен иметь отступ в 4 пробела [1].
  • return_expression Возвращаемое значение. Когда цикл закончен или прерван, возвращаемое значение присваивается var_declarationX.
  • continue— ключевое слово. Может использоваться только в циклах. используется для перехода к следующей итерации цикла.
  • break— ключевое слово. Может использоваться только в циклах. Используется для выхода из цикла for.

Пример цикла:

//@version=4
study("For loop")
my_sma(price, length) =>
sum = price
for i = 1 to length-1
sum := sum + price[i]
sum / length
plot(my_sma(close,14))

Variable sum — это мутирующая переменная, поэтому в теле цикла ей может быть присвоено новое значение оператором :=. Обратите внимание, что для простых скользящих средних рекомендуется использовать встроенную функцию sma, так как она вычисляет быстрее.

Обратите внимание, что некоторые встроенные функции могут работать неожиданно в цикле for.

Давайте посмотрим на следующий пример:

//@version=4
study("SMA in for loop")
sum = 0
for i = 1 to 2
sum := sum + sma(close, i)
plot(sum)

Хотя вы можете ожидать, что сумма будет содержать sma(close, 1) + sma(close, 2), это не так. Она будет содержать sma(close, 1) + sma(close, 1), потому что как только sma инициализируется длиной 1, эта длина будет сохранятся до тех пор, пока скрипт не будет удален с графика. Чтобы избежать этого, вы можете использовать свою собственную реализацию функции, без сохранения состояния. Это список встроенных функций, которые имеют такое же поведение:

  • sma(source, length): с length состоянием.
  • ema(source, length): с length состоянием.
  • sum(source, length): с length состоянием.
  • valuewhen(condition, source, occurrence): с occurrence состоянием.
  • rsi(x, y): когда y имеет тип целое число и ведет себя как длина, с y состоянием.

Сноски

( 1, 2 ) TradingView в Pine Editor автоматически заменяет Tab на 4 пробела.

/

Robo.Trading

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