FMZ PINE Script документация

Автор:Маленькие мечты, Создано: 2022-05-06 14:27:06, Обновлено: 2024-02-23 15:36:48

[TOC]

Ключевые слова, грамматика, настройка профиля

Структура кода

Обычная структура кода в Pine:

<version>
<declaration_statement>
<code>

Комментарии

Комментарийный символ, поддерживаемый FMZ на языке 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')

Версия

Компиляторные инструкции в следующей форме сообщают компилятору, в какой версии сценария был написан Pine:

//@version=5

Вы можете исключить встроенную версию v5 из кода//@version=5

Заявление

  • indicator()
  • strategy()

Заявление определяет тип сценария, который, в свою очередь, определяет, что в нем разрешено, и как оно используется и выполняется. Настраивает ключевые свойства сценария, такие как его название, где он появится, когда он будет добавлен в график, точность и формат показаний, которые он показывает, и управляет определенными значениями, такими как максимальное количество рисунковых объектов, которые он будет показывать в графике. Для стратегии свойства включают параметры, которые контролируют просмотр, такие как первоначальные капиталы, комиссии, точки, и т. д.indicator()Илиstrategy()В этом случае мы не можем сказать, что мы не знаем.

Код

В сценарии строка, не содержащая комментариев или компиляторных инструкций, является предложением, которое реализует алгоритм сценария.

  • Заявление переменных
  • Переназначение переменных
  • Заявление функции
  • Встроенные вызовы функций, вызовы функций, определенные пользователем
  • ifforwhileилиswitchи т.д.

Слов можно составить разными способами.

  • Некоторые заявления могут быть выражены в одном строке, например, большинство деклараций о переменных, содержащие только одну строку для вызова функции или однострочные декларации о функциях; другие, как структура, всегда требуют нескольких строк, поскольку они требуют одного локального блока.
  • Сценарий не может быть выполнен с помощью глобальных предложений (т.е. частей, не относящихся к локальным блокам).空格или制表符(tab) начинается. Их первый символ также должен быть первым символом строки. Строки, начинающиеся с первого места в строке, по определению являются частью глобального диапазона сценария.
  • Структура или многострочное заявление функции всегда требует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

Можно упаковать в (примечание: количество пространств, сокращенных на каждую строку, не является кратным четырём):

a = open +
      high +
          low +
             close

Долгий призыв к сюжету может быть упакован в.

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)

