Ayuda con el "Expert Advisor"

Foro dedicado a todo lo relacionado con la versión 4 de la plataforma de Metaquotes.
Responder
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Ayuda con el "Expert Advisor"

Mensaje por bolsa1 »

Vaya por delante que llevo apenas unas horas tomando contacto con la programación del Metatrader, y seguramente en mi código haya cometido 37 aberraciones (por lo menos). Os pido ayuda a los que tengáis experiencia para acelerar mi aprendizaje.

La idea del sistema que quiero hacer es que lance dos órdenes de compra/venta sobre un mismo punto ("lineabajo"), y cuando éstas se ejecuten, también se cierre la posición con mejor profitloss de las que estén ya abiertas. Además, todas las posiciones abiertas deben llevar un stoploss fijo.

Para que veais que me lo he intentado currar, os dejo el código que he chapurreado hasta ahora, copiando y pegando de otros sistemas, y trasladando código también desde el Ninja Trader. El caso es que compilar compila, pero no tengo ni idea de cómo empezar a tapar goteras, porque el sistema no hace nada.

Os dejo el código en la imagen adjunta, porque por alguna extraña razón, el código se cambia al pegarlo, osea que os adjunto la imagen con el código escrito.

Como os comentaba, puede que haya cometido muchísimos errores...

Fijaos que sólo lanzo las operaciones una vez... para que las órdenes permanezcan en mercado hasta que se ejecuten (hasta que lleguen a "lineabajo" ¿debo dejar la variable "operar" en "true" siempre, o con lanzarla una vez ya se queda hasta que se ejecute?

Otra cosa, para lanzar las órdenes, podéis ver que tengo estos comandos:

OrderSend(Symbol(),OP_SELL,OrderLots(),lineabajo,3,lineabajo+perdida,0,"",MAGICMA,0,Red);
OrderSend(Symbol(),OP_BUY,OrderLots(),lineabajo,3,lineabajo-perdida,0,"",MAGICMA,0,Blue);


¿Están bien formulados? (El MAGICMA lo tengo declarado al principio del código como "#define MAGICMA 20090225" ).

Y por último, ¿cómo puedo saber que las órdenes de entrada han sido ejecutadas, para cerrar la mejor posición? (para poner ejecutadas=true, vamos). En el sistema tengo esta línea:

if (lineabajo<High>Low[0]) ejecutadas=true;

¿Voy bien? La cuestión es que el sistema no hace nada de nada...

Saludos, y gracias por vuestra ayuda. ;-)

Edito: Tengo declaradas las variables como:

Lots: 0.1
perdida:0.001
Adjuntos
ejemplo_ea1.jpg
ejemplo_ea1.jpg (76.89 KiB) Visto 786 veces
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12798
Registrado: 06 Sep 2004 10:18
Contactar:

Mensaje por X-Trader »

Una pregunta muy tonta... has activado Allow Live Trading cuando insertas el EA? Estás trabajando con un Metatrader estándar o uno que pudiera tener capado el funcionamiento de EAs? Has probado otro EA para ver si realmente lanza órdenes?

Saludos,
X-Trader
Última edición por X-Trader el 26 Feb 2009 09:25, editado 1 vez en total.
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

Sí, tengo el "Allow Live Trading" activado... pero voy a probar con otro sistema, no vaya a ser...

Estoy utilizando el Meta de Alpari, ahora te digo...
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

Sí, los EA que trae de prueba funcionan...

Me parece que voy a tener que sentarme muchas más horas delante del programita para que esto tire...

Saludos!
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Spirit
Mensajes: 4739
Registrado: 12 Jun 2008 19:49

Mensaje por Spirit »

Podías haber colgado el archivo mq4 para no tener que copiar todo a mano.

Así como que me d pereza probarlo.

Spirit
Mensajes: 4739
Registrado: 12 Jun 2008 19:49

Mensaje por Spirit »

Yo ya veo un error que puede hacer que no te rule.

Si lanzas 2 órdenes al mismo tiempo, una de compra y otra de venta no pueden tener el mismo precio en ejecución instantánea. Debes poner Ask y Bid en vez de lineabajo.

Si lo que quieres es lanzar 2 órdenes concicionadas debes cambiar OP_BUY y OP_SELL por OP_BUYSTOP y OP_SELLLIMIT si el precio se encuentra por debajo del punto de entrada. En caso de encontrarse por encima del punto de entrada debes poner OP_BUYLIMIT y OP_BUYSTOP.

Al meter órdenes instantáneas deberías controlar los requotes para que te relance la orden si no se ejecuta. También puedes poner un slipage de 1 pipo para asegurarte que entra.
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

ok, muchas gracias Spirit.

Ahora me da rabia, no puedo probarlo hasta mañana, que me tengo que ir... ;-)

Saludos!
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Avatar de Usuario
nostrasladamus
Mensajes: 313
Registrado: 09 Feb 2009 13:27
Ubicación: Sistema Referencia Inercial

Mensaje por nostrasladamus »

pero Ojo
por cada tick en el que operar=false, o sea, que el precio todavia no ha llegado a "lineabajo", estas lanzando ordenes de ejecucion instantanea, como dice Spirit, que te daran error si hay diferencia con el ask o bid. Si pones las ordenes limitadas, tambien estaras lanzando un monton de ordenes, y cuando el precio llegue alli, te compraran un monton

creo que tienes que separar tanto if dentro del otro
mete "Print" en cada if, para, leyendo el archivo log, saber si realmente ha saltado ese if.
En el print mete el ask, bid, "lineabajo" etc para ver donde falla y que puntos toca y cuales no.... :-)
Si vis pacem, para bellum.
Dios me libre de los mansos, que de los fieros ya me libro yo.
Avatar de Usuario
bolsa1
Mensajes: 1347
Registrado: 13 May 2008 09:53
Ubicación: Gallaecia

Mensaje por bolsa1 »

Gracias por el apunte... ya he cambiado tantas cosas que no se parece mucho al original...

Seguiré investigando...

Saludos!
"Mercaderes e industriales no deben ser admitidos a la ciudadanía; porque su género de vida es abyecto y contrario a la virtud."

Aristóteles.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Metatrader 4”