Invierta la transacción. Cambió la estructura del Asesor Experto - eliminó las funciones. Cómo hacer que se cierre y se abra en una sola vela bajo ciertas condiciones.
if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- interesa esta parte: cierre y apertura en una barra { bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue); // while(!IsTradeAllowed()) ¡Sleep(100); resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red); HighLevel=LowLevel; LowLevel=Close[1]; return; }
if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- interesa esta parte: cierre y apertura en una barra { bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red); // while(!IsTradeAllowed())
si resto la fecha 1970.01.01 02:51 me arroja que la hora no es válida, sólo necesito el número de minutos para obtener de este intervalo de tiempo, si es por ejemplo 25000 minutos en este intervalo necesito este número 25000 ... algo así(
¿o no es posible conseguirlo por el μl de la lengua?
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Buen día/noche
Estoy tratando de revertir una operación utilizando este método primitivo que no funciona (el Asesor Experto calcula por ticks):
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // determina si hubo órdenes de compra && si una vela cerró por debajo del nivel inferior
{
CheckForClose(); // cerrar la orden
OpenSell(); // abrir una orden de venta
volver;
}
Por favor, indíqueme en qué me estoy equivocando. También agradecería los enlaces que me permitan cerrar esta brecha.
dzhini:
Estoy tratando de invertir el comercio de esta manera primitiva, que no funciona (el Asesor de Expertos calcula por ticks):
if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // comprueba si hubo órdenes de compra && si una vela cerró por debajo del nivel inferior
¿Cómo puedo determinar cuántos minutos hay entre la Hora1 y la Hora2?
Esta es probablemente la función en la que se cuentan todos los pedidos. Esto debería ser para Buy
Esta es una función estándar:
int CalcularPedidosActualizados(símbolo de cadena)}
si >0 entonces es una orden de compra, si <0 entonces es una orden de venta ))))
¿Cómo puedo determinar cuántos minutos hay entre la Hora1 y la Hora2?
la diferencia devuelve el número de segundos.
dividir por 60. se obtiene el número de minutos.
extern double TP = 70; //ganancia
extern double SL = 0; /stoploss
extern double Lot = 0.1;
double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;
//+------------------------------------------------------------------+
//| función de inicialización del experto |
//+------------------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
}
//+------------------------------------------------------------------+
//| función experta |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resBuy==0 && resSell==0 && CheckBreak()==-1¡& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- interesa esta parte: cierre y apertura en una barra
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) ¡Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- interesa esta parte: cierre y apertura en una barra
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed())
Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
} //----------------------------------------------------------------- Check Low&High break (Func)
double CheckBreak()
{
double candle=Open[1]-Close[1];
if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
diferencia devuelve el número de segundos.
dividir por 60. da el número de minutos.
Sólo obtengo la fecha 1971.03.04 12:00, ¿tal vez haya que convertirla?
Sólo me sale la fecha, ¿quizás haya que convertirla?
En primer lugar, ¿por qué multiplicas por 60?
En segundo lugar, si quiere mostrar el número de minutos como una hora, como 00:15,
no tienes que dividir ni multiplicar por 60.
En primer lugar, ¿por qué multiplicas por 60?
En segundo lugar, si quieres representar el número de minutos en la pantalla como un tiempo como 00:15,
no es necesario dividir o multiplicar por 60.
Sí, he corregido para la división, pero el año sale 1970.01.01 02:51
No lo necesito para la pantalla, sólo quería encontrar el número de minutos sin fechas, para ese intervalo de tiempo....
Incluso sin dividir, sigue saliendo la fecha, ¿o debo restar la fecha en la que se basa la función?
Si sólo quieres un número de minutos, no tienes ninguna razón para utilizar TimeToStr
El tiempo es un número int normal.
O bien, utilice TimeToStr sólo con la bandera TIME_MINUTE