Modificar los valores 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")
El valor de un campo de objetos se puede cambiar utilizando el:=
operador de reasignación.
Colección de objetos
El ejemplo declara una matriz vacía que tendrá objetos del tipo de orden 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 bien
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")
Copia el objeto
En Pine, los objetos se asignan por referencia. Cuando un objeto existente se asigna a una nueva variable, ambos hacen referencia 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 una variable pivot2 que contiene una referencia al objeto pivot1, por lo que ambos apuntan a la misma instancia. Por lo tanto, cambiar pivot2.x también cambia pivot1.x, porque ambos se refieren al campo x del mismo objeto.
Para crear una copia que sea independiente del objeto original, en este caso podemos usar el método de copia incorporada ((). En este ejemplo, declaramos la variable pivot2 para referirse a la instancia copiada del objeto pivot1. Ahora, cambiar pivot2.x no cambiará pivot1.x, porque se refiere al campo x de un objeto separado:
//@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)
Cabe señalar que el método de copia de TradingView es una copia superficial. Si un objeto tiene tipos especiales de campos (array, etc.), estos campos en la copia superficial del objeto apuntarán a la misma instancia que el objeto. La plataforma FMZ implementa directamente la copia profunda, y no se requiere procesamiento adicional.
Copia profunda
//@version=5
indicator("test deepCopy")
type orderInfo
float price
float amount
type labelInfo
orderInfo order
string labelMsg
labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)
labelInfo1.labelMsg := "labelInfo1->2" // Modify the base type field of labelInfo1 to see if it affects labelInfo2
labelInfo1.order.price := 999 // Modify the composite type field of labelInfo1 to see if it affects labelInfo2
runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")
Los resultados de las pruebas muestran que labelInfo.copy ((labelInfo1) es una copia profunda cuando se ejecuta, y la modificación de cualquier campo de labelInfo1 no afectará a labelInfo2.
Los métodos en el lenguaje Pine son funciones especializadas asociadas a una instancia específica de un tipo integrado o definido por el usuario. En la mayoría de los aspectos, son esencialmente iguales a las funciones regulares, pero proporcionan una sintaxis más corta y conveniente. Los usuarios pueden acceder a los métodos directamente en las variables utilizando la notación de puntos, al igual que acceden a los campos de los objetos de Pine. Pine incluye métodos incorporados para todos los tipos especiales, incluidos matrices, matrices, mapas, líneas, líneas de relleno, y más. Estos métodos proporcionan a los usuarios una forma más concisa de llamar a programas especializados de estos tipos en scripts.
Métodos incorporados
Por ejemplo, un código de script como este:
//@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)
Se puede reescribir de manera equivalente 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 después de PINE apoyaMethods
, el códigoarray.avg(sourceArray)
puede escribirse en forma de métodos:sourceArray.avg()
- ¿ Por qué?
Tenga en cuenta que FMZ no admite llamadas comoarray.avg
currently.
Métodos definidos por el usuario
Pine permite a los usuarios definir métodos personalizados que funcionan con objetos de cualquier tipo integrado o definido por el usuario.
En el caso de los instrumentos financieros, el valor de los activos financieros de la entidad que no son objeto de una cobertura de riesgo será el valor de los activos financieros de la entidad que no son objeto de una cobertura de riesgo.
//@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)
Modificado para:
//@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)
Puede ver que el primer parámetro en la lista de parámetros de los métodos definidos por el usuario declarados con el método de la palabra clave: maintainQueue y calcBB es del tipoarray<float>
, lo que significa que el método es un método de una variable de tipoarray<float>
, por lo que se puede ver que el siguiente código se llama para calcular el indicador de Bollinger.
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)
Métodos de sobrecarga
Los métodos definidos por el usuario pueden anular y sobrecargar los métodos existentes y los métodos definidos por el usuario con el mismo identificador. Esta característica permite a los usuarios definir múltiples rutinas asociadas con diferentes firmas de argumentos bajo el mismo nombre de método. Como ejemplo simple, supongamos que queremos definir un método para identificar el tipo de una variable. Dado que debemos especificar explícitamente el tipo de objeto asociado con un método definido por el usuario, debemos definir sobrecargas para cada tipo que queremos que reconozca. A continuación, definimos un método getType() que devuelve una representación de cadena de un 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")
El tipo de base de cada variable determina qué sobrecarga degetType()
En la plataforma FMZ, dado que la implementación subyacente de los scripts PINE es Javascript, el tipo numérico se juzgará como datos de coma flotante (float).
Cuando se llama una función, se pueden pasar argumentos. Se pueden asignar nombres de argumentos para asignar valores. Se pueden pasar directamente variables en las posiciones de argumentos correspondientes. También se admite el uso mixto. Por ejemplo:
plot(close, title="test plot") // Pass the argument close directly; specify the argument title and assign the string "test plot"
Después de especificar la asignación de nombre de argumento, ya no se puede pasar directamente la variable como un argumento, y los argumentos posteriores deben escribirse en la forma de asignación de nombre de argumento.
// plot(close, title="test", color.red) // Although the third argument of plot is the color value, but this will report an error
plot(close, title="test", color=color.red) // Correct writing
plot(close, "test", color.red) // Correct writing
Convertir el período de tiempo pasado en eltimeframe
el argumento 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)
Las devolucionesUna representación int del número de segundos en una barra de untimeframe
.
Argumentos
timeframe
(simple cadena) marco de tiempo. opcional. el valor predeterminado es marco de tiempo. período.Las observacionesPara eltimeframe
La función >=
Véase también
input.timeframe
timeframe.period
Crea un identificador de ticker para solicitar un valor de representación de int promedio suavizado.
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)
Las devolucionesValor de cadena del código de acciones que se puede suministrar a la función request.security.
Argumentos
symbol
Identificador del código del producto (simple string).Véase también
syminfo.tickerid
syminfo.ticker
request.security
Solicitar 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, "perpetual-spot difference")
plot(futuresPrice, "futures prices", overlay=true)
plot(spotPrice, "spot prices", overlay=true)
if diff > 80 and strategy.position_size >= 0
runtime.log("diff > 80")
strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
runtime.log("diff < 60")
strategy.entry("Enter Short", strategy.long)
Valor de retornoEl argumento de atributo especifica la serie de datos.
Argumentos
url
(simple string) La dirección URL de la fuente de datos solicitada y el formato de datos de la respuesta de la fuente de datos deben cumplir los requisitos (incluyendo al menos el tiempo y los atributos de datos):{"data": [], "schema": ["time", "data"]}
Puede consultar el formato de datos en el ejemplo:
{
"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 del atributo y devuelve los datos requeridos."$.spot_close_price"
, el uso$.
como el prefijo, y el nombre del atributo es consistente con el atributo en el campo de datos en los datos en la respuesta al solicitar la fuente de datos
Si se muestra un error, debe comprobar si el intervalo de tiempo solicitado porrequest.data
Si no se pueden consultar datos en la serie de tiempo de backtest, se notificará un error.
La instrucción SQL de consulta de datos de datos de datos en este ejemplo es:
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;
Puede consultar y crear enlaces de datos en elExploración de datosEn la página de la plataforma FMZ, que es lahttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data
utilizado en el ejemplo.
Pida 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)
Las devolucionesSerie solicitada
Argumentos
symbol
Es un símbolo.timeframe
(cuadra simple) Período de tiempo. Una cadena vacía se interpreta como la resolución actual del gráfico.expression
(serie int/float/bool/color) Una expresión puede ser calculada y devuelta desde la llamada request.security. Puede ser una serie o un tuplo que contiene elementos que pueden ser lanzados a la serie.gaps
(barmerge_gaps) Estrategia de fusión para los datos solicitados (los datos solicitados se fusionan automáticamente con los datos OHLC de la serie principal). Valores posibles: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - los datos solicitados se fusionan con posibles lagunas (no hay valores). barmerge.gaps_off - los datos solicitados se fusionan continuamente sin lagunas, todos los huecos se llenan con los valores existentes anteriores más cercanos. El valor predeterminado es barmerge.gaps_off.lookahead
(barmerge_lookahead) Estrategia de fusión para la posición de datos solicitada. Valores posibles: barmerge.lookahead_on, barmerge.lookahead_off. El valor predeterminado es barmerge.lookahead_off a partir de la versión 3. Tenga en cuenta que el comportamiento es el mismo en tiempo real y solo difiere en el historial.ignore_invalid_symbol
(const bool) Un argumento opcional. Determina el comportamiento de la función si no se encuentra el símbolo especificado: si es falso, el script se detendrá y devolverá un error de tiempo de ejecución; si es verdad, la función devolverá na y la ejecución continuará. El valor predeterminado es falso.currency
(simple string) Moneda en la que se deben convertir los valores relacionados con la moneda del símbolo (por ejemplo OHLC).expression
Los tipos de conversión utilizados se basan en los tipos diarios de los pares FX_IDCLas observacionesEl código PineScript que utiliza esta función podría calcular de manera diferente en el historial y los datos en tiempo real.
Si desea especificar argumentos adicionales para el símbolo solicitado, por ejemplo, sesión o tipo de ajuste, puede utilizar elticker.new() función.
No es posible pasar una extensión a esta función usando la variable
Los valores permitidos del argumento de resolución son: 1S, 5S, 15S, 30S - para intervalos de segundos (la resolución del gráfico debe ser igual o inferior a la resolución solicitada) de 1 a 1440 para los minutos de 1D a 365D por días de 1W a 52W durante semanas de 1M a 12M durante meses
Véase también
syminfo.ticker
syminfo.tickerid
timeframe.period
ta.correlation
barmerge.lookahead_off
barmerge.lookahead_on
Devuelve verdadero si elsource
la cadena contiene elstr
Substring, falso de lo contrario.
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)
Las devolucionesEs cierto si elstr
se encontró en elsource
la cuerda, falsa de lo contrario.
Argumentos
source
(Sería de la cadena) cadena de origen.str
La subcadena para buscar.Véase también
str.pos
str.match
Devuelve verdadero si elsource
la cadena termina con la subcadena especificada enstr
, falso de lo contrario.
str.endswith(source, str)
Las devolucionesEs cierto si elsource
la cadena termina con la subcadena especificada enstr
, falso de lo contrario.
Argumentos
source
(Sería de la cadena) cadena de origen.str
La subcadena para buscar.Véase también
str.startswith
Devuelve verdadero si elsource
la cadena comienza con la subcadena especificada enstr
, falso de lo contrario.
str.startswith(source, str)
Las devolucionesEs cierto si elsource
la cadena comienza con la subcadena especificada enstr
, falso de lo contrario.
Argumentos
source
(Sería de la cadena) cadena de origen.str
La subcadena para buscar.Véase también
str.endswith
Devuelve una nueva cadena que es una subcadena de lasource
La subcadena comienza con el carácter en el índice especificado porbegin_pos
y se extiende hasta source
string.
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)
Las devolucionesLa subcadena extraída de la cadena de origen.
Argumentos
source
(serie de cadenas) cadena de origen de la cual extraer la subcadena.begin_pos
(series int) La posición inicial de la subcuadra extraída. Es inclusiva (la subcuadra extraída incluye el carácter en esa posición).end_pos
(series int) La posición final. Es exclusiva (la cadena extraída NO incluye ese carácter de posiciónsource
string.Las observacionesLa indexación de cadenas comienza desde 0. Sibegin_pos
es igual aend_pos
, la función devuelve una cadena vacía.
Véase también
str.contains
str.pos
str.match
str.tonumber(string)
Las devolucionesUna versión flotante de la cadena si contiene un número válido, no de otra manera.
Argumentos
string
(serie de cadenas) Representación de una cadena de un int o float.Convierte la cadena de formato y el valor (s) en una cadena formateada. La cadena de formato puede contener texto literal y un marcador de lugar en corchetes rizados {} para cada valor a formatear. Cada marcador de lugar consiste en el índice del argumento requerido (que comienza en 0) que lo reemplazará, y un especificador de formato opcional. El índice representa la posición de ese argumento en la lista de argumentos 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)
Las devolucionesLa cadena formateada.
Argumentos
formatString
(Sería de la cadena) Formatar la cadena.arg0, arg1, ...
(serie int/float/bool/string/na/int[]/float[]/bool[]/string[]) Valores a formatearLas observacionesCualquier correa rizada dentro de un patrón no citado debe estar equilibrada. Por ejemplo,
Devuelve un número entero correspondiente a la cantidad de caracteres en esa cadena.
str.length(string)
Las devolucionesEl número de caracteres en la cadena de origen.
Argumentos
string
(Sería de la cadena) cadena de origen.Devuelve una nueva cadena con todas las letras convertidas a minúsculas.
str.lower(source)
Las devolucionesUna nueva cadena con todas las letras convertidas a minúsculas.
Argumentos
source
(cuerdas de serie) Cuerdas a convertir.Véase también
str.upper
Devuelve una nueva cadena con todas las letras convertidas a mayúsculas.
str.upper(source)
Las devolucionesUna nueva cadena con todas las letras convertidas a mayúsculas.
Argumentos
source
(cuerdas de serie) Cuerdas a convertir.Véase también
str.lower
Devuelve la nueva subcadena delsource
cadena si coincide con unregex
Expresión regular,
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"
Las devolucionesLa nueva subcadena de lasource
cadena si coincide con unregex
Expresión regular,
Argumentos
source
(Sería de la cadena) cadena de origen.regex
(serie de cadenas) La expresión regular a la que esta cadena debe ser emparejada.Las observacionesFunción devuelve la primera aparición de la expresión regular en elsource
la cuerda.
El símbolo regex
string necesita ser escapado con barra de retrocesión adicional, por ejemplo
Véase también
str.contains
str.substring
Devuelve la posición de la primera aparición de lastr
la cuerda en elsource
la cuerda,
str.pos(source, str)
Las devolucionesPosición de la Comisiónstr
la cuerda en elsource
string.
Argumentos
source
(Sería de la cadena) cadena de origen.str
La subcadena para buscar.Las observacionesLa indexación de cadenas comienza en 0.
Véase también
str.contains
str.match
str.substring
Devuelve una nueva cadena con la ocurrencia N + 1 de latarget
cadena y la ocurrencia anterior detarget
cadena sustituida por elreplacement
cadena, donde N se especifica enoccurrence
. N es el índice de coincidencia de la cadena de destino a reemplazar en la cadena de origen.
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 "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
runtime.log(newSource)
Las devolucionesCintura procesada.
Argumentos
source
(Sería de la cadena) cadena de origen.target
(cuerdas de serie) Cuerdas a reemplazar.replacement
(cuadra de serie) Cuadra a insertar en lugar de la cadena de destino.occurrence
(series int) El índice de coincidencia de la ocurrencia de la cadena de destino a reemplazar en la cadena de origen.Véase también
str.replace_all
str.match
Reemplaza cada aparición de la cadena de destino en la cadena de origen con la cadena de reemplazo.
str.replace_all(source, target, replacement)
Las devolucionesCintura procesada.
Argumentos
source
(Sería de la cadena) cadena de origen.target
(cuerdas de serie) Cuerdas a reemplazar.replacement
(serie de cadenas) cadena a sustituir por cada ocurrencia de la cadena de destino.Divide una cadena en una matriz de subcategorias y devuelve su ID de matriz.
str.split(string, separator)
Las devolucionesLa identificación de una matriz de cuerdas.
Argumentos
string
(Sería de la cadena) cadena de origen.separator
La cadena que separa cada una de las subcuerdas.str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)
Las devolucionesLa representación de la cadena de lavalue
El argumento.
Si elvalue
El argumento es una cadena, se devuelve tal como es.
Cuando elvalue
es na, la función devuelve la cadena
Argumentos
value
(serie int/float/bool/string/int[]/float[]/bool[]/string[]) Valor o ID de matriz cuyos elementos se convierten en una cadena.format
(serie de cadenas) Formatar cadena. Acepta estos formatos.* constantes: format.mintick, format.percento, format.volume. Opcional. El valor predeterminado es Las observacionesEl formato de los valores de float también redondeará esos valores cuando sea necesario, por ejemplo str.tostring(3.99,
El color de la función aplica la transparencia especificada al color dado.
color.new(color, transp)
Ejemplo
plot(close, color=color.new(color.red, 50))
Las devolucionesColor con transparencia especificada.
Argumentos
color
(color de la serie)transp
(serie int/float) Los valores posibles van desde 0 (no transparente) hasta 100 (invisible).Las observacionesEl uso de argumentos que no son constantes (por ejemplo,
Crea un nuevo color con transparencia utilizando el modelo de color RGB.
color.rgb(red, green, blue, transp)
Ejemplo
plot(close, color=color.rgb(255, 0, 0, 50))
Las devolucionesColor con transparencia especificada.
Argumentos
red
(serie int/float) Componente de color rojo. Los valores posibles están entre 0 y 255.green
(serie int/float) Componente de color verde. Los valores posibles están entre 0 y 255.blue
(serie int/float) Componente de color azul. Los valores posibles están entre 0 y 255.transp
(serie int/float) Opcional. Transparencia del color. Los valores posibles son de 0 (opaco) a 100 (invisible). El valor predeterminado es 0.Las observacionesEl uso de argumentos que no son constantes (por ejemplo,
Imprima información de variables en la consola.
Funciones específicas del lenguaje FMZ PINE,runtime.debug(value)
, con sólo una discusión.
Contenido de salida en el registro.
Funciones específicas del lenguaje FMZ PINE,runtime.log(1, 2, 3, close, high, ...)
, puede pasar múltiples argumentos.
Cuando se llama, causa un error de tiempo de ejecución con el mensaje de error especificado en elmessage
argument.
runtime.error(message)
ArgumentosMensaje de error (cuadro de series)
Añade una entrada a la pestaña Inputs de los ajustes de tu script, que te permite proporcionar opciones de configuración a los usuarios de script. Esta función detecta automáticamente el tipo de argumento utilizado para
input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)
Ejemplo
i_switch = input(true, "On/Off") // Set true, the default is checked.
plot(i_switch ? open : na)
i_len = input(7, "Length")
i_src = input(close, "Source") // Drop-down box, select close by default.
plot(ta.sma(i_src, i_len))
i_col = input(color.red, "Plot Color")
plot(close, color=i_col)
i_text = input("Hello!", "Message")
runtime.log(i_text)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const int/float/bool/string/color o tipo de fuente incorporado) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña close
, hlc3
, etc.title
(const string) Título de la entrada. Si no se especifica, el nombre de la variable se utiliza como el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.Las observacionesEl resultado de la función de entrada siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.bool
input.color
input.int
input.float
input.string
input.timeframe
input.source
Añade una entrada a la pestaña de entradas de la configuración de su script, lo que le permite proporcionar opciones de configuración a los usuarios del script. Esta función agrega una lista desplegable que permite al usuario seleccionar una fuente para el cálculo, por ejemplo, cerrar, hl2, etc. Si el script incluye solo una llamada de input.source(), el usuario también puede seleccionar una salida de otro indicador en su gráfico como fuente.
input.source(defval, title, tooltip, inline, group)
Ejemplo
i_src = input.source(close, "Source")
plot(i_src)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(series int/float) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña title
(const string) Título de la entrada. Si no se especifica, el nombre de la variable se utiliza como el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.Las observacionesEl resultado de la función input.source siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.bool
input.int
input.float
input.string
input.timeframe
input.color
input
Añade una entrada a la pestaña Inputs de la configuración del script, lo que le permite proporcionar opciones de configuración a los usuarios del script.
input.string(defval, title, options, tooltip, inline, group, confirm)
Ejemplo
i_text = input.string("Hello!", "Message")
runtime.log(i_text)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const string) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña options
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 el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.options
(Lista de constantes: [tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador al gráfico.Las observacionesResultado de la función input.string siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.bool
input.int
input.float
input.timeframe
input.source
input.color
input
Añade una entrada a la pestaña Inputs de los ajustes de su script, que le permite proporcionar opciones de configuración a los usuarios de script.
input.bool(defval, title, tooltip, inline, group, confirm)
Ejemplo
i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const bool) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña title
(const string) Título de la entrada. Si no se especifica, el nombre de la variable se utiliza como el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador al gráfico.Las observacionesEl resultado de la función input.bool siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.int
input.float
input.string
input.timeframe
input.source
input.color
input
Añade una entrada a la pestaña Inputs de la configuración del script, lo que le permite proporcionar opciones de configuración a los usuarios 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))
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const int) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña options
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 el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.minval
(const int) Valor mínimo posible de la variable de entrada.maxval
(const int) Valor máximo posible de la variable de entrada.step
(const int) Valor de paso utilizado para incrementar/decrementar la entrada. Opcional. El valor predeterminado es 1.options
(múltiples de valores de const int: [val1, val2,...]) Una lista de opciones para elegir de un menú desplegable, separadas por comas y incluidas entre paréntesis: [val1, val2,...].minval
, maxval
ystep
los argumentos no se pueden utilizar.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador al gráfico.Las observacionesResultado deinput.intLa función siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.bool
input.float
input.string
input.timeframe
input.source
input.color
input
Añade una entrada a la pestaña Inputs de la configuración del script, lo que le permite proporcionar opciones de configuración a los usuarios 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)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const int/float) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña options
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 el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.minval
(const int/float) Valor mínimo posible de la variable de entrada.maxval
(const int/float) Valor máximo posible de la variable de entrada.step
(const int/float) Valor de paso utilizado para incrementar/decrementar la entrada. Opcional. El valor predeterminado es 1.options
(único de valores const int/float: [val1, val2,...]) Una lista de opciones para elegir en un menú desplegable, separadas por comas y entre paréntesis: [val1, val2,...].minval
, maxval
ystep
los argumentos no se pueden utilizar.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador al gráfico.Las observacionesEl resultado de la función input.float siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.bool
input.int
input.string
input.timeframe
input.source
input.color
input
Añade una entrada a la pestaña Inputs de los ajustes de su script, que le permite proporcionar opciones de configuración a los usuarios de script.
input.color(defval, title, tooltip, inline, group, confirm)
Ejemplo
i_col = input.color(color.red, "Plot Color")
plot(close, color=i_col)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const color) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña title
(const string) Título de la entrada. Si no se especifica, el nombre de la variable se utiliza como el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.confirm
(const bool) Si es verdadero, se le pedirá al usuario que confirme el valor de entrada antes de agregar el indicador al gráfico.Las observacionesEl resultado de la función input.color siempre debe asignarse a una variable, véase los ejemplos anteriores.
Véase también
input.bool
input.int
input.float
input.string
input.timeframe
input.source
input
Añade una entrada de precio a la pestaña confirm = true
activa el modo de entrada interactivo donde se selecciona un precio haciendo clic en el gráfico.
input.price(defval, title, tooltip, inline, group, confirm)
Ejemplo
price1 = input.price(title="Date", defval=42)
plot(price1)
price2 = input.price(54, title="Date")
plot(price2)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const int/float) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña title
(const string) Título de la entrada. Si no se especifica, el nombre de la variable se utiliza como el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.tooltip
(const string) La cadena que se mostrará al usuario al pasar el cursor sobre el icono de la punta de herramienta.inline
(const string) Combina todas las llamadas de entrada usando el mismo argumento en una línea. La cadena utilizada como argumento no se muestra. Solo se utiliza para identificar entradas pertenecientes a la misma línea.group
(const string) Crea un encabezado por encima de todas las entradas usando la misma cadena de argumentos de grupo.confirm
(const bool) Si es verdad, el modo de entrada interactivo está habilitado y la selección se realiza haciendo clic en el gráfico cuando se agrega el indicador al gráfico, o seleccionando el indicador y moviendo la selección después de eso. Opcional. El valor predeterminado es falso.Las observacionesCuando se utiliza el modo interactivo, una entrada de tiempo se puede combinar con una entrada de precio si ambas llamadas de función utilizan el mismo argumento para suinline
argument.
Véase también
input.bool
input.int
input.float
input.string
input.resolution
input.source
input.color
input
Añade una entrada a la pestaña de entradas de la configuración del script, que le permite proporcionar opciones de configuración a los usuarios del script. Esta función agrega una lista desplegable que permite al usuario seleccionar un marco de tiempo específico a través del selector de marco de tiempo y lo devuelve como una cadena. El selector incluye los marcos de tiempo personalizados que un usuario puede haber añadido utilizando la lista desplegable de marco de tiempo del gráfico.
input.timeframe(defval, title, options, tooltip, inline, group, confirm)
Ejemplo
i_res = input.timeframe('D', "Resolution", options=['D', 'W', 'M'])
s = request.security("syminfo.tickerid", i_res, close)
plot(s)
Las devolucionesValor de la variable de entrada.
Argumentos
defval
(const string) Determina el valor predeterminado de la variable de entrada propuesta en la pestaña options
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 el título de la entrada. Si se especifica el título, pero está vacío, el nombre será una cadena vacía.options
(TupEl mendigo¿Por qué las estrategias de la Plaza de Replicación de la estrategia de Pine no pueden ser reales?
Los inventores cuantifican - sueños pequeñosBien, vamos a ver qué pasa.
El mendigoEl rastreador de tendencias optimizado de Zhang
Los inventores cuantifican - sueños pequeñosHola, ¿cuál es la estrategia en concreto?