Muchas gracias amigo por querer ayudarme lo valoro mucho gracias de corazon.Te pido perdon si soy un poco cansado o molesto mucho, lo siento.
Te he hecho caso he añadido tu codigo al que estaba haciendo y he buscado una forma de selecionas la orden y cerrar la que estviera abierta, pero despues de comprobar el codigo y ponerlo a prueba sigue sin funcionar como yo quiero el codigo es este.
Código:
// Variables Externasextern double Lote = 0.1;
extern double StopLoss = 20;
extern double TakeProfit = 40;
extern int Slippage = 0;
extern int MagicNumber = 123;
extern int numerOrdenes = 1;
extern int Desfase = 0;
// Variables Globales
double ConvPip;
int ConvPipSlippage;
int TickectCompra;
int TickectVenta;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
OrderSelect(0,SELECT_BY_POS);
if (TickectCompra > 0 && Bid - OrderOpenPrice() >= 2 * ConvPip)
{
double StopLossCompraMod = OrderOpenPrice();
OrderModify(TickectCompra,OrderOpenPrice(),StopLossCompraMod,OrderTakeProfit(),0,Blue);
}
if (TickectVenta > 0 && OrderOpenPrice() - Ask >= 2 * ConvPip)
{
double StopLossVentaMod = OrderOpenPrice();
OrderModify(TickectVenta,OrderOpenPrice(),StopLossVentaMod,OrderTakeProfit(),0,Blue);
}
int TotalOrdenes = OrdersTotal();
if(TotalOrdenes == 1) return(0);
//Orden de Compra
double CCI0 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 0);
double CCI1 = iCCI(_Symbol, 0, 14, PRICE_TYPICAL, 1);
if(CCI1 <= 100 && CCI0 > 100) {
OrderSelect(TickectVenta,SELECT_BY_TICKET);
//Cerrar orden Venta
if(TickectVenta > 0)
{
OrderClose(TickectVenta,OrderLots(),Ask,ConvPipSlippage,Red);
}
// Abrir Operacion de compra
TickectCompra = OrderSend(Symbol(),OP_BUY,Lote,Ask,ConvPipSlippage,Ask - (StopLoss * Point),Ask + (TakeProfit * Point),"Orden de Compra",MagicNumber,0,Green);
TickectVenta = 0;
}
//Orden de Venta
if(CCI1 >= -100 && CCI0 < -100)
{
OrderSelect(TickectCompra,SELECT_BY_TICKET);
//Cerrar orden Venta
if(TickectCompra > 0)
{
OrderClose(TickectCompra,OrderLots(),Bid,ConvPipSlippage,Red);
}
// Abrir Operacion de venta
TickectVenta = OrderSend(Symbol(),OP_SELL,Lote,Bid,ConvPipSlippage,Bid + (StopLoss * Point),Bid - (TakeProfit * Point),"Orden de Venta",MagicNumber,0,Red);
TickectCompra = 0;
}
return(0);
}
Amigo creo que me rindo por que aun poniendo lo que me has dicho sigue abriendo mas ordenes si esta por encima de 100 o por debajo de 100 es decir que no abre una sola posicion sigue abriendo una y otra, me refiero a que abre una y otra pero cuando se cierra la actual es decir siempre hay una sola posicion abierta en ese momento Pero lo que yo es que solo se abra una vez la posicion cuando cruce la
linea y No que cuando este encima de 100 vuelva a abrir otra eso no quiero pero parece que es imposible hacerlo con codigo ME RINDO.
Bueno amigo y compañero , te agredezco mucho tu ayuda incluso te voy a dar Reputacion por tu aporte educativo sobre
mql4, ademas creo que eres un excelente programador por eso si empiezo ganar en el foro algo lo primero sera contratarte como programador para poder hacer un EA ROBOT mucho mas complejo y con muchas mas opciones y parametros que no seria para nada igual que este sencillo ea que quiero construir para uso personal pero bueno no se puede hacer y lo acepto