Página 1 de 1

Ayuda con el "Expert Advisor"

Publicado: 25 Feb 2009 18:04
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

Publicado: 25 Feb 2009 18:28
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

Publicado: 25 Feb 2009 18:33
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...

Publicado: 25 Feb 2009 18:37
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!

Publicado: 25 Feb 2009 18:38
por Spirit
Podías haber colgado el archivo mq4 para no tener que copiar todo a mano.

Así como que me d pereza probarlo.

Publicado: 25 Feb 2009 18:44
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.

Publicado: 25 Feb 2009 18:50
por bolsa1
ok, muchas gracias Spirit.

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

Saludos!

Publicado: 26 Feb 2009 08:39
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.... :-)

Publicado: 26 Feb 2009 20:14
por bolsa1
Gracias por el apunte... ya he cambiado tantas cosas que no se parece mucho al original...

Seguiré investigando...

Saludos!