Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 113

 
¡¡¡Hola!!!¡¡¡Quiero hacer lo siguiente:
necesito que mi EA abra todas las órdenes (de venta y de compra), aunque ya estén abiertas y que lo haga no cuando converjan todas las condiciones, sino en la siguiente vela!!! Ayuda plz......Se lo agradezco de antemano...

Por el momento tengo esto en mi código:

Código PHP:
void start()
{
if(
NewBar())
{
// algoritmo propio, etc.
}
}

bool NewBar()
{
static
datetime¡lastbar=0;
datetime curbar=iTime(Symbol(),0,0);
if(
lastbar!=curbar)
{
lastbar=curbar;
return(
true);
}
return(
false);
}
 
qroner:
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
ArrayInitialize(_Mas, 0);
int Ticket=-1;
for(int pos=OrdersTotal()-1; pos>=0; pos--){
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&
OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
Ticket=OrderTicket();
switch(OrderType()){
case 0:{_Mas[0]++;_Mas[6]++;break;}
case 1:{_Mas[1]++;_Mas[6]++;break;}
case 2:{_Mas[2]++;_Mas[7]++;break;}
case 3:{_Mas[3]++;_Mas[7]++;break;}
case 4:{_Mas[4]++;_Mas[7]++;break;}
case 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

Esta es la función.

Sólo pensé que el problema no estaba en el código, ya que no hay errores en el modo estándar.

De todos modos, nadie parece responder...

 
qroner:

De todos modos, nadie parece responder...

El terminal le dice que el error está en la línea 69, pero le muestra el texto del programa, donde hay menos líneas... ¿Cómo quieres responder?
 
qroner: De todos modos, parece que nadie va a responder...

No parece haber ningún error en la función que has publicado. Me confunde el uso de OrderTicket()!=Ticket para cribar los pedidos adyacentes con el mismo ticket. Compruebe y asegúrese de que no existen tales órdenes. Si el compilador especifica (69,25), mire la posición 25 de la línea 69 - el error está ahí. Escribe esta línea.

 
Vladimir: El terminal le dice que el error es la línea 69, pero muestra el texto del programa con menos líneas... ¿En qué quiere basar su respuesta?

Realmente me pregunto qué tiene en la línea 69

 

Uf, pensé que nadie reaccionaría.

Aquí está esa parte del código:

66 double Volatilidad(int _periodo){

67 double summ = 0;

68 for(int i=1; i<=_periodo; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Gracias por el consejo

 
qroner:

Uf, pensé que nadie reaccionaría.

Aquí está esa parte del código:

66 double Volatilidad(int _periodo){

67 double summ = 0;

68 for(int i=1; i<=_periodo; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Gracias por el consejo.

Todo está claro. El error está en la línea summ+=MathAbs(Alto[i]-Bajo[i]); al contar 25 posiciones desde el borde probablemente vuelva a Alto[i].

He escrito Alert(Low[-1]); el compilador requiere un número positivo. Escribí int n=-1; Alert(Low[n]); - al ejecutar Array fuera de rangre. Pero, ¿cómo puede i<0?? tal vez sea la falta de datos históricos? comprueba el intervalo de fechas de ... a ...

 

POR FAVOR, ACONSEJAR QUÉ COMERCIANTE PARA ELEGIR O EL NOMBRE EXACTO DEL SERVIDOR

 
qroner:

Uf, pensé que nadie reaccionaría.

Aquí está esa parte del código:

66 double Volatilidad(int _periodo){

67 double summ = 0;

68 for(int i=1; i<=_periodo; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

Gracias por el consejo.

double Volatility(int _period)
  {
    double summ = 0;

    for(int i=1; i<=_period; i++)
        if(ArraySize(High) > i && ArraySize(Low) > i)
           summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }
double Volatility(int _period)
  {
    double summ = 0;
    int src = MathMin(MathMin(_period, ArraySize(High)), ArraySize(Low));

    for(int i=1; i<src; i++)
        summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }

Parece que _period tiene a veces un valor mayor que los elementos del array. De ahí los excesos de la matriz.

Elige una de las opciones.

 
¡Por ejemplo necesito esta condición if(iClose(NULL,HTF,4)<BlueLine) si se ejecuta DayDown = 1 ! P: ¿Cómo se puede dejar el DayDown en 1 y no ser consultado hasta el día siguiente?