FMZ PINE Script documentación

El autor:Un sueño pequeño., Creado: 2022-05-06 14:27:06, Actualizado: 2024-02-23 15:36:48

[TOC] ¿Qué quieres decir?

Las palabras clave, la gramática, la configuración de resúmenes

Estructura del código

La estructura general del código en Pine es la siguiente:

<version>
<declaration_statement>
<code>

Comentarios

Anotatorios con soporte para el lenguaje Pine de FMZ: anotaciones de una sola línea//¿Qué es lo que está sucediendo?/* */En el caso de los ejemplos siguientes, por ejemplo, el texto de las notas:

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)  // 计算MACD指标

/*
plot函数在图表上画出指标线
*/
plot(macdLine, color = color.blue, title='macdLine')
plot(signalLine, color = color.orange, title='signalLine')
plot(histLine, color = color.red, title='histLine')

Edición

Las instrucciones del compilador en la siguiente forma le dicen al compilador en qué versión del guión está escrito Pine:

//@version=5

Por defecto, la versión v5 se puede omitir en el código.//@version=5

Las declaraciones

  • indicator()
  • strategy()

Las declaraciones determinan el tipo de script, que determina qué contenido se permite y cómo se utiliza y ejecuta. Establecen las propiedades clave del script, como su nombre, dónde aparecerá cuando se agrega al gráfico, la precisión y el formato de los valores que muestra, y controlan ciertos valores de su comportamiento al ejecutarse, como el número máximo de objetos gráficos que mostrará en el gráfico.indicator()¿Qué es esto?strategy()La declaración fue hecha por el presidente de la República.

El código

Las líneas de un guión que no son notas o instrucciones del compilador son oraciones que implementan el algoritmo del guión. Una oración puede ser una de ellas.

  • Declaración de variables
  • Reasignación de las variables
  • Declaración de funciones
  • Llamadas de funciones integradas, llamadas de funciones definidas por usuarios
  • ifforwhile¿Qué es esto?switchEstructura de las ecuaciones

Las oraciones se pueden ordenar de varias maneras.

  • Algunas declaraciones pueden expresarse en una sola línea, como la mayoría de las declaraciones de variables, que contienen solo una línea para llamar a una función o una declaración de función de una sola línea; otras, como las estructuras, siempre requieren varias líneas porque requieren un bloque local.
  • Las frases de un guión en su ámbito global (es decir, las partes que no pertenecen a un subconjunto) no pueden ser interpretadas de la siguiente manera:空格¿Qué es esto?制表符(tab key) comienza. Su primer carácter también debe ser el primer carácter de la línea. Las líneas que comienzan en la primera posición de la línea, por definición, forman parte del alcance global del script.
  • Las declaraciones de estructuras o de múltiples líneas de funciones siempre requieren unlocal blockUn local debe ser reducido a un símbolo o cuatro espacios (de lo contrario, se resolverá como la línea de código seria anterior, es decir, se determinará como el contenido continuo de la línea anterior de código), y cada local definirá un rango local diferente.
  • Se pueden unir varias oraciones de una sola línea en una sola línea mediante el uso del punto (,) como separador.
  • Una línea puede contener comentarios o solo comentarios.
  • Las líneas también pueden ser envueltas (continúa en varias líneas).

Por ejemplo, incluye tres bloques, uno en la declaración de funciones personalizadas y dos en la declaración de variables que usan la estructura if, con el siguiente código:

indicator("", "", true)             // 声明语句(全局范围),可以省略不写

barIsUp() =>                        // 函数声明(全局范围)
    close > open                    // 本地块(本地范围)

plotColor = if barIsUp()            // 变量声明 (全局范围)
    color.green                     // 本地块 (本地范围)
else
    color.red                       // 本地块 (本地范围)

runtime.log("color", color = plotColor)  // 调用一个内置函数输出日志 (全局范围)

Cambio de código

Las líneas largas se pueden dividir en varias líneas, o ser "envueltas"; las líneas envueltas deben ser reducidas a cualquier número de espacios, siempre que no sean múltiplos de 4 (estos límites se usan para reducir los bloques).

a = open + high + low + close

Se puede empaquetar como (tenga en cuenta que el número de espacios que se reducen por línea no es un múltiplo de 4):

a = open +
      high +
          low +
             close

Una llamada de Plot (()) larga puede ser envuelta en.

close1 = request.security(syminfo.tickerid, "D", close)      // syminfo.tickerid 当前交易对的日线级别收盘价数据系列
close2 = request.security(syminfo.tickerid, "240", close)    // syminfo.tickerid 当前交易对的240分钟级别收盘价数据系列
plot(ta.correlation(close, open, 100),                       // 一行长的plot()调用可以被包装
   color = color.new(color.purple, 40),
   style = plot.style_area,
   trackprice = true)

Las declaraciones de una función definida por el usuario también pueden ser envasadas. Sin embargo, como los bloques locales deben comenzar con una contracción (cuatro espacios o un símbolo), cuando se divide a la siguiente línea, la parte continua de la declaración debe comenzar con más de una contracción (no igual a un múltiplo de cuatro espacios). Por ejemplo:

test(c, o) =>
    ret = c > o ?
       (c > o+5000 ? 
          1 :
              0):
       (c < o-5000 ? 
          -1 : 
              0)

a = test(close, open)
plot(a, title="a")

Secuencia temporal

La secuencia de tiempo no es un tipo o formato de datos, sino que es un concepto de estructura básica en el lenguaje PINE. Se utiliza para almacenar valores que cambian continuamente en el tiempo, cada valor corresponde a un punto de tiempo. Variables incorporadasopenPor ejemplo,openLa variable interna registra el precio de apertura de cada barra de la línea K, si esto es cierto.openEs el ciclo de 5 minutos de la línea K. Entonces esto es el ciclo de 5 minutos de la línea K.openLo que se registra en la variable es el precio de apertura de la columna BAR de la línea K cada 5 minutos. Cuando su programa de política se ejecuta, se cita en el código.openEs decir, se refiere al precio de apertura de la línea BAR en la línea K actual. Para referirse al valor anterior en la secuencia de tiempo (el valor pasado), usamos[]El operador de historial, cuando la política se ejecuta en un K-line BAR,open[1]Esto significa que se refiere al precio de apertura de la barra anterior de la línea K de la barra actual.

