Nuevas funciones de Pine Script®: Pruebas backtesting realistas en gráficos Heikin Ashi, funciones integradas para acceder a información sobre símbolos, y mucho más.

Jun 30, 2023

Puede ser un reto mantenerse al día a medida que seguimos añadiendo las mejoras que nos solicitan a nuestro lenguaje de programación. Este post repasa nuestras últimas incorporaciones más importantes, para que no se las pierda.

Pruebas backtesting más realistas en gráficos Heikin Ashi

Las pruebas backtesting realizadas con gráficos Heikin Ashi solían producir resultados poco fiables porque el emulador del bróker siempre cumplimentaba las órdenes utilizando los precios del gráfico, que en el caso de los gráficos HA son sintéticos. Una nueva función llamada «Ejecutar órdenes utilizando OHLC estándar» resuelve este problema. Cuando se utiliza, las estrategias que se ejecutan en los gráficos HA ejecutarán las órdenes a los precios reales del mercado, lo que simula mejor cómo se comportaría su estrategia en tiempo real.

Los usuarios de estrategias pueden activar la función en la pestaña «Propiedades» de las estrategias. La función está desactivada por defecto.

Tenga en cuenta que esto sólo cambia el comportamiento de las estrategias que se ejecutan en gráficos HA. En otros tipos de gráficos como Renko, el backtesting continuará ejecutando órdenes a los precios del gráfico, independientemente de la configuración de la función.

Nuevo parámetro de visualización para las funciones input.*()

Un nuevo parámetro de visualización le proporciona más control sobre la visualización de los valores de entrada junto al nombre de un script. Pueden utilizarse cuatro argumentos: display.status_line, display.data_window, display.all y display.none. Se permiten combinaciones de los argumentos utilizando signos más o menos, e independientemente del argumento utilizado, los valores de entrada seguirán apareciendo siempre en la pestaña «Inputs» de la configuración del script.

El nuevo parámetro permite ocultar los valores de entrada de la línea de estado cuando normalmente aparecerían allí, o mostrar los valores de las entradas que normalmente estarían ocultas, es decir, entradas booleanas, de color o de fecha. Con el nuevo parámetro, también puede mostrar las entradas junto al nombre del script en la ventana de datos. La visualización por defecto de las entradas no cambia cuando no se utiliza el parámetro.

//@version=5

indicator(«RSI»)

rsiLengthInput = input.int(14, minval=1, title=»RSI Length», display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, «Source», display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, «RSI»)

Nuevos módulos integrados para acceder a la información de los instrumentos

Hemos añadido tres módulos al espacio de nombres syminfo: syminfo.sector, syminfo.industry y syminfo.country. Devuelven secuencias que proporcionan más información sobre el símbolo actual. La información sobre el país se proporciona en el formato ISO 3166-1 alfa-2.

Desactivación de alertas para órdenes ejecutadas en estrategias

Ahora puede desactivar las notificaciones para órdenes sueltas en estrategias utilizando disable_alert = true en las funciones utilizadas para crear esas órdenes. Por ejemplo:

//@version=5

strategy(«My strategy», overlay=true)

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

if (longCondition)

strategy.entry(«Long», strategy.long, alert_message = «Go Long!»)

strategy.exit(«Exit», «Long», profit = 300, loss = 100, disable_alert = true)

Esto es útil para filtrar órdenes específicas cuando se utiliza la función alert() para generar mensajes personalizados para notificaciones o webhooks durante la ejecución de la estrategia.

Cambio en el cálculo de la caída y subida máximas en las estrategias

Se ha mejorado el cálculo de la caída máxima y la subida máxima para tener en cuenta el capital potencial que podría haberse conseguido en una operación. Anteriormente, sólo se tenían en cuenta los valores de capital en los puntos de entrada y salida, lo que podía dar lugar a valores de caída y revalorización máximas que no se correspondían con sus valores potenciales máximos. Los nuevos métodos se explican en los artículos del Centro de ayuda sobre caída máxima y subida máxima.

Soporte para el modificador varip en tipos definidos por el usuario

 

El modificador varip, que permite que las variables conserven valores entre cada ejecución del script en la misma barra, puede aplicarse ahora a campos de tipos definidos por el usuario. Tenga en cuenta que los campos no definidos mediante varip se revertirán en cada barra, por lo que los valores que se les asignen durante varias ejecuciones en la misma barra no se conservarán, aunque el objeto que los contenga se haya creado con varip.

Por ejemplo:

//@version=5

indicator(«`varip` field»)

type TypeWithVaripField

varip int varipCounter = 0

int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)

// This field preserves values between script executions.

myCounter.varipCounter := myCounter.varipCounter + 1

// This field does not because it wasn’t declared using `varip`.

myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, «myCounter.varipCounter»)

plot(myCounter.counter, «myCounter.counter»)

Solicitud de tipo de cambio

Hemos introducido una nueva función request.currency_rate() que permite obtener el tipo de conversión de una moneda a otra. Esta función requiere dos parámetros: de y a, siendo cada uno de ellos un código de cadena de tres letras según la norma ISO 4217.

He aquí un ejemplo de cómo utilizarlo para convertir el precio de un instrumento a libras esterlinas (GBP):

//@version=5

indicator(«Close in British Pounds»)

rate = request.currency_rate(syminfo.currency, «GBP»)

plot(close * rate)

Nuevas funciones en el espacio de nombres array

Se han añadido cuatro nuevas funciones para los arrays:

 

array.first() – Muestra el primer elemento del array.

array.last() – Muestra el último elemento del array.

array.every() – Muestra verdadero si todos los elementos del array son verdaderos; en caso contrario, muestra falso.

array.some() – Muestra verdadero si al menos un elemento del array es verdadera; en caso contrario, muestra falso.

 

Para estar al día de las nuevas funciones de Pine Script®, no pierda de vista las notas de las versiones del Manual del usuario. La cuenta de PineCoders también difunde actualizaciones desde su Squawk Box en Telegram, su cuenta de Twitter y desde el chat público Pine Script® Q&A en TradingView.

Creemos que estas funciones tan solicitadas le resultarán útiles, y le animamos a que siga enviándonos sus comentarios y sugerencias, para que podamos hacer que la plataforma sea lo mejor posible. Construimos TradingView para usted, y siempre estamos interesados en escuchar sus opiniones.

 

Equipo de TradingView

Look first Then leap

TradingView está hecho para usted, asegúrese de aprovechar al máximo nuestras increíbles funciones
Abrir gráfico