Объявление функций – Robo.trading

Объявление функций

  • Однострочные функции
  • Многострочные функции
  • Области применения в скрипте
  • Функции, которые возвращают несколько результатов

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

Однострочные функции

Простые функции часто можно записать в одну строку. Это синтаксис однострочных функций:

<identifier>(<list of arguments>) => <expression>

Вот пример:

f(x, y) => x + y

После того, как функция f была объявлена, ее можно вызывать с использованием различных типов аргументов:

a = f(open, close)
b = f(2, 2)
c = f(open, 2)

Тип значения, возвращаемого функцией f, определяется автоматически и зависит от типа аргументов, используемых в каждом конкретном вызове функции. В приведенном выше примере тип переменной a— серия, потому что оба аргумента — серия. Тип переменной b— целое число, поскольку аргументы — это целые литералы. Тип переменной c— серия, потому что добавление серии и целого литерала дает результат серии.

Функции Pine Scipt не поддерживают рекурсию. Функция не может вызывать себя из своего же кода.

Многострочные функции

Pine также поддерживает многострочные функции со следующим синтаксисом:

<identifier>(<list of arguments>) =>
<variable declaration>
...
<variable declaration or expression>

Тело многострочной функции состоит из нескольких операторов. Каждая инструкция помещается на отдельной строке, и перед ней должен стоять 1 отступ (4 пробела или 1 табуляция). Отступ перед оператором указывает, что он является частью тела функции, а не частью глобальной области действия сценария. После кода функции первый оператор без отступа указывает, что тело функции завершено.

Либо выражение, либо объявленная переменная должны быть последним оператором тела функции. Результатом этого выражения (или переменной) будет результат вызова функции.

Например:

geom_average(x, y) =>
a = x*x
b = y*y
sqrt(a + b)

Функция geom_average имеет два аргумента и создает две переменные в теле: aи b. Последний оператор вызывает функцию sqrt (извлечение квадратного корня). geom_average Вызов возвращает значение последнего выражения: (sqrt(a + b)).

Области применения в скрипте

Переменные, объявленные вне тела функции или других локальных блоков, принадлежат глобальной области видимости. Объявленные пользователем и встроенные функции, а также встроенные переменные также относятся к глобальной области видимости.

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

С другой стороны, поскольку можно ссылаться на любую переменную или функцию, объявленную в глобальной области видимости, из области видимости функции (за исключением самоссылочных рекурсивных вызовов), можно сказать, что локальная область видимости встроена в глобальную область видимости.

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

Функции, которые возвращают несколько результатов.

В большинстве случаев функция возвращает только один результат, но можно получить список результатов (результат, подобный кортежу):

fun(x, y) =>
a = x+y
b = x-y
[a, b]

Для вызова таких функций требуется специальный синтаксис:

[res0, res1] = fun(open, close)
plot(res0)
plot(res1)
/

Robo.Trading

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