В процессе загрузки ресурсов... загрузка...

FMZ PINE Сценарий Doc

Автор:Изобретатели количественного измерения - мечты, Создано: 2022-04-28 16:05:05, Обновлено: 2024-10-12 17:25:27

Изменить значения поля

type order
    float price
    float amount
    string symbol

if strategy.position_size == 0 and open > close
    strategy.entry("long", strategy.long, 1)
    
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)

if strategy.position_size != 0
    runtime.log(order1)
    order1.price := 999
    order1.amount := 100
    runtime.log(order1)
    runtime.error("stop")

Значение поля объекта может быть изменено с помощью:=оператора переназначения.

Коллекция объектов

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

type order
    float price
    float amount
    string symbol

arrOrder = array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

или

type order
    float price
    float amount
    string symbol

var array<order> arrOrder = na
arrOrder := array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

Копировать объект

Когда существующий объект присваивается новой переменной, оба относятся к одному и тому же объекту.

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)

В следующем примере мы создаем объект pivot1 и устанавливаем его поле x на 1000. Затем мы объявляем переменную pivot2, которая содержит ссылку на объект pivot1, поэтому оба они указывают на один и тот же случай. Поэтому изменение pivot2.x также изменяет pivot1.x, потому что оба относятся к поле x одного и того же объекта.

Для создания копии, которая является независимой от исходного объекта, в этом случае мы можем использовать встроенный метод копии ((). В этом примере мы объявляем переменную pivot2 для ссылки на скопированный экземпляр объекта pivot1. Теперь, изменение pivot2.x не изменит pivot1.x, потому что он относится к поле x отдельного объекта:

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)

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

Глубокая копия

//@version=5

indicator("test deepCopy")

type orderInfo
    float price
    float amount

type labelInfo
    orderInfo order
    string labelMsg

labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)

labelInfo1.labelMsg := "labelInfo1->2"    // Modify the base type field of labelInfo1 to see if it affects labelInfo2
labelInfo1.order.price := 999             // Modify the composite type field of labelInfo1 to see if it affects labelInfo2

runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")

