Jejejeje, creo que lo tienes hecho, sólo tienees errores tontos típicos de cuándo llevas horas dándole vueltas a un problema, tienes la solución delante y no la ves.
Bromas a parte, te comento, inicializabas dos veces la variable MagicNumber, pero es que además luego ponías en una orden MagicNumber1 y en la otra MagicNumber2 y ninguna de estas variables existen en tu código. Luego haces la comprobación if(OrderMagicNumber() == MagicNumber), pero lo que has asociado a las órdenes era MagicNumber1 y MagicNumber2, por lo que no se cumple la condición para ejecutar OrderClose().
Code:
Código:
#include
extern int MagicNumber = 852745961;
int numerodeorden;
int testcompra=0;
int testventa=0;
void start()
{
while (testcompra==0)
{
Alert(???enviar orden de compra???);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-15*Point,Ask+25*Point,???My order #1???,MagicNumber,0,Green);
testcompra=1;
}
while (testventa==0)
{
Alert(???enviar orden de venta???);
OrderSend(Symbol(),OP_SELL,0.1,Ask,3,Ask-15*Point,Ask+25*Point,???My order #2???,MagicNumber,0,Green);
testventa=1;
}
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,Red);
}
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,Red);
}
}
}
}
}
return;
}
También hay que tener en cuenta que en OrderClose se pone el precio Ask para cerrar un operación de venta y el precio Bid para cerrar una operación de compra, es simplemente porque es la forma en que funciona el mercado: si cierras una operación de venta, lo que haces en realidad es comprar y las compras se realizan al precio Ask, y viceversa. Si no se pone así es muy fácil que obtengas errores al intentar cerrar una determinada orden.