Mi primer indicador en NT

Foro dedicado a esta excelente herramienta de desarrollo e implementación de sistemas de trading
Responder
Avatar de Usuario
Man Apart
Mensajes: 1284
Registrado: 11 Ene 2009 12:31
Ubicación: mi ordenador

Mi primer indicador en NT

Mensaje por Man Apart »

Bueno, pues depues de casi dos años usando NT me he decidido a empezar a programarlo. Ahora empiezo a entender los problemas que hace dos años reportaba CLS en este mismo foro. si él con todo su bagaje tenía problemas , ni te cuento cualquier mortal.

El primer problema con el que te encuentras; es que no hay información estructurada . La documentación oficial solo facilita un manual en formato guia de referencia. si lo quieres usar como lectura de cabecera, te dormiras todas las noches sin haber pasado de la letra "A" :-D . Existe un trozo orientado a construir indicadores y estrategias, pero es para parvulos y si bien puede ser suficiente a efectos prácticos en muchos casos, a efectos de gestionar los gráficos en pantalla no aporta absolutamente nada.

Si te lees el foro de NT , cualquier consulta "sabrosa" se responde con un " Esto es programación avanzada y va mas allá de nuestro nivel de soporte", asi que tienes que leer toneladas de "posts" del foro de NT y del de bigmiketrading para empezar a vislumbrar algo. La mejor información que he encontrado en la web es la de nuestro compañero CLS , tanto en su pagina http://www.supperia.com , como en sus aportaciones en este y otros foros, digo mejor por la claridad de sus exposiciones , asi como documentación gráfica, que no porque sea abundane. Quiero hacer mención al tutorial de Jatubio por el esfuerzo que realizó y por estar en español y muy bien explicado, pero era programación básica.

Es curioso que habiendo un libro bastante completo para programar en VC, no lo haya para NT. ¿ alguien sabe de la existencia de un libro o tutorial al respecto?

Bueno adjunto un grafico con el esbozo de mi primer indicador , intenta representar el rastro de las Deltas . No voy a dar pistas pero si lo comparamos con el que mostro CLS hace tiempo a lo mejor adivinais quien es el profesional y quien el aficionado. :lol:
Adjuntos
Captura_1.PNG
Do not believe the naysayers who say it cannot be done
It can be done !
Especulando
Mensajes: 118
Registrado: 09 Mar 2010 15:37

Re: Mi primer indicador en NT

Mensaje por Especulando »

Estoy de acuerdo en que un buen libro de NT en español podría tener éxito. Cursos de 15h a mas de 500 euros y que parte del curso sea de programación en C lo mas probable es que sirva para quedarte casi como estabas. Un buen curso para dominar Ninja requeriría al menos 400h pero si te meten 500 euros por 15 h ¿cuanto por 400?. Además no todo el mundo disporndría del tiempo necesario para poder asistir al curso várias horas al día y el inversor está muy disperso por todas partes y a la mayoría no podría acceder al curso, por lo que un libro en condiciones de 1000-2000 páginas o las que fueran sería la solución para el usuario de Ninja trader.
Un saludo
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Mi primer indicador en NT

Mensaje por cls »

Enhorabuena Man Apart :D ,
esa es la base de lo que necesitas para progamar un market delta.
Si has conseguido programar eso podrás hacer cualquier cosa en NT.
Si crees que puedo ayudarte porque te atasques con algo o tengas alguna duda pregunta sin problema.

S2

PD: para ser tu primer indicador apuntas alto :-D
Avatar de Usuario
Man Apart
Mensajes: 1284
Registrado: 11 Ene 2009 12:31
Ubicación: mi ordenador

Re: Mi primer indicador en NT

Mensaje por Man Apart »

Especulando escribió:Estoy de acuerdo en que un buen libro de NT en español podría tener éxito. Cursos de 15h a mas de 500 euros y que parte del curso sea de programación en C lo mas probable es que sirva para quedarte casi como estabas. Un buen curso para dominar Ninja requeriría al menos 400h pero si te meten 500 euros por 15 h ¿cuanto por 400?. Además no todo el mundo disporndría del tiempo necesario para poder asistir al curso várias horas al día y el inversor está muy disperso por todas partes y a la mayoría no podría acceder al curso, por lo que un libro en condiciones de 1000-2000 páginas o las que fueran sería la solución para el usuario de Ninja trader.
Un saludo
Me da igual en español que inglés y dada la escasez tambien me da igual que sea bueno que malo. Lo que me gustaría es ver la información de forma estruccturada. Saber por ejemplo cuando saltan los eventos . si va antes el onbarupdate o el plot o el onmarket data , etc. etc. mas o menos lo controlo , pero por el metodo empirico.
cls escribió:Enhorabuena Man Apart :D ,
esa es la base de lo que necesitas para progamar un market delta.
Si has conseguido programar eso podrás hacer cualquier cosa en NT.
Si crees que puedo ayudarte porque te atasques con algo o tengas alguna duda pregunta sin problema.