Результаты теста показывают, что labelInfo.copy ((labelInfo1) является глубокой копией при исполнении, и изменение любого поля labelInfo1 не повлияет на labelInfo2.

Методы

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

Встроенные методы

Например, сценарий такого кода:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    array.push(sourceArray, sourceInput)
    array.shift(sourceArray)
    // Update the mean and standard deviaiton values.
    sampleMean := array.avg(sourceArray)
    sampleDev  := array.stdev(sourceArray) * multiplier

// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Можно переписать эквивалентно как:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Вы можете видеть, что после PINE поддерживаетMethods, кодarray.avg(sourceArray)могут быть записаны в виде методов:sourceArray.avg()- Да. Обратите внимание, что FMZ не поддерживает звонки, такие какarray.avg currently.

Методы, определенные пользователем

Pine позволяет пользователям определять пользовательские методы, которые работают с объектами любого встроенного или пользовательского типа.

  1. Ключевое слово "метод" должно быть включено перед именем функции.
  2. Тип первого параметра метода должен быть явно заявлен, поскольку он представляет собой тип объекта, с которым будет связан метод.

Например, в следующем коде код для расчета индикатора Боллинджера обобщен как метод, определенный пользователем:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Измененный на:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
method maintainQueue(array<float> srcArray, float value, bool takeSample = true) =>
    if takeSample
        srcArray.push(value)
        srcArray.shift()
    srcArray

method calcBB(array<float> srcArray, float mult, bool calculate = true) =>
    var float mean = na
    var float dev  = na
    if calculate
        mean := srcArray.avg()
        dev  := srcArray.stdev() * mult
    [mean, mean + dev, mean - dev]

bool newSample = bar_index % n == 0

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Вы можете видеть, что первый параметр в параметровом списке пользовательских методов, объявленных с ключевым словом метод: maintainQueue и calcBB является типаarray<float>, что означает, что метод является методом переменной типаarray<float>, так что вы можете видеть, что следующий код называется для расчета индикатора Боллинджера.

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

Методы перегрузки

Используемые методы могут заменять и перегружать существующие встроенные методы и пользовательские методы с одним и тем же идентификатором. Эта функция позволяет пользователям определять несколько рутин, связанных с различными подписями аргументов под одним и тем же именем метода. В качестве простого примера предположим, что мы хотим определить метод для идентификации типа переменной. Поскольку мы должны четко указать тип объекта, связанного с пользовательским методом, мы должны определить перегрузки для каждого типа, который мы хотим, чтобы он узнал. Далее мы определяем метод getType ((), который возвращает строку представления типа переменной s и имеет перегрузки для пяти основных типов:

//@version=5
indicator("Type Inspection")

// @function   Identifies an object's type.
// @param this Object to inspect.
// @returns    (string) A string representation of the type.
method getType(int this) =>
    na(this) ? "int(na)" : "int"

method getType(float this) =>
    na(this) ? "float(na)" : "float"

method getType(bool this) =>
    na(this) ? "bool(na)" : "bool"

method getType(color this) =>
    na(this) ? "color(na)" : "color"

method getType(string this) =>
    na(this) ? "string(na)" : "string"

a = 1             // a.getType(): float
b = 1.0           // b.getType(): float
c = true          // c.getType(): bool
d = color.white   // d.getType(): string(na)
e = "1"           // e.getType(): string

runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")

Базовый тип каждой переменной определяет, какая перегрузкаgetType()На платформе FMZ, поскольку базовой реализацией скриптов PINE является JavaScript, числовой тип будет рассматриваться как данные с плавающей запятой (float).

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

При вызове функции можно передавать аргументы. Можно присваивать имена аргументов для присвоения значений. Можно напрямую передавать переменные в соответствующих позициях аргументов. Также поддерживается смешанное использование. Например:

plot(close, title="test plot")     // Pass the argument close directly; specify the argument title and assign the string "test plot"

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

// plot(close, title="test", color.red)    // Although the third argument of plot is the color value, but this will report an error
plot(close, title="test", color=color.red) // Correct writing
plot(close, "test", color.red)             // Correct writing

сроки

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

Преобразовать прошедший период времени в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.

Аргументы

  • timeframe(простая строка) Временные рамки. необязательно. по умолчанию timeframe.period.

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

См. также input.timeframe timeframe.period

тикер

ticker.heikinashi

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

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(простая строка) идентификатор кода продукта.

См. также syminfo.tickerid syminfo.ticker request.security

просьба

request.data

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

request.data(url, attribute)

Пример

/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice

plot(diff, "perpetual-spot difference")
plot(futuresPrice, "futures prices", overlay=true)
plot(spotPrice, "spot prices", overlay=true)

if diff > 80 and strategy.position_size >= 0
    runtime.log("diff > 80")
    strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
    runtime.log("diff < 60")
    strategy.entry("Enter Short", strategy.long)

Возвратная стоимостьАргумент атрибута определяет серию данных.

Аргументы

  • url(простая строка) URL запрошенного источника данных и формат ответа источника данных должны соответствовать требованиям (включая, по крайней мере, атрибуты времени и данных):{"data": [], "schema": ["time", "data"]}. Вы можете обратиться к формату данных в примере:

    {
        "data": [
            [1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
            [1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
            // ...
        ],
        "schema": ["time", "data"]
    }
    
  • attribute(простая строка) указывает имя атрибута и возвращает требуемые данные."$.spot_close_price", использовать$.как префикс, а название атрибута соответствует атрибуту в поле данных в данных в ответе при запросе источника данных

Если будет показана ошибка, вам нужно проверить, требуется ли промежуток времениrequest.dataсоответствует временному диапазону, установленному для обратного теста. Если в временном ряду обратного теста нет данных, будет сообщена ошибка.

В этом примере SQL-запрос данных-данные в данном примере:

WITH latest_data AS (
    SELECT 
        klines.spot_1d.Time AS time,
        CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
    FROM 
        klines.spot_1d
    JOIN 
        klines.future_1d
    ON 
        klines.spot_1d.Time = klines.future_1d.Time
    WHERE
        klines.spot_1d.Symbol = 'btc_usdt'
    AND 
        klines.future_1d.Symbol = 'btc_usdt.swap'
    AND 
        klines.spot_1d.Exchange = 'Binance'
    AND 
        klines.future_1d.Exchange = 'Binance'
    ORDER BY 
        klines.spot_1d.Time DESC
    LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;

Вы можете запросить и создать ссылки на данныеИсследование данныхстраница платформы FMZ, которая являетсяhttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/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Символ.
  • timeframe(простая строка) Временный период. Пустая строка интерпретируется как текущее разрешение графика.
  • expression(series int/float/bool/color) Выражение может быть рассчитано и возвращено с вызова request.security. Это может быть ряд или тупл, содержащий элементы, которые могут быть переданы в серии.
  • gaps(barmerge_gaps) Стратегия слияния запрошенных данных (запрошенные данные автоматически сливаются с данными основного ряда OHLC). Возможные значения: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - запрашиваемые данные сливаются с возможными пробелами (нет значений). barmerge.gaps_off - запрашиваемые данные сливаются непрерывно без пробелов, все пробелы заполняются предыдущими ближайшими существующими значениями. Значение по умолчанию barmerge.gaps_off.
  • lookahead(barmerge_lookahead) Стратегия слияния для запрошенного положения данных. Возможные значения: barmerge.lookahead_on, barmerge.lookahead_off. Значение по умолчанию barmerge.lookahead_off начиная с версии 3. Обратите внимание, что поведение одинаково в режиме реального времени и отличается только в истории.
  • ignore_invalid_symbol(const bool) Опциональный аргумент. Определяет поведение функции, если указанный символ не найден: если false, скрипт остановится и вернет ошибку во время выполнения; если true, функция вернет na и исполнение продолжится. Значение по умолчанию false.
  • currency(простая строка) Валюта, в которую должны быть конвертированы валютные значения символа (например, OHLC).expressionзатем рассчитывается на основе конвертированных значений. Используемые курсы конвертации основаны на суточных курсах пары FX_IDC предыдущего дня (относительно строки, в которой выполняется расчет). Необязательно. По умолчанию syminfo.currency. Возможные значения: трехбуквенная строка с кодом валюты в формате ISO 4217 (например, USD) или одна из констант в валюте.* namespace, например currency.USD.

ПримечанияКод 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подстрока, в противном случае ложная.

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)

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

Аргументы

  • source(серийный ряд) Источник строки.
  • str(Серьезная строка) Подстрока для поиска.

См. также str.pos str.match

str.endswith

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

str.endswith(source, str)

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

Аргументы

  • source(серийный ряд) Источник строки.
  • str(Серьезная строка) Подстрока для поиска.

См. также str.startswith

str.startswith

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

str.startswith(source, str)

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

Аргументы

  • source(серийный ряд) Источник строки.
  • str(Серьезная строка) Подстрока для поиска.

См. также str.endswith

str.substring

Возвращает новую строку, которая является подстрокойsourceПодстрока начинается с символа в индексе, указанномbegin_posи распространяется до end_pos - 1source string.

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(серия строки) Источниковая строка, из которой извлечь подстроку.
  • begin_pos(series int) Начальное положение извлеченной подстроки.
  • end_pos(series int) Конечная позиция. Она исключительна (экстрагируемая строка НЕ включает в себя этот знак позицииs).source string.

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

См. также str.contains str.pos str.match

str.tonumber

str.tonumber(string)

ВозвращениеПлавающая версия строки, если она содержит действительный номер, а если нет.

Аргументы

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

str.format

Преобразует строку форматирования и value (s) в форматированную строку. Строка форматирования может содержать буквальный текст и один запятой в запятой {} для каждого значения, которое должно быть отформатировано. Каждый запятой состоит из индекса требуемого аргумента (начиная с 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(Серьезная строка) Формат строки.
  • arg0, arg1, ...(серия 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(серийный ряд) Источник строки.

str.lower

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

str.lower(source)

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

Аргументы

  • source(Серьезная строка) Строка для преобразования.

См. также str.upper

str.upper

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

str.upper(source)

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

Аргументы

  • source(Серьезная строка) Строка для преобразования.

См. также str.lower

str.match

Возвращает новую подстрокуsourceстрока, если она совпадает сregexрегулярное выражение, на иначе.

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) // "EXCHANGE_NAME:SYMBOL_NAME"

ВозвращениеНовая подстрокаsourceстрока, если она совпадает сregexрегулярное выражение, на иначе.

Аргументы

  • source(серийный ряд) Источник строки.
  • regex(Серьезная строка) Регулярное выражение, к которому эта строка должна соответствовать.

ПримечанияФункция возвращает первый случай регулярного выражения вsourceСтруна. Символ вregexstring необходимо избежать с дополнительной обратной строкой, например, \d означает регулярное выражение \d.

См. также str.contains str.substring

str.pos

Возвращает положение первого появленияstrСтрока вsourceСтрелка, на иначе.

str.pos(source, str)

ВозвращениеПоложениеstrСтрока вsource string.

Аргументы

  • source(серийный ряд) Источник строки.
  • str(Серьезная строка) Подстрока для поиска.

ПримечанияИндексация струн начинается с 0.

См. также str.contains str.match str.substring

str.replace

Возвращает новую строку с N + 1 явлениемtargetстрока и предыдущее появлениеtargetстрока замененаreplacementстрока, где N указано вoccurrence. N - это индекс соответствия целевой строки, которую следует заменить в исходной строке.

str.replace(source, target, replacement, occurrence)

Пример

var source = "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"

// Replace first occurrence of "EXCHANGE1" with "EXCHANGE2" replacement string
var newSource = str.replace(source, "EXCHANGE1",  "EXCHANGE2", 0)

if barstate.islastconfirmedhistory
    // Display "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
    runtime.log(newSource)

ВозвращениеОбработанная нить.

Аргументы

  • source(серийный ряд) Источник строки.
  • target(серийная строка) Строка должна быть заменена.
  • replacement(серия строки) строка, которая должна быть вставлена вместо целевой строки.
  • occurrence(series int) Индекс соответствия появления целевой строки, которая должна быть заменена в исходной строке Индексирование начинается с 0 для первого соответствия.

См. также str.replace_all str.match

str.replace_all

Заменяет каждое появление целевой строки в исходной строке с заменой строки.

str.replace_all(source, target, replacement)

ВозвращениеОбработанная нить.

Аргументы

  • source(серийный ряд) Источник строки.
  • target(серийная строка) Строка должна быть заменена.
  • replacement(серия строки) Строка, подменяемая для каждого появления целевой строки.

str.split

Разделяет строку на массив подструн и возвращает идентификатор массива.

str.split(string, separator)

ВозвращениеИдентификатор массива струн.

Аргументы

  • string(серийный ряд) Источник строки.
  • separator(Серьезная строка) Строка, отделяющая каждую подстроку.

str.tostring

str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)

ВозвращениеСтрунное представлениеvalueСпор. Еслиvalueаргумент - это строка, он возвращается таким, какой он есть. Когдаvalueявляется na, функция возвращает строку NaN.

Аргументы

  • value(series int/float/bool/string/int[]/float[]/bool[]/string[]) Значение или идентификатор массива, элементы которого конвертируются в строку.
  • format(серия строки) Формат строки. Принимает эти формат.* константы: format.mintick, format.percent, format.volume. Необязательно. Значение по умолчанию #.###########.

ПримечанияФорматирование значений плавающих также округляет эти значения при необходимости, например, str.tostring ((3.99, #) вернет 4. Для отображения нулей, используйте 0 вместо #. При использовании format.mintick значение будет округлено до ближайшего числа, которое можно разделить на syminfo.mintick без остатка. Если аргумент x является строкой, то будет возвращено то же значение строки. Аргументы типа Bool возвращают true или false. Когда x равен na, функция возвращает NaN.

цвет

color.new

Цвет функции применяет указанную прозрачность к заданному цвету.

color.new(color, transp)

Пример

plot(close, color=color.new(color.red, 50))

ВозвращениеЦвет с определенной прозрачностью.

Аргументы

  • color(цвет серии)
  • transp(series int/float) Возможные значения от 0 (не прозрачные) до 100 (невидимые).

ПримечанияИспользование аргументов, которые не являются константами (например, simple, input или series) повлияет на цвета, отображаемые в вкладке Settings/Style скрипта.

color.rgb

Создает новый цвет с прозрачностью с использованием цветовой модели RGB.

color.rgb(red, green, blue, transp)

Пример

plot(close, color=color.rgb(255, 0, 0, 50))

ВозвращениеЦвет с определенной прозрачностью.

Аргументы

  • red(series int/float) компонент красного цвета. Возможные значения от 0 до 255.
  • green(series int/float) Компонент зеленого цвета. Возможные значения от 0 до 255.
  • blue(серия int/float) Синий цвет компонента. Возможные значения от 0 до 255.
  • transp(series int/float) Необязательно. Прозрачность цвета. Возможные значения от 0 (непрозрачные) до 100 (невидимые).

ПримечанияИспользование аргументов, которые не являются константами (например, simple, input или series) повлияет на цвета, отображаемые в вкладке Settings/Style скрипта.

время выполнения

runtime.debug

Напечатайте информацию о переменных на консоли.

языковые функции FMZ PINE,runtime.debug(value), только с аргументом.

runtime.log

Выходное содержание в журнале.

языковые функции FMZ PINE,runtime.log(1, 2, 3, close, high, ...), вы можете передать несколько аргументов.

runtime.error

При вызове, вызывает ошибку запуска с сообщением об ошибке, указанным вmessage argument.

runtime.error(message)

Аргументысообщение (серийная строка) сообщение об ошибке.

ввод

ввод

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

input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)

Пример

i_switch = input(true, "On/Off")     // Set true, the default is checked.
plot(i_switch ? open : na)

i_len = input(7, "Length")
i_src = input(close, "Source")       // Drop-down box, select close by default.
plot(ta.sma(i_src, i_len))

i_col = input(color.red, "Plot Color")
plot(close, color=i_col)

i_text = input("Hello!", "Message")
runtime.log(i_text)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const int/float/bool/string/color or source-type built-in) Определяет значение по умолчанию входной переменной, предложенной в вкладке Settings/Inputs скрипта, с которой пользователи скрипта могут изменить его.close, hlc3, и т.д.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.

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

См. также input.bool input.color input.int input.float input.string input.timeframe input.source

input.source

Добавляет вход в вкладку "Ввод" в настройках сценария, что позволяет предоставить пользователям сценария параметры конфигурации. Эта функция добавляет выпадающую панель, которая позволяет пользователю выбрать источник для расчета, например, close, hl2, и т. д. Если сценарий включает только один вызов input.source(), пользователь также может выбрать выход из другого индикатора на своем графике в качестве источника.

input.source(defval, title, tooltip, inline, group)

Пример

i_src = input.source(close, "Source")
plot(i_src)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(series int/float) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Settings/Inputs скрипта, с которой пользователь может изменить его.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.

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

См. также input.bool input.int input.float input.string input.timeframe input.color input

input.string

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

input.string(defval, title, options, tooltip, inline, group, confirm)

Пример

i_text = input.string("Hello!", "Message")
runtime.log(i_text)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const string) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Settings/Inputs скрипта, с которой пользователь может изменить его.optionsАргумент, значение должно быть одним из них.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • options(Список констант: [<тип>...]) Список вариантов на выбор.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.
  • confirm(const bool) Если true, то пользователю будет предложено подтвердить значение ввода, прежде чем индикатор будет добавлен в график.

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

См. также input.bool input.int input.float input.timeframe input.source input.color input

input.bool

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

input.bool(defval, title, tooltip, inline, group, confirm)

Пример

i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const bool) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Настройки/Вводы скрипта, с которой пользователь может изменить его.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.
  • confirm(const bool) Если true, то пользователю будет предложено подтвердить значение ввода, прежде чем индикатор будет добавлен в график.

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

См. также input.int input.float input.string input.timeframe input.source input.color input

input.int

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

input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm) 
input.int(defval, title, options, tooltip, inline, group, confirm)

Пример

i_len1 = input.int(10, "Length 1", minval=5, maxval=21, step=1)
plot(ta.sma(close, i_len1))

i_len2 = input.int(10, "Length 2", options=[5, 10, 21])
plot(ta.sma(close, i_len2))

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const int) Определяет значение по умолчанию переменной ввода, предложенной в разделе Настройки/Вводы скрипта, с которого пользователи скрипта могут изменить его.optionsАргумент, значение должно быть одним из них.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • minval(const int) Минимальное возможное значение входной переменной.
  • maxval(const int) Максимально возможное значение входной переменной.
  • step(const int) значение шага, используемое для увеличения/уменьшения ввода. необязательно. по умолчанию 1.
  • options(двойник значений const int: [val1, val2,...]) Список опций для выбора из выпадающего меню, разделенных запятой и заключенных в квадратные скобки: [val1, val2,...].minval, maxvalиstepаргументы нельзя использовать.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.
  • confirm(const bool) Если true, то пользователю будет предложено подтвердить значение ввода, прежде чем индикатор будет добавлен в график.

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

