Igual es que no esta conectado. Tienes que darle permiso,
Igual es que no esta conectado. Tienes que darle permiso,
LeoCV (29/05/2015)
También hay que tener en cuenta que en la configuración del EA (F7) tienes que tener activada la opción de permitir operaciones en directo:
Archivo adjunto 6155
Bueno, ejemplo listo (mas o menos)...
Lo acabo de poner a funcionar. En cada Tick le paso a la DLL los valores de Bid y Ask, para calcular las medias de 1000 y de 200 ticks. Obviamente, la DLL dice que hay que esperar mientras no se hayan recibido los 1000 primeros datos.
A partir del tick nº 1000 se comprueba si la media de valores Ask de 1000 ticks supera a la de 200 ticks. Si es así se da orden de compra, y si no la DLL dice que esperemos.
En sucesivos ticks lo que se va a comprobar es si la media de valores Bid de los últimos 1000 ticks es menor o igual a la de 200 ticks. En cuanto sea así, se da orden de venta.
Por ahora en realidad no doy orden de compra o venta, si no que simplemente lo muestro con un Print. Lo siguiente será meter toda la información recbida por la DLL en una base de datos, por una parte para poder comprobar el funcionamiento (en un Excel, por ejemplo), y por otra para tener en una tabla todas las operaciones realizadas (aunque supongo que en cuanto de ordenes reales Metatrader me dará esta información).
Dos preguntas, a ver si alguno me las respondéis:
- ¿Las ordenes de compra y venta se ejecutan siempre con los valores Bid y Ask que hay en ese momento?. Si no es así supongo que tendría que decirle a la DLL el precio real al que se ha realizado la operación.
- En vez de hacer pruebas en real, ¿se pueden bajar datos del par EURUSD de algún sitio y hacer un backtesting en metatrader? Supongo que eso sería más rápido que esperar a que lleguen unos cuantos miles de ticks para ver si funciona todo bien, y además así los resultados que obtenga se podrán comprobar mas fácilmente...
Me respondo a mí mismo: Metatrader sí permite hacer backtesting, aunque lo llama "Prueba de estrategia", e incluso se puede utilizar en modo "offline", con datos históricos.
Con el histórico del día 01/05/2015, el robot hecho en VB.NET "DemoEA" (algún nombre tenía que darle...) tiene los siguientes resultados:
La curva de capital (creo que se llama así) es:
Las pruebas las he hecho con un tamaño de lote de 0.1.
Para ser un robot tan simple, la verdad es que esperaba pérdidas mucho mayores, aunque también es cierto que ha sido sólo en un día...
mbolsia (22/12/2015)
He hecho una segunda prueba, para ver que pasa en un periodo de tiempo mayor.
Resultados del test, del 01/04/2015 al 30/04/2015:
En el mes ha realizado 941 operaciones, con un resultado de: -752.59
Beneficio bruto: 2.041,42
Pérdida bruta: -2.794,01
Voy a hacerle un retoque para intentar mejorar sus resultados: Cerraré la posición si las pérdidas superan los 20 pips (con eso me "quitaré" las pérdidas mas gordas...).
Prueba hecha: Ahora en cuanto se detecta una pérdida que supera los 20 pips el robot cierra la posición. La nueva curva de capital (en el mismo periodo, Abril) ahora es:
Resultado, tras 1.052 operaciones: -828.56 euros.
Con ese Stop Loss el robot corta las pérdidas de unas 30 operaciones (la mayor de las cuales antes era de 85 pips). Un rotundo éxito en ese aspecto...
... pero por otra parte, al cerrar antes posiciones le da tiempo a hacer más operaciones (111 más, concretamente), y la caga más que antes (grosso modo, se pierde un 10% más que antes).
Nota 1: La verdad, a Metatrader no le costaría nada poner una línea que marque el importe de partida, 10.000 euros, pera ver mejor si hubo ganancia o pérdida.
Nota 2: Por cierto, he puesto un diferencial (spread) de 10. como trabajo con 5 decimales, supongo que eso es equivalente a 1 pip. No sé si eso es mucho o poco...
La estrategia usada es claramente perdedora, pero sirve sobre todo para practicar la programación que es de lo que se trata, el spread en el par EUR/ USD SUELE SER DE 2 pips.
Lo digo sin conocer realmente la estrategia robotizada, pero los resultados del back test, que porcierto a mi nunca me han gustado lad que vienen con el metatrader, son claramente malos, para saberlo seguro podrias probar un año entero a ver que pasa.
La estrategia es la indicada en el mensaje #54, una cosa sencilla tan sólo para hacer pruebas... Te preguntaba por qué lo decías por saber en qué te fijas para saber si unos resultados son buenos o malos...
Y sí, el backtest del Metatrader es demasiado simplón. Existe un programa llamado Amibroker que le da cien vueltas, sobre todo en el tema de optimizar parámetros...
Otra duda, para los que programais robots con más frecuencia: En cada tick recibo dos valores del par EURUSD, Bid y Ask, en vez de uno (la cotización), que es lo habitual en acciones.
¿Como tratais eso? ¿Trabajais con un valor en la compra y otro en la venta, o simplemente tomais uno de ellos y tratáis la diferencia (spread) como comisiones?
Por ejemplo, para desarrollar un sistema basado en el indicador MERSI (como se indica en otro tema), siempre se habla del RSI como un único valor, cuando en realidad habría dos, uno para el Bid y otro para el Ask, según estemos considerando las condición que se debe cumplir para comprar o para vender.
Yo cuando programo no lo tengo en cuenta, dado que el robot automáticamente lo hace por mi, quiero decir que si por ejemplo abro orden con SL y con TP ya definidos, los precios tanto del TP como del SL ya viene esa diferencia, si pongo que tenga un TP de 50 pips, realmente lo que le estoy diciendo es que sean 50 pips mas el spread, para yo tener siempre el beneficio esperado ( y el broker también ya que nos cobra el spread), por que piensa que siempre que abras una orden, la abres con - X pips ( el Spread) y tienes que recuperar esos pips para ponerte a 0 y empezar a tener beneficio.
Para tu caso concreto que quieres implementar una compra o venta en función de medias moviles, será igual, ya que al poner la orden de compra o venta se lanzará con esa diferencia de pips, los cuales hay que recuperar.
Será igual hasta cierto punto: Todo depende del spread. Si es fijo supongo que lo más fácil es utilizar siempre el precio "Bid" como referencia en todo el código del robot (con la única excepción de la línea donde se hace la compra, que hay que utilizar el precio "Ask").
Asi que la pregunta claves es: ¿El spread de un par concreto es siempre el mismo, o puede cambiar (a lo largo del día, por ejemplo)?
El Spread suele ser fijo, pero en momentos de mucha volatilidad los brokers suelen subirlos para no perder dinero, yo he llegado a ver spreads de mas de 20 pips, pero en condiciones normales suele ser fijo, también hay brokers que ellos te cobran una comisión por la operación, por lo que no hay spread, pero si una comisión fija.
LeoCV (15/06/2015)
Pues ahí está el problema: Trabajes con lo que trabajes (medias móviles, RSI, ...) puede que tomando los valores de Bid tu indicador te dé señal de compra, y trabajando con los valores de Ask, no, por ejemplo.
Pero supongo que lo más fácil (e intuitivo) es lo que dices de trabajar siempre con el valor de venta, y suponer que todas las operaciones comienzan con una pérdida inicial (spread o comisión, según el broker)...
Yo les pongo a todas 2 pips de comisión
En Bolsia 3 pips, en real 2 pips
LeoCV (23/06/2015)
Al final como termino lo de la DLL
¿Consiguistes hacer una DLL para hacer robots externos con .NET?
Un Saludo.
Como quedo lo de la DLL?
La idea es hacer una aplicación que permita replicar los robots de Bolsia en tu metatrader, darla gratis un tiempo y después pagar 20 euros al mes, por paypal... eso puede acelerar mucho Bolsia, habrían ingresos
Si que habrá interés si se reinvierte... en premios... además no hay que olvidar que se puede vender a gente extranjera, se cobra entre 50 a 100 dolares por copiar a un robot... la idea es darlo gratis un mes, y después pagando. Eso sí tiene que ser profesional... yo si que lo veo, mira a Juanotopo... esto es como todo, si 1000 lo instalan en Estados Unidos igual 50 te pagan todos los meses.
Actualmente hay 3 usuarios viendo este tema. (0 miembros y 3 visitantes)
Marcadores