S2

PD: para ser tu primer indicador apuntas alto :-D
Gracias Maestro, viniendo de ti es mucho para mi. Esto que esty programando lo hago por pura diversión. Soy informatico y me he dedicado a ello durante años, pero aparte de eso la informatica es un hobbie para mi y he programado en innumerables lenguajes pero en C# la primera vez (Parece una mezcla de C++ y Java). He estado intentando meter el indicador en un panel y pintar en ese panel los totales y los "prints" en el del precio , casi crei haberlo conseguido pero no, o en un sitio o en otro pero no los dos a la vez. El metodo de prueba error, es un poco tedioso
Solo por curiosidad ¿ tu lo conseguiste o abandonaste esa linea?. En realidad a efectos del indicador no es importante ya que si he conseguido pintar en la parte inferior(totales) y en coordenada del precio , los prints.

Otra cosa: Los totales de la parte inferior los pienso hacer con rectangulos. ¿ es la mejor forma de hacerlo o con algun tipo de datagrid?. Gracias
Do not believe the naysayers who say it cannot be done
It can be done !
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Mi primer indicador en NT

Mensaje por cls »

Lo del orden de los eventos es la primera batalla. No queda otra que comprobarlo por uno mismo.
Sobre todo y en real los OnOrderUpdate, OnExecution, OnPositionUpdate. Para evitarte sorpresas desagradables.
Con los OnMarketData y OnMarketDepth también. He llegado a ver eventos OnMarketDepth desordenados por fecha. Vamos, que me ha llegado antes uno con un time posterior al siguiente que me entraba.


En cuanto a acceder a los paneles es lo más complicado.
Al principio desistí y lo que hacía era simular un panel inferior debajo del precio con un split, y debajo del split ponía los totales. Una chapucilla pero cumplía.

Investigando un poco más conseguí hacerlo con clases Reflection. Un ejemplo:

Código: Seleccionar todo

string path = Environment.GetEnvironmentVariable("ProgramFiles" ).ToString() + "\\NinjaTrader 7\\bin\\NinjaTrader.Core.dll";
Assembly assembly = Assembly.LoadFrom( path );
Type typeChartControl = assembly.GetType("NinjaTrader.Gui.Chart.ChartControl");
Type typeChartPanel = assembly.GetType("NinjaTrader.Gui.Chart.ChartPanel");
Type typeScaleJustification = assembly.GetType("NinjaTrader.Gui.Chart.ScaleJustification");
// Referencia a la escala del precio
object scalePrice = typeChartControl.InvokeMember("scaleJustificationPropDlg", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, null, ChartControl, new Object[]{} );
// ChartControl tiene una colección privada de ChartPanel[] llamada panels en forma de campo
object[] _panels = (object[])typeChartControl.InvokeMember("panels", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance , null, ChartControl, new object[]{});

En _panels tienes los punteros a todos los paneles del chartcontrol.


Todo esto lo investigaba con el visual studio y el MSIL Disassembler y leyendo algún libro especializado.
La colección panels, que es la que interesa, no es pública y sólo la puedes acceder como te he puesto, con Reflection. (Antes tienes que saber que existe ese objeto buscándolo a pedal con el MSIL).


No te aconsejo los datagrid y demás controles prefabricados.
Para los totales, lo más rápido es dibujarlos directamente. Con rectángulos. Es instantáneo en runtime. Con un datagrid tienes que crear un control, consumes memoria, runtime (sobre todo de sus eventos innecesarios), etc.

S2

(pd: y de maestro, nada eh? ;-)

Avatar de Usuario
Man Apart
Mensajes: 1284
Registrado: 11 Ene 2009 12:31
Ubicación: mi ordenador

Re: Mi primer indicador en NT

Mensaje por Man Apart »

cls escribió: Todo esto lo investigaba con el visual studio y el MSIL Disassembler
Vaya, esto es droga dura me recuerda a otra de mis aficiones inconfesables: "el cracking" . Pero solo por diversión, sin animo de lucro.
Muchas gracias.
Do not believe the naysayers who say it cannot be done
It can be done !
Avatar de Usuario
Man Apart
Mensajes: 1284
Registrado: 11 Ene 2009 12:31
Ubicación: mi ordenador

Re: Mi primer indicador en NT

Mensaje por Man Apart »

Solo por curiosidad CLS; Esto dibuja en dos paneles simultaneamente. No siempre funciona y lo estoy investigando, pero la clave esta en poner DOPP=true en Initialize, si no lo pones o lo pones a false ya no va.
Tampoco funciona con todo, tienes que poner dos dibujos diferentes ya que uno solo no se puede alternar o lo pinta en un sitio o en otro.
protected override void Initialize()
DrawOnPricePanel = true;
. . . . . .
protected override void OnBarUpdate()