См. также input.bool input.float input.string input.timeframe input.source input.color input

input.float

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

input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.float(defval, title, options, tooltip, inline, group, confirm)

Пример

i_angle1 = input.float(0.5, "Sin Angle", minval=-3.14, maxval=3.14, step=0.02)
plot(math.sin(i_angle1) > 0 ? close : open, "sin", color=color.green)

i_angle2 = input.float(0, "Cos Angle", options=[-3.14, -1.57, 0, 1.57, 3.14])
plot(math.cos(i_angle2) > 0 ? close : open, "cos", color=color.red)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const int/float) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Settings/Inputs скрипта, с которой пользователи скрипта могут изменить его.optionsАргумент, значение должно быть одним из них.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • minval(const int/float) Минимальное возможное значение входной переменной.
  • maxval(const int/float) Максимально возможное значение входной переменной.
  • step(const int/float) значение шага, используемое для увеличения/уменьшения входа. необязательно. по умолчанию 1.
  • options(двойник const int/float значений: [val1, val2,...]) Список опций для выбора из выпадающего меню, разделенных запятой и заключенных в квадратные скобки: [val1, val2,...].minval, maxvalиstepаргументы нельзя использовать.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.
  • confirm(const bool) Если true, то пользователю будет предложено подтвердить значение ввода, прежде чем индикатор будет добавлен в график.

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

