Trazar nueva serie de velas OHLC

Responder
W5W
Mensajes: 23
Registrado: 17 Nov 2020 13:45

Trazar nueva serie de velas OHLC

Mensaje por W5W »

Hola, no encuentro forma de hacer algo en NT8 que aparentemente debería ser muy sencillo, pero todo lo que encuentro por ahí requiere demasiadas líneas de código.

Necesito trazar una nueva serie de velas OHLC en un panel diferente del gráfico principal.
Esto en otra plataforma solo requiere una línea y función tipo plotcandle() para crear el nuevo gráfico, pero lo que veo en NT8 necesitas construir tu mismo las velas con el método OnRender() y eso requiere mucho código para dibujar mechas, rectangulos del cuerpo, determinar XY de los vectores...

¿Es así en NT8 o me estoy complicando la vida?
¿De qué otra manera se puede hacer, alguna sugerencia? Gracias.

Avatar de Usuario
cls
Mensajes: 1324
Registrado: 24 May 2007 18:46
Ubicación: Zion

Re: Trazar nueva serie de velas OHLC

Mensaje por cls »

En un chart puedes cargar todas las series de precios que quieras y cada una en su panel. Después sólo hay
que cargar el indicador en el panel que sea, que te cogerá esa serie de precios. Si con eso no te sirve explica un poco mejor lo que quieres hacer por si hay manera de lograrlo fácilmente.
Normalmente un indicador no necesita dibujar barras ohlc salvo que sean calculadas (p.ej. en el indicador ValueCharts o indicadores de tipo orderflow), y en ese caso hay que hacerlo en el OnRender.
S2
W5W
Mensajes: 23
Registrado: 17 Nov 2020 13:45

Re: Trazar nueva serie de velas OHLC

Mensaje por W5W »

cls escribió: 23 Ene 2021 19:27 En un chart puedes cargar todas las series de precios que quieras y cada una en su panel. Después sólo hay
que cargar el indicador en el panel que sea, que te cogerá esa serie de precios. Si con eso no te sirve explica un poco mejor lo que quieres hacer por si hay manera de lograrlo fácilmente.
Normalmente un indicador no necesita dibujar barras ohlc salvo que sean calculadas (p.ej. en el indicador ValueCharts o indicadores de tipo orderflow), y en ese caso hay que hacerlo en el OnRender.
S2
Gracias cls.
Esta imagen es de Tradingview
http://ibb.co/tXRkVQV

Básicamente es el panel principal con la cotización y debajo en un panel separado lo mismo.
Simplemente he usado la función:

plotcandle(open, high, low, close, title='Title', color = open < close ? color.green : color.red, wickcolor=color.black)

para graficar en ese nuevo panel una nueva serie de velas.
Me pregunto cuál sería el procedimiento equivalente y sencillo en NT8 que no pase por OnRender si es que lo hay.

A partir de open[0],high[0],low[0],close[0] graficar la vela correspondiente.
Gracias.
Avatar de Usuario
cls
Mensajes: 1324
Registrado: 24 May 2007 18:46
Ubicación: Zion

Re: Trazar nueva serie de velas OHLC

Mensaje por cls »

Hola W5W, como te decía, en un chart puedes tener todos los paneles que quieras y cada uno con su serie de precios, y después cargar el indicador/es que necesites en cada uno de los paneles.
El indicador no necesita dibujar las barras OHLC, ya están en el panel.

Lo que sí puedes hacer desde un indicador es modificar los colores del cuerpo y del borde de cada barra con los métodos BarBrush + CandleOutlineBrush para la barra corriente. Y BarBrushes + CandleOutlineBrushes para cualquier barra histórica.
Por ejemplo: https://ninjatrader.com/support/helpGui ... rushes.htm

No veo tu necesidad de dibujar las barras OHLC desde el indicador.

S2
Adjuntos
chart.jpg
W5W
Mensajes: 23
Registrado: 17 Nov 2020 13:45

Re: Trazar nueva serie de velas OHLC

Mensaje por W5W »

cls escribió: 24 Ene 2021 11:38 Hola W5W, como te decía, en un chart puedes tener todos los paneles que quieras y cada uno con su serie de precios, y después cargar el indicador/es que necesites en cada uno de los paneles.
El indicador no necesita dibujar las barras OHLC, ya están en el panel.

Lo que sí puedes hacer desde un indicador es modificar los colores del cuerpo y del borde de cada barra con los métodos BarBrush + CandleOutlineBrush para la barra corriente. Y BarBrushes + CandleOutlineBrushes para cualquier barra histórica.
Por ejemplo: https://ninjatrader.com/support/helpGui ... rushes.htm

No veo tu necesidad de dibujar las barras OHLC desde el indicador.

S2
Vale ya me imaginaba que me complicaba la vida innecesariamente.
Veo en NT8 es muy sencillo añadir series desde el menú contextual entonces no tiene mucho sentido lo que busco.

En tradingview si quiero ocultar las velas de algunos días concretos necesito graficar una nueva serie de velas desde el indicador porque no puedes a través de código modificar únicamente colores, pero podre hacer lo mismo en NT8 cambiando su transparencia.
Gracias por la aclaración cls.
Avatar de Usuario
cls
Mensajes: 1324
Registrado: 24 May 2007 18:46
Ubicación: Zion

Re: Trazar nueva serie de velas OHLC

Mensaje por cls »

De nada. Si quieres que un determinado intervalo de tiempo no se muestre en el chart, lo más fácil es crear sesiones a medida (se llaman TradingHours). En cada TradingHours puedes configurar los días que engloba, el horario de cada día, festivos, etc. Al abrir el chart eliges esa TradingHours y ya está, sólo se mostrarán las barras que pertenezcan a esa TradingHours. Los indicadores que cargues en el chart trabajarán sólo con esas barras. No tienes que programar nada adicional en el indicador. También es aplicable a sistemas + backtesting.
S2
W5W
Mensajes: 23
Registrado: 17 Nov 2020 13:45

Re: Trazar nueva serie de velas OHLC

Mensaje por W5W »

cls escribió: 24 Ene 2021 13:44 De nada. Si quieres que un determinado intervalo de tiempo no se muestre en el chart, lo más fácil es crear sesiones a medida (se llaman TradingHours). En cada TradingHours puedes configurar los días que engloba, el horario de cada día, festivos, etc. Al abrir el chart eliges esa TradingHours y ya está, sólo se mostrarán las barras que pertenezcan a esa TradingHours. Los indicadores que cargues en el chart trabajarán sólo con esas barras. No tienes que programar nada adicional en el indicador. También es aplicable a sistemas + backtesting.
S2
Lo tendré en cuenta gracias.

Una última pregunta si me permites. Es un poco básica, pero me hace dudar y es respecto a la declaración de variables en ninjascript.
¿Si declaro una variable en el nivel public class, luego tengo que asignarle un valor una vez alcanzado State.Configure o State.DataLoaded según el tipo de datos del que depende la variable, o por el contrario puedo asignarle un valor directamente en OnBarUpdate() sin tener que hacerlo en estos estados previos?

El resultado que obtengo es el mismo, pero he visto en muchos scripts que la forma de proceder es por ejemplo
declaro una variable en public class
private double contador
Luego en State.Configure se la asigna un valor 0 o el que sea y en OnBarUpdate() se hace el cálculo que sea con esta variable.
¿Puedo saltarme la asignación del valor a la variable en State.Configure?

Por otra parte hay muchas variables que no se declaran antes de OnBarUpdate() sino dentro de ello, imagino que son variables que no hace falta que tengan memoria y se resetean en cada barra?

Gracias por tu tiempo cls no hay prisa en contestar.
Avatar de Usuario
cls
Mensajes: 1324
Registrado: 24 May 2007 18:46
Ubicación: Zion

Re: Trazar nueva serie de velas OHLC

Mensaje por cls »

W5W escribió: 24 Ene 2021 14:08 Una última pregunta si me permites. Es un poco básica, pero me hace dudar y es respecto a la declaración de variables en ninjascript.
¿Si declaro una variable en el nivel public class, luego tengo que asignarle un valor una vez alcanzado State.Configure o State.DataLoaded según el tipo de datos del que depende la variable, o por el contrario puedo asignarle un valor directamente en OnBarUpdate() sin tener que hacerlo en estos estados previos?

El resultado que obtengo es el mismo, pero he visto en muchos scripts que la forma de proceder es por ejemplo
declaro una variable en public class
private double contador
Luego en State.Configure se la asigna un valor 0 o el que sea y en OnBarUpdate() se hace el cálculo que sea con esta variable.
¿Puedo saltarme la asignación del valor a la variable en State.Configure?
Sí, puedes saltarte la asignación. Las variables declaradas a nivel de clase son accesibles desde todos los métodos de la clase, y no se necesita inicializarlas a un valor en la declaración para poder usarlas. Si al ser llamadas no se les ha asignado ningún valor tomarán el valor por defecto de su tipo, por ejemplo el 0 para los números.
W5W escribió: 24 Ene 2021 14:08 Por otra parte hay muchas variables que no se declaran antes de OnBarUpdate() sino dentro de ello, imagino que son variables que no hace falta que tengan memoria y se resetean en cada barra?

Gracias por tu tiempo cls no hay prisa en contestar.
Correcto. Son variables locales, declaradas dentro de los métodos y su ámbito está restringido a ese método concreto. Las variables locales tienen que inicializarse explícitamente antes de poder utilizarse. Si no lo haces te dará un error en tiempo de compilación.

S2
W5W
Mensajes: 23
Registrado: 17 Nov 2020 13:45

Re: Trazar nueva serie de velas OHLC

Mensaje por W5W »

cls escribió: 24 Ene 2021 20:29
W5W escribió: 24 Ene 2021 14:08 Una última pregunta si me permites. Es un poco básica, pero me hace dudar y es respecto a la declaración de variables en ninjascript.
¿Si declaro una variable en el nivel public class, luego tengo que asignarle un valor una vez alcanzado State.Configure o State.DataLoaded según el tipo de datos del que depende la variable, o por el contrario puedo asignarle un valor directamente en OnBarUpdate() sin tener que hacerlo en estos estados previos?

El resultado que obtengo es el mismo, pero he visto en muchos scripts que la forma de proceder es por ejemplo
declaro una variable en public class
private double contador
Luego en State.Configure se la asigna un valor 0 o el que sea y en OnBarUpdate() se hace el cálculo que sea con esta variable.
¿Puedo saltarme la asignación del valor a la variable en State.Configure?
Sí, puedes saltarte la asignación. Las variables declaradas a nivel de clase son accesibles desde todos los métodos de la clase, y no se necesita inicializarlas a un valor en la declaración para poder usarlas. Si al ser llamadas no se les ha asignado ningún valor tomarán el valor por defecto de su tipo, por ejemplo el 0 para los números.
W5W escribió: 24 Ene 2021 14:08 Por otra parte hay muchas variables que no se declaran antes de OnBarUpdate() sino dentro de ello, imagino que son variables que no hace falta que tengan memoria y se resetean en cada barra?

Gracias por tu tiempo cls no hay prisa en contestar.
Correcto. Son variables locales, declaradas dentro de los métodos y su ámbito está restringido a ese método concreto. Las variables locales tienen que inicializarse explícitamente antes de poder utilizarse. Si no lo haces te dará un error en tiempo de compilación.

S2
Entendido, muchas gracias.
Saludos.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Indicadores”