FMZ PINE Script Documentación

Creado el: 2022-05-06 14:27:06, Actualizado el: 2025-01-23 10:19:06
comments   18
hits   13760

e su campo (index, price, vol) mantendrá su valor en cada iterada, desde el primer elemento hasta el último. - El objeto currentBar no usa la declaración de la palabra clave var, por lo que su campo se reinicializa en cada entrada y hay un nuevo objeto en cada repetición.

Al trazar los campos de índice de dos objetos, puede comparar las diferencias entre ellos. firstBar.index mantendrá el valor previamente establecido en cada repetición, mientras que currentBar.index se reinicializará en cada repetición como el valor de bar_index de la entrada actual.

Tipo de objeto para el uso de la palabra clave varip

//@version=5
indicator("Objects using `varip` fields demo")

//@type A custom type that counts the bars and ticks in the script's execution.
type Counter
    int       bars  = 0
    varip int ticks = 0

//@variable A `Counter` object whose reference persists throughout all bars.
var Counter counter = Counter.new()

// Add 1 to the `bars` and `ticks` fields. The `ticks` field is not subject to rollback on unconfirmed bars.
counter.bars  += 1
counter.ticks += 1

// Plot both fields for comparison.
plot(counter.bars, "Bar counter", color.blue, 3)
plot(counter.ticks, "Tick counter", color.purple, 3)

En Pine, el uso de la palabra clave varip puede indicar que el campo del objeto persiste durante toda la ejecución del script, sin que se vuelva a rodar en una columna no confirmada. En las declaraciones de tipo Counter, el campo bars no usa la palabra clave varip, por lo que se desliza en cada columna no confirmada. El campo ticks usa la palabra clave varip, por lo que no se desliza en columnas no confirmadas. El objeto counter está declarado con la palabra clave var, por lo que persistirá durante toda la ejecución del script. En cada repetición, los campos de barras y ticks se incrementan 1 ≠. Los campos de barras se vuelven dentro de cada columna no confirmada, mientras que los campos de ticks no se vuelven. Finalmente, mediante el trazado de los campos counter.bars y counter.ticks, se pueden comparar las diferencias entre ellos. El valor de counter.bars se volverá a rodar dentro de cada columna no confirmada, mientras que el valor de counter.ticks continuará aumentando hasta que finalice la ejecución del script.

Modificar el valor del campo

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")

Se puede usar:=El operador de reasignación cambia el valor del campo objeto.

Colección de objetos

El ejemplo declara un array NULL que guardará objetos del tipo order definido por el usuario:

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")

o

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")

Objeto de la copia

En Pine, los objetos se asignan por referencia. Cuando un objeto existente se asigna a una nueva variable, ambos apuntan al mismo objeto.

//@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)

En el siguiente ejemplo, creamos un objeto pivot1 y fijamos su campo x en 1000 ≠. Luego, declaramos que un pivot2 contiene una variable que hace referencia a ese objeto pivot1, por lo que ambos apuntan a la misma instancia. Por lo tanto, cambiar pivot2.x también cambia pivot1.x, ya que ambos hacen referencia a un campo x del mismo objeto ≠.

Para crear una copia independiente del objeto original, en este caso podemos usar el método de copiar () interno. En este ejemplo, declaramos que pivot2 hace referencia a una variable de la instancia de copia del objeto pivot1. Ahora bien, cambiar pivot2.x no cambia pivot1.x, ya que se refiere a un campo de un objeto independiente 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)

Tenga en cuenta que el método de copia de TradingView es una copia en blanco. Si el objeto tiene campos de tipo especial (array, etc.), los campos en la copia en blanco del objeto se referirán a la misma instancia que el objeto. La plataforma FMZ permite la copia profunda directamente, sin necesidad de realizar ningún tipo de procesamiento adicional, como se puede ver en los siguientes ejemplos:

Copias profundas

//@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"    // 修改 labelInfo1 的基础类型字段,看是否影响 labelInfo2
labelInfo1.order.price := 999             // 修改 labelInfo1 的复合类型字段,看是否影响 labelInfo2

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

