Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 495

 

Il terminale si è aggiornato da 509 a 600 e l'EA dà questo avviso durante la compilazione:

la dichiarazione di 'ErrNum' nasconde la dichiarazione globale alla linea 81

e una parte del codice:

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

Potete dirmi per favore qual è il problema?

 
rustein:

Il terminale si è aggiornato da 509 a 600 e l'EA dà questo avviso durante la compilazione:

la dichiarazione di 'ErrNum' nasconde la dichiarazione globale alla linea 81

e una parte del codice:

Potete dirmi per favore qual è il problema?

Avete ErrNum dichiarato globalmente. Una variabile con lo stesso nome all'interno della funzione nasconde il valore della variabile globale. Nella funzione, date un nome diverso
 

Grazie, quindi ha cambiato ErrNum in ErrNumber ed è tutto? L'avvertimento è sparito, tutto funzionerà correttamente?

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");   
 
Fantastico, grazie ancora.

E un ultimo avvertimento nel codice:

non tutti i percorsi di controllo restituiscono un valore

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

Puoi dirmi cosa c'è di sbagliato anche qui, per favore.

 
rustein:
Fantastico, grazie ancora.

E un ultimo avvertimento nel codice:

non tutti i percorsi di controllo restituiscono un valore

Puoi dirmi cosa c'è di sbagliato anche qui, per favore.

Se la condizione è soddisfatta, la funzione restituisce un valore.

Altrimenti, non c'è nessun ritorno dalla funzione. Restituire qualche valore predefinito dalla funzione

 
hehe :),

l'ha fatto e l'avvertimento è scomparso:

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);
}

spero che vada bene, la vita in mt4 continua :), grazie ancora!

 
rustein:
hehe :),

l'ha fatto e l'avvertimento è scomparso:

spero che vada bene, la vita in mt4 continua :), grazie ancora!

Non c'è di che.
 

Ragazzi, ci sono 4 semplici funzioni fatte in casa che apparentemente hanno un bug. Per favore, aiutate un principiante!

(Il nome di ogni funzione parla da solo, cosa dovrebbe fare questa funzione)

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);
}

 

aiutami a capire

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

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

Scrive un avviso di possibile perdita di dati a causa della conversione del tipo riferito al b selezionato, sì, non è datetime, ma se lo fai:

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

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

ci sarà un avvertimento su datetime b per qualche motivo , sembra corretto e non ci dovrebbero essere avvertimenti.

 
Alexandr24:

aiutami a capire

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

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

Scrive un avviso di possibile perdita di dati a causa della conversione del tipo riferito al b selezionato, sì, non è datetime, ma se lo fai:

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

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

ci sarà un avvertimento su datetime b per qualche motivo , sembra corretto e non ci dovrebbero essere avvertimenti.

E impostare int b
Motivazione: