Hola, tengo un problema con el código, es el siguiente, quiero lanzan 4 ordenes de compra o de venta cuando se cumplen ciertas condiciones, y cada una de ellas debe tener un take profit diferente, de la siguiente forma:
Code:
Código:
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,Ask + 30 * Point,???My order #1???,MagicNumber,0,Green);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,Ask + 60 * Point,???My order #1???,MagicNumber,0,Green);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,Ask + 90 * Point,???My order #1???,MagicNumber,0,Green);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,???My order #1???,MagicNumber,0,Green);
Una de las condiciones que tiene que cumplirse es la siguiente:
Code:
Código:
vela1=Close[1]-Open[1]; //Si la vela actual y la anterior es >=0 la vela es verde, si es <0, la vela es roja
vela2=Close[2]-Open[2];
if (comprados==1&&vela1<0&&vela2>=0&&Close[1]=0&&vela2<0&&Close[1]>MA_media_1) //si la vela actual es verde y la vela anterior es roja, si estamos vendidos y si el cierra de la vela actual
{ //está por encima de la media de medios, tenemos que cerrar la mitad de las posiciones, o sea 2.
cierraoperacion();
}
Cuando se cumple esto salta a la función:
Code:
Código:
double cierraoperacion()
{
for (int i = 0; i < OrdersTotal(); i++)
{//Ejecutamos la funcion OrderSelectif(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
//si OrderSelect ha seleccionado alguna orden, comprobamos las condiones que buscamos
if(Symbol() == OrderSymbol())
{
//si el simbolo del grafico actual es igual al simbolo de la orden seleccionada,
//pasamos a la siguiente comprobacion
if(OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY)
{
//se han dado las tres condiciones que hace que la orden seleccionada sea
//la orden que queremos cerrar, asi que la cerramos
OrderClose(OrderTicket(),0.1,Bid,3,Blue);
testcompra=1;
comprados=0;
}
if(OrderType() == OP_SELL)
{
//se han dado las tres condiciones que hace que la orden seleccionada sea
//la orden que queremos cerrar, asi que la cerramos
OrderClose(OrderTicket(),0.1,Ask,3,Blue);
testventa=1;
vendidos=0;
}
}
}
}
}
}
Cuando salta a esta función y tiene por ejemplo 4 órdenes abiertas, debería cerrarlas todas a la vez, sin embargo no lo hace. Cierra 2 o 3, no siempre las mismas. Esto puede deberse a que no le da tiempo a cerrarlas todas cuando salta a la función y se espera al siguiente ciclo para cerrar las que sigue teniendo abiertas?
De qué forma podría cerrarlas todas a la vez?
Es posible abrir sólo una orden e ir cerrándola por lotes, es decir abro una orden y cuando se cumplen 30 ticks cierro el 30 % de la operación, cuando se cumplen otros 30 ticks cierro el otro 30 %, al cumplirse otros 30 ticks cierro otro 30 % y el resto de la operación abierta, que será del 10% seguirá abierta?
Otra pregunta, como puedo programar las órdenes para que el take profit esté condicionado al trailing stop, es decir abrir 4 posiciones y tal y como he puesto en el código anterior y la que el take profit de cada orden sea de 20 pips para la primera, 40 pips para la segunda y 60 pips para la tercera por ejemplo?
Gracias.