El resultado de la prueba, labelInfo.copy ((labelInfo1) se ejecuta como una copia profunda, modificando cualquier campo de labelInfo1 no afectará a labelInfo2。

Methods

Los métodos del lenguaje Pine son funciones especializadas asociadas a los tipos incorporados o definidos por el usuario en una instancia específica. En la mayoría de los aspectos, son básicamente las mismas funciones que las funciones regulares, pero ofrecen una sintaxis más corta y más conveniente. Los usuarios pueden acceder a los métodos en las variables directamente con signos de punto, como si accedieran a los campos de los objetos Pine.

Métodos integrados

Por ejemplo, un fragmento de código de este guión:

//@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)

El equivalente se puede traducir como:

//@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)

Se puede ver que PINE apoyaMethodsDespués, el código.array.avg(sourceArray)En el caso de los métodos, se puede escribir en la forma:sourceArray.avg()。 Atención: FMZ no está disponible por el momentoarray.avgEs una llamada.

Métodos definidos por el usuario

El método de definición es esencialmente el mismo que la función de definición, pero con dos diferencias clave:

  1. La palabra clave method debe estar incluida antes del nombre de la función.
  2. Parámetros de un método, en los que el tipo del primer parámetro debe ser una declaración expresa, ya que indica el tipo de objeto al que el método se relacionará.

Por ejemplo, el siguiente código contiene el código para el cálculo de la medición de Bryn como un método personalizado por el usuario:

//@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)

Se ha modificado a:

//@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)

Se puede ver que el primer parámetro en la lista de parámetros de calcBB esarray<float>El tipo ≠ indica que el método esarray<float>El método de la variable de tipo, por lo que se puede ver la invocación del siguiente código para calcular el indicador de Brin.

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

Recarga de métodos

Los métodos definidos por el usuario pueden sobreponerse y sobrecargar métodos ya existentes con el mismo identificador y definidos por el usuario. Esta función permite a los usuarios definir, bajo el mismo nombre de método, varias rutinas asociadas con diferentes firmas de parámetros. Como un simple ejemplo, supongamos que queremos definir un método para identificar el tipo de variable.

//@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")

Determinación del tipo básico de cada variablegetType()¿Qué tipo de carga se usará? En la plataforma FMZ, los tipos de valores se juzgan como datos de tipo flotante porque el substrato de los scripts PINE se implementa en el lenguaje Javascript.

Funciones integradas

Cuando se llama a una función se transmiten los parámetros, se puede especificar el nombre de la asignación de parámetros, se puede transmitir la variable directamente en la posición de los parámetros correspondientes, también se admite el uso mixto. Por ejemplo:

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

Una vez asignado el nombre del parámetro, no se puede transmitir directamente la variable como parámetro, y los parámetros posteriores deben escribirse en forma de asignación del nombre del parámetro.

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

timeframe

timeframe.in_seconds

Se transmitirá atimeframeEl período de tiempo de los parámetros se convierte en segundos.

timeframe.in_seconds(timeframe)

Ejemplo

// 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)

Devuelve el valor timeframeEl número de segundos en una línea K de int representa la forma ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠

parámetro

  • timeframe(simple string) Período de tiempo。 opcional。 el valor por defecto es timeframe.period。

Las notas Para eltimeframe>= La función ‘1M’ calcula el número de segundos en función de los 30.4167 (36512) días de un mes.

Véase también input.timeframe timeframe.period

ticker

ticker.heikinashi

La creación de un identificador de código solicita el valor de la línea K de la media lisa.

ticker.heikinashi(symbol)

Ejemplo

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)

Devuelve el valor El valor de la cadena de código de la acción puede ser proporcionado a la función request.security。

parámetro

  • symbol(simple string) Identificador de código de mercancía。

Véase también syminfo.tickerid syminfo.ticker request.security

request

request.data

Solicitud de datos externos

request.data(url, attribute)

Ejemplo

