Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 495

 

El terminal se ha actualizado de 509 a 600 y el EA da este aviso en la compilación:

la declaración de 'ErrNum' oculta la declaración global en la línea 81

y una parte del código:

string ErrorDescription(int ErrNum)
{
  switch(ErrNum)
  {

¿Puede decirme cuál es el problema?

 
rustein:

El terminal se ha actualizado de 509 a 600 y el EA da este aviso en la compilación:

la declaración de 'ErrNum' oculta la declaración global en la línea 81

y una parte del código:

¿Puede decirme cuál es el problema?

Tiene ErrNum declarado globalmente. Una variable con el mismo nombre dentro de la función oculta el valor de la variable global. En la función, dar un nombre diferente
 

Gracias, ¿entonces cambiaste ErrNum por ErrNumber y ya está? La advertencia ha desaparecido, todo funcionará correctamente?

string ErrorDescription(int ErrNumber)
{
  switch(ErrNum)
  {
    case 0: return("NO ERROR");
    case 1: return("NO RESULT");                                 
    case 2: return("COMMON ERROR");                              
    case 3: return("INVALID TRADE PARAMETERS");                  
    case 4: return("SERVER BUSY");                               
    case 5: return("OLD VERSION");                               
    case 6: return("NO CONNECTION");                             
    case 7: return("NOT ENOUGH RIGHTS");   
 
Genial, muchas gracias de nuevo.

Y una última advertencia en el código:

no todas las vías de control devuelven un valor

double FractalUp()
{
  if(iCustom(Symbol(),0,"SR",FractalRange,false,1,2,TradeBar) != EMPTY_VALUE)  
  return(iCustom(Symbol(),0,"SR",FractalRange,false,1,2,TradeBar));
}

¿Puedes decirme qué es lo que está mal aquí también, por favor?

 
rustein:
Genial, muchas gracias de nuevo.

Y una última advertencia en el código:

no todas las vías de control devuelven un valor

¿Puedes decirme qué es lo que está mal aquí también, por favor?

Si la condición se cumple, la función devuelve un valor.

En caso contrario, no hay retorno de la función. Devuelve algún valor por defecto de la función

 
jeje :),

lo hizo y la advertencia desapareció:

double FractalUp()
{
  if(iCustom(Symbol(),0,"SR",FractalRange,false,1,2,TradeBar) != EMPTY_VALUE)
  {
    return(iCustom(Symbol(),0,"SR",FractalRange,false,1,2,TradeBar));
  }
  else return (0);
}

espero que sea bueno, la vida en mt4 sigue :), ¡gracias de nuevo!

 
rustein:
jeje :),

lo hizo y la advertencia desapareció:

espero que sea bueno, la vida en mt4 sigue :), ¡gracias de nuevo!

De nada.
 

Chicos, hay 4 funciones simples hechas por ellos mismos, aparentemente hay un error en ellas. ¡Por favor, ayude a un principiante!

(El nombre de cada función habla por sí mismo, lo que esta función debe hacer)

extern double LOT =0.1;


double GetLastOrderProfit()
{
  int time = 0; double profit = 0; 
  for(int i = OrdersHistoryTotal()-1; i>=0; i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
    {
      if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Magic)
      {
        if(time<OrderCloseTime())
        {
          time=OrderCloseTime();
          profit=OrderProfit();
        }
      }
    }
  }
  return(profit);
}

//+------------------------------------------------------------------+
double GetLastLot()
{
  int time = 0; double Lot = 0; 
  for(int i = OrdersHistoryTotal()-1;i>=0;i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
    {
      if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Magic)
      {
        if(time<OrderCloseTime())
        time=OrderCloseTime();
        Lot = OrderLots(); 
      }
    }
  }

  if(Lot <= 0) Lot = LOT;

  return(Lot);
}

//+------------------------------------------------------------------+
double GetLastTenOrdersProfit()
{
  double profit = 0; int count = 0; 
  for(int i = OrdersHistoryTotal()-1;i>=0;i--)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
    {
      if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Magic)
      {
        if (count<10)
        {
          profit=profit+OrderProfit();
          count++;
        } 
      }
    }
  }

  return(profit);
}
//+------------------------------------------------------------------+
double GetLot()
{
  double Lot = 0; double n = GetLastLot();
  
  if (GetTotalProfit() < 0 || GetLastLotProfit() < 0)
  Lot = NormalizeDouble (n * MartinStep,2);
  
  if (GetTotalProfit() >= 0 || GetLastLotProfit() >= 0)
  Lot = LOT;
  
  return (Lot);
}

 

ayúdame a entender

double b=NormalizeDouble(ObjectGet("b",OBJPROP_TIME1),Digits);

int shiftb=iBarShift(NULL,0,b);

Escribe una advertencia de posible pérdida de datos debido a la conversión de tipo referida a la b seleccionada, sí, no es datetime, pero si lo hace:

datetime b=ObjectGet("b",OBJPROP_TIME1);

int shiftb=iBarShift(NULL,0,b);

habrá una advertencia en datetime b por alguna razón , parece correcto y no debería haber advertencias.

 
Alexandr24:

ayúdame a entender

double b=NormalizeDouble(ObjectGet("b",OBJPROP_TIME1),Digits);

int shiftb=iBarShift(NULL,0,b);

Escribe una advertencia de posible pérdida de datos debido a la conversión de tipo referida a la b seleccionada, sí, no es datetime, pero si lo hace:

datetime b=ObjectGet("b",OBJPROP_TIME1);

int shiftb=iBarShift(NULL,0,b);

habrá una advertencia en datetime b por alguna razón , parece correcto y no debería haber advertencias.

Y establecer int b