Errori, bug, domande - pagina 2414

 
Andrey Pogoreltsev:

Se usate CSymbolInfo in multicurrency, che viene chiamato dal metodo Name al momento dell'inizializzazione:

Ci saranno errori per il simbolo USDCAD durante il test:

Qual è la valuta di deposito durante i test?

 
Slava:

Qual è la valuta del deposito durante il test?

USD. Coppia di test EURUSD M1. Cercherò di riprodurlo nell'EA nudo. Finora non ha avuto successo. Ma sono stati questi metodi che hanno portato ad errori nei registri ed esattamente una coppia.

 
Slava:

Qual è la valuta del deposito durante il test?

Generalmente riprodotto e trovato una caratteristica. In allegato le impostazioni del test.

Codice di Expert Advisor nudo e crudo:

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


Ora la "caratteristica", come promesso) Se usate Name() in questo modo:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

allora ci sarà un errore. Ma in questo modo l'errore scompare:

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);


PS. Ho delle coppie nominate con il prefisso ".m" sul mio centro. L'esempio funziona anche su coppie regolari.

File:
test.png  11 kb
 
Andrey Pogoreltsev:

Comunque, riprodotto e trovato una funzione. Ho allegato le impostazioni di prova.


Grazie. Capire come funziona

 

Bug MT5 build 2007. In modalità di ottimizzazione la stringa di input è troncata a 63 caratteri.

Codice per il test:

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


Esecuzione singola tutto ok: ! 90 | AUDUSD, EURGBP, EURUSD, GBPAUD, GBPCAD, GBPCHF, GBPJPY, GBPNZD, GBPUSD, NZDUSD, USDCAD, USDCHF, USDJPY

Impostiamo l'ottimizzazione con il parametro fortestopt, andiamo nel log dell'agente: ! 63 | AUDUSD, EURGBP, EURUSD, GBPAUD, GBPCAD, GBPCHF, GBPJPY, GBPNZD, GBPUSD,

 

Qualcuno vuole sapere...

Non posso vedere il newsfeed sulla mia pagina... Prima entrava e vedeva chi aveva postato cosa, ora è una pagina vuota... Non ho cambiato nulla nelle impostazioni...

 

Bug del compilatore: genera un errore di ambiguità, anche se qui tutto non è ambiguo. Ilprimo metodo dovrebbe essere chiamato come il più adatto. Testato in C++.

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

Bug MT5 build 2007. In modalità di ottimizzazione la stringa di input è troncata a 63 caratteri.

Codice per il test:


Esecuzione singola tutto ok: ! 90 | AUDUSD, EURGBP, EURUSD, GBPAUD, GBPCAD, GBPCHF, GBPJPY, GBPNZD, GBPUSD, NZDUSD, USDCAD, USDCHF, USDJPY

Impostiamo l'ottimizzazione con il parametro fortestopt, andiamo nel log dell'agente: ! 63 | AUDUSD, EURGBP, EURUSD, GBPAUD, GBPCAD, GBPCHF, GBPJPY, GBPNZD, GBPUSD,

Il fatto che non tagli a 63 caratteri in una sola prova è solo un caso.

La lunghezza di un parametro di input di tipo stringa non deve superare i 63 caratteri (64 insieme al null-terminator)

 
Slava:

Il fatto che non si riduca a 63 caratteri neanche nel test singolo, è solo un caso.

La lunghezza di un parametro di input di tipo stringa non dovrebbe superare i 63 caratteri (64 insieme al terminatore nullo).

Questa è una specie di restrizione draconiana. Qual è la logica di tutto questo ai tempi d'oggi? E come è conveniente specificare gruppi di un mucchio di caratteri? Tracciare una dozzina di parametri diversi? È conveniente?

 
Slava:

Il fatto che il singolo test non tronchi a 63 caratteri è solo un incidente.

La lunghezza di un parametro di input di tipo stringa non deve superare i 63 caratteri (64 insieme al terminatore nullo)

Questa limitazione è inappropriata, non stiamo scrivendo il prezzo di un chilo di patate nella stringa.