e su campo (index, price, vol) mantendrá su valor en cada iterada, desde el primer elemento hasta el último. - El objeto currentBar no usa la declaración de la palabra clave var, por lo que su campo se reinicializa en cada entrada y hay un nuevo objeto en cada repetición.
Al trazar los campos de índice de dos objetos, puede comparar las diferencias entre ellos. firstBar.index mantendrá el valor previamente establecido en cada repetición, mientras que currentBar.index se reinicializará en cada repetición como el valor de bar_index de la entrada actual.
Tipo de objeto para el uso de la palabra clave varip
//@version=5
indicator("Objects using `varip` fields demo")
//@type A custom type that counts the bars and ticks in the script's execution.
type Counter
int bars = 0
varip int ticks = 0
//@variable A `Counter` object whose reference persists throughout all bars.
var Counter counter = Counter.new()
// Add 1 to the `bars` and `ticks` fields. The `ticks` field is not subject to rollback on unconfirmed bars.
counter.bars += 1
counter.ticks += 1
// Plot both fields for comparison.
plot(counter.bars, "Bar counter", color.blue, 3)
plot(counter.ticks, "Tick counter", color.purple, 3)
En Pine, el uso de la palabra clave varip puede indicar que el campo del objeto persiste durante toda la ejecución del script, sin que se vuelva a rodar en una columna no confirmada. En las declaraciones de tipo Counter, el campo bars no usa la palabra clave varip, por lo que se desliza en cada columna no confirmada. El campo ticks usa la palabra clave varip, por lo que no se desliza en columnas no confirmadas. El objeto counter está declarado con la palabra clave var, por lo que persistirá durante toda la ejecución del script. En cada repetición, los campos de barras y ticks se incrementan 1 ≠. Los campos de barras se vuelven dentro de cada columna no confirmada, mientras que los campos de ticks no se vuelven. Finalmente, mediante el trazado de los campos counter.bars y counter.ticks, se pueden comparar las diferencias entre ellos. El valor de counter.bars se volverá a rodar dentro de cada columna no confirmada, mientras que el valor de counter.ticks continuará aumentando hasta que finalice la ejecución del script.
Modificar el valor del campo
type order
float price
float amount
string symbol
if strategy.position_size == 0 and open > close
strategy.entry("long", strategy.long, 1)
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
if strategy.position_size != 0
runtime.log(order1)
order1.price := 999
order1.amount := 100
runtime.log(order1)
runtime.error("stop")
Se puede usar:=
El operador de reasignación cambia el valor del campo objeto.
Colección de objetos
El ejemplo declara un array NULL que guardará objetos del tipo order definido por el usuario:
type order
float price
float amount
string symbol
arrOrder = array.new<order>()
order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")
array.push(arrOrder, order1)
array.push(arrOrder, order2)
runtime.log(arrOrder)
runtime.error("stop")
o
type order
float price
float amount
string symbol
var array<order> arrOrder = na
arrOrder := array.new<order>()
order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")
array.push(arrOrder, order1)
array.push(arrOrder, order2)
runtime.log(arrOrder)
runtime.error("stop")
Objeto de la copia
En Pine, los objetos se asignan por referencia. Cuando un objeto existente se asigna a una nueva variable, ambos apuntan al mismo objeto.
//@version=5
indicator("")
type pivotPoint
int x
float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)
En el siguiente ejemplo, creamos un objeto pivot1 y fijamos su campo x en 1000 ≠. Luego, declaramos que un pivot2 contiene una variable que hace referencia a ese objeto pivot1, por lo que ambos apuntan a la misma instancia. Por lo tanto, cambiar pivot2.x también cambia pivot1.x, ya que ambos hacen referencia a un campo x del mismo objeto ≠.
Para crear una copia independiente del objeto original, en este caso podemos usar el método de copiar () interno. En este ejemplo, declaramos que pivot2 hace referencia a una variable de la instancia de copia del objeto pivot1. Ahora bien, cambiar pivot2.x no cambia pivot1.x, ya que se refiere a un campo de un objeto independiente x:
//@version=5
indicator("")
type pivotPoint
int x
float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)
Tenga en cuenta que el método de copia de TradingView es una copia en blanco. Si el objeto tiene campos de tipo especial (array, etc.), los campos en la copia en blanco del objeto se referirán a la misma instancia que el objeto. La plataforma FMZ permite la copia profunda directamente, sin necesidad de realizar ningún tipo de procesamiento adicional, como se puede ver en los siguientes ejemplos:
Copias profundas
//@version=5
indicator("test deepCopy")
type orderInfo
float price
float amount
type labelInfo
orderInfo order
string labelMsg
labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)
labelInfo1.labelMsg := "labelInfo1->2" // 修改 labelInfo1 的基础类型字段,看是否影响 labelInfo2
labelInfo1.order.price := 999 // 修改 labelInfo1 的复合类型字段,看是否影响 labelInfo2
runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")
El resultado de la prueba, labelInfo.copy ((labelInfo1) se ejecuta como una copia profunda, modificando cualquier campo de labelInfo1 no afectará a labelInfo2。
Los métodos del lenguaje Pine son funciones especializadas asociadas a los tipos incorporados o definidos por el usuario en una instancia específica. En la mayoría de los aspectos, son básicamente las mismas funciones que las funciones regulares, pero ofrecen una sintaxis más corta y más conveniente. Los usuarios pueden acceder a los métodos en las variables directamente con signos de punto, como si accedieran a los campos de los objetos Pine.
Métodos integrados
Por ejemplo, un fragmento de código de este guión:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
array.push(sourceArray, sourceInput)
array.shift(sourceArray)
// Update the mean and standard deviaiton values.
sampleMean := array.avg(sourceArray)
sampleDev := array.stdev(sourceArray) * multiplier
// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
El equivalente se puede traducir como:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
sourceArray.push(sourceInput)
sourceArray.shift()
// Update the mean and standard deviaiton values.
sampleMean := sourceArray.avg()
sampleDev := sourceArray.stdev() * multiplier
// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Se puede ver que PINE apoyaMethods
Después, el código.array.avg(sourceArray)
En el caso de los métodos, se puede escribir en la forma:sourceArray.avg()
。
Atención: FMZ no está disponible por el momentoarray.avg
Es una llamada.
Métodos definidos por el usuario
El método de definición es esencialmente el mismo que la función de definición, pero con dos diferencias clave:
Por ejemplo, el siguiente código contiene el código para el cálculo de la medición de Bryn como un método personalizado por el usuario:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
sourceArray.push(sourceInput)
sourceArray.shift()
// Update the mean and standard deviaiton values.
sampleMean := sourceArray.avg()
sampleDev := sourceArray.stdev() * multiplier
// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Se ha modificado a:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
method maintainQueue(array<float> srcArray, float value, bool takeSample = true) =>
if takeSample
srcArray.push(value)
srcArray.shift()
srcArray
method calcBB(array<float> srcArray, float mult, bool calculate = true) =>
var float mean = na
var float dev = na
if calculate
mean := srcArray.avg()
dev := srcArray.stdev() * mult
[mean, mean + dev, mean - dev]
bool newSample = bar_index % n == 0
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Se puede ver que el primer parámetro en la lista de parámetros de calcBB esarray<float>
El tipo ≠ indica que el método esarray<float>
El método de la variable de tipo, por lo que se puede ver la invocación del siguiente código para calcular el indicador de Brin.
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)
Recarga de métodos
Los métodos definidos por el usuario pueden sobreponerse y sobrecargar métodos ya existentes con el mismo identificador y definidos por el usuario. Esta función permite a los usuarios definir, bajo el mismo nombre de método, varias rutinas asociadas con diferentes firmas de parámetros. Como un simple ejemplo, supongamos que queremos definir un método para identificar el tipo de variable.
//@version=5
indicator("Type Inspection")
// @function Identifies an object's type.
// @param this Object to inspect.
// @returns (string) A string representation of the type.
method getType(int this) =>
na(this) ? "int(na)" : "int"
method getType(float this) =>
na(this) ? "float(na)" : "float"
method getType(bool this) =>
na(this) ? "bool(na)" : "bool"
method getType(color this) =>
na(this) ? "color(na)" : "color"
method getType(string this) =>
na(this) ? "string(na)" : "string"
a = 1 // a.getType(): float
b = 1.0 // b.getType(): float
c = true // c.getType(): bool
d = color.white // d.getType(): string(na)
e = "1" // e.getType(): string
runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")
Determinación del tipo básico de cada variablegetType()
¿Qué tipo de carga se usará? En la plataforma FMZ, los tipos de valores se juzgan como datos de tipo flotante porque el substrato de los scripts PINE se implementa en el lenguaje Javascript.
Cuando se llama a una función se transmiten los parámetros, se puede especificar el nombre de la asignación de parámetros, se puede transmitir la variable directamente en la posición de los parámetros correspondientes, también se admite el uso mixto. Por ejemplo:
plot(close, title="test plot") // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"
Una vez asignado el nombre del parámetro, no se puede transmitir directamente la variable como parámetro, y los parámetros posteriores deben escribirse en forma de asignación del nombre del parámetro.
// plot(close, title="test", color.red) // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red) // 正确写法
Se transmitirá atimeframe
El período de tiempo de los parámetros se convierte en segundos.
timeframe.in_seconds(timeframe)
Ejemplo
// Get chart timeframe:
i_tf = input.timeframe("1D")
// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)
plot(tf)
Devuelve el valor
timeframe
El número de segundos en una línea K de int representa la forma ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠ ≠
parámetro
timeframe
(simple string) Período de tiempo。 opcional。 el valor por defecto es timeframe.period。Las notas
Para eltimeframe
>= La función ‘1M’ calcula el número de segundos en función de los 30.4167 (365⁄12) días de un mes.
Véase también
input.timeframe
timeframe.period
La creación de un identificador de código solicita el valor de la línea K de la media lisa.
ticker.heikinashi(symbol)
Ejemplo
heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)
Devuelve el valor El valor de la cadena de código de la acción puede ser proporcionado a la función request.security。
parámetro
symbol
(simple string) Identificador de código de mercancía。Véase también
syminfo.tickerid
syminfo.ticker
request.security
Solicitud de datos externos
request.data(url, attribute)
Ejemplo
/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/
var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice
plot(diff, "永续-现货差价")
plot(futuresPrice, "期货价格", overlay=true)
plot(spotPrice, "现货价格", overlay=true)
if diff > 80 and strategy.position_size >= 0
runtime.log("diff > 80")
strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
runtime.log("diff < 60")
strategy.entry("Enter Short", strategy.long)
Devuelve el valor
parámetroattribute
Serie de datos designada
parámetro
url
(simple string) La url de la fuente de datos de la solicitud, el formato de datos de la respuesta de la fuente de datos debe cumplir con los requisitos (incluyendo al menos las propiedades time, data):{"data": [], "schema": ["time", "data"]}
◦ Los formatos de datos de los ejemplos: {
"data": [
[1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
[1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
// ...
],
"schema": ["time", "data"]
}
attribute
(simple string) Especifica el nombre de la propiedad y devuelve los datos requeridos. Por ejemplo:"$.spot_close_price"
,usar$.
Como prefijo, los nombres de las propiedades coinciden con las propiedades en los campos de datos en los datos a los que se responde cuando se solicita la fuente de datosSi el mensaje es incorrecto, hay que comprobarlo.request.data
Si el rango de tiempo de la solicitud coincide con el rango de tiempo de la configuración de retroceso, se producirá un error al no consultar los datos en la secuencia de tiempo de retroceso.
En este ejemplo, la instrucción data-data de la consulta de datos de la instrucción SQL:
WITH latest_data AS (
SELECT
klines.spot_1d.Time AS time,
CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
FROM
klines.spot_1d
JOIN
klines.future_1d
ON
klines.spot_1d.Time = klines.future_1d.Time
WHERE
klines.spot_1d.Symbol = 'btc_usdt'
AND
klines.future_1d.Symbol = 'btc_usdt.swap'
AND
klines.spot_1d.Exchange = 'Binance'
AND
klines.future_1d.Exchange = 'Binance'
ORDER BY
klines.spot_1d.Time DESC
LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;
Se puede encontrar en FMZ.Exploración de datosConsultar páginas, crear enlaces de datos, como en el ejemplohttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data
。
Se requiere otra variedad/resolución
request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency)
Ejemplo
s = request.security(syminfo.tickerid, "D", close) // 1 Day
plot(s)
expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)
// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)
Devuelve el valor Serie de requerimientos
parámetro
symbol
(simple string) Código del producto.timeframe
(simple string) Período de tiempo △ La cadena vacía se interpretará como el período de tiempo actual de la tabla △expression
(series int/float/bool/color) se puede calcular y devolver una expresión desde la invocación request.security. Puede ser una serie o un subgrupo que contiene elementos que se pueden convertir en series.gaps
(barmerge_gaps) Da la estrategia de fusión de datos solicitada (que requiere que los datos se fusionen automáticamente con la serie principal de datos de OHLC). Valores posibles: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - los datos solicitados se fusionan con los posibles huecos (valores na). barmerge.gaps_off - los datos solicitados se fusionan continuamente, todos los huecos se llenan con los valores existentes más recientes. El valor predeterminado es barmerge.gaps_off.lookahead
(barmerge_lookahead) Da la estrategia de fusión de datos solicitada. Valores posibles: barmerge.lookahead_on, barmerge.lookahead_off. Desde la versión 3, el valor por defecto es barmerge.lookahead_off. Tenga en cuenta que el comportamiento es el mismo que en tiempo real, solo que es diferente en el historial.ignore_invalid_symbol
(const bool) Un parámetro opcional. Si no se encuentra el producto especificado, determina el comportamiento de la función: si es false, el script se detiene y devuelve error al ejecutarse; si es true, la función devuelve na y continúa ejecutándose. El valor por defecto es false.currency
(simple string) Convierte el valor de referencia monetaria de la mercancía (por ejemplo, OHLC) en moneda. Luego calcula el valor después de la conversión (expression. La tasa de conversión utilizada se basa en el tipo de cambio diario del día anterior de la pareja FX_IDC () con respecto a la línea K que se calcula).Las notas
El código de PineScript que usa esta función puede hacer diferentes cálculos para el registro histórico y los datos en tiempo real.
Si desea especificar parámetros adicionales para la mercancía solicitada, como el tiempo de transacción o el tipo de ajuste, puede usar la función ticker.new ().
No se puede usar la variable ‘ticker’ para transmitir el diferencial a esta función. Se puede usar la variable ‘ticker.new’ o la representación en forma de una cadena de código de acciones, por ejemplo AAPL+MSFT*TSLA”。
En la actualidad, una secuencia de comandos puede tener un máximo de 40 invocaciones request.security.
Tenga en cuenta que el uso de esta variable/función puede causar que el indicador sea rediseñado.
Los parámetros de resolución permitidos son:
1S, 5S, 15S, 30S - Intervalo de segundos (el período de la gráfica debe ser menor o igual al período solicitado)
Desde 1 hasta 1440 minutos
Desde 1 D hasta 365 Días
Unas semanas de 1W a 52W
De 1M a 12M en unos meses
Véase también
syminfo.ticker
syminfo.tickerid
timeframe.period
ta.correlation
barmerge.lookahead_off
barmerge.lookahead_on
Si es asísource
Las cadenas contienenstr
Si la secuencia de caracteres es una secuencia de caracteres, entonces devuelve true, y si no, devuelve false.
str.contains(source, str)
Ejemplo
// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)
Devuelve el valor
Si en elsource
Encontrado en la cadenastr
, es verdadero, o es falso.
parámetro
source
(series string) Fuente de la cadenastr
(series string) La secuencia de caracteres que se quiere buscar.Véase también
str.pos
str.match
Si es asísource
Las cadenas sonstr
Si la secuencia de caracteres se termina con un número determinado, se devuelve true, y si no, se devuelve false.
str.endswith(source, str)
Devuelve el valor
Si es asísource
Las cadenas sonstr
La secuencia de caracteres que se especifica en el extremo es verdadera o falsa.
parámetro
source
(series string) Fuente de la cadenastr
(series string) La secuencia de caracteres que se quiere buscar.Véase también
str.startswith
Si es asísource
Las cadenas sonstr
Si la secuencia de caracteres se inicia con un número determinado, se devuelve true, y si no, se devuelve false.
str.startswith(source, str)
Devuelve el valor
Si es asísource
Las cadenas sonstr
La secuencia de caracteres especificada en el substring comienza con true y termina con false.
parámetro
source
(series string) Fuente de la cadenastr
(series string) La secuencia de caracteres que se quiere buscar.Véase también
str.endswith
Regresa una nueva cadena, que essource
Las subcadenas de una cadena.begin_pos
Comienza con un carácter en el índice designado y se extiende asource
El ‘end_pos - 1’ de la cadena
str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)
Ejemplo
sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":") // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
runtime.log(tkr)
Devuelve el valor Se extrae una subcadena de la cadena fuente.
parámetro
source
(series string) La cadena de origen de la cual se extrae la cadena de subcadenas。begin_pos
(series int) La posición inicial de la subcadena extraída. Es exclusivo (la subcadena extraída incluye los caracteres de esa posición).end_pos
(series int) La posición de terminación。 es exclusiva (la cadena extraída no incluye los caracteres de esa posición)。 es opcional。 el valor por defecto essource
La longitud de la cadena de caracteres.Las notas
El índice de la cadena comienza en 0.begin_pos
igualend_pos
, la función devuelve una cadena de caracteres en blanco.
Véase también
str.contains
str.pos
str.match
str.tonumber(string)
Devuelve el valor Si contiene números válidos, es el tipo de flotación de la cadena, de lo contrario es na。
parámetro
string
(series string) Es una forma de representación de una cadena de int o float.Convierte las cadenas de formato y los valores en cadenas de formato. Las cadenas de formato pueden contener texto y un paréntesis en los paréntesis {} de cada valor que se desea formatear. Cada paréntesis incluye el índice de los parámetros necesarios que se reemplazarán por él (comenzando por 0), y un indicador de formato opcional. El índice indica la ubicación del parámetro en la lista de parámetros str.format.
str.format(formatString, arg0, arg1, ...)
Ejemplo
// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)
// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)
// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)
// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)
// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)
// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)
// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)
// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)
// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)
Devuelve el valor Las cadenas de caracteres formateadas.
parámetro
formatString
(series string) El formato de la cadena de caracteres es .arg0, arg1, ...
(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) Valor que se desea formatear.Las notas Todos los paréntesis en los estilos no citados deben mantenerse equilibrados. Por ejemplo, “ab {0} de” y “ab ‘}’ de” son estilos válidos, pero “ab {0’}’ de”, “ab } de” y “”{“” no son estilos válidos.
Devuelve el número entero que corresponde al número de caracteres de la cadena.
str.length(string)
Devuelve el valor Número de caracteres en la cadena de origen.
parámetro
string
(series string) Fuente de la cadenaDevuelve una nueva cadena en la que todas las letras se convierten en minúsculas.
str.lower(source)
Devuelve el valor Todas las letras se convierten en una nueva cadena de letras minúsculas .
parámetro
source
(series string) La cadena que se quiere convertir.Véase también
str.upper
Devuelve una nueva cadena en la que todas las letras se convierten en mayúsculas.
str.upper(source)
Devuelve el valor Todas las letras se convierten en nuevas cadenas de letras mayúsculas.
parámetro
source
(series string) La cadena que se quiere convertir.Véase también
str.lower
Si coincideregex
Expresiones regulares que se devuelvensource
La nueva subcadena de la cadena, de lo contrario, devuelve ‘na’。
str.match(source, regex)
Ejemplo
s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")
// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")
if barstate.islastconfirmedhistory
runtime.log(tickerid) // "EXCHANGE_NAME:SYMBOL_NAME"
Devuelve el valor
source
La nueva subalterna de la cadena, si coincide con unaregex
La expresión regular, de lo contrario es ‘na’.
parámetro
source
(series string) Fuente de la cadenaregex
(series string) Expresión regular que coincide con esta cadena de caracteres ≠Las notas
Función devuelvesource
Expresión regular que aparece por primera vez en la cadena:
regex
Los signos de contraseña <unk> en las cadenas requieren el uso de contraseñas adicionales para la traducción, por ejemplo, \d representa la expresión regular \d。
Véase también
str.contains
str.substring
Regresósource
Aparece por primera vez en la cadenastr
La ubicación de la cadena, de lo contrario se devuelve ‘na’
str.pos(source, str)
Devuelve el valor
str
La cadena está ensource
Posiciones en la cadena
parámetro
source
(series string) Fuente de la cadenastr
(series string) La secuencia de caracteres que se quiere buscar.Las notas El índice de la cadena comienza en 0.
Véase también
str.contains
str.match
str.substring
Devuelve una nueva cadena en la que aparecen las primeras N+1target
Las secuencias de caracteres y las que aparecieron antestarget
Se sustituye porreplacement
Las cadenas, donde N está enoccurrence
Se especifica que .N es el índice de coincidencia que aparece en la cadena de origen de la cadena de destino a reemplazar.
str.replace(source, target, replacement, occurrence)
Ejemplo
var source = "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
// Replace first occurrence of "EXCHANGE1" with "EXCHANGE2" replacement string
var newSource = str.replace(source, "EXCHANGE1", "EXCHANGE2", 0)
if barstate.islastconfirmedhistory
// Display "EXCHANGE2:SYMBOL1 / EXCHANGE1:SYMBOL2"
runtime.log(newSource)
Devuelve el valor Cuerdas tratadas
parámetro
source
(series string) Fuente de la cadenatarget
(series string) es sustituido por una cadenareplacement
(series string) La cadena que se inserta en lugar de la cadena de destino.occurrence
(series int) La cadena de destino a reemplazar es el índice de coincidencia que aparece en la cadena de origen. El primer índice de coincidencia comienza con 0.Véase también
str.replace_all
str.match
Reemplaza las cadenas de destino que aparecen en cada una de las cadenas de origen.
str.replace_all(source, target, replacement)
Devuelve el valor Cuerdas tratadas
parámetro
source
(series string) Fuente de la cadenatarget
(series string) es sustituido por una cadenareplacement
(series string) Cada vez que aparece la cadena de destino se sustituye por la cadenaDivide las cadenas en sub-arreglos y devuelve su ID de la matriz.
str.split(string, separator)
Devuelve el valor El ID de la serie de cadenas de caracteres.
parámetro
string
(series string) Fuente de la cadenaseparator
(series string) Las cadenas que separan cada una de las sub cadenas.str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)
Devuelve el valor
value
Las cadenas de los parámetros se expresan en la forma:
Si es asívalue
Si el parámetro es una cadena, se devuelve como es.
Cuandovalue
Para na, la función devuelve la cadena NaN.
parámetro
value
(series int/float/bool/string/int[]/float[]/bool[]/string[]) Su elemento se convierte en el valor de la cadena o en el ID de la matriz.format
(series string) Format string. Accepts these format.* constants: format.mintick, format.percent, format.volume. Optional. The default value is ‘#.##########’.Las notas Los formatos con valores de punto flotante también se encuadran en estos valores cuando es necesario, por ejemplo, str.tostring ((3.99, ‘#’) devolverá 4。 Para mostrar el cero, utilice ‘0’ en lugar de ‘#’. Por ejemplo, ‘#.000’. Cuando se usa format.mintick, el valor se redondea hasta el número más cercano al que se puede dividir sin restes con syminfo.mintick. La secuencia de caracteres devuelta tiene un cero a continuación. Si el valor de x es una cadena, se devuelve el mismo valor de la cadena. Los parámetros de tipo Bool devuelven true o false. Cuando x es na, la función devuelve NaN。
El color de la función especifica la transparencia aplicada al color dado.
color.new(color, transp)
Ejemplo
plot(close, color=color.new(color.red, 50))
Devuelve el valor El color tiene una cierta transparencia.
parámetro
color
(series color)transp
(series int/float) Los valores disponibles van desde 0 (no transparente) hasta 100 (no visible)Las notas El uso de un número extraordinario de parámetros (por ejemplo, simple, input o series) afectará el color que se muestra en la página de etiquetas de configuración / estilo de la barra de script. Consulte el manual del usuario para obtener más información.
Utiliza el modelo de color RGB para crear nuevos colores con transparencia.
color.rgb(red, green, blue, transp)
Ejemplo
plot(close, color=color.rgb(255, 0, 0, 50))
Devuelve el valor El color tiene una cierta transparencia.
parámetro
red
(series int/float) Tono rojo. Los valores posibles son desde 0 hasta 255green
(series int/float) Tono verde. Los valores posibles son desde 0 hasta 255blue
(series int/float) Tono azul. Los valores posibles son desde 0 hasta 255transp
(series int/float) opcional. El color es transparente. Los valores posibles van desde 0 (no transparente) hasta 100 (transparente). El valor predeterminado es 0 (transparente).Las notas El uso de un número extraordinario de parámetros (por ejemplo, simple, input o series) afectará el color que se muestra en la página de etiquetas de configuración / estilo de la barra de script. Consulte el manual del usuario para obtener más información.
Imprimir la información de las variables en el mando.
FMZ PINE tiene una función específica para el lenguaje.runtime.debug(value)
, sólo tiene un parámetro.
La salida de contenido en el diario.
FMZ PINE tiene una función específica para el lenguaje.runtime.log(1, 2, 3, close, high, ...)
Se puede pasar varios parámetros.
Cuando se llama, puede causar errores en el tiempo de ejecución y conlleva unamessage
Mensaje de error especificado en el parámetro.
runtime.error(message)
parámetro mensaje (series string) mensaje de error
Añade input a la página de etiquetas de entrada de la configuración del script, lo que le permite a los usuarios del script ofrecer opciones de configuración. Esta función detecta automáticamente el tipo de parámetros para la barra de defval y utiliza el plugin de entrada correspondiente.
input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)
Ejemplo
i_switch = input(true, "On/Off") // 设置true,默认勾选
plot(i_switch ? open : na)
i_len = input(7, "Length")
i_src = input(close, "Source") // 下拉框,默认选择close
plot(ta.sma(i_src, i_len))
i_col = input(color.red, "Plot Color")
plot(close, color=i_col)
i_text = input("Hello!", "Message")
runtime.log(i_text)
Devuelve el valor Valor de la variable de entrada
parámetro
defval
(const int/float/bool/string/color or source-type built-ins) Determina el valor predeterminado de la variable de entrada recomendada en la página de etiquetas de la barra de configuración / entrada de la barra de entrada del guión, desde la que los usuarios del guión pueden cambiarla. La función de inclusión de tipo de origen es una serie de variables de inclusión de la barra de flotación que especifica la fuente de cálculo:close
、hlc3
Y así.title
(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。tooltip
(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.inline
(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.group
(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.Las notas El valor devuelto por la función de entrada siempre debe asignarse a la variable. Ver el ejemplo anterior
Véase también
input.bool
input.color
input.int
input.float
input.string
input.timeframe
input.source
Añade la entrada a la página de etiquetas de entrada de la configuración del script, que le permite proporcionar opciones de configuración al usuario del script. Esta función añade un menú de caída que permite al usuario seleccionar el origen de cálculo, por ejemplo, close, hl2 etc. Si el script contiene solo una llamada input.source (), el usuario también puede seleccionar otro indicador en la tabla como fuente de salida.
input.source(defval, title, tooltip, inline, group)
Ejemplo
i_src = input.source(close, "Source")
plot(i_src)
Devuelve el valor Valor de la variable de entrada
parámetro
defval
(series int/float) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de la barra / barra de entrada del guión, desde la que el usuario puede cambiarla.title
(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。tooltip
(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.inline
(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.group
(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.Las notas El resultado de la función input.source siempre debe asignarse a una variable, como en el ejemplo anterior.
Véase también
input.bool
input.int
input.float
input.string
input.timeframe
input.color
input
Añade input a la tarjeta de opciones de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega el campo de entrada de la cadena a la entrada del script.
input.string(defval, title, options, tooltip, inline, group, confirm)
Ejemplo
i_text = input.string("Hello!", "Message")
runtime.log(i_text)
Devuelve el valor Valor de la variable de entrada
parámetro
defval
(const string) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del script, desde la que el usuario puede cambiarla. Cuando la lista de valores se corresponde conoptions
Cuando los parámetros se usan juntos, el valor debe ser uno de ellos.title
(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。options
(List of constants: [<type>…]) una lista de opciones disponibles para elegir.tooltip
(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.inline
(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.group
(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.Las notas El resultado de la función input.string siempre debe asignarse a una variable, como en el ejemplo anterior.
Véase también
input.bool
input.int
input.float
input.timeframe
input.source
input.color
input
Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función añade una marca de selección a la entrada del script.
input.bool(defval, title, tooltip, inline, group, confirm)
Ejemplo
i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)
Devuelve el valor Valor de la variable de entrada
parámetro
defval
(const bool) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del script, desde la que el usuario puede cambiarla.title
(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。tooltip
(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.inline
(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.group
(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.Las notas El resultado de la función input.bool siempre debe asignarse a una variable, como en el ejemplo anterior.
Véase también
input.int
input.float
input.string
input.timeframe
input.source
input.color
input
Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega el campo de entrada entero a la entrada del script.
input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.int(defval, title, options, tooltip, inline, group, confirm)
Ejemplo
i_len1 = input.int(10, "Length 1", minval=5, maxval=21, step=1)
plot(ta.sma(close, i_len1))
i_len2 = input.int(10, "Length 2", options=[5, 10, 21])
plot(ta.sma(close, i_len2))
Devuelve el valor Valor de la variable de entrada
parámetro
defval
(const int) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del script, desde la cual el usuario del script puede cambiarla. Cuando la lista de valores es igual aoptions
Cuando los parámetros se usan juntos, el valor debe ser uno de ellos.title
(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。minval
(const int) El valor mínimo posible de la variable de entrada。 opcional。maxval
(const int) El valor máximo posible de la variable de entrada。 opcional。step
(const int) La longitud de paso para aumentar/reducir la entrada es opcional. El valor por defecto es 1options
(tuple of const int values: [val1, val2, …]) Lista de opciones seleccionadas desde el menú desplegable, separadas por comillas y rodeadas de paréntesis cuadradas:[val1, val2, …] ≠ no se puede usar cuando se usa este parámetrominval
、maxval
ystep
Parámetrostooltip
(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.inline
(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.group
(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.Las notas El resultado de la función input.int siempre debe asignarse a una variable, como en el ejemplo anterior.
Véase también
input.bool
input.float
input.string
input.timeframe
input.source
input.color
input
Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega el campo de entrada de flotación a la entrada del script.
input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.float(defval, title, options, tooltip, inline, group, confirm)
Ejemplo
i_angle1 = input.float(0.5, "Sin Angle", minval=-3.14, maxval=3.14, step=0.02)
plot(math.sin(i_angle1) > 0 ? close : open, "sin", color=color.green)
i_angle2 = input.float(0, "Cos Angle", options=[-3.14, -1.57, 0, 1.57, 3.14])
plot(math.cos(i_angle2) > 0 ? close : open, "cos", color=color.red)
Devuelve el valor Valor de la variable de entrada
parámetro
defval
(const int/float) Determina el valor predeterminado de la variable de entrada recomendada en la etiqueta de configuración de barra / barra de entrada del guión, desde el cual el usuario del guión puede cambiarlo. Cuando la lista de valores es igual aoptions
Cuando los parámetros se usan juntos, el valor debe ser uno de ellos.title
(const string) Título de la entrada。 Si no se especifica, el nombre de la variable se utiliza como título de la entrada。 Si se especifica el título, pero el título es vacío, el nombre será una cadena de caracteres vacío。minval
(const int/float) El valor mínimo posible de la variable de entrada。 es opcional。maxval
(const int/float) El valor máximo posible de la variable de entrada。 opcional。step
(const int/float) Se usa para incrementar/reducir la longitud de paso de la entrada. Opcional. El valor predeterminado es 1options
(tuple of const int/float values: [val1, val2, …]) Lista de opciones seleccionadas desde el menú desplegable, separadas por comillas y rodeadas de paréntesis cuadradas:[val1, val2, …] ≠ no se puede usar cuando se usa este parámetrominval
、maxval
ystep
Parámetrostooltip
(const string) Esta cadena se muestra al usuario cuando el ratón se cuelga en el icono de sugerencias de herramientas.inline
(const string) Combina todas las invocaciones de entrada que usan el mismo parámetro en una línea. No muestra las cadenas que se usan como parámetros. Se utiliza solo para identificar las entradas que pertenecen a la misma línea.group
(const string) Utiliza la misma cadena numérica de parámetros combinados para crear encabezados por encima de todas las entradas. Esta cadena también se usa como texto de encabezado.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador a la tabla. El valor predeterminado es falso.Las notas El resultado de la función input.float siempre debe asignarse a una variable, como en el ejemplo anterior.
Véase también
input.bool
input.int
input.string
input.timeframe
input.source
input.color
input
Añade input a la página de etiquetas de entrada de la configuración del script, que le permite a los usuarios del script ofrecer opciones de configuración. Esta función agrega un selector de color que permite al usuario elegir el color