[TOC]
Общая структура кода в Pine:
<version>
<declaration_statement>
<code>
ФМЗ поддерживает язык Pine с комментариями: однострочные комментарии//
Многострочные комментарии/* */
Например, в примере с комментариями:
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // 计算MACD指标
/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')
Компиляторные инструкции следующего вида сообщают, в какой версии Пинь был написан сценарий:
//@version=5
Вы можете пропустить в коде, что является версией 5 по умолчанию//@version=5
。
indicator()
strategy()
Заявление определяет тип сценария, который в свою очередь определяет, что в нем разрешено, и как его использовать и выполнять. Настраивает ключевые атрибуты сценария, такие как его название, где он будет появляться, когда он будет добавлен в график, точность и формат показаний, которые он показывает, а также числовые значения, управляющие некоторыми действиями при его запуске, такие как максимальное количество изображенных объектов, которые он будет показывать в графике.indicator()
илиstrategy()
Заявление.
Сценарий, не содержащий комментарии или инструкции компилятора, является предложением, реализующим алгоритм сценария. Сценарий может быть одним из этих элементов.
if
,for
,while
илиswitch
Структура и т.д.Предложения можно составить разными способами.
空格
или制表符
(таб-клавиши) начинаются. Их первый символ также должен быть первым символом строки. Строки, начинающиеся с первой строки строки, по определению являются частью глобального масштаба сценария.local block
。 Локальный блок должен быть сжат в один значок или четыре пробела (в противном случае он будет расшифрован как последовательность кода предыдущей строки, то есть будет рассматриваться как последовательность кода предыдущей строки), и каждый локальный блок определяет другой локальный диапазон。Например, включает в себя три локальных блока, один в заявлениях с функциями на заказ, два в заявлениях с переменными с использованием if-структуры, следующим образом:
indicator("", "", true) // 声明语句(全局范围),可以省略不写
barIsUp() => // 函数声明(全局范围)
close > open // 本地块(本地范围)
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
runtime.log("color", color = plotColor) // 调用一个内置函数输出日志 (全局范围)
Длинные строки могут быть разделены на несколько строк, или “упакованы”. Упакованные строки должны быть сжаты в любое количество пробелов, если только они не являются кратными числами 4 (эти границы используются для сжатия локальных блоков).
a = open + high + low + close
может быть упакован в (заметьте, что количество пробелов в каждой строке не является кратным количеству 4):
a = open +
high +
low +
close
Длинный вызов plot ((() может быть упакован в。
close1 = request.security(syminfo.tickerid, "D", close) // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close) // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100), // 一行长的plot()调用可以被包装
color = color.new(color.purple, 40),
style = plot.style_area,
trackprice = true)
Однако, поскольку локальный блок грамматически должен начинаться со сжатия (((4 пробела или 1 значок), при разделе его на следующую строку, продолжение части предложения должно начинаться с более чем одного сжатия (((не равняется кратному количеству 4 пробелов)). Например:
test(c, o) =>
ret = c > o ?
(c > o+5000 ?
1 :
0):
(c < o-5000 ?
-1 :
0)
a = test(close, open)
plot(a, title="a")
Временная последовательность не является типом или форматом данных, а является базовым структурным понятием в языке PINE. Она используется для хранения последовательно меняющихся во времени значений, каждое из которых соответствует определенной точке времени. Такая структура понятия временной последовательности подходит для обработки и записи серии данных, изменяющихся со временем.
Встроенные переменныеopen
Например,open
Встроенная переменная записывает стоимость открытия каждого K-образа BAR, если этоopen
Это 5 минут циклов K-линии.open
В переменной записывается цена открытия каждые 5 минут K строки BAR{column}.open
Для того, чтобы ссылаться на предыдущие значения в временной последовательности, мы используем[]
Исторический оператор, когда политика выполняется на некоторой K-линии BAR,open[1]
Означает, что цена, по которой открывается текущая K-линия BAR, соответствует начальной цене предыдущей K-линии BAR.
ХотяВременная последовательностьСтроение данных “аресты” легко вспомнить, хотя в языке PINE также есть типы массивов. Однако они и хронологические последовательности - это совершенно разные понятия.
С помощью PINE можно легко вычислить суммированные значения цены закрытия, используя только встроенные функции языка PINE, без использования циклической структуры, такой как for.ta.cum(close)
Для примера, нам нужно вычислить среднее значение разницы между максимальным и минимальным значениями последних 14 K-линий BAR (то есть 14 K-линий BAR, наиболее близких к текущему моменту выполнения кода).ta.sma(high - low, 14)
Результат вызова функции на временной последовательности также оставляет след на временной последовательности.[]
Исторический оператор ссылается на предыдущие значения. Например, проверка того, превышает ли закрытие текущей K-линии BAR максимальное значение наивысшего значения в последних 10 K-линий BAR (без учета текущей K-линии BAR). Можно написать:breach = close > ta.highest(close, 10)[1]
Также можно написать:breach = close > ta.highest(close[1], 10)
Так что…ta.highest(close, 10)[1]
иta.highest(close[1], 10)
Это равноценно.
Проверка выполняется следующим кодом:
strategy("test pine", "test", true)
a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)
plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)
Вышеуказанный тест-код выводит значения a и b на каждом BAR в их соответствующем временном ряду, и можно увидеть, что значения a и b всегда равны, поэтому эти два способа выражения эквивалентны.
Ссылки на исторические данные (history-referencing)
В Trading View есть ограничение на количество исторических ссылок (до 5000), например, следующий код:
//@version=6
indicator("test")
ema = ta.ema(close, 10000) // 报错:Error on bar 0: The 'ema'->'sum' function references too many historical candles (10000), the limit is 5000.
plot(ema, "ema")
// pre10000 = ema[10000] // 报错:Invalid number of bars back specified in the history-referencing operator. It accepts a value between 0 and 5000.
// plot(pre10000, "pre10000")
На FMZ используется языковая политика PINE “Статья сделок” в “Классической библиотеке сделок на языке Pine” с параметром “Самое длинное число циклов переменных” для определения максимального количества строк ссылочных данных.
indicator("test")
ema = ta.ema(close, 1000) // ema = ta.ema(close, 3000) 则报错:Invalid number 3000 of bars back specified in the history-referencing operator. It accepts a value between 0 and 2000.
plot(ema, "ema")
Параметр “наибольшее число циклов переменной” не должен быть слишком большим, в соответствующей политике можно использовать диапазон цитирования данных.
Показания по настройке параметров встроенного шаблона стратегии PINE “Лингвистическая библиотека сделок класса Pine”.
定价货币精度
Параметр и этот параметр определяют скольжение цены на момент заказа. Например, точность ценообразования установлена на 2, то есть точно до второго знака запятой, точно до 0,01. Таким образом, каждая точка скольжения цены представляет собой 0,01 ценообразования.javascript
Вызов в стратегииSetMaxBarLen
Функции одинаковые.strategy(title = "open long example", pyramiding = 3) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10)) // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000) // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓
strategy(title = "close long example", pyramiding = 2) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1) // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%") // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%") // 平仓,指定平掉分组标签为long2的仓位的80%持仓
Механизм удержания позиций в языке PINE аналогичен однонаправленному удержанию позиций. Например, при удержании позиций в многостороннем направлении ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
При заказе с помощью команды “заказать” при заказе, если не указана какая-либо цена, по умолчанию считается, что это рыночная цена. Кроме рыночной цены, можно также заказать через планку, которая не будет действовать сразу.Фиксированный диск/ретроспективаВ таблице “Планируемые заказы” в разделе “Информация о состоянии на момент выполнения стратегии” можно увидеть: “Система действительно заказывает только тогда, когда рыночные цены в реальном времени соответствуют условиям, которые вызывают эти плановые заказы”. Таким образом, небольшие отклонения в цене совершения этих заказов являются нормальными.strategy.entry
Когда мы заказываем функции, мы можем указатьlimit
、stop
Параметры
var isTrade = false
if not barstate.ishistory and not isTrade
isTrade := true
strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order") // stop
strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order") // limit
strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order") // stop-limit
Установление предельной цены заказа, когда заказ является покупкой (т.е.direction
Параметры:strategy.long
), заказ может быть инициирован только в том случае, если текущая рыночная цена ниже этой цены.
При заказе на продажу (т.е.direction
Параметры:strategy.short
При этом заказ может быть инициирован только в том случае, если текущая рыночная цена превышает эту цену.
Установка стоп-стоп-цены ордера, при которой ордер будет срабатывать только в том случае, если текущая рыночная цена будет выше этой цены. При заказе на продажу, заказ будет срабатывать только тогда, когда текущая рыночная цена будет ниже этой цены.
Можно одновременноlimit
、stop
Параметр, заказ будет инициирован по первой цене, которая соответствует условиям.
//@version=5
strategy("Percent of Equity Order", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// 简单的均线交叉策略
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
// 如果均线交叉条件满足,则买入或卖出
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
Определеноdefault_qty_type=strategy.percent_of_equity
После, настройкиdefault_qty_value
В процентном соотношении ((0 ~ 100), 1 - это 1%. Заказ рассчитывается по количеству валют в счете. Например: текущий счет имеет 10000 USDT, настройка заказа на 1%, то есть заказ с использованием 100 USDT в масштабе (расчет по текущей цене при продаже).
var - ключевое слово для распределения и одноразовой инициализации переменных. Обычно, синтаксис присвоения переменных, не содержащий ключевое слово var, приводит к тому, что значение переменной покрывается при каждом обновлении данных. Наоборот, когда используются ключевые слова var, переменные распределяются, несмотря на обновление данных, и они могут сохранять статус папки, изменяя ее только в том случае, если выполняются условия в if-expressions.
var variable_name = expression
Объяснение:
variable_name
- любое имя пользовательской переменной, разрешенной в Pine Script, которое может содержать латинские символы, цифры и зачеркивание в верхней и нижней буквы_), но не с цифрами в начале).expression
- любое арифметическое выражение, как определение регулярной переменной.Пример
// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
var x = close
b := x
green_bars_count := green_bars_count + 1
if green_bars_count >= 10
var y = close
c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")
Переменная ‘a’ сохраняет закрытие первого столбца каждой строки в ряду. Переменная ‘b’ сохраняет ценовую оценку на закрытие первой в серии ценовой палки на зеленый кремний. Переменная ‘c’ сохраняет закрытие десятой в серии зеленой картошки.
На FMZ, это реальные цены модели, закрытие цены модели, дляvar
、varip
Переменные в заявлении тестируются следующим кодом:
strategy("test pine", "test 1", true)
// 测试 var varip
var i = 0
varip ii = 0
// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)
// 每轮逻辑执行都给i、ii递增1
if true
i := i + 1
ii := ii + 1
Модель цен в реальном времени
Вышеуказанный тест-код выполняется в два этапа: 1-й этап исторической K-линии; 2-й этап реальной K-линии;var
、varip
Переменные i и ii в заявлении выполняют увеличительную операцию при каждом выпуске кода стратегии, потому чтоif true
Таким образом, можно увидеть, что число, отображаемое на линии BAR результатов обратной измерения, увеличивается в 1 раз. Когда этап исторической линии K заканчивается, начинается этап реальной линии K.var
、varip
Из-за того, что это реальная модель цены, в K-линии BAR каждый изменение цены выполняется один раз, и поэтому в K-линии BAR каждый изменение цены выполняется один раз, а в K-линии BAR - один раз.i := i + 1
иii := ii + 1
Все выполняется один раз. Разница заключается в том, что ii изменяется каждый раз. Хотя i также изменяется каждый раз, но при следующем раунде выполнения логики стратегии предыдущие значения возвращаются, и значение i не обновляется до тех пор, пока текущая K-линия BAR не будет завершена (то есть при следующем раунде выполнения логики стратегии предыдущие значения не будут возвращены).
Модель цены закрытия
Поскольку модель закрытия цены выполняет стратегическую логику только после того, как K-линия BAR заканчивается. Таким образом, в модели закрытия цены этапы исторической K-линии и этапы реальной K-линии,var
、varip
Указанные переменные в приведенных выше примерах выступают в полном соответствии с увеличением BAR на каждую K-линию в 1 .
varip ((var intrabar persist) - ключевое слово, используемое для распределения и разовой инициализации переменных. Оно похоже на ключевое слово var, но переменные с использованием декларации varip сохраняют свои значения между обновлениями K-линий в реальном времени.
varip variable_name = expression
Объяснение:
variable_name
- любое имя пользовательской переменной, разрешенное в сценарии Pine, может содержать латинские символы в верхних и нижних словах, цифры и зачеркивание_), но не с цифрами в начале).expression
- любое арифметическое выражение, как при определении регулярной переменной. На первой K-линии выражение вычисляется только один раз и распределяется переменной один раз.Пример
// varip
varip int v = -1
v := v + 1
plot(v)
При использовании var, график возвращает значение bar_index. При использовании varip, то же самое происходит на исторической K-линии, но на реальной K-линии график возвращает значение, которое увеличивается на 1 для каждого tick.
Примечание Можно использовать только с простыми типами, такими как float, int, bool, string, и с массивами этих типов.
Отображает значение переменной типа буль, или используется при выраженииСравнениеилиЛогикаЗначение, которое может быть вычислено в операторе.
Примечание Смотрите такжеСравнениеОператор иЛогикаОписание оператора:
См. также
bool
Отображает значение переменной типа буль, а также результаты операций сравнения, логических операций.
Примечание Смотрите такжеСравнениеОператор иЛогикаОписание оператора:
См. также
bool
If-ссылка определяет блок ссылки, который должен быть выполнен, чтобы удовлетворить условию выражения.
Общий код:
var_declarationX = if condition
var_decl_then0
var_decl_then1
...
var_decl_thenN
return_expression_then
else if [optional block]
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
else
var_decl_else0
var_decl_else1
...
var_decl_elseN
return_expression_else
Примечание
var_declarationX
- эта переменная получает значение if-ссылки
condition
- используйте блок ссылки, если условие truethen
Логика вvar_decl_then0
,var_decl_then1
Если условие false, используйте блокelse if
илиelse
Логика вvar_decl_else0
,var_decl_else1
И так далее.
return_expression_then , return_expression_else
- последнее выражение в модуле или выражение из блока else возвращает конечное значение фразы. Если объявление переменной в конце, то его значение будет результатом.
Тип возвращаемого значения if зависит отreturn_expression_then
иreturn_expression_else
Типы . Когда они работают на TradingView, их типы должны совпадать: когда у вас есть значение строки в блоке else, невозможно вернуть целое число из блока then. Когда они работают на FMZ, следующий пример не ошибается, когда y значение принимает значение “open” и число, когда он составляется на графике, составляет n/a.
Пример
// This code compiles
x = if close > open
close
else
open
// This code doesn’t compile by trading view
// y = if close > open
// close
// else
// "open"
plot(x)
Можно пропустить.else
Блок. В этом случае, если условие false, то для переменной var_declarationX присваивается empty (на, false или ):
Пример
// if
x = if close > open
close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)
Можно использовать множество else if блоков или вообще не использовать then, else if, else блоков перемещается четыре пробела:
Пример
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
Можно игнорироватьif
Результат высказывания ((var_declarationX= может быть пропущен) . Это может быть полезно, если вам нужны побочные эффекты выражения, например, в стратегических сделках:
Пример
if (ta.crossover(high, low))
strategy.entry("BBandLE", strategy.long, stop=low)
else
strategy.cancel(id="BBandLE")
If-заявления могут содержать друг друга:
Пример
// if
float x = na
if close > open
if close > close[1]
x := close
else
x := close[1]
else
x := open
plot(x)
Структура ‘for’ позволяет выполнять несколько предложений повторно:
[var_declaration =] for counter = from_num to to_num [by step_num]
statements | continue | break
return_expression
var_declaration
- выборочное заявление переменной, которое будет присвоено значение return_expression для обратного круга.
counter
- переменная, которая сохраняет значение счетчика оборотов, увеличивается/уменьшается на 1 или step_num в каждой итерации оборота.
from_num
- Начальные значения счетчика. Разрешается использование thresholds int/float thresholds/expressions.
to_num
- конечная величина счетчика. Цикл прерывается, когда счетчик больше, чем to_num (или меньше, чем to_num в случае, когда from_num > to_num). Использование thresholds int/float thresholds/expressions разрешено, но они оцениваются только при первой итерации цикла.
step_num
- Увеличение/уменьшение значения счетчика. Оно является выборочным. По умолчанию значение +1 или -1, в зависимости от того, какой из них является наибольшим из from_num или to_num. При использовании значения счетчик также увеличивается/уменьшается в зависимости от наибольшего из from_num или to_num, поэтому знак +/- для step_num является выборочным.
statements | continue | break
- Любое количество фраз, или ключевые слова ‘continue’ или ‘break’, сжатые в 4 пробела или одну табуляцию.
return_expression
- Возвратные значения цикла, если они существуют, присваиваются переменным в var_declaration. Если цикл выходит из-за ключевого слова continue или break, то возвратные значения цикла - это значения последней переменной, присвоенной перед выходом из цикла.
continue
- ключевое слово, которое может быть использовано только в цикле. Оно приводит к выполнению следующей итерации цикла
break
- Ключевые слова для выхода из круга.
Пример
// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
int result = 0
for i = 1 to lookback
if close[i] > close
result += 1
result
plot(qtyOfHigherCloses(14))
См. также
for...in
while
for...in
Структура позволяет выполнять несколько заявлений для каждого элемента в массиве. Она может быть использована с любыми параметрами:array_element
, или используется вместе с двумя параметрами:[index, array_element]
Вторая форма не влияет на функцию цикла. Она отслеживает индекс текущей итерации в первой переменной модуля.
[var_declaration =] for array_element in array_id
statements | continue | break
return_expression
[var_declaration =] for [index, array_element] in array_id
statements | continue | break
return_expression
var_declaration
- заявление о выборе переменной, которая будет передана в циклreturn_expression
Значение
index
- выборочный переменный, который отслеживает текущий икодированный индекс. Индекс начинается с 0. Переменный неизменен в циклическом теле.array_element
В подгруппе
array_element
- содержит переменную для каждого элемента последовательного ряда, который будет обрабатываться в цикле. Эта переменная неизменна в циклическом теле.
array_id
- Идентификатор массива, который возвращает циклическую итерацию.
statements | continue | break
- Любое количество фраз, или ключевые слова ‘continue’ или ‘break’, сжатые в 4 пробела или одну табуляцию.
return_expression
- возвращаемое значение цикла распределено наvar_declaration
Если цикл выходит из-за ключевых слов ‘continue’ или ‘break’, то возвращаемым значением цикла является значение последнего присвоенного значения перед выходом из цикла.
continue
- ключевое слово, которое может быть использовано только в цикле. Оно приводит к выполнению следующей итерации цикла
break
- Ключевые слова для выхода из круга.
Допускается изменение элементов массива или его размера в цикле.
Здесь мы используемfor...in
Однопараметрическая форма для определения того, на каждой K-линии сколько OHLC-значений K-линии больше, чем ‘close’ - SMA:
Пример
// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
int result = 0
for currentElement in array
if currentElement > value
result += 1
result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))
Здесь, мы используем два параметра фор…in, чтобы вывести нашуisPos
Значение массива будет true
Когда они были у нас.valuesArray
Соответствующее значение в массиве является правильным:
Пример
// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)
for [index, value] in valuesArray
if value > 0
array.set(isPos, index, true)
if barstate.islastconfirmedhistory
runtime.log(str.tostring(isPos))
См. также
for
while
array.sum
array.min
array.max
while
Строки допускают условную итерацию блоков локального кода.
variable_declaration = while boolean_expression
...
continue
...
break
...
return_expression
Объяснение:
variable_declaration
- Избирательные заявления переменных.return expression
Можно задать значение для этой переменной.
boolean_expression
- Если true, то выполняетсяwhile
Локальный блок фразы. Если false, то вwhile
После высказывания продолжите выполнение сценария.
continue
- continue
Ключевые слова ведут к следующему размножению цикла.
break
- break
Ключевые слова приводят к завершению цикла.while
После высказывания возвращается.
return_expression
- Подарок.while
Выберите строку, которая возвращает значение фразы.
Пример
// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter = i_n
int factorial = 1
while counter > 0
factorial := factorial * counter
counter := counter - 1
plot(factorial)
Примечание
Началоwhile
Локальный блок после строки должен быть сжат на четыре пробела или на один значок.while
Циклwhile
Следующий Булевой экспресс должен в конечном итоге стать ложным, или должен быть выполнен.break
。
Оператор switch передает контроль над одним из нескольких предложений в зависимости от условий и значения выражения.
[variable_declaration = ] switch expression
value1 => local_block
value2 => local_block
...
=> default_local_block
[variable_declaration = ] switch
boolean_expression1 => local_block
boolean_expression2 => local_block
...
=> default_local_block
Switch с выражением:
Пример
// Switch using an expression
string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])
float ma = switch i_maType
"EMA" => ta.ema(close, 10)
"SMA" => ta.sma(close, 10)
"RMA" => ta.rma(close, 10)
// Default used when the three first cases do not match.
=> ta.wma(close, 10)
plot(ma)
Выберите “switch” без выражения:
Пример
strategy("Switch without an expression", overlay = true)
bool longCondition = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
switch
longCondition => strategy.entry("Long ID", strategy.long)
shortCondition => strategy.entry("Short ID", strategy.short)
Возвращение Значение последнего выражения в выполняемом блоке локальных выражений.
Примечание
Использовать толькоlocal_block
Пример илиdefault_local_block
Первое.default_local_block
Только с=>
Знак вводится вместе и выполняется только в том случае, если предыдущий блок не выполнен. Еслиswitch
Результат высказывания присвоен переменной и не указанdefault_local_block
Если нет исполненияlocal_block
, возвращаетna
│ │ │switch
Результат высказывания распределяется на переменнуюlocal_block
Пример должен возвращать значения того же типа.
См. также
if
?:
series - ключевое слово, обозначающее тип серии данных.series
Ключевые слова обычно не нужны.
Используется для присвоения значения переменной, но только при декларировании переменной ((впервые используется))
Оператор присвоения, присваивающий значение левой переменной. Используется для присвоения значения переменной, ранее заявленной.
не равен │ выражениям любого типа │
expr1 != expr2
Возвращение Бульвария, или ряд бульварий.
Модиальное число ((дополнительное целое число) применимо к числовым выражениям
expr1 % expr2
Возвращение Целые числа или значения с плавающей точкой, или ряд значений.
Примечание В сценарии Пайна, при исчислении остатка целых чисел, сделка будет прервана. То есть, ее окружность будет вписана в минималь