См. также input.bool input.int input.string input.timeframe input.source input.color input

input.color

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

input.color(defval, title, tooltip, inline, group, confirm) 

Пример

i_col = input.color(color.red, "Plot Color")
plot(close, color=i_col)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const color) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Settings/Inputs скрипта, с которой пользователь может изменить его.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.
  • confirm(const bool) Если true, то пользователю будет предложено подтвердить значение ввода, прежде чем индикатор будет добавлен в график.

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

См. также input.bool input.int input.float input.string input.timeframe input.source input

input.price

Добавляет вкладку цены в вкладку Настройки/Вводы скрипта.confirm = trueактивирует интерактивный режим ввода, когда цена выбирается, нажав на график.

input.price(defval, title, tooltip, inline, group, confirm) 

Пример

price1 = input.price(title="Date", defval=42)
plot(price1)

price2 = input.price(54, title="Date")
plot(price2)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const int/float) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Settings/Inputs скрипта, с которой пользователь может изменить его.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • tooltip(const string) Строка, которая будет показана пользователю при прокрутке значка инструмента.
  • inline(const string) объединяет все вызовы ввода с использованием одного и того же аргумента в одной строке. Строка, используемая в качестве аргумента, не отображается. Она используется только для идентификации вводов, принадлежащих той же строке.
  • group(const string) Создает заголовок над всеми входами с использованием одной и той же строки аргументов группы.
  • confirm(const bool) Если true, режим интерактивного ввода включен, и выбор выполняется, нажав на график, когда индикатор добавляется в график, или выбирая индикатор и перемещая выбор после этого.

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

См. также input.bool input.int input.float input.string input.resolution input.source input.color input

input.timeframe

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

input.timeframe(defval, title, options, tooltip, inline, group, confirm)

Пример

i_res = input.timeframe('D', "Resolution", options=['D', 'W', 'M'])
s = request.security("syminfo.tickerid", i_res, close)
plot(s)

ВозвращениеЗначение входной переменной.

Аргументы

  • defval(const string) Определяет значение по умолчанию переменной ввода, предложенной в вкладке Settings/Inputs скрипта, с которой пользователь может изменить его.optionsАргумент, значение должно быть одним из них.
  • title(const string) Название ввода. Если не указано, название переменной используется в качестве названия ввода. Если название указано, но оно пустое, название будет пустой строкой.
  • options(взрыв)

Больше

ПросящиеПочему стратегия Square Duplication не может быть реализована?

Изобретатели количественного измерения - мечтыХорошо, давайте проверим.

ПросящиеОптимизированный тренд-трекер

Изобретатели количественного измерения - мечтыЗдравствуйте, пожалуйста, какая именно стратегия?