[TOC] ¿Qué quieres decir?
La estructura general del código en Pine es la siguiente:
<version>
<declaration_statement>
<code>
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')
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
。
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.
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.
if
,for
,while
¿Qué es esto?switch
Estructura de las ecuacionesLas oraciones se pueden ordenar de varias maneras.
空格
¿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.local block
Un 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.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) // 调用一个内置函数输出日志 (全局范围)
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")
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 incorporadasopen
Por ejemplo,open
La variable interna registra el precio de apertura de cada barra de la línea K, si esto es cierto.open
Es el ciclo de 5 minutos de la línea K. Entonces esto es el ciclo de 5 minutos de la línea K.open
Lo 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.open
Es 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.
La configuración de los parámetros de la librería de transacciones de lenguaje "Pine", la plantilla incorporada de la política PINE.
定价货币精度
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.javascript
Llamadas en la estrategiaSetMaxBarLen
La función es la misma.strategy(title = "open long example", pyramiding = 3) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.01) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.02, when = close > ta.ema(close, 10)) // 条件触发,执行下单,市价开多仓
strategy.entry("long3", strategy.long, 0.03, limit = 30000) // 指定(较低的)价格,计划下买单订单,等待成交开仓,限价开仓
strategy(title = "close long example", pyramiding = 2) // pyramiding 允许的同方向下单的次数
strategy.entry("long1", strategy.long, 0.1) // 市价开多仓,指定分组标签为long1
strategy.entry("long2", strategy.long, 0.1) // 市价开多仓,指定分组标签为long2
strategy.close("long1", when = strategy.position_size > 0.1, qty_percent = 50, comment = "close buy entry for 50%") // 平仓,指定平掉分组标签为long1的仓位的50%持仓
strategy.close("long2", when = strategy.position_size > 0.1, qty_percent = 80, comment = "close buy entry for 80%") // 平仓,指定平掉分组标签为long2的仓位的80%持仓
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).
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.entry
Cuando ordenamos una función, podemos especificarlimit
、stop
Los 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,direction
El parámetro esstrategy.long
En 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)direction
El parámetro esstrategy.short
En 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áneamentelimit
、stop
Los parámetros, los pedidos se activan en el precio que cumple con los requisitos primero.
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
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:var
、varip
Las 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.var
、varip
Las variables declaradas i, ii se ejecutan incrementalmente cada vez que se ejecuta el código de la política, ya queif true
Por 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.var
、varip
Las 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 + 1
yii := ii + 1
La 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.var
、varip
Las variables declaradas se muestran perfectamente congruentes en el ejemplo anterior, incrementando 1 BAR por cada línea K.
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.
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
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
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
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 sentenciasthen
La lógica en elvar_decl_then0
,var_decl_then1
Por ejemplo, si la condición es false, se usa el bloque de sentencias.else if
¿Qué es esto?else
La lógica en elvar_decl_else0
,var_decl_else1
Y 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_then
yreturn_expression_else
Tipo: 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 omitirelse
Bloquear. 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
Ejemplos
// if
x = if open > close
5
else if high > low
close
else
open
plot(x)
¿Cómo se puede ignorar esto?if
El valor del resultado de la declaración ((
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)
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
for...in
La 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_expression
El 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_element
En 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_declaration
Variables 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...in
La 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 nuestroisPos
El valor de la matriz está configurado comotrue
Cuando están en nuestrovaluesArray
El 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
while
Las 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 expression
Se puede proporcionar un valor de inicialización para esta variable.boolean_expression
- Si es verdad, ejecutawhile
El bloque local de la frase. Si es falso, se encuentra enwhile
Después de la frase, sigue ejecutando el guión.continue
- continue
Las palabras clave conducen a la rama circular hasta la siguiente iteración.break
- break
Las palabras clave terminan el ciclo.while
La frase se repite después de la frase.return_expression
- Se ofrece.while
Las 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 esPrimariowhile
El bloque de código local después de la línea debe ser reducido a cuatro espacios o un símbolo.while
El círculo.while
La siguiente expresión de Boole debe convertirse en false o ejecutarse.break
。
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_block
ejemplo odefault_local_block
Uno de ellos.default_local_block
Sólo con=>
Introducción con marcadores, y sólo se ejecuta cuando no se ejecuta el bloque anterior.switch
El resultado de la frase se asigna a una variable y no se especificadefault_local_block
Si no se ejecuta.local_block
La frase se vuelve:na
¿Qué es esto?switch
Cuando los resultados de las declaraciones se asignan a las variables, todoslocal_block
Las instancias deben devolver valores del mismo tipo.
Hasta luego.
if
?:
series es una palabra clave que indica el tipo de serie de datos.series
Las palabras clave son generalmente innecesarias.
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 yswitch
En 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
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.
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.
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.
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
Palabras clave de tipo
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
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
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
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
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.from
La 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
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) // 正确写法
Se le enviará atimeframe
El 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
timeframe
El 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
>=
Hasta luego.
input.timeframe
timeframe.period
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
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ámetrosattribute
La 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 respondeSe 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 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*TSLAEn 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
¿Qué pasa sisource
Las cadenas contienenstr
Si 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á ensource
Encontrado en la cadenastr
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, 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 origenstr
(series string) La substring que se busca.Hasta luego.
str.pos
str.match
¿Qué pasa sisource
Es una cadena destr
El 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 sisource
Es una cadena destr
El final de la substring que se especifica en el punto es true o false.
Parámetros
source
(series string) La cadena de origenstr
(series string) La substring que se busca.Hasta luego.
str.startswith
¿Qué pasa sisource
Es una cadena destr
El inicio de la substringa especificada en el punto de partida devuelve true o false.
str.startswith(source, str)
El valor de retorno¿Qué pasa sisource
Es una cadena destr
El 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 origenstr
(series string) La substring que se busca.Hasta luego.
str.endswith
Devolver una nueva cadena, que essource
Las sub-string de las cadenas. Las sub-string de las cadenas se componen de:begin_pos
Los caracteres que comienzan en el índice indicado y se extienden asource
El 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.source
La longitud de la cadena.Nota: el nombre de la ciudad esEl índice de la cadena comienza en 0; sibegin_pos
es igual aend_pos
, la función devuelve una cadena vacía.
Hasta luego.
str.contains
str.pos
str.match
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.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,
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 origenDevuelve 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
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
Si es una coincidencia.regex
La expresión normal regresa.source
La nueva substring de la cadena, de lo contrario, regresa
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
¡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.