Errori, bug, domande - pagina 2473

 
Sergey Dzyublik:


Attualmente non è possibile utilizzare una variabile statica dichiarata all'interno di una classe template.
Con l'introduzione di uno spazio dei nomi, questa restrizione potrebbe essere aggirata?

Sì, è possibile.

Il codice sarà leggermente diverso, più corretto, ecco un esempio:

//+------------------------------------------------------------------+
//|                                                  ScopeSample.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
class A
  {
public:
   struct Item
     {
      T                 value;
      
      Item(T initial=10):value(initial) { Print(__FUNCSIG__); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
class B
  {
public:
   struct Item
     {
      T                 value;
      
      Item(T initial=100):value(initial) { Print(__FUNCSIG__); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
A::Item A::s_default;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
B::Item B::s_default;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(A<int>::s_default.value);
   Print(B<int>::s_default.value);
  }
//+------------------------------------------------------------------+


Risultato:

2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) A<int>::Item::Item(int)
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) B<int>::Item::Item(int)
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 10
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 100
 
Molto bene, grazie mille.
È possibile ottenere l'accesso alpha a MT con il supporto dello spazio dei nomi?
Davvero bisogno come parte di uno studio per essere in grado di scrivere un "contenitore intelligente", non per cercare bug/vulnerabilità ecc.
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Sergey Dzyublik, 2019.05.23 13:52

Ho lavorato con il mio broker per l'ultima volta, e ho scoperto una dozzina di bug e "particolarità" in MT.
Come sapere se vale la pena aspettare che vengano riparati o no?
Per favore, non suggerite di testare tutto ogni volta che esce una nuova build.

(non corretto in MT5(build 2059))"Errore di compilazione quando si passa un parametro (void*)(NULL) alla funzione template".
#(corretto in MT5(build 2059)) "Tester di strategia: 2 passaggi previsti, ma in pratica numero infinito di passaggi > 900pc a causa dell'errore "OnInit critical error"".
(non corretto in MT5(build 2059))"Valore non valido del campo dimensione dell'array all'interno dell'operatore di assegnazione predefinito per strutture con array dinamici".
(non corretto in MT5(build 2059))"Il compilatore non vede il costruttore di copia di classe predefinito quando restituisce un oggetto di classe per valore da una funzione".
(corretto in MT5(build 2059)) "Il compilatore non riesce a vedere il type cast "in itself" per le classi pattern e le strutture "complesse"".
(non corretto in MT5(build 2059))"Quando si lavora con typedef, usare una funzione template con specializzazione esplicita non genera codice per questa funzione template.
(non corretto in MT5(build 2059))"Errore di compilazione quando si riutilizza la stessa firma di funzione all'interno di typedef".
#
(non corretto in MT5(build 2059))"Una parte significativa delle funzioni per la gestione delle stringhe non funziona con caratteri NULL in una stringa (per esempio: ShortArrayToString, StringInit, StringFill)".
(non corretto in MT5(build 2059))"La funzione StringSetLength funziona solo per "tagliare" la lunghezza della stringa, non per aumentarla.
#(corretto in MT5(build 2057))"Strategy Tester: 750 processi "metatester64.exe" sono in esecuzione".
"Forum www.mql5.com, quando si modifica un messaggio con un'immagine, l'immagine precedente non viene sostituita con quella nuova".


Suggerimenti:
"Permettere all'utente di forzare la generazione/cancellazione di codice per l'operatore di assegnazione predefinito (costruttore di copia)".
"Permettere ad ArrayCopy di copiare classi e strutture "complesse", in modo simile a come le strutture forniscono funzionalità di copia profonda per qualsiasi tipo di oggetto".
"Fornire la funzionalità per l'utente di leggere/impostare il valore della capacità quando si lavora con gli array dinamici".

"Modifiche per migliorare l'infografica del servizio Segnali"


 

Oggi nel mio terminale la cronologia dei tick sul mio conto del mercato reale dei futures, broker Otkritie, non viene caricata.

I dati nel ticker stanno cambiando.

Ora è 24.05.2019 23:40

Il terminale ha l'ultima spunta per il 23.05.2019.


Stessa situazione su alcuni altri strumenti, compresi quelli su cui ho fatto trading io stesso.

Su un secondo terminale (configurazione separata), su un altro conto dello stesso broker l'effetto è lo stesso.

 
Puoi dire se un esperto sta lavorando in modalità ottimizzazione o in modalità test singolo?
 
MT5 (build 2059)
Errore di compilazione quando si passa un parametro (void*)(NULL) alla funzione template:
class C{
public:
   template<typename T>
   static void func(T ){
      Print(__FUNCSIG__);
   }
};


void OnStart(){  
   void* c_ptr = new C();
   
   C::func((C*)NULL);     // Ok
   C::func(c_ptr);        // Ok
   C::func((void*)NULL);  // 'void' - illegal use of 'void' type
   
   delete c_ptr;
}
Tutto funzionava in (build 2057), forse qualcosa si è incasinato come parte della correzione:
# e#"Errore di compilazione durante l'esecuzione del type cast "itself" per classi template e strutture "complesse"".
 
Forse per analogia con il C++ ha senso introdurre un puntatore nullptr "a tutti gli effetti"?
 

Nella build 2056, tutto funzionava bene. Ma nel 2059 ha già un errore di compilazione:

void OnStart()
{
class A {};
//#define void  A //(*)
        const void *p1;
              void *p2 = (void *)p1; //Error: 'void' - class type expected
}

E se sostituiamo void con A (*), tutto è ok. Che differenza fa?

Inoltre, un errore di compilazione si verifica anche in questo caso:

              void *p2 = (void *)p1; //Error: 'void' - class type expected
 

Quando si compila in comando costruire 2059x32 errore astratto:

ma non si riproduce tramite l'IDE - potrebbe essere un incidente

 
A100:

Come si fa a scegliere tra l'uso di template e void*?