En la carga de los recursos... Cargando...

FMZ PINE Doc de guión

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2022-04-28 16:05:05, Actualizado: 2024-10-12 17:25:27

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.

Métodos

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.

  1. La palabra clave método debe incluirse antes del nombre de la función.
  2. El tipo del primer parámetro del método debe declararse explícitamente porque representa el tipo de objeto al que se asociará el método.

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 variables y tiene sobrecargas para cinco tipos básicos:

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

Función incorporada

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

plazo de tiempo

tiempo.en_segundos

Convertir el período de tiempo pasado en eltimeframeel 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 eltimeframeLa función >= 1M calcula el número de segundos basándose en 30.4167 (365/12) días del mes.

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

el ticker

ticker.heikinashi

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

  • symbolIdentificador del código del producto (simple string).

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

petición

request.data

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.dataSi 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/datautilizado en el ejemplo.

request.security

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

  • symbolEs 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).expressionLos tipos de conversión utilizados se basan en los tipos diarios de los pares FX_IDC del día anterior (en relación con la barra donde se realiza el cálculo). Opcional. El valor predeterminado es syminfo.currency. Valores posibles: una cadena de tres letras con el código de moneda en el formato ISO 4217 (por ejemplo, USD) o una de las constantes en el espacio de nombres de la moneda.*, por ejemplo, currency.USD.

Las 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 ticker.ticker.new variable o una representación de cadena del marcador, por ejemplo AAPL+MSFT*TSLA. En este momento, hasta 40 solicitudes de seguridad pueden estar presentes en un script. Tenga en cuenta que el uso de esta variable/función puede provocar una nueva pintura del indicador.

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

el

str.contains

Devuelve verdadero si elsourcela cadena contiene elstrSubstring, 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 elstrse encontró en elsourcela cuerda, falsa de lo contrario.

Argumentos

  • source(Sería de la cadena) cadena de origen.
  • strLa subcadena para buscar.

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

str.endswith

Devuelve verdadero si elsourcela cadena termina con la subcadena especificada enstr, falso de lo contrario.

str.endswith(source, str)

Las devolucionesEs cierto si elsourcela cadena termina con la subcadena especificada enstr, falso de lo contrario.

Argumentos

  • source(Sería de la cadena) cadena de origen.
  • strLa subcadena para buscar.

Véase también str.startswith

str.startswith

Devuelve verdadero si elsourcela cadena comienza con la subcadena especificada enstr, falso de lo contrario.

str.startswith(source, str)

Las devolucionesEs cierto si elsourcela cadena comienza con la subcadena especificada enstr, falso de lo contrario.

Argumentos

  • source(Sería de la cadena) cadena de origen.
  • strLa subcadena para buscar.

Véase también str.endswith

str.substring

Devuelve una nueva cadena que es una subcadena de lasourceLa subcadena comienza con el carácter en el índice especificado porbegin_posy se extiende hasta end_pos - 1 delsource 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óns). Opcional.source string.

Las observacionesLa indexación de cadenas comienza desde 0. Sibegin_poses igual aend_pos, la función devuelve una cadena vacía.

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

str.tonumber

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.

str.format

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 formatear

Las observacionesCualquier correa rizada dentro de un patrón no citado debe estar equilibrada. Por ejemplo, ab {0} de y ab } de son patrones válidos, pero ab {0} de, ab } de y { no lo son.

str.length

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.

str.lower

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

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

str.match

Devuelve la nueva subcadena delsourcecadena si coincide con unregexExpresión regular, na de otra manera.

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 lasourcecadena si coincide con unregexExpresión regular, na de otra manera.

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 elsourcela cuerda. El símbolo en elregexstring necesita ser escapado con barra de retrocesión adicional, por ejemplo \d significa expresión regular \d.

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

str.pos

Devuelve la posición de la primera aparición de lastrla cuerda en elsourcela cuerda, na de lo contrario.

str.pos(source, str)

Las devolucionesPosición de la Comisiónstrla cuerda en elsource string.

Argumentos

  • source(Sería de la cadena) cadena de origen.
  • strLa subcadena para buscar.

Las observacionesLa indexación de cadenas comienza en 0.

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

str.replace

Devuelve una nueva cadena con la ocurrencia N + 1 de latargetcadena y la ocurrencia anterior detargetcadena sustituida por elreplacementcadena, 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

¿Qué está pasando?

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.

str.split

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.
  • separatorLa cadena que separa cada una de las subcuerdas.

str.tostring

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

Las devolucionesLa representación de la cadena de lavalueEl argumento. Si elvalueEl argumento es una cadena, se devuelve tal como es. Cuando elvaluees na, la función devuelve la cadena NaN.

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, #) devolverá 4. Para mostrar los ceros posteriores, use 0 en lugar de #. Por ejemplo, #.000. Cuando se usa format.mintick, el valor se redondea al número más cercano que puede ser dividido por syminfo.mintick sin el resto. Si el argumento x es una cadena, el mismo valor de cadena será devuelto. Los argumentos de tipo Bool devuelven true o false. Cuando x es na, la función devuelve NaN.

el color

color.new

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, simple, input o series) tendrá un impacto en los colores que se muestran en la pestaña Settings/Style del script.

color.rgb

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, simple, input o series) tendrá un impacto en los colores que se muestran en la pestaña Settings/Style del script.

tiempo de ejecución

runtime.debug

Imprima información de variables en la consola.

Funciones específicas del lenguaje FMZ PINE,runtime.debug(value), con sólo una discusión.

runtime.log

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.

runtime.error

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)

entrada

entrada

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 defval y utiliza el widget de entrada correspondiente.

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 Settings/Inputs del script, desde donde los usuarios del script pueden cambiarla.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

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 Settings/Inputs del script, desde donde el usuario puede cambiarla.
  • 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

input.string

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 Settings/Inputs del script, desde donde el usuario puede cambiarla.optionsEl 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: [...]) Una lista de opciones para elegir.
  • 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

input.bool

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 Configuración/Input del script, desde donde el usuario puede cambiarla.
  • 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

input.int

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 Configuración/Input del script, desde donde los usuarios del script pueden cambiarlo.optionsEl 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, maxvalysteplos 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

input.float

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 Settings/Inputs del script, desde donde los usuarios del script pueden cambiarlo.optionsEl 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, maxvalysteplos 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

input.color

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 Configuración/Inputs del script, desde donde el usuario puede cambiarla.
  • 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

input.price

Añade una entrada de precio a la pestaña Configuración/Inputs del script.confirm = trueactiva 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 Settings/Inputs del script, desde donde el usuario puede cambiarla.
  • 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

input.timeframe

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 Settings/Inputs del script, desde donde el usuario puede cambiarla.optionsEl 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(Tup

Más.

El 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?