[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 1121
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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