Строки в user-defined function declarations также могут быть упакованы. Однако, поскольку локальный блок должен начаться с замыкания ((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Это данные циклов линии K в течение 5 минут.openВ переменной записывается цена открытия в K-строке BAR (Статив) каждые 5 минут.openЭто означает, что цена открытия на K-линии BAR, где она находится в данный момент. Для ссылки на предыдущие значения в последовательности времени (предыдущие значения), мы используем[]Исторический оператор, когда политика выполняется на K-линии BAR,open[1]Это означает, что цена, по которой начал продаваться предыдущий K-линейный BAR, ссылается на текущий K-линейный BAR.

ХотяВременная последовательностьЭто легко напомнить нам о структуре данных, как "атрибуты", хотя в языке PINE есть и типы атрибутов.

Разработка временных последовательностей в языке PINE позволяет легко вычислить суммарные значения цены закрытия в стратегическом коде, и не требует использования циклических структур, таких как for, а просто использует встроенные функции языка PINE.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 всегда равны, поэтому оба метода выражения являются равными.

Параметры шаблона библиотеки языковых операций Pine

Встроенный шаблон политики PINE "Pine Language Exchange Library" с параметрами настройки.

Настройка сделок

  • Использование Модель закрытия: выполняется только после окончания текущего BAR, а сделка выполняется в начале нижнего BAR. Модель цены в реальном времени: модель выполняется при каждом изменении цены, и есть сигнал для немедленного выполнения сделки.
  • По умолчанию количество открытых позиций: если в инструкции не указано количество сделок, сделка выполняется по этому параметру.
  • Максимальное количество разовых сделок: в соответствии с фактическим счетом, в сочетании с параметром настройки, определяется максимальное количество заказов за один раз, чтобы избежать удара с диска.
  • Количество цен:定价货币精度Параметры и этот параметр определяют скользкую цену при размещении заказа; например, ценообразовательная денежная точность установлена на 2, то есть точна до второго числа, точна до 0.01; тогда скользкая цена представляет собой 0.01 ценных единиц на каждой точке. При этом скользкая цена установлена на 5, скользкая цена при размещении заказа составляет 0.05 ((Скользкая цена указывает на цену при размещении заказа в целях улучшения и расчетов за превышение цены на транзакцию).
  • Наиболее длинное число циклов: влияет на количество BAR линий K диаграммы, сjavascriptПризыв в стратегииSetMaxBarLenФункции работают одинаково.

Фьючерсные опциона

  • Разновидность кода: Код контракта, необходимо устанавливать только тогда, когда объект биржи является объектом неконкурентной биржи.
  • Минимальное количество контрактов: минимальный объем сделки при заказе.

Опции реального диска

  • Автоматическое восстановление прогресса: Автоматическое восстановление состояния до остановки последней политики.
  • Количество повторных попыток: заказ без сделки отменяет заказ, перезаказ пытается совершить сделку, параметр используется для ограничения максимального количества повторных попыток.
  • Интервал сетевых запросов (миллисекунд): действует только на протокол REST, контролирует интервал сетевых запросов, избегает слишком частого запроса, выходящего за пределы биржи.
  • Время синхронизации аккаунта ((секунды): период времени синхронизации данных аккаунта.
  • Послеоткрытие синхронизации позиций (миллисекунды): только для некоторых бирж, где данные задержки приводят к повторному открытию позиций, установка синхронизации большего времени может облегчить такие проблемы.
  • Умножение рычагов: Установите множители рычагов.

Торговля на месте, другие настройки

  • Односторонняя торговля: по умолчанию односторонняя торговля действительна только для наличной торговли.
  • Минимальный объем сделок: Минимальный объем сделок.
  • Цена валюты: точность цены, то есть дробные цифры цены.
  • Точность транзакций: точнасть следующей единицы, то есть дробные числа следующей единицы.
  • Плата за обслуживание: для расчета некоторых данных в соответствии с этой настройкой 0.002 означает 2 тысячных.
  • Промежуток статистики прибыли и убытка: использование статистики прибыли и убытка только на физической основе.
  • Неудачная повторная попытка (миллисекунды): интервал повторной попытки при неудачной сетевой просьбе.
  • Использование агента: действует только для протокола REST.
  • Скрыть распространенные ошибки в сети: Скрыть распространенные ошибки в регионе журналов.
  • Смена адреса базы: действительна только для протокола REST.
  • Направление уведомлений: отправка сообщений в почтовые ящики и т.д.

Сделка

Открытие

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Мы можем указать, когда мы заказываем функцию.limitstopПараметры.

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При этом, если цена на рынке сейчас выше, то заказ запускается.

  • Остановка заказа

    Установка стоп-лосс для заказа, когда заказ является платежным, заказ будет активирован только тогда, когда текущая цена на рынке выше этой цены. При продаже заказ запускается только тогда, когда текущая цена на рынке ниже этой цены.

  • Стоп-лимит

    Можно установить одновременноlimitstopПараметры, которые запускают заказы по цене, которая соответствует условиям первой.

Заявление, логическая структура ключевых слов

Вар

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 есть модели цены в режиме реального времени, модели цены закрытия, модели цены закрытия.varvaripМы проверили это с помощью следующего кода.

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
  • Модель цены в реальном времени При выполнении вышеперечисленного тестового кода проводится два этапа: первый, исторический K-линийный этап; второй, реальный K-линийный этап.varvaripПри выполнении каждого раунда кода стратегии заявленная переменная i、ii выполняется с нарастающей операцией ((посколькуif trueТаким образом, определенно выполняется соответствующий блок кода условий); поэтому можно видеть, что цифры, отображаемые на результатах рецензирования K-линии BAR, каждый из них увеличивается на 1; когда исторический K-линий завершается, начинается реальный K-линий;varvaripИзменения в заявленных переменных начинают происходить по-другому. Поскольку это модель цены в реальном времени, каждый раз, когда цена меняется в K-линии BAR, выполняется один и тот же стратегический код.i := i + 1иii := ii + 1Различие заключается в том, что ii изменяется каждый раз. i, хотя и изменяется каждый раз, возвращается к предыдущему значению при следующем раунде выполнения логики стратегии, но не обновляется до тех пор, пока не закончится текущая линия K BAR.

  • Модель закрытия Поскольку модель закрытия выполняет одну стратегическую логику после каждого прохождения K-линии BAR.varvaripПеременные, заявленные в этом примере, проявляются совершенно однозначно, причем каждое из K-линий BAR проявляется с увеличением 1 {\displaystyle 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-линии в реальном времени график возвращает значение, которое увеличивается на каждом тике.

ПримечанияИспользуется только с простыми типами, такими как float, int, boole, string, и с массивами этих типов.

Истинно

Определяет значение переменной типа Boole, или когда выражение используетсяСравнениеилиЛогикаЗначение, которое можно вычислить при операторе.

ПримечанияСм. такжеСравнениеОператоры иЛогикаОписание оператора.

До встречи bool

ложный

Означает значение переменной типа Бура, а также результаты сравнительных операций, логических операций.

ПримечанияСм. такжеСравнениеОператоры иЛогикаОписание оператора.

До встречи bool

если

If-заявления определяют, какие фрагменты фразы должны выполняться при выполнении условий выражения. Пине-скриптинг 4 версии позволяет использовать else 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_then0var_decl_then1И так далее. Если условие false, используется словарный блокelse ifИлиelseЛогика в (((var_decl_else0var_decl_else1И так далее.return_expression_then , return_expression_else- Последнее выражение в модуле или выражение из блокаelse вернет конечное значение заявления. Если объявление переменной в конце, то его значение будет результатом.

Тип возвращаемого значения if зависит от:return_expression_thenиreturn_expression_elseТипы. При выполнении в TradingView их типы должны соответствовать: невозможно вернуть целое значение из блока then, когда у вас есть значение строки в блокеelse. При выполнении в 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 присваивается threshold na (na, 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 блоков перемещается в четыре пространства:

Примеры

// 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- начальное значение счетчика.to_num- конечные значения счетчика; цикл прерывается, когда счетчик больше to_num ((или меньше to_num в случае from_num > to_num); разрешается использовать формулы 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- отслеживает опциональные переменные текущего игрового индекса. Индексы начинаются с нуля. Переменные неизменны в цикле.array_elementВ этом разделе мы рассмотрим некоторые из них.array_element- содержит переменные для каждого элемента последовательного массива, обрабатываемого в цикле; эта переменная неизменна в цикле;array_id- Идентификаторы матриц с повторяющимися циклами.statements | continue | break- Любое количество предложений, или ключевые слова "continue" или "break", сжатые до 4 пробелов или одной вкладки.return_expression- возвращаемое значение цикла присвоеноvar_declarationВнутренние переменные, если они существуют. Если цикл выходит из-за ключевых слов "continue" или "break", то возвращаемое значение цикла является переменным, которому было присвоено последнее значение перед выходом цикла.continue- ключевое слово, которое может использоваться только в обратном цикле. Оно приводит к следующему повторению обратного цикла.break- Ключевое слово для выхода из круга.

Позволяет изменять элементы массива или их размер в цикле. Здесь мы используемfor...inФорма однопараметра для определения того, сколько линий K имеют значение OHLC, большее, чем 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))

Здесь мы используем два параметров формы for...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Если ложь, то это означает, что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 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)

Снимок: Снимок: Снимок:

Примеры

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

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

ПримечанияВ сценарии Pine, когда вычисляется остаток целого числа, дилер будет отрезан; т. е. его четверо-пятое место до минимального абсолютного значения; полученная стоимость будет иметь тот же символ, что и дивиденд.

Пример: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1。

%=

Показатель модуля. Применяется для выражения числа.

expr1 %= expr2

Примеры

// Equals to expr1 = expr1 % expr2.
a = 3
b = 3
a %= b
// Result: a = 0.
plot(a)

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

*

Умножение. Применяется для выражения числа.

expr1 * expr2

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

*=

Назначение умножения.

expr1 *= expr2

Примеры

// Equals to expr1 = expr1 * expr2.
a = 2
b = 3
a *= b
// Result: a = 6.
plot(a)

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

+

Добавление или однозначный номер. Для использования в числовых выражениях или строках.

expr1 + expr2
+ expr

Возвращается значениеБинарная система строки+Возвращение объединения expres1 и expres2 Цифры возвращают целые числа или значения флуктуации, или ряд значений: Бинарный х +'возвращает express1 + express2. 1+1 возвращает expression ((не добавляет ничего к симметрии 1 оператора)).

ПримечанияВы можете использовать арифметические операторы с цифрами, а также числовые строки переменных. В случае использования числовых строк, операторы применяются к элементам.

+=

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

expr1 += expr2

Примеры

// Equals to expr1 = expr1 + expr2.
a = 2
b = 3
a += b
// Result: a = 5.
plot(a)

Возвращается значениеДля строки возвращает последовательность expres1 и expres2; для цифр возвращает целые числа или значения плавающих точек, или ряд значений.

ПримечанияВы можете использовать арифметические операторы с цифрами, а также числовые строки переменных. В случае использования числовых строк, операторы применяются к элементам.

-

Субтракция или однозначное отрицательное число.

expr1 - expr2
- expr

Возвращается значениеВозвращает целые числа или значения плавающих точек, или ряд значений: Динамический кремний +'возвращает express1 минус express2. Один юань-Возвращение отрицательного выражения expres.

ПримечанияВы можете использовать арифметические операторы с цифрами, а также числовые строки переменных. В случае использования числовых строк, операторы применяются к элементам.

-=

Субтракционное назначение.

expr1 -= expr2

Примеры

// Equals to expr1 = expr1 - expr2.
a = 2
b = 3
a -= b
// Result: a = -1.
plot(a)

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

/

Исключение. Применяется для числовых выражений.

expr1 / expr2

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

/=

За исключением обозначения. Применяется для числовых выражений.

expr1 /= expr2

Примеры

// Equals to expr1 = expr1 / expr2.
a = 3
b = 3
a /= b
// Result: a = 1.
plot(a)

Возвращается значениеЦелые числа или значения флуктуации, или ряд значений.

<

Меньше. Применяется для числовых выражений.

expr1 < expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

<=

меньше или равна. Применяется для числовых выражений.

expr1 <= expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

==

Это означает, что вы можете использовать любой тип выражения.

expr1 == expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

=>

Оператор '=>' используется для user-defined function declarations иswitchВ этом случае мы не можем сказать, что это не так.

Функциональное объявление имеет следующий синтаксис:

<identifier>([<parameter_name>[=<default_value>]], ...) =>
    <local_block>
    <function_result>

Один.<local_block>Это нулевые или более фразы Пайна.<function_result>Это может быть переменная, выражение или элементная группа.

Примеры

// single-line function
f1(x, y) => x + y
// multi-line function
f2(x, y) => 
    sum = x + y
    sumChange = ta.change(sum, 10)
    // Function automatically returns the last expression used in it
plot(f1(30, 8) + f2(1, 3))

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

>

Больший, чем. Применяется для числовых выражений.

expr1 > expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

>=

больше или равняется. Применяется для числовых выражений.

expr1 >= expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

?:

Трехслойные операторы.

expr1 ? expr2 : expr3

Примеры

// Draw circles at the bars where open crosses close
s2 = ta.cross(open, close) ? math.avg(open,close) : na
plot(s2, style=plot.style_circles, linewidth=2, color=color.red)  

// Combination of ?: operators for 'switch'-like logic
c = timeframe.isintraday ? color.red : timeframe.isdaily ? color.green : timeframe.isweekly ? color.blue : color.gray
plot(hl2, color=c)

Возвращается значениеЕсли expression1 оценивается как true, то expression2 будет оцениваться как true, если expression3 не оценивается как true; нулевые значения ((0 и NaN+, Infinity,-Infinity) будут считаться ложными, все остальные значения будут считаться истинными.

ПримечанияЕсли вам не нужно, пожалуйста, используйте na в качестве ветви else. Вы можете использовать два или более операторов: для выполнения предложений, похожих на фразы с коммутаторами (см. пример выше). Вы можете использовать арифметические операторы с цифрами, а также числовые строки переменных. В случае использования числовых строк, операторы применяются к элементам.

До встречи na

[]

Подзнаки серии ─ предоставляет доступ к предыдущим значениям серии expr1 ─ expr2 - это число прошлых k строк, которое должно быть числовым ─ плавающее будет отклонено вниз ─

expr1[expr2]

Примеры

// [] can be used to "save" variable value between bars
a = 0.0 // declare `a`
a := a[1] // immediately set current value to the same as previous. `na` in the beginning of history
if high == low // if some condition - change `a` value to another
    a := low
plot(a)

Возвращается значениеСреди них есть и другие.

До встречи math.floor

и

Логический AND ─ применяется к выражению Буля ─

expr1 and expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

или

Логика OR ─ применяется к выражению Буля ─

expr1 or expr2

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

Нет, нет.

Логическое обратное (NOT) ≠ применимо к выражению Буля.

not expr1

Возвращается значениеВ этом случае, если вы используете один из этих параметров, то вы можете использовать другие параметры.

Ключевые слова типа данных

Буль

Ключевые слова типа "Bool" для четко заявляемых переменных или параметров. Значение переменной "Bool" может быть true, false или na.

Примеры

// bool
bool b = true    // Same as `b = true`
b := na
plot(b ? open : close)

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

До встречи var varip int float color string true false

Инт

Ключевые слова типа int ((integer)), используемые для выраженного объявления переменных или параметров.

Примеры

// int
int i = 14    // Same as `i = 14`
i := na
plot(i)

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

До встречи var varip float bool color string

плыть

Ключевые слова типа "float" ("плавучая точка"), используемые для выраженного заявления переменных или параметров.

Примеры

// float
float f = 3.14    // Same as `f = 3.14`
f := na
plot(f)

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

До встречи var varip int bool color string

строка

Ключевые слова типа "string", используемые для выраженного заявления переменных или параметров.

Примеры

// string
string s = "Hello World!"    // Same as `s = "Hello world!"`
// string s = na // same as "" 
plot(na, title=s)

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

До встречи var varip int float bool str.tostring str.format

цвет

Ключевые слова типа "color", используемые для выраженного заявления переменных или параметров.

Примеры

// color
color textColor = color.green
if barstate.islastconfirmedhistory
    runtime.log("test", textcolor = textColor)

ПримечанияЦветовые символы имеют следующий формат: #RRGGBB или #RRGGBBAA. Буквы представляют шестнадцатизначные значения от 00 до FF (от 0 до 255 в десятичной системе), где RR, GG и BB являются значениями красного, зеленого и синего компонентов цвета. AA является опционным значением цветовой прозрачности (или альфа-прозрачности), из которых 00 является невидимым, FF - непрозрачным. Указание типа в декларации переменного является опциональным, если он не инициирован на на; для получения дополнительной информации о типе Pine смотрите на странице руководства пользователя системы типов.

До встречи var varip int float string color.rgb color.new

массив

Ключевые слова для типа матрицы матрицы матрицы для четко заявленных переменных или параметров; можно использоватьarray.new<type>,array.fromФункция создает массивные объекты ((или ID)).

Примеры

// array
array<float> a = na
a := array.new<float>(1, close)
plot(array.get(a, 0))

ПримечанияОбъекты массива всегда имеют форму кубических рядов.

До встречи var array.new array.from

Встроенные функции

При вызове функции можно передавать параметры, указывать значения имен параметров, вносить переменные непосредственно в соответствующее место параметров, а также поддерживать смешанное использование.

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

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

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

сроки

время.в_секундах

Это будет переданоtimeframeВременные циклы параметров преобразуются в секунды.

timeframe.in_seconds(timeframe)

Примеры

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

Возвращается значение timeframeКоличество секунд в одной из K строк в интервале в интервале в интервале в интервале в интервале в интервале в интервале в интервале.

Параметры

  • timeframe(simple string) Период времени↑ опциональный↑ по умолчанию timeframe.period↑

ПримечанияДляtimeframe>= 1M Функция, рассчитанная на 30.4167 (365/12) дней в месяце.

До встречи input.timeframe timeframe.period

тикер

ticker.heikinashi

Создание кодового идентификатора запроса на сглаживание среднего значения строки K.

ticker.heikinashi(symbol)

Примеры

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

Возвращается значение 股票代码的字符串值,可以提供给request.security函数。

Параметры

  • symbol(simple string) Идентификатор товарного кода.

До встречи syminfo.tickerid syminfo.ticker request.security

просьба

request.data

Запрос внешних данных.

request.data(url, attribute)

Примеры

/*backtest
start: 2022-01-26 09:00:00
end: 2024-02-01 15:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

// 图表地址https://www.datadata.cn/queries/a10ea45c-1674-48ef-b414-cc17a7e4a548
var chart_data = "https://www.datadata.cn/api/v1/query/a10ea45c-1674-48ef-b414-cc17a7e4a548/data"
add_investor = request.data(chart_data, "$.add_investor")
idx_price = request.data(chart_data, "$.close_price")

plot(add_investor, "股市新增人口")
plot(idx_price, "股指价格")
// 反指交易
avg_investor = ta.ema(add_investor[1], 30)
if strategy.position_size == 0
    if add_investor > avg_investor*1.1
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Short", strategy.short)
    else if add_investor < avg_investor*0.9
        runtime.log("新增人口:", add_investor, "近30天平均:", avg_investor, "#ff0000")
        strategy.entry("Enter Long", strategy.long)

Возвращается значениеПараметрыattributeУказанная серия данных.

Параметры

  • url(simple string) URL запрошенного источника данных, формат ответа на источник данных должен соответствовать требованиям ((содержит как минимум свойства time、data):{"data": [], "schema": ["time", "data"]}‒ Обратите внимание на формат данных в примере:
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) Указывает название свойства, возвращает нужную информацию; например:"$.add_investor"Использование$.Как префикс, имена свойств совпадают с свойствами в поле data в данных, которые были получены при запросе источника данных.

request.security

Второй вид/разрешение требуется.

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

Примеры

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

Возвращается значениеТребование серии

Параметры

  • symbol(simple string) Код товара.
  • timeframe(simple string) Временные циклы. Пустая строка будет интерпретироваться как текущий временной цикл на графике.
  • expression(series int/float/bool/color) можно вызвать из request.security и вернуть выражение. Оно может быть рядом или элементом, который может быть преобразован в ряд.
  • gaps(barmerge_gaps) Политика объединения запрошенных данных ((требует автоматического объединения данных с основными данными OHLC-серии)). Возможные значения: barmerge.gaps_on, barmerge.gaps_off。 barmerge.gaps_on - запрошенные данные объединены с возможными разрывами ((na-value) ─ barmerge.gaps_off - запрошенные данные непрерывно объединяются, все разрывы заполняются предыдущим последним существующим значением。
  • lookahead(barmerge_lookahead) Политика объединения запрошенных данных. Возможные значения: barmerge.lookahead_on, barmerge.lookahead_off. Начиная с версии 3, значение по умолчанию будет barmerge.lookahead_off.
  • ignore_invalid_symbol(const bool) опциональный параметр. Если указанный товар не найден, определяется действие функции: если false, сценарий остановится и вернется к ошибке при выполнении; если true, функция вернется к na и продолжит выполнение.
  • currency(simple string) конвертирует валютные значения (например, OHLC) в валюты, в которые конвертируется товар. Затем на основе конвертируемого значения рассчитывается выраженный курс курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса курса.

ПримечанияКод PineScript, использующий эту функцию, может выполнять различные вычисления на исторические записи и данные в реальном времени.Если вы хотите указать дополнительные параметры для запрашиваемого товара, например, временные интервалы или тип настройки, вы можете использовать эти параметры.您可以使用ticker.newФункция ∞. Невозможно передать погрешность этой функции с помощью переменной ticker.ticker.newФорма выражения строк для параметров или кодов акций, например, параметры AAPL+MSFT*TSLA;В настоящее время один сценарий может содержать до 40 вызовов request.security. Обратите внимание, что использование этой переменной/функции может привести к перечеркиванию показателя. Параметры разрешения позволяют: 1S, 5S, 15S, 30S - интервал в секунду (цикл графика должен быть меньше или равен циклу запроса) От 1 до 1440 минут От 1D до 365D С 1 Вт до 52 Вт через несколько недель От 1M до 12M за несколько месяцев.

До встречи syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

ЕслиsourceСодержит строкуstrВ случае, если строка является подстрокой, то она возвращает true, в противном случае возвращает false.

str.contains(source, str)

Примеры

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

Возвращается значениеЕсли вsourceНайти в строкеstr, то это true, иначе false.

Параметры

  • source(series string) Источник строки
  • str(series string) Поисковая подстрока.

До встречи str.pos str.match

str.endswith

ЕслиsourceСтрокаstrКонец подстроки, указанной в, возвращает true, иначе возвращает false.

str.endswith(source, str)

Возвращается значениеЕслиsourceСтрокаstrЗавершение подстроки, указанной в, является true, иначе false.

Параметры

  • source(series string) Источник строки
  • str(series string) Поисковая подстрока.

До встречи str.startswith

str.startswith

ЕслиsourceСтрокаstrНачало подстроки, указанной в, возвращает true, иначе возвращает false.

str.startswith(source, str)

Возвращается значениеЕслиsourceСтрокаstrНачало подстроки, обозначенной в, должно быть true, в противном случае false.

Параметры

  • source(series string) Источник строки
  • str(series string) Поисковая подстрока.

До встречи str.endswith

str.substring

Это возвращает новую строку.sourceПодразделение строки.begin_posНачинается с символа в указанном индексе и расширяется доsourceend_pos - 1 .

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

Примеры

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

Возвращается значениеПодстрока, извлеченная из исходной строки.

Параметры

  • source(series string) Извлечь из него исходную строку для подстроки.
  • begin_pos(series int) - начальное местоположение извлеченной подстроки. Оно является эксклюзивным (исключительное местоположение включает символы извлеченной подстроки).
  • end_pos(series int) окончание местоположения. Оно является эксклюзивным.sourceДлина строки.

ПримечанияИндекс строки начинается с нуля.begin_posЭто равноend_posФункция возвращает пустую строку.

До встречи str.contains str.pos str.match

str.tonumber

str.tonumber(string)

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

Параметры

  • string(series string) форма представления строки int или float.

str.format

Преобразование строки формата и значения в строку форматирования. Структура формата может содержать местоимение в больших скобках {} в текстовом тексте и каждом значении, которое нужно форматировать. Каждый местоимение включает в себя индекс, который заменит его необходимые параметры (начиная с 0), а также опциональный форматный указатель. Индекс указывает местоимение параметра в списке параметров str.format.

str.format(formatString, arg0, arg1, ...)

Примеры

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

Возвращается значениеФорматируемые строки.

Параметры

  • formatString(series string) Форматированная строка.
  • arg0, arg1, ...(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) - значение, которое нужно отформатировать.

ПримечанияВсе скобки в стиле, который не цитируется, должны быть сбалансированы. Например, ab {0} de" и "ab } de" являются действительными стилями, но "ab {0} de, ab } de" и {" не являются действительными стилями.

str.length

Возвращается целое число, соответствующее числу символов в этой строке.

str.length(string)

Возвращается значениеКоличество символов в исходной строке.

Параметры

  • string(series string) Источник строки

str.lower

Возвращает новую строку, в которой все буквы переведены в малолитражный текст.

str.lower(source)

Возвращается значениеВсе буквы были преобразованы в новые строки с маленькими буквами.

Параметры

  • source(series string) Структура, которую нужно преобразовать.

До встречи str.upper

str.upper

Возвращает новую строку, в которой все буквы переведены в большие буквы.

str.upper(source)

Возвращается значениеВсе буквы были преобразованы в новую строку с большим шрифтом.

Параметры

  • source(series string) Структура, которую нужно преобразовать.

До встречи str.lower

str.match

Если совпадаетregexОбычное выражение возвращаетsourceНовая подстрочка строки, иначе возвращается na.

str.match(source, regex) 

Примеры

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHAN

Больше

ВуаоянКак можно работать с несколькими сделками одновременно?

Легкие облака.Пожалуйста, расскажите, может pine иметь больше транзакций, не так ли? Или перемещаться по транзакциям, как JS?

Лиза20231Спасибо за подробную документацию.

художественностьОго! Как этот скрипт pine использует на платформе симулятор okex?

художественностьЭто означает, что стратегию tradingview можно скопировать прямо на платформу изобретателя и использовать!

Маленькие мечтыЯзык PINE может выполнять только одноразовые стратегии, а многоразовые стратегии лучше всего использовать для написания дизайна в Python, JavaScript, C++.

Маленькие мечтыО, да, OKX особенный, их аналогичная среда и реальная среда имеют один и тот же адрес, только в другом месте есть разница.

Легкие облака.Не могу использовать okx анимационный диск.

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

Маленькие мечтыХорошо, спасибо за предложение, сообщите об этом по этому поводу.

Легкие облака.Я считаю, что лучше всего совмещать с JS, чтобы JS лучше адаптировался к различным способам торговли.

Тенденционный охотникЕсли вы хотите, чтобы вы были в курсе, что вы хотите, чтобы вы были в курсе, что вы хотите, чтобы вы были в курсе.

Маленькие мечтыНепристойность.

Легкие облака.Хорошо, спасибо, Джимми.

Маленькие мечтыЗдравствуйте, но на данный момент стратегия языка PINE работает только с одной разновидностью.

Маленькие мечтыСпасибо за вашу поддержку. Документы будут продолжать совершенствоваться.

Маленькие мечтыДа, это так.

Маленькие мечтыПИНЕ-классовая библиотека шаблонов, параметры которой позволяют установить базовые адреса обменных пунктов.