/*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, "永续-现货差价")
plot(futuresPrice, "期货价格", overlay=true)
plot(spotPrice, "现货价格", 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)

Devuelve el valor parámetroattributeSerie de datos designada

parámetro

  • url(simple string) La url de la fuente de datos de la solicitud, el formato de datos de la respuesta de la fuente de datos debe cumplir con los requisitos (incluyendo al menos las propiedades time, data):{"data": [], "schema": ["time", "data"]}◦ Los formatos de datos de los ejemplos:
  {
      "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(simple string) Especifica el nombre de la propiedad y devuelve los datos requeridos. Por ejemplo:"$.spot_close_price",usar$.Como prefijo, los nombres de las propiedades coinciden con las propiedades en los campos de datos en los datos a los que se responde cuando se solicita la fuente de datos

Si el mensaje es incorrecto, hay que comprobarlo.request.dataSi el rango de tiempo de la solicitud coincide con el rango de tiempo de la configuración de retroceso, se producirá un error al no consultar los datos en la secuencia de tiempo de retroceso.

En este ejemplo, la instrucción data-data de la consulta de datos de la instrucción 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;

Se puede encontrar en FMZ.Exploración de datosConsultar páginas, crear enlaces de datos, como en el ejemplohttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data

request.security

Se requiere otra variedad/resolución

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

Ejemplo

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)

Devuelve el valor Serie de requerimientos

parámetro

  • symbol(simple string) Código del producto.
  • timeframe(simple string) Período de tiempo △ La cadena vacía se interpretará como el período de tiempo actual de la tabla △
  • expression(series int/float/bool/color) se puede calcular y devolver una expresión desde la invocación request.security. Puede ser una serie o un subgrupo que contiene elementos que se pueden convertir en series.
  • gaps(barmerge_gaps) Da la estrategia de fusión de datos solicitada (que requiere que los datos se fusionen automáticamente con la serie principal de datos de OHLC). Valores posibles: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - los datos solicitados se fusionan con los posibles huecos (valores na). barmerge.gaps_off - los datos solicitados se fusionan continuamente, todos los huecos se llenan con los valores existentes más recientes. El valor predeterminado es barmerge.gaps_off.
  • lookahead(barmerge_lookahead) Da la estrategia de fusión de datos solicitada. Valores posibles: barmerge.lookahead_on, barmerge.lookahead_off. Desde la versión 3, el valor por defecto es barmerge.lookahead_off. Tenga en cuenta que el comportamiento es el mismo que en tiempo real, solo que es diferente en el historial.
  • ignore_invalid_symbol(const bool) Un parámetro opcional. Si no se encuentra el producto especificado, determina el comportamiento de la función: si es false, el script se detiene y devuelve error al ejecutarse; si es true, la función devuelve na y continúa ejecutándose. El valor por defecto es false.
  • currency(simple string) Convierte el valor de referencia monetaria de la mercancía (por ejemplo, OHLC) en moneda. Luego calcula el valor después de la conversión (expression. La tasa de conversión utilizada se basa en el tipo de cambio diario del día anterior de la pareja FX_IDC () con respecto a la línea K que se calcula).

Las notas El código de PineScript que usa esta función puede hacer diferentes cálculos para el registro histórico y los datos en tiempo real. Si desea especificar parámetros adicionales para la mercancía solicitada, como el tiempo de transacción o el tipo de ajuste, puede usar la función ticker.new (). No se puede usar la variable ‘ticker’ para transmitir el diferencial a esta función. Se puede usar la variable ‘ticker.new’ o la representación en forma de una cadena de código de acciones, por ejemplo AAPL+MSFT*TSLA”。 En la actualidad, una secuencia de comandos puede tener un máximo de 40 invocaciones request.security. Tenga en cuenta que el uso de esta variable/función puede causar que el indicador sea rediseñado. Los parámetros de resolución permitidos son: 1S, 5S, 15S, 30S - Intervalo de segundos (el período de la gráfica debe ser menor o igual al período solicitado) Desde 1 hasta 1440 minutos Desde 1 D hasta 365 Días Unas semanas de 1W a 52W De 1M a 12M en unos meses

Véase también syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

Si es asísourceLas cadenas contienenstrSi la secuencia de caracteres es una secuencia de caracteres, entonces devuelve true, y si no, devuelve false.

str.contains(source, str)

Ejemplo

// 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)

Devuelve el valor Si en elsourceEncontrado en la cadenastr, es verdadero, o es falso.

parámetro

  • source(series string) Fuente de la cadena
  • str(series string) La secuencia de caracteres que se quiere buscar.

Véase también str.pos str.match

str.endswith

Si es asísourceLas cadenas sonstrSi la secuencia de caracteres se termina con un número determinado, se devuelve true, y si no, se devuelve false.

str.endswith(source, str)

Devuelve el valor Si es asísourceLas cadenas sonstrLa secuencia de caracteres que se especifica en el extremo es verdadera o falsa.

parámetro

  • source(series string) Fuente de la cadena
  • str(series string) La secuencia de caracteres que se quiere buscar.

Véase también str.startswith

str.startswith

Si es asísourceLas cadenas sonstrSi la secuencia de caracteres se inicia con un número determinado, se devuelve true, y si no, se devuelve false.

str.startswith(source, str)

Devuelve el valor Si es asísourceLas cadenas sonstrLa secuencia de caracteres especificada en el substring comienza con true y termina con false.

parámetro

  • source(series string) Fuente de la cadena
  • str(series string) La secuencia de caracteres que se quiere buscar.

Véase también str.endswith

str.substring

Regresa una nueva cadena, que essourceLas subcadenas de una cadena.begin_posComienza con un carácter en el índice designado y se extiende asourceEl ‘end_pos - 1’ de la cadena

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

Ejemplo

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)

Devuelve el valor Se extrae una subcadena de la cadena fuente.

parámetro

  • source(series string) La cadena de origen de la cual se extrae la cadena de subcadenas。
  • begin_pos(series int) La posición inicial de la subcadena extraída. Es exclusivo (la subcadena extraída incluye los caracteres de esa posición).
  • end_pos(series int) La posición de terminación。 es exclusiva (la cadena extraída no incluye los caracteres de esa posición)。 es opcional。 el valor por defecto essourceLa longitud de la cadena de caracteres.

Las notas El índice de la cadena comienza en 0.begin_posigualend_pos, la función devuelve una cadena de caracteres en blanco.

Véase también str.contains str.pos str.match

str.tonumber

str.tonumber(string)

Devuelve el valor Si contiene números válidos, es el tipo de flotación de la cadena, de lo contrario es na。

parámetro

  • string(series string) Es una forma de representación de una cadena de int o float.

str.format

Convierte las cadenas de formato y los valores en cadenas de formato. Las cadenas de formato pueden contener texto y un paréntesis en los paréntesis {} de cada valor que se desea formatear. Cada paréntesis incluye el índice de los parámetros necesarios que se reemplazarán por él (comenzando por 0), y un indicador de formato opcional. El índice indica la ubicación del parámetro en la lista de parámetros str.format.

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

Ejemplo

// 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)

Devuelve el valor Las cadenas de caracteres formateadas.

parámetro

  • formatString(series string) El formato de la cadena de caracteres es .
  • arg0, arg1, ... (series int/float/bool/string/na/int[]/float[]/bool[]/string[]) Valor que se desea formatear.

Las notas Todos los paréntesis en los estilos no citados deben mantenerse equilibrados. Por ejemplo, “ab {0} de” y “ab ‘}’ de” son estilos válidos, pero “ab {0’}’ de”, “ab } de” y “”{“” no son estilos válidos.

str.length

Devuelve el número entero que corresponde al número de caracteres de la cadena.

str.length(string)

Devuelve el valor Número de caracteres en la cadena de origen.

parámetro

  • string(series string) Fuente de la cadena

str.lower

Devuelve una nueva cadena en la que todas las letras se convierten en minúsculas.

str.lower(source)

Devuelve el valor Todas las letras se convierten en una nueva cadena de letras minúsculas .

parámetro

  • source(series string) La cadena que se quiere convertir.

Véase también str.upper

str.upper

Devuelve una nueva cadena en la que todas las letras se convierten en mayúsculas.

str.upper(source)

Devuelve el valor Todas las letras se convierten en nuevas cadenas de letras mayúsculas.

parámetro

  • source(series string) La cadena que se quiere convertir.

Véase también str.lower

str.match

Si coincideregexExpresiones regulares que se devuelvensourceLa nueva subcadena de la cadena, de lo contrario, devuelve ‘na’。

str.match(source, regex) 

Ejemplo

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"

Devuelve el valor sourceLa nueva subalterna de la cadena, si coincide con unaregexLa expresión regular, de lo contrario es ‘na’.

parámetro

  • source(series string) Fuente de la cadena
  • regex(series string) Expresión regular que coincide con esta cadena de caracteres ≠

Las notas Función devuelvesourceExpresión regular que aparece por primera vez en la cadena: regexLos signos de contraseña <unk> en las cadenas requieren el uso de contraseñas adicionales para la traducción, por ejemplo, \d representa la expresión regular \d。

Véase también str.contains str.substring

str.pos

RegresósourceAparece por primera vez en la cadenastrLa ubicación de la cadena, de lo contrario se devuelve ‘na’

str.pos(source, str)

Devuelve el valor strLa cadena está ensourcePosiciones en la cadena

parámetro

  • source(series string) Fuente de la cadena
  • str(series string) La secuencia de caracteres que se quiere buscar.

Las notas El índice de la cadena comienza en 0.

Véase también str.contains str.match str.substring

str.replace

Devuelve una nueva cadena en la que aparecen las primeras N+1targetLas secuencias de caracteres y las que aparecieron antestargetSe sustituye porreplacementLas cadenas, donde N está enoccurrenceSe especifica que .N es el índice de coincidencia que aparece en la cadena de origen de la cadena de destino a reemplazar.

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

Ejemplo

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 "EXCHANGE2:SYMBOL1 / EXCHANGE1:SYMBOL2"
    runtime.log(newSource)

Devuelve el valor Cuerdas tratadas

parámetro

  • source(series string) Fuente de la cadena
  • target(series string) es sustituido por una cadena
  • replacement(series string) La cadena que se inserta en lugar de la cadena de destino.
  • occurrence(series int) La cadena de destino a reemplazar es el índice de coincidencia que aparece en la cadena de origen. El primer índice de coincidencia comienza con 0.

Véase también str.replace_all str.match

str.replace_all

Reemplaza las cadenas de destino que aparecen en cada una de las cadenas de origen.

str.replace_all(source, target, replacement)

Devuelve el valor Cuerdas tratadas

parámetro

  • source(series string) Fuente de la cadena
  • target(series string) es sustituido por una cadena
  • replacement(series string) Cada vez que aparece la cadena de destino se sustituye por la cadena

str.split

Divide las cadenas en sub-arreglos y devuelve su ID de la matriz.

str.split(string, separator)

Devuelve el valor El ID de la serie de cadenas de caracteres.

parámetro

  • string(series string) Fuente de la cadena
  • separator(series string) Las cadenas que separan cada una de las sub cadenas.

str.tostring

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

Devuelve el valor valueLas cadenas de los parámetros se expresan en la forma: Si es asívalueSi el parámetro es una cadena, se devuelve como es. CuandovaluePara na, la función devuelve la cadena NaN.

parámetro

  • value (series int/float/bool/string/int[]/float[]/bool[]/string[]) Su elemento se convierte en el valor de la cadena o en el ID de la matriz.
  • format (series string) Format string. Accepts these format.* constants: format.mintick, format.percent, format.volume. Optional. The default value is ‘#.##########’.

Las notas Los formatos con valores de punto flotante también se encuadran en estos valores cuando es necesario, por ejemplo, str.tostring ((3.99, ‘#’) devolverá 4。 Para mostrar el cero, utilice ‘0’ en lugar de ‘#’. Por ejemplo, ‘#.000’. Cuando se usa format.mintick, el valor se redondea hasta el número más cercano al que se puede dividir sin restes con syminfo.mintick. La secuencia de caracteres devuelta tiene un cero a continuación. Si el valor de x es una cadena, se devuelve el mismo valor de la cadena. Los parámetros de tipo Bool devuelven true o false. Cuando x es na, la función devuelve NaN。

color

color.new

El color de la función especifica la transparencia aplicada al color dado.

color.new(color, transp)

Ejemplo

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

Devuelve el valor El color tiene una cierta transparencia.

parámetro

  • color (series color)
  • transp(series int/float) Los valores disponibles van desde 0 (no transparente) hasta 100 (no visible)

Las notas El uso de un número extraordinario de parámetros (por ejemplo, simple, input o series) afectará el color que se muestra en la página de etiquetas de configuración / estilo de la barra de script. Consulte el manual del usuario para obtener más información.

color.rgb

Utiliza el modelo de color RGB para crear nuevos colores con transparencia.

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

Ejemplo

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

Devuelve el valor El color tiene una cierta transparencia.

parámetro

  • red(series int/float) Tono rojo. Los valores posibles son desde 0 hasta 255
  • green(series int/float) Tono verde. Los valores posibles son desde 0 hasta 255
  • blue(series int/float) Tono azul. Los valores posibles son desde 0 hasta 255
  • transp(series int/float) opcional. El color es transparente. Los valores posibles van desde 0 (no transparente) hasta 100 (transparente). El valor predeterminado es 0 (transparente).

Las notas El uso de un número extraordinario de parámetros (por ejemplo, simple, input o series) afectará el color que se muestra en la página de etiquetas de configuración / estilo de la barra de script. Consulte el manual del usuario para obtener más información.

runtime

runtime.debug

Imprimir la información de las variables en el mando.

FMZ PINE tiene una función específica para el lenguaje.runtime.debug(value), sólo tiene un parámetro.

runtime.log

La salida de contenido en el diario.

FMZ PINE tiene una función específica para el lenguaje.runtime.log(1, 2, 3, close, high, ...)Se puede pasar varios parámetros.

runtime.error

Cuando se llama, puede causar errores en el tiempo de ejecución y conlleva unamessageMensaje de error especificado en el parámetro.

runtime.error(message)

parámetro mensaje (series string) mensaje de error

input

input

Añade input a la página de etiquetas de entrada de la configuración del script, lo que le permite a los usuarios del script ofrecer opciones de configuración. Esta función detecta automáticamente el tipo de parámetros para la barra de defval y utiliza el plugin de entrada correspondiente.

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

Ejemplo

i_switch = input(true, "On/Off")     // 设置true,默认勾选
plot(i_switch ? open : na)

i_len = input(7, "Length")
i_src = input(close, "Source")       // 下拉框,默认选择close
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)

Devuelve el valor Valor de la variable de entrada

parámetro

  • defval(const int/float/bool/string/color or source-type built-ins) Determina el valor predeterminado de la variable de entrada recomendada en la página de etiquetas de la barra de configuración / entrada de la barra de entrada del guión, desde la que los usuarios del guión pueden cambiarla. La función de inclusión de tipo de origen es una serie de variables de inclusión de la barra de flotación que especifica la fuente de cálculo:closehlc3Y así.
  • title(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。
  • tooltip(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.
  • inline(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.
  • group(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.

Las notas El valor devuelto por la función de entrada siempre debe asignarse a la variable. Ver el ejemplo anterior

Véase también input.bool input.color input.int input.float input.string input.timeframe input.source

input.source

Añade la entrada a la página de etiquetas de entrada de la configuración del script, que le permite proporcionar opciones de configuración al usuario del script. Esta función añade un menú de caída que permite al usuario seleccionar el origen de cálculo, por ejemplo, close, hl2 etc. Si el script contiene solo una llamada input.source (), el usuario también puede seleccionar otro indicador en la tabla como fuente de salida.

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

Ejemplo

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

Devuelve el valor Valor de la variable de entrada

parámetro

  • defval(series int/float) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de la barra / barra de entrada del guión, desde la que el usuario puede cambiarla.
  • title(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。
  • tooltip(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.
  • inline(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.
  • group(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.

Las notas El resultado de la función input.source siempre debe asignarse a una variable, como en el ejemplo anterior.

Véase también input.bool input.int input.float input.string input.timeframe input.color input

input.string

Añade input a la tarjeta de opciones de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega el campo de entrada de la cadena a la entrada del script.

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

Ejemplo

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

Devuelve el valor Valor de la variable de entrada

parámetro

  • defval(const string) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del script, desde la que el usuario puede cambiarla. Cuando la lista de valores se corresponde conoptionsCuando los parámetros se usan juntos, el valor debe ser uno de ellos.
  • title(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。
  • options (List of constants: [&lt;type&gt;…]) una lista de opciones disponibles para elegir.
  • tooltip(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.
  • inline(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.
  • group(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.
  • confirm(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.

Las notas El resultado de la función input.string siempre debe asignarse a una variable, como en el ejemplo anterior.

Véase también input.bool input.int input.float input.timeframe input.source input.color input

input.bool

Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función añade una marca de selección a la entrada del script.

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

Ejemplo

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

Devuelve el valor Valor de la variable de entrada

parámetro

  • defval(const bool) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del script, desde la que el usuario puede cambiarla.
  • title(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。
  • tooltip(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.
  • inline(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.
  • group(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.
  • confirm(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.

Las notas El resultado de la función input.bool siempre debe asignarse a una variable, como en el ejemplo anterior.

Véase también input.int input.float input.string input.timeframe input.source input.color input

input.int

Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega el campo de entrada entero a la entrada del script.

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

Ejemplo

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))

Devuelve el valor Valor de la variable de entrada

parámetro

  • defval(const int) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del script, desde la cual el usuario del script puede cambiarla. Cuando la lista de valores es igual aoptionsCuando los parámetros se usan juntos, el valor debe ser uno de ellos.
  • title(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。
  • minval(const int) El valor mínimo posible de la variable de entrada。 opcional。
  • maxval(const int) El valor máximo posible de la variable de entrada。 opcional。
  • step(const int) La longitud de paso para aumentar/reducir la entrada es opcional. El valor por defecto es 1
  • options (tuple of const int values: [val1, val2, …]) Lista de opciones seleccionadas desde el menú desplegable, separadas por comillas y rodeadas de paréntesis cuadradas:[val1, val2, …] ≠ no se puede usar cuando se usa este parámetrominvalmaxvalystepParámetros
  • tooltip(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.
  • inline(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.
  • group(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.
  • confirm(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.

Las notas El resultado de la función input.int siempre debe asignarse a una variable, como en el ejemplo anterior.

Véase también input.bool input.float input.string input.timeframe input.source input.color input

input.float

Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega el campo de entrada de flotación a la entrada del script.

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

Ejemplo

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)

Devuelve el valor Valor de la variable de entrada

parámetro

  • defval(const int/float) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del guión, desde el cual el usuario del guión puede cambiarlo. Cuando la lista de valores es igual aoptionsCuando los parámetros se usan juntos, el valor debe ser uno de ellos.
  • title(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。
  • minval(const int/float) El valor mínimo posible de la variable de entrada。 es opcional。
  • maxval(const int/float) El valor máximo posible de la variable de entrada。 opcional。
  • step(const int/float) Se usa para incrementar/reducir la longitud de paso de la entrada. Opcional. El valor predeterminado es 1
  • options (tuple of const int/float values: [val1, val2, …]) Lista de opciones seleccionadas desde el menú desplegable, separadas por comillas y rodeadas de paréntesis cuadradas:[val1, val2, …] ≠ no se puede usar cuando se usa este parámetrominvalmaxvalystepParámetros
  • tooltip(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.
  • inline(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.
  • group(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.
  • confirm(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.

Las notas El resultado de la función input.float siempre debe asignarse a una variable, como en el ejemplo anterior.

Véase también input.bool input.int input.string input.timeframe input.source input.color input

input.color

Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega un selector de color que permite al usuario elegir el color