Página 2 de 2
Re: Aplicación de prediccion de redes neuronales
Publicado: 23 Feb 2016 23:58
por edge2k
Efectivamente no voy a entrar en discusión sobre lenguajes, es algo que no viene al caso y que tengo bastante solventado. Programo en mas de 10 lenguajes, me es indiferente usar uno u otro, los uso dependiendo de la casuistica y el problema a resolver. Y portar toda esta red a otro lenguaje (sobretodo C por ejemplo) es totalmente inviable. Es muy complejo.
Centremos el problema en como conectar un backtesting de NT con una fuente externa.
cls escribió:
edge2k a fin de cuentas lo que tiene es una señal de entrada. Eso no es ni la mitad de un sistema automático. Le queda lo difícil y lo que determinará si el sistema es ganador o no; gestión de la posición y señal de salida. Eso también podría incluirlo en una red neuronal aunque la complejidad ya sería enorme, con demasiados factores interdependientes y con relaciones muy frágiles. No sé hasta qué punto los resultados serían fiables.
Una posibilidad (de entre unas cuantas que podría haber) rápida y fácil para saber si la predicción es aprovechable es entrar a mercado. Y analizar el MAE y MFE para averiguar el recorrido medio de las entradas y a partir de ahí ir afinando y ver si el sistema tiene posibilidades. Eso ninja te lo da en su report de backtesting.
Saludos
No podría estar mas de acuerdo contigo cls. Ni siquiera una señal de entrada, simplemente una predicción.. por eso ahora busco el poder hacer esos estudios.
Tanto el Cómo (como conectar NT con fuente externa) hacerlo, como el Qué (tengo la predicción, y ahora?) hacer. Eso era el objetivo de este hilo
Gracias!!
Re: Aplicación de prediccion de redes neuronales
Publicado: 24 Feb 2016 09:42
por cls
edge2k,
Para poder hacer el backtesting tendrás que tener un sistema (saber qué quieres hacer: básicamente cuándo entrar y cuándo salir, y cómo hacerlo. Ahora sólo tienes una predicción). Y luego automatizarlo. Para la automatización tendrás que aprenderte las clases de Ninja para programar estrategias. En la ayuda de Ninja encontrarás todo lo necesario y en su foro hay infinidad de código libre. Este paso es inevitable elijas la plataforma que elijas (Ninja, metatrader, multicharts, esignal, etc).
Te resumo lo que yo haría en tu caso para testear un vencimiento del mini-sp. Por ejemplo el anterior de diciembre-2015:
1.- Desde Ninja me bajo el histórico en 1min desde el 20-09-2015 al 20-12-2015 del ES 12-15. Este fichero contendrá el OHLC de todas las barras de 1 min.
2.- Ese fichero lo paso por la red neuronal en Python (dijiste que sólo usabas el OHLC así que estos datos te servirán) e identifico las predicciones como una pareja de datos formada cada una por el número de barra en que ocurre la predicción y el tipo de predicción: alcista, bajista, sin predicción. Estos datos los bajo a fichero.
3.- Ahora ya dentro de la estrategia en Ninja (que te habrás tenido que programar por tu cuenta) simplemente cargas el fichero en memoria (p.ej. durante la primera ejecución del método OnBarUpdate) y vas comprobando si el índice de la barra para la que se ejecuta cada OnBarUpdate subsiguiente está en el fichero de predicciones. Y si está lanzas la entrada. Luego tu estrategia ya se encargará de gestionar la salida.
Esta solución la podrías pasar por el backtesting. Y te serviría para cualquier vencimiento, timeframe, instrumento, etc.
Como ves integrar tus predicciones de Python con Ninja para hacer un backtesting sería muy sencillo. Lo complicado y que te llevará mucho más tiempo será programar la estrategia (independientemente de la plataforma que elijas).
Y ya para la integración en tiempo real podrías hacerlo con ficheros o por sockets o usando alguna librería de interoperabilidad como te comenté en otro post.
Saludos
Re: Aplicación de prediccion de redes neuronales
Publicado: 24 Feb 2016 09:52
por edge2k
Cierto. Para hacer backtesting no necesito una predicción "online", con volcar todos los datos a un fichero e importarlos en el backtesting debería ser suficiente.
Sobre la estrategia en NT, tengo algo de experiencia de esos 3 años hacia atrás.
Aunque por otra parte, tal vez intente ya directamente hacerlo a través de sockets.
Nueva pregunta, Ninjatrader 7 o Ninjatrader 8?
Un saludo
Re: Aplicación de prediccion de redes neuronales
Publicado: 24 Feb 2016 10:17
por cls
Si ya controlas algo en Ninja podrías hacer un sistema muy sencillo de entrar a mercado en la barra pronosticada y salir al cierre. Y tras el backtesting ya tendrás una idea aproximada de las posiblidades de tu red.
Por otro lado, si tu red puede trabajar con el OHLC no te costaría mucho incluirle cualquier otro dato (Bollinger, macd, atr, rsi, ...). Esto te lo puedes bajar desde Ninja también aunque ya tendrías que programarlo pero dificutad cero. Y ya se te abre un mundo de posibilidades más allá del OHLC de las barras.
Sobre la pregunta de la versión: Ninja8. Está en beta9 y no creo que tarde mucho en salir la release.
Saludos
Re: Aplicación de prediccion de redes neuronales
Publicado: 24 Feb 2016 11:30
por X-Trader
Edge2k, creo que tengo la solución al problema. Se llama PyAlgoTrade, échale un vistazo:
http://gbeced.github.io/pyalgotrade/
Como puedes ver en la documentación (
http://gbeced.github.io/pyalgotrade/docs/v0.17/html/) permite linkar con NinjaTrader.
Saludos,
X-Trader
Re: Aplicación de prediccion de redes neuronales
Publicado: 24 Feb 2016 21:04
por edge2k
cls escribió:Por otro lado, si tu red puede trabajar con el OHLC no te costaría mucho incluirle cualquier otro dato (Bollinger, macd, atr, rsi, ...). Esto te lo puedes bajar desde Ninja también aunque ya tendrías que programarlo pero dificutad cero. Y ya se te abre un mundo de posibilidades más allá del OHLC de las barras.
Ese es el mundo que yo quiero. Hay que ir haciendo poco a poco
Permite linkar pero guardando un csv de NT. Gracias por la libreria, para otras cosas me sera muy util.
Estuve probando y con este pequeño codigo dentro de la estrategia de NT:
Código: Seleccionar todo
var request = (HttpWebRequest)WebRequest.Create("http://192.168.8.106:8080");
request.ContentType = "text/json";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string json = new JavaScriptSerializer().Serialize(new
{
user = "Foo",
password = "Baz"
});
streamWriter.Write("hola");
}
var response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
Soy capaz de enviar a mi endpoint 192.168.8.106:8080 los datos que yo quiera. En ese endpoint funcionará como una api que estara mi red neuronal escuchando cada entrada y devolviendo la respuesta.
Veremos que resultados voy obteniendo, porque solventada la primera fase de "interconexion", ahora queda lo mas dificil, una estregia y mucho analisis!!
Un saludo