AunqueSecuencia temporalEs fácil pensar en estructuras de datos como "matrices", aunque el lenguaje PINE también tiene tipos de matrices. Pero son conceptos completamente diferentes a las secuencias de tiempo.

El lenguaje PINE diseña secuencias de tiempo de esta manera para calcular el valor acumulado de los precios de cierre de forma muy fácil en el código de la estrategia, y no requiere el uso de estructuras circulares como for, solo con funciones integradas que utilizan el lenguaje PINE.ta.cum(close)Por otro lado, si queremos calcular el valor medio de la diferencia entre el valor máximo y el valor mínimo de las últimas 14 K-string BAR (es decir, la distancia más cercana a 14 K-string BAR) en el momento en que se ejecuta el código, podemos escribir:ta.sma(high - low, 14)

Los resultados de las llamadas a funciones en la secuencia de tiempo también dejarán una huella en la secuencia de tiempo, también se puede usar[]El operador histórico se refiere al valor anterior. Por ejemplo, cuando se prueba si el precio de cierre de la K-line BAR actual es mayor que el valor máximo del precio más alto de los últimos 10 K-line BARs (excluyendo la K-line BAR actual), se puede escribir:breach = close > ta.highest(close, 10)[1]También se puede escribir:breach = close > ta.highest(close[1], 10)¿Por qué?ta.highest(close, 10)[1]yta.highest(close[1], 10)El gobierno de los Estados Unidos está en contra de la ley.

La verificación se puede hacer con el siguiente código:

strategy("test pine", "test", true) 

a = ta.highest(close, 10)[1]
b = ta.highest(close[1], 10)

plotchar(true, title="a", char=str.tostring(a), location=location.abovebar, color=color.red)
plotchar(true, title="b", char=str.tostring(b), location=location.belowbar, color=color.green)

El código de prueba anterior produce a y b en cada BAR con sus respectivos valores en la secuencia de tiempo, y se puede ver que los valores de a y b siempre son iguales, por lo que los dos métodos de expresión son equivalentes.

Parámetros para el modelo de la biblioteca de transacciones de lenguaje Pine

La configuración de los parámetros de la librería de transacciones de lenguaje "Pine", la plantilla incorporada de la política PINE.

Configuración de las transacciones

  • Cómo ejecutar Modelo de precio de cierre: el modelo se ejecuta al final del BAR actual y se ejecuta cuando comienza el BAR inferior. Modelo de precios en tiempo real: cada cambio de precio ejecuta el modelo con señales para ejecutar transacciones de inmediato.
  • Número de operaciones por defecto: Si la instrucción de negociación no especifica el número de operaciones, las operaciones se ejecutan según el número establecido.
  • Número máximo de operaciones individuales: según la cuenta real, en combinación con este parámetro de configuración, determine el número máximo de operaciones por transacción, evitando el impacto de la superficie de la cuenta.
  • El número de puntos de cambio:定价货币精度Los parámetros y este parámetro determinan el precio de deslizamiento al momento de realizar el pedido. Por ejemplo, el precio de la precisión monetaria se establece en 2, es decir, exacto a la segunda posición de la decima y exacto a 0.01. Entonces, el punto de deslizamiento representa 0.01 unidades de precio.
  • Número de ciclos más largos de las variables: afecta el número de BAR de la línea K del gráfico, conjavascriptLlamadas en la estrategiaSetMaxBarLenLa función es la misma.

Opciones de futuros

  • Código de variedad: Código de contrato, el objeto de la bolsa es un objeto de la bolsa que no es efectivo.
  • Número mínimo de ofertas: el volumen mínimo de operaciones del contrato al momento de realizar el pedido.

Opciones de disco real

  • Auto-restaurar el progreso: Restaurar automáticamente el estado antes de que la última política se detuviera.
  • Número de repeticiones de la orden: la orden no se realiza, se revoca la orden y se vuelve a realizar la transacción, el parámetro se utiliza para limitar el número máximo de repeticiones.
  • Intervalo de consulta de red (millisecondes): solo es válido para el protocolo REST, para controlar el intervalo de las solicitudes de red y evitar que las solicitudes sean demasiado frecuentes y superen los límites de la bolsa.
  • Tiempo de sincronización de la cuenta (segunda): Periodo de tiempo para la sincronización de los datos de la cuenta.
  • Tiempo de sincronización de posiciones después de la apertura (millisegundos): solo para las posiciones repetidas causadas por el retraso de los datos de algunos intercambios, el tiempo de sincronización más grande puede mitigar este tipo de problemas.
  • El factor de apalancamiento: Configurar el factor de apalancamiento.

Negocios al contado, otras configuraciones

  • Volumen de transacción de una mano: el volumen de transacción de una mano por defecto, sólo es válido para el efectivo.
  • El volumen mínimo de transacciones: el volumen mínimo de transacciones.
  • Precisión monetaria: Precisión del precio, es decir, los dígitos menores del precio.
  • Precisión de la variedad de transacciones: Precisión de la siguiente unidad, es decir, el número de dígitos de la siguiente unidad.
  • Tarifas: para calcular algunos datos según esta configuración, 0.002 significa 2 por mil.
  • Intervalo de estadísticas de pérdidas y ganancias: solo se muestra en el disco real el uso de estadísticas de pérdidas y ganancias.
  • Fallo de reintento (millisegundos): Intervalo de reintento cuando la solicitud de red falla.
  • Agente de uso: solo es válido para el protocolo REST.
  • Esconde errores comunes en la red: Esconde errores comunes en el área de registros.
  • Cambiar la dirección de la base: solo es válido para el protocolo REST.
  • Push notifications: Push mensajes a los buzones de correo, etc.

Las transacciones

Las tiendas abiertas

strategy(title = "open long example", pyramiding = 3)                                // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10))       // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000)                          // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓

El campo de batalla

strategy(title = "close long example", pyramiding = 2)                              // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1)                                         // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%")   // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%")   // 平仓,指定平掉分组标签为long2的仓位的80%持仓

Mecanismos de negociación

El mecanismo de tenencia del lenguaje PINE es similar al de la tenencia unidireccional. Por ejemplo, cuando se tiene una posición de múltiples posiciones ("tenencia de múltiples posiciones"), si hay órdenes de operación de venta, listas de planes, etc. (en relación con la dirección opuesta a la tenencia), la orden de ejecución se desencadena, primero se llena la posición de múltiples posiciones ("levantan todas las tenencias de múltiples posiciones) y luego se ejecuta la orden desencadenada (en relación con la dirección opuesta a la tenencia de anteriores posiciones).

Lista de proyectos

Cuando se usa la instrucción de pedido, el precio de mercado es el precio predeterminado si no se especifica ningún precio. Además del precio de mercado, también se puede pedir a través del pedido de programa, el pedido de programa no se opera inmediatamente. El pedido de programa se puede realizar en la cola de encargo de programación de un programa que no se haya activado.Disco en vivo / reevaluaciónLa información de estado de tiempo (es decir, el bar de estado cuando la política está en ejecución) se ve en la tabla de partición de "órdenes programadas". El sistema solo realiza pedidos cuando los precios en tiempo real del mercado cumplen con las condiciones para activar estos pedidos programados. Por lo tanto, estos pedidos tienen un pequeño desvío en los precios de transacción.strategy.entryCuando ordenamos una función, podemos especificarlimitstopLos parámetros.

var isTrade = false 
if not barstate.ishistory and not isTrade
    isTrade := true 
    strategy.entry("test 1", strategy.long, 0.1, stop=close*1.3, comment="test 1 order")                     // stop
    strategy.entry("test 2", strategy.long, 0.2, limit=close*0.7, comment="test 2 order")                    // limit
    strategy.entry("test 3", strategy.short, 0.3, stop=close*0.6, limit=close*1.4, comment="test 3 order")   // stop-limit    
  • Orden de límite

    Establecer un precio límite para el pedido, cuando el pedido es un pago (es decir,directionEl parámetro esstrategy.longEn el caso de los precios más bajos en el mercado actual, los pedidos sólo se activan cuando el precio actual es inferior. Cuando el pedido es un pedido de venta (es decir)directionEl parámetro esstrategy.shortEn el caso de los precios en el mercado actual, los pedidos sólo se activan cuando el precio actual del mercado es mayor que ese precio.

  • Las órdenes de stop

    Establece el precio de stop loss de la orden, cuando la orden es de compra, la orden se activa solo cuando el precio actual del mercado es superior a ese precio. Cuando el pedido es un pedido de venta, el pedido sólo se activa cuando el precio actual del mercado es inferior a ese precio.

  • Las órdenes de stop-limit

    Se puede configurar simultáneamentelimitstopLos parámetros, los pedidos se activan en el precio que cumple con los requisitos primero.

Declaración, estructura lógica y palabras clave

el var

var es la palabra clave para asignar y iniciar variables de una sola vez. Generalmente, la sintaxis de asignación de variables que no incluye la palabra clave var causa que el valor de la variable se cubra cada vez que se actualiza el dato. Por el contrario, cuando se utilizan variables asignadas con la palabra clave var, aunque el dato se actualice, pueden mantenerse en estado de equilibrio y cambiarlo solo cuando se cumplen las condiciones de las expresiones si.

var variable_name = expression

¿Qué es esto?

  • variable_name- Cualquier nombre de variable de usuario permitido en Pine Script ((puede contener caracteres latinos en mayúsculas y minúsculas, números y guiones ((_), pero no puede comenzar con un número))).
  • expression- Cualquier expresión aritmética, tal como la definición de una variable regular.

Ejemplos

// Var keyword example
var a = close
var b = 0.0
var c = 0.0
var green_bars_count = 0
if close > open
    var x = close
    b := x
    green_bars_count := green_bars_count + 1
    if green_bars_count >= 10
        var y = close
        c := y
plot(a, title = "a")
plot(b, title = "b")
plot(c, title = "c")

La variable a mantiene el precio de cierre de la primera columna de cada columna en la serie. La variable B mantendrá el precio de cierre de la barra de precios de la primera barra de precios de la serie. La variable c c c mantiene el precio de cierre de la décima franja verde de la serie.

En FMZ, el modelo de precios en tiempo real, el modelo de precios de cierre, y el modelo de precios de cierre se dividen en dos tipos:varvaripLas variables declaradas se prueban con el siguiente código:

strategy("test pine", "test 1", true) 

// 测试 var varip
var i = 0
varip ii = 0

// 将策略逻辑每轮改变的i、ii打印在图上
plotchar(true, title="ii", char=str.tostring(ii), location=location.abovebar, color=color.red)
plotchar(true, title="i", char=str.tostring(i), location=location.belowbar, color=color.green)

// 每轮逻辑执行都给i、ii递增1
if true
    i := i + 1
    ii := ii + 1
  • Modelo de precios en tiempo real El código de prueba anterior se divide en dos etapas de ejecución: la primera, la etapa de la línea K histórica; la segunda, la etapa de la línea K en tiempo real. Cuando el modelo de precios en tiempo real, la etapa de la línea K histórica, la línea K en tiempo real, la línea K en tiempo real.varvaripLas variables declaradas i, ii se ejecutan incrementalmente cada vez que se ejecuta el código de la política, ya queif truePor lo tanto, se puede ver que cada uno de los números que se muestran en el resultado de la línea K BAR es cada vez mayor de 1. Cuando termina la fase de la línea K histórica, comienza la fase de la línea K en tiempo real.varvaripLas variables declaradas comienzan a cambiar. Como es un modelo de precios en tiempo real, cada cambio de precio dentro de una K-line BAR ejecuta una serie de códigos de estrategia.i := i + 1yii := ii + 1La diferencia es que ii se modifica cada vez. Aunque i también se modifica cada vez, el valor anterior se restablece en la siguiente ronda de ejecución de la lógica de la estrategia, hasta que la línea K actual BAR no se actualiza para determinar el valor anterior (es decir, no se restablece el valor anterior en la siguiente ronda de ejecución de la lógica de la estrategia). Así que se puede ver que la variable i sigue siendo BAR1 por cada raíz; pero la variable ii se suma varias veces por cada BAR.

  • Modelo de precio de cierre Dado que el modelo de precio de cierre ejecuta una lógica estratégica al final de cada K line BAR. Por lo tanto, en el modelo de precio de cierre, la fase de la línea K histórica y la fase de la línea K en tiempo real se ejecutan de forma simultánea.varvaripLas variables declaradas se muestran perfectamente congruentes en el ejemplo anterior, incrementando 1 BAR por cada línea K.

variedad

varip (var intrabar persist) es una clave para asignar y iniciar variables de una sola vez. Es similar a la clave var, pero las variables que utilizan la declaración varip conservan su valor entre actualizaciones de K líneas en tiempo real.

varip variable_name = expression

¿Qué es esto?

  • variable_name- Cualquier nombre de variable de usuario permitido en el guión de Pine (puede incluir caracteres latinos mayúsculas y minúsculas, números y guiones, pero no puede comenzar con números).
  • expression- Cualquier expresión aritmética, como cuando se define una variable regular. En la primera línea K, la expresión se calcula una sola vez y se asigna a la variable una vez.

Ejemplos

// varip
varip int v = -1
v := v + 1
plot(v)

Cuando se usa var, el gráfico devuelve el valor de bar_index. Usando varip, el mismo comportamiento ocurre en la línea K histórica, pero en la línea K en tiempo real, el gráfico devuelve un valor que aumenta uno por cada tick.

Nota: el nombre de la ciudad esSolo puede usarse con tipos simples, como float, int, boolean, string, y con matrices de estos tipos.

Es cierto

Indica el valor de una variable de tipo Boole, o cuando se usa una expresiónComparación¿Qué es esto?La lógicaEl valor que se puede calcular cuando el operador.

Nota: el nombre de la ciudad esPara más información:ComparaciónLos operadores yLa lógicaDescripción del operador.

Hasta luego. bool

- No es cierto.

Indica el valor de una variable de tipo Boole, así como los resultados de las operaciones de comparación y de las operaciones lógicas.

Nota: el nombre de la ciudad esPara más información:ComparaciónLos operadores yLa lógicaDescripción del operador.

Hasta luego. bool

si es

Las oraciones if definen los bloques de oración que deben ejecutarse cuando se cumplen las condiciones de la expresión. La lenguaje de escritura Pine de la versión 4 permite usar la sintaxis else if.

El código común proviene de:

var_declarationX = if condition
    var_decl_then0
    var_decl_then1
    ...
    var_decl_thenN
    return_expression_then
else if [optional block]
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else
else
    var_decl_else0
    var_decl_else1
    ...
    var_decl_elseN
    return_expression_else

Nota: el nombre de la ciudad es var_declarationX- Esta variable obtiene el valor de la frase sicondition- Si la condición es true, se usa el bloque de sentenciasthenLa lógica en elvar_decl_then0var_decl_then1Por ejemplo, si la condición es false, se usa el bloque de sentencias.else if¿Qué es esto?elseLa lógica en elvar_decl_else0var_decl_else1Y así sucesivamente.return_expression_then , return_expression_else- La última expresión en el módulo o la expresión del bloqueelse devolverá el valor final de la frase. Si la declaración de la variable está al final, su valor será el valor del resultado.

El tipo de valor que se devuelve en la frase if depende de:return_expression_thenyreturn_expression_elseTipo: Cuando se ejecuta en TradingView, sus tipos deben coincidir: cuando tienes un valor de cadena en el bloqueelse, no es posible devolver un valor entero desde el bloque then. Cuando se ejecuta en FMZ, los siguientes ejemplos no devuelven errores: cuando el valor de y se toma como "open", el valor del gráfico de la trama es n/a.

Ejemplos

// This code compiles
x = if close > open
    close
else
    open  

// This code doesn’t compile by trading view
// y = if close > open
//     close
// else
//     "open"
plot(x)

Se puede omitirelseBloquear. En este caso, si la condición es false, se asigna un umbral vacío a la variable var_declarationX (na,false o umbral):

Ejemplos

// if
x = if close > open
    close
// If current close > current open, then x = close.
// Otherwise the x = na.
plot(x)

Se pueden usar varios bloques de else if o no usarlos en absoluto. Los bloques de then, else if, else if se mueven en cuatro espacios:

Ejemplos

// if
x = if open > close
    5
else if high > low
    close
else
    open
plot(x)

¿Cómo se puede ignorar esto?ifEl valor del resultado de la declaración ((var_declarationX= puede omitirse) ). Puede ser útil si necesita un lado de la expresión, por ejemplo, en la negociación de estrategias:

Ejemplos

if (ta.crossover(high, low))
    strategy.entry("BBandLE", strategy.long, stop=low)
else
    strategy.cancel(id="BBandLE")

Las oraciones if pueden contenerse entre sí:

Ejemplos

// if
float x = na
if close > open
    if close > close[1]
        x := close
    else
        x := close[1]
else
    x := open
plot(x)

para

La estructura for permite la repetición de varias oraciones:

[var_declaration =] for counter = from_num to to_num [by step_num]
    statements | continue | break
    return_expression

var_declaration- Una declaración de variable opcional que se asignará como el valor de la expresión return_expression de la vuelta al círculo.counter- Para guardar las variables de los valores del contador de la vuelta, aumenta/disminuye el valor de 1 o step_num en cada repetición de la vuelta.from_num- El valor inicial del contador. Se permite el uso de las frases int/float thresholds/expresiones.to_num- El valor final del contador. El ciclo se interrumpe cuando el contador es mayor que to_num (o menor que to_num en el caso de from_num > to_num). Se permite el uso de las frases int/float thresholds/expresiones, pero solo se evalúan en la primera repetición del ciclo.step_num- Aumento/disminución del contador. Es opcional. El valor predeterminado es +1 o-1, dependiendo del más grande de from_num o de to_num. Cuando se usa un valor, el contador también aumenta o disminuye según el más grande de from_num o de to_num, por lo que el símbolo +/- de step_num es opcional.statements | continue | break- Cualquier número de frases, o las palabras clave "continue" o "break" para reducir a 4 espacios o una pestaña.return_expression- El valor de retorno del ciclo, si existe, se asigna a las variables de la var_declaration. Si el ciclo se retira debido a la clave "continue" o "break", el valor de retorno del ciclo es el valor de la última variable a la que se le asignó el valor antes de salir del ciclo.continue- La palabra clave que sólo se puede usar en el giro.break- La palabra clave para salir del círculo de regreso.

Ejemplos

// Here, we count the quantity of bars in a given 'lookback' length which closed above the current bar's close
qtyOfHigherCloses(lookback) =>
    int result = 0
    for i = 1 to lookback
        if close[i] > close
            result += 1
    result
plot(qtyOfHigherCloses(14))

Hasta luego. for...in while

para... en

for...inLa estructura permite ejecutar varias declaraciones repetidas para cada elemento de la matriz. Se puede usar junto con cualquier parámetro:array_element, o se puede usar junto con dos parámetros:[index, array_element]La segunda forma no afecta a la función del ciclo; sigue el índice de la iteración actual en la primera variable del grupo.

[var_declaration =] for array_element in array_id
    statements | continue | break
    return_expression

[var_declaration =] for [index, array_element] in array_id
    statements | continue | break
    return_expression

var_declaration- Una declaración de variable opcional, que será asignada al cicloreturn_expressionEl valor de las letras y letras.index- Seguimiento de variables opcionales del índice iterativo actual. ■ Indice que comienza en cero. ■ Variables invariantes en el ciclo. ■ Cuando se usa, debe contener también un índice.array_elementEn el subgrupo de los elementos de.array_element- Contiene las variables de cada elemento de la matriz continua a tratar en el ciclo.array_id- ID de la matriz de repetición en círculo.statements | continue | break- Cualquier número de frases, o las palabras clave "continue" o "break" para reducir a 4 espacios o una pestaña.return_expression- El valor de retorno del ciclo se asigna avar_declarationVariables en el interior, si existen. Si el bucle se retira debido a la palabra clave "continue" o "break", el valor de retorno del bucle es el valor de la última variable asignada antes de que el bucle se retire.continue- La palabra clave que sólo se puede usar en el giro.break- La palabra clave para salir del círculo de regreso.

Permite modificar los elementos de la matriz o su tamaño durante el ciclo. Aquí usamosfor...inLa forma de un solo parámetro para determinar en cada línea K, cuántas líneas K tienen un valor OHLC mayor que el SMA del umbral de cercanía:

Ejemplos

// Here we determine on each bar how many of the bar's OHLC values are greater than the SMA of 'close' values
float[] ohlcValues = array.from(open, high, low, close)
qtyGreaterThan(value, array) =>
    int result = 0
    for currentElement in array
        if currentElement > value
            result += 1
        result
plot(qtyGreaterThan(ta.sma(close, 20), ohlcValues))

Aquí usamos dos parámetros de la forma de for...in para expresar nuestroisPosEl valor de la matriz está configurado comotrueCuando están en nuestrovaluesArrayEl valor correspondiente en el conjunto es:

Ejemplos

// for...in
var valuesArray = array.from(4, -8, 11, 78, -16, 34, 7, 99, 0, 55)
var isPos = array.new_bool(10, false)  

for [index, value] in valuesArray
    if value > 0
        array.set(isPos, index, true)  

if barstate.islastconfirmedhistory
    runtime.log(str.tostring(isPos))

Hasta luego. for while array.sum array.min array.max

mientras...

whileLas declaraciones permiten la repetición de condiciones en bloques de código locales.

variable_declaration = while boolean_expression
    ...
    continue
    ...
    break
    ...
    return_expression

¿Qué es esto?variable_declaration- Declaración de variables opcionales.return expressionSe puede proporcionar un valor de inicialización para esta variable.boolean_expression- Si es verdad, ejecutawhileEl bloque local de la frase. Si es falso, se encuentra enwhileDespués de la frase, sigue ejecutando el guión.continue - continueLas palabras clave conducen a la rama circular hasta la siguiente iteración.break - breakLas palabras clave terminan el ciclo.whileLa frase se repite después de la frase.return_expression- Se ofrece.whileLas líneas opcionales que devuelven el valor de la frase.

Ejemplos

// This is a simple example of calculating a factorial using a while loop.
int i_n = input.int(10, "Factorial Size", minval=0)
int counter   = i_n
int factorial = 1
while counter > 0
    factorial := factorial * counter
    counter   := counter - 1

plot(factorial)

Nota: el nombre de la ciudad esPrimariowhileEl bloque de código local después de la línea debe ser reducido a cuatro espacios o un símbolo.whileEl círculo.whileLa siguiente expresión de Boole debe convertirse en false o ejecutarse.break

el cambio

El operador switch transfiere el control a una de las declaraciones según el valor de la condición y la expresión.

[variable_declaration = ] switch expression
    value1 => local_block
    value2 => local_block
    ...
    => default_local_block

[variable_declaration = ] switch
    boolean_expression1 => local_block
    boolean_expression2 => local_block
    ...
    => default_local_block

En la página de Facebook de Facebook, el usuario de Twitter dice:

Ejemplos

// Switch using an expression

string i_maType = input.string("EMA", "MA type", options = ["EMA", "SMA", "RMA", "WMA"])

float ma = switch i_maType
    "EMA" => ta.ema(close, 10)
    "SMA" => ta.sma(close, 10)
    "RMA" => ta.rma(close, 10)
    // Default used when the three first cases do not match.
    => ta.wma(close, 10)

plot(ma)

En la página web de Twitter de la empresa, el usuario dice que el cambio no tiene expresión:

Ejemplos

strategy("Switch without an expression", overlay = true)

bool longCondition  = ta.crossover( ta.sma(close, 14), ta.sma(close, 28))
bool shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

switch
    longCondition  => strategy.entry("Long ID", strategy.long)
    shortCondition => strategy.entry("Short ID", strategy.short)

El valor de retornoEl valor de la última expresión en el bloque de la oración local ejecutada.

Nota: el nombre de la ciudad esSólo puede ejecutarse.local_blockejemplo odefault_local_blockUno de ellos.default_local_blockSólo con=>Introducción con marcadores, y sólo se ejecuta cuando no se ejecuta el bloque anterior.switchEl resultado de la frase se asigna a una variable y no se especificadefault_local_blockSi no se ejecuta.local_blockLa frase se vuelve:na¿Qué es esto?switchCuando los resultados de las declaraciones se asignan a las variables, todoslocal_blockLas instancias deben devolver valores del mismo tipo.

Hasta luego. if ?:

serie

series es una palabra clave que indica el tipo de serie de datos.seriesLas palabras clave son generalmente innecesarias.

Operador

=

Se utiliza para asignar valores a variables, pero sólo cuando se declara una variable (la primera vez que se usa).

:=

Operador de asignación para asignar variables a la izquierda.

!=

No es igual a. Aplicable a cualquier tipo de expresión.

expr1 != expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

%

Los módulos ((integral residual) ⇒ aplicados a las expresiones numéricas ⇒

expr1 % expr2

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

Nota: el nombre de la ciudad esEn el guión de Pine, cuando se calcula el resto de los enteros, el operador se interrumpe; es decir, se cuadra hasta el mínimo valor absoluto. El valor obtenido tendrá el mismo símbolo que el dividendo.

Ejemplo: -1 % 9 = -1 - 9 * truncate ((-1/9) = -1 - 9 * truncate ((-0.111) = -1 - 9 * 0 = -1.

%=

Los indicadores de módulos. Se aplican a las expresiones numéricas.

expr1 %= expr2

Ejemplos

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

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

*

La multiplicación. Se aplica a la expresión numérica.

expr1 * expr2

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

*=

Los indicadores de multiplicación. Se aplican a las expresiones numéricas.

expr1 *= expr2

Ejemplos

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

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

+

Añadir o un solo número exacto. Aplicable para expresiones numéricas o cadenas.

expr1 + expr2
+ expr

El valor de retornoEl sistema binario de las cadenas+Devuelve la combinación de expres1 y expres2 Los números devuelven un número entero o un valor de punto flotante, o una serie de valores: El sistema binario con el r +'devuelve expres1 más expres2 ∞. El valor de un valor de unidad + el valor de unidad devuelve el valor de un valor de unidad (sin añadir nada a la simetría del operador).

Nota: el nombre de la ciudad esPuedes usar operadores aritméticos con números y columnas de variables. En el caso de columnas de números, los operadores se aplican a los elementos.

+=

Los indicadores de acoplamiento.

expr1 += expr2

Ejemplos

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

El valor de retornoPara una cadena, devuelve la serie de expres1 y expres2; para un número, devuelve un número entero o un valor de punto flotante, o una serie de valores.

Nota: el nombre de la ciudad esPuedes usar operadores aritméticos con números y columnas de variables. En el caso de columnas de números, los operadores se aplican a los elementos.

-

La ley de deducción o unidad negativa.

expr1 - expr2
- expr

El valor de retornoDevuelve un número entero o un valor de punto flotante, o una serie de valores: El binomial r +'devuelve expres1 menos expres2. Un dólar-Devuelve la negación de expr.

Nota: el nombre de la ciudad esPuedes usar operadores aritméticos con números y columnas de variables. En el caso de columnas de números, los operadores se aplican a los elementos.

-=

La designación de la ley de la deducción.

expr1 -= expr2

Ejemplos

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

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

/

La excepción ─ aplica a las expresiones numéricas ─.

expr1 / expr2

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

/=

Excepto las designaciones.

expr1 /= expr2

Ejemplos

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

El valor de retornoUn número entero o un valor de punto flotante, o una serie de valores.

<

Menor que. Aplica para las expresiones numéricas.

expr1 < expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

<=

Menor o igual a. Aplica para las expresiones numéricas.

expr1 <= expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

==

Esto es lo mismo que: ≠ {\displaystyle \alpha }, y puede aplicarse a cualquier tipo de expresión.

expr1 == expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

=>

Los operadores '=>' se utilizan para las declaraciones de funciones definidas por el usuario yswitchEn la frase, el hombre dice:

La sintaxis de las declaraciones de funciones es:

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

Uno.<local_block>Las frases de Pine son cero o más frases de Pine.<function_result>Es una variable, una expresión o un grupo de elementos.

Ejemplos

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

Nota: el nombre de la ciudad esPuede obtener más información sobre las funciones definidas por el usuario en la página de declaraciones de funciones y librería de guiones del manual del usuario.

>

Más grande que. Aplica para las expresiones numéricas.

expr1 > expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

>=

Más grande o igual a. Aplica para las expresiones numéricas.

expr1 >= expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

?:

Los operadores de las tres condiciones.

expr1 ? expr2 : expr3

Ejemplos

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

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

El valor de retornoSi expres1 se evalúa como true, expres2 se evalúa como true, si no, expres3 se evalúa como true. Los valores cero ((0 y NaN+, Infinity,-Infinity) se consideran falsos y todos los demás valores son true.

Nota: el nombre de la ciudad esSi no lo necesitas, usa na como una rama de la columna else. Puede combinar dos o más?: operadores para implementar una frase similar a la de un switch de botón (ver el ejemplo anterior). Puedes usar operadores aritméticos con números y columnas de variables. En el caso de columnas de números, los operadores se aplican a los elementos.

Hasta luego. na

[]

Subetiqueta de la serie. Ofrece acceso a los valores anteriores de la serie expr1. Expr2 es el número de líneas k pasadas y debe ser un valor. El flotador se desplazará hacia abajo.

expr1[expr2]

Ejemplos

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

El valor de retornoEs una serie de valores.

Hasta luego. math.floor

y

La lógica AND ─ aplica para las expresiones de Boole ─.

expr1 and expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

o bien

La lógica OR↑ se aplica a las expresiones de Boole↑

expr1 or expr2

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

No lo es

La respuesta lógica ((NOT) ⇒ se aplica a las expresiones de Boole.

not expr1

El valor de retornoEl valor de Boole, o una serie de valores de Boole.

Tipo de datos Palabras clave

Bool también

Palabras clave de tipo "Bool" para variables o parámetros declarados expresamente. El valor de la variable "Bool" puede ser true, false o na.

Ejemplos

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

Nota: el nombre de la ciudad esEs opcional mencionar claramente el tipo en la declaración de la variable, a menos que se inicie con na. Más información sobre el tipo Pine en la página de manual del usuario del sistema de tipos.

Hasta luego. var varip int float color string true false

Int

Palabras clave de tipo int (integer) para declarar variables o parámetros expresamente.

Ejemplos

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

Nota: el nombre de la ciudad esEs opcional mencionar claramente el tipo en la declaración de la variable, a menos que se inicie con na. Más información sobre el tipo Pine en la página de manual del usuario del sistema de tipos.

Hasta luego. var varip float bool color string

flotación

Palabras clave de tipo float (float) para declarar variables o parámetros expresamente.

Ejemplos

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

Nota: el nombre de la ciudad esEs opcional que el tipo se mencione expresamente en la declaración de la variable, a menos que se inicie con na.

Hasta luego. var varip int bool color string

la cuerda

Palabras clave de tipo "string" para declarar variables o parámetros expresamente.

Ejemplos

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

Nota: el nombre de la ciudad esEs opcional mencionar claramente el tipo en la declaración de la variable, a menos que se inicie con na. Más información sobre el tipo Pine en la página de manual del usuario del sistema de tipos.

Hasta luego. var varip int float bool str.tostring str.format

el color

Palabras clave de tipo "color" para declarar variables o parámetros expresamente.

Ejemplos

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

Nota: el nombre de la ciudad esLos caracteres de color tienen el siguiente formato: #RRGGBB o #RRGGBBAA. Las letras representan los valores de los sesenta dígitos de 00 a FF (de 0 a 255 en el decimal), donde RR, GG y BB son los valores de los componentes rojos, verdes y azules de los colores. AA es el valor opcional de la transparencia de color (o componente alfa), donde 00 es invisible y FF es opaco. Cuando no se proporciona AA, se usa FF. Los caracteres de los sesenta dígitos se pueden escribir mayúsculas o minúsculas. Es opcional mencionar el tipo de forma explícita en la declaración de la variable, a menos que se inicie con na. Más información sobre el tipo Pine se puede encontrar en la página de la guía de usuario del sistema de tipos.

Hasta luego. var varip int float string color.rgb color.new

el conjunto

Se puede usar la palabra clave para el tipo de pila de la matriz que se usa para declarar variables o parámetros explícitamente.array.new<type>,array.fromLa función crea objetos de la matriz ((o ID)).

Ejemplos

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

Nota: el nombre de la ciudad esLos objetos de la matriz son siempre en forma de matrices en serie.

Hasta luego. var array.new array.from

Funciones integradas

Cuando se llama a una función, se puede transferir parámetros, se puede asignar un valor de nombre de parámetro, se puede transferir variables directamente en la posición correspondiente de los parámetros, también se admite el uso mixto. Por ejemplo:

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

Una vez que se especifica la asignación de nombres de parámetros, ya no se puede transmitir directamente las variables como parámetros, y todas las siguientes transmisiones deben escribirse en forma de asignación de nombres de parámetros.

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

plazo de tiempo

tiempo.en_segundos

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

timeframe.in_seconds(timeframe)

Ejemplos

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

El valor de retorno timeframeEl número de segundos en una línea K de int se representa en la forma.

Parámetros

  • timeframe(simple string) Período de tiempo↑ opcional↑ por defecto timeframe.period↑

Nota: el nombre de la ciudad esEn cuanto atimeframe>= 1 M Función de calculada según el número de segundos de 30.4167 (365/12) días en un mes.

Hasta luego. input.timeframe timeframe.period

el ticker

ticker.heikinashi

Crear un identificador de código que solicite el valor de la línea K media suavizada.

ticker.heikinashi(symbol)

Ejemplos

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)

El valor de retorno 股票代码的字符串值,可以提供给request.security函数。

Parámetros

  • symbol(Simple string) Identificador del código de la mercancía.

Hasta luego. syminfo.tickerid syminfo.ticker request.security

petición

request.data

Solicitar datos externos.

request.data(url, attribute)

Ejemplos

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

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

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

El valor de retornoParámetrosattributeLa serie de datos especificada.

Parámetros

  • url(simple string) La url de la fuente de datos solicitada, el formato de los datos a los que responde la fuente de datos debe cumplir con los requisitos (incluye al menos el atributo time、data):{"data": [], "schema": ["time", "data"]}Los formatos de datos en los ejemplos pueden ser:
    {
        "data": [
            [1430438400000, "2015年04月", "{\"add_investor\" : 497.53, \"close_price\" : 4441.655}"],
            [1433116800000, "2015年05月", "{\"add_investor\" : 415.87, \"close_price\" : 4611.744}"]
            // ...
        ],
        "schema": ["time", "date", "data"]
    }  
    
  • attribute(simple string) Especifica el nombre de la propiedad y devuelve los datos que desea; por ejemplo:"$.add_investor"¿Cómo se usa?$.Como prefijo, el nombre de la propiedad coincide con la propiedad en el campo de datos de la fuente de datos solicitada cuando se responde

request.security

Se requiere otra variedad/resolución.

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

Ejemplos

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)

El valor de retornoRequiere series

Parámetros

  • 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 del gráfico.
  • expression(series int/float/bool/color) puede ser llamado desde request.security y devolver una expresión. Puede ser una serie o un conjunto de elementos que pueden ser convertidos a una serie.
  • gaps(barmerge_gaps) Política de combinación de datos solicitada (requiere que los datos se combinen automáticamente con la serie principal de datos OHLC). Valores posibles: barmerge.gaps_on, barmerge.gaps_off.., barmerge.gaps_on - Combinación de datos solicitados con posibles diferencias (valor na).., barmerge.gaps_off - Combinación continua de datos solicitados sin interrupción, todos los espacios se llenan con el valor anterior más reciente existente. El valor predeterminado es barmerge.gaps_off..,
  • lookahead(barmerge_lookahead) para la política de combinación de datos solicitada. Los valores posibles: barmerge.lookahead_on, barmerge.lookahead_off. Desde la versión 3, el valor predeterminado 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 falso, el script se detendrá y regresará al error al ejecutarse; si es verdad, la función regresará a na y continuará ejecutándose.
  • currency(simple string) Convierte el valor de la moneda correspondiente (por ejemplo, OHLC) en la moneda en la que se convierte el producto. Luego, se calcula el valor después de la conversión en función del valor de la expresión . La tasa de conversión utilizada se basa en el tipo de cambio diario del día anterior del par FX_IDC (por ejemplo, en relación con la línea K que se calcula). Opcional. El valor predeterminado es syminfo.currency. Posible: una cadena de tres letras con un código de moneda en formato ISO 4217 (por ejemplo, USD).

Nota: el nombre de la ciudad esEl código de PineScript que utiliza esta función puede realizar diferentes cálculos sobre registros históricos y datos en tiempo real.Si desea especificar parámetros adicionales para el producto solicitado, como plazos de transacción o tipo de ajuste, puede utilizar el código de configuración.您可以使用ticker.newLa función () también funciona así. No se puede transmitir un error a esta función con la variable ticker tick.ticker.newLa forma en que se representa una cadena de variables o un código de acciones, por ejemplo, AAPL+MSFT*TSLA.En la actualidad, un script puede tener hasta 40 llamadas de requisito.security. Tenga en cuenta que el uso de esta variable/función puede causar que el indicador se rediseñe. Los parámetros de resolución permiten valores como: 1S, 5S, 15S, 30S - intervalos de segundos (el ciclo del gráfico debe ser menor o igual al período solicitado) Desde 1 hasta 1440 minutos Desde 1D hasta 365D De 1W a 52W en pocas semanas De 1M a 12M en unos pocos meses

Hasta luego. syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

el

str.contains

¿Qué pasa sisourceLas cadenas contienenstrSi el valor de la secuencia de comandos es igual al valor de la secuencia de comandos, entonces el valor de la secuencia de comandos es igual al valor de la secuencia de comandos, y el valor de la secuencia de comandos es igual al valor de la secuencia de comandos.

str.contains(source, str)

Ejemplos

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

El valor de retornoSi está ensourceEncontrado en la cadenastrSi el valor de un error es 0, entonces el valor de un error es 0, y si el valor de un error es 0, entonces el valor de un error es 0, y si el valor de un error es 0, entonces el valor de un error es 0, y si el valor de un error es 0, entonces el valor de un error es 0, y si el valor de un error es 0, entonces el valor de un error es 0,

Parámetros

  • source(series string) La cadena de origen
  • str(series string) La substring que se busca.

Hasta luego. str.pos str.match

str.endswith

¿Qué pasa sisourceEs una cadena destrEl final de la substring que se especifica en el medio, devuelve true, o de lo contrario, false.

str.endswith(source, str)

El valor de retorno¿Qué pasa sisourceEs una cadena destrEl final de la substring que se especifica en el punto es true o false.

Parámetros

  • source(series string) La cadena de origen
  • str(series string) La substring que se busca.

Hasta luego. str.startswith

str.startswith

¿Qué pasa sisourceEs una cadena destrEl inicio de la substringa especificada en el punto de partida devuelve true o false.

str.startswith(source, str)

El valor de retorno¿Qué pasa sisourceEs una cadena destrEl inicio de la substring que se especifica en el medio es verdadero, de lo contrario es falso.

Parámetros

  • source(series string) La cadena de origen
  • str(series string) La substring que se busca.

Hasta luego. str.endswith

str.substring

Devolver una nueva cadena, que essourceLas sub-string de las cadenas. Las sub-string de las cadenas se componen de:begin_posLos caracteres que comienzan en el índice indicado y se extienden asourceEl end_pos de la cadena es 1 .

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

Ejemplos

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)

El valor de retornoUna substring extraída de la cadena de origen.

Parámetros

  • source(series string) Extraer la cadena de origen de la que se obtiene la substring.
  • begin_pos(series int) es la posición inicial de la substring extraída. Es exclusiva (la substring extraída incluye los caracteres de esa posición).
  • end_pos(series int) terminación de la posición. Es exclusivo. La extracción de la cadena no incluye los caracteres de la posición. Opcional.sourceLa longitud de la cadena.

Nota: el nombre de la ciudad esEl índice de la cadena comienza en 0; sibegin_poses igual aend_pos, la función devuelve una cadena vacía.

Hasta luego. str.contains str.pos str.match

str.tonumber

str.tonumber(string)

El valor de retornoSi contiene un número válido, es el tipo de punto flotante de la cadena, de lo contrario es na.

Parámetros

  • string(series string) forma de expresión de la cadena int o float.

str.format

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

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

Ejemplos

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

El valor de retornoLas cadenas formateadas.

Parámetros

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

Nota: el nombre de la ciudad esTodos los paréntesis no citados en el estilo 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 un número entero correspondiente al número de caracteres de la cadena.

str.length(string)

El valor de retornoEl número de caracteres en la cadena de origen.

Parámetros

  • string(series string) La cadena de origen

str.lower

Devuelve una nueva cadena donde todas las letras se convierten en letras pequeñas.

str.lower(source)

El valor de retornoTodas las letras se han convertido en nuevas cadenas de letras pequeñas.

Parámetros

  • source(series string) La cadena a convertir.

Hasta luego. str.upper

str.upper

Devuelve una nueva cadena donde todas las letras se han convertido en mayúsculas.

str.upper(source)

El valor de retornoTodas las letras se han convertido en nuevas cadenas de letras mayúsculas.

Parámetros

  • source(series string) La cadena a convertir.

Hasta luego. str.lower

str.match

Si es una coincidencia.regexLa expresión normal regresa.sourceLa nueva substring de la cadena, de lo contrario, regresa na.

str.match(source, regex) 

Ejemplos

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

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

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

Más.

¡Qué bueno!¿Cómo se puede hacer para que varios contratos de bitcoins funcionen simultáneamente?

Nube ligeraPor favor, ¿puede Pine hacer más transacciones? ¿Puede JS hacer más transacciones?

- ¿Qué quieres decir?Gracias por los detalles.

el arte¿Cómo es que el script de pine usa la placa de simulación de okex en la plataforma?

el arteEsto equivale a copiar las estrategias de tradingview directamente a las plataformas de los inventores para usarlas.

Un sueño pequeño.El lenguaje PINE sólo puede hacer una política de variedad única, la política de variedades múltiples es mejor o escribir el diseño en Python, JavaScript, C ++.

Un sueño pequeño.Oh, sí, OKX es muy especial, su entorno analógico y su entorno de disco real tienen la misma dirección, sólo que hay una diferencia en otro lugar.

Nube ligeraNo se puede usar el simulador okx.....

Un sueño pequeño.Este problema de la arquitectura de la variedad no se resuelve bien, ya que cada interfaz es diferente y no se limita a la frecuencia de las interfaces, lo que genera muchos problemas.

Un sueño pequeño.Bien, gracias por la sugerencia de Cloudways, por favor informe este requerimiento.

Nube ligeraMe siento mejor mezclado con JS, JS puede adaptarse mejor a todo tipo de transacciones.

La tendencia de los cazadoresEl precio de cierre es para cada variedad, y el precio de cierre es para cada variedad.

Un sueño pequeño.No es muy amable.

Nube ligeraBien, gracias muchachos.

Un sueño pequeño.Hola, la política de lenguaje de PINE sólo funciona con una variedad por el momento.

Un sueño pequeño.Gracias por su apoyo. La documentación seguirá mejorando.

Un sueño pequeño.Sí, es cierto.

Un sueño pequeño.PINE es una biblioteca de modelos, en la que los parámetros permiten configurar la dirección de base de los intercambios.