DrawOnPricePanel = false;
DrawText("bnum" + CurrentBar, Convert.ToString(Bars.BarsSinceSession+1-barStart0 ), 0, 1.0 , Color.Black);

DrawOnPricePanel = true;
DrawArrowDown("signal-" + CurrentBar.ToString(),0,High[0],Color.Red);
Do not believe the naysayers who say it cannot be done
It can be done !
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Mi primer indicador en NT

Mensaje por cls »

El dopp no sirve con el override Plot, que es para lo que supongo lo estás probando.
El doop sólo vale cuando ploteas algo en un panel de indicador y quieres alternar para dibujar entre los paneles de precio e indicador. Pero todo con instrucciones estándar.

Lo que codificas en el override Plot sólo afectará al panel sobre el que has cargado el indicador.
Si lo has cargado sobre el panel del precio sólo podrás dibujar a medida en el panel del precio.
Y si lo has cargado sobre un panel de indicador sólo podrás dibujar a medida (con el override Plot) en el panel del indicador, aunque en este caso con el dopp podrás dibujar también en el panel del precio (pero fuera del override Plot).

Para dibujar a medida en el precio y en el indicador, sólo cabe usar la reflection que te comenté el otro día.

S2
Avatar de Usuario
Man Apart
Mensajes: 1284
Registrado: 11 Ene 2009 12:31
Ubicación: mi ordenador

Re: Mi primer indicador en NT

Mensaje por Man Apart »

Pues te voy a tner que seguir llamando maestro, aunque te pese; porque lo eres.

Ciertamente es todo tal y como lo cuentas. Yo estoy investigando muchas cosas , pero es que el metodo prueba error aunque a veces es divertido, a la larga resulta tedioso.

He conseguido imprimir en los dos paneles , pero con instrucciones estandard, como bien dices. A mis efectos me vale y lo dejaría asi si no fuese porque mi caracter me lo impide. Hasta que no empiece el siguiente proyecto (M.Profile) , me surgiran mejoras a realizar.
Por cierto, ese espacio que me sale entre lineas, supongo que tiene que ver con el alto de la barra , pero no encuentro como ajustarlo, puede que se ajuste solo cambiando el tamaño del texto o incluso el ancho de las barras Who Knows!
¿que opinas? y otra cosa cada vez que recargo el indicador pierdo los datos, ya sabes que el onmarketdata solo funciona pa'lante. Estoy pensando o bien añadir multiinstrumentos BID/ASK/TICK ,( con las primeras puebas lo unico que hago es colgar el NT) o bien ir guardando los datos en un array multidemensional al menos para las ultimas diez velas.
Me gusta mas la primera opción , pero no se lo que me costaría en tiempo.
Indicador.png
Do not believe the naysayers who say it cannot be done
It can be done !
Avatar de Usuario
cls
Mensajes: 1336
Registrado: 24 May 2007 18:46
Contactar:

Re: Mi primer indicador en NT

Mensaje por cls »

Para programar esto me temo que emplearás mucho tiempo my friend. No hay atajos.

Mi consejo es que empieces dibujando las barras tú mismo en el override Plot. Como rectángulos enrejillados con una celda para cada tick.
Considera las barras como colecciones de ticks. Así tendrías una colección de barras que es lo que se plotearía.
Las tienes que dibujar exactamente igual como lo hace NinjaTrader. Con sus dimensiones exactas. Pero lo programas tú en el override Plot.


Cada tick será un objeto con sus propiedades. P.ej.: SumaBid, sumaAsk, sumaAboveAsk, ... , delta, etc.
Cada barra tendrá su colección de ticks. Y además otras propiedades como sumaBid (la de todos sus ticks), sumaAsk, ..., delta, etc.

Esa es la base del indicador.
Para las colecciones utiliza objetos List tipados. List<>. Es lo mejor en eficiencia. Preferible a ArrayList y otros tipos de colecciones.


Tienes que guardar todos los prints que te van llegando en el tick correspondiente de la barra correspondiente. Al tenerlos en memoria no se perderán si cambias alguna opción de visualización del indicador (tendrás que programarte los menús que necesites).
Si recargas el indicador, sí se perderán los datos. Pero si tus menús te permiten hacer todos los cambios en caliente que necesites (por ejemplo cambiar el tipo de visualización, mostrar/ocultar resúmenes, etc) no necesitarás recargar el indicador.

S2
Avatar de Usuario
Man Apart
Mensajes: 1284
Registrado: 11 Ene 2009 12:31
Ubicación: mi ordenador

Re: Mi primer indicador en NT

Mensaje por Man Apart »

¡Jozú, que de trabajo!. Yo pensé que me ibas a decir Pulsa Shift+Ctrl+F5 y ya está. :)
Gracias por los consejos. Estoy utilizando Sorted List que me resulta muy comodo, no se el rendimiento que tendrá.
Do not believe the naysayers who say it cannot be done
It can be done !
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Ninja Trader”