Errori, bug, domande - pagina 2767

 
Artyom Trishkin:

A giudicare dal comportamento che hai descritto, questo è un EA diverso con un algoritmo di lavoro completamente diverso.

L'abbiamo capito tutti, forse è un bug del terminale o forse è stato progettato dagli sviluppatori, ma il fatto è che quando si esegue un test sulla storia di qualsiasi set, alla fine del test si ottiene un grafico, ma tutta la storia per questo periodo è automaticamente sovrapposta ad esso dalla storia reale.

Ho confrontato i risultati, poi sono andato al log e ho confrontato i prezzi delle posizioni di apertura dal tester e da un trade reale, coincidono quasi tutti, c'è una leggera differenza.

Ma resta il fatto che i trade reali si sovrappongono a questo grafico dopo che i test sono stati completati.

Per evitare la loro sovrapposizione ho fatto quanto segue

Ho appena cliccato con il tasto destro del mouse nel diario e disabilitato l'auto-refresh, ora tutti i test mostrano solo i trade che sono stati testati nel tester in questo grafico, i trade reali non sono stati applicati ad esso.

Ho chiesto alle persone del gruppo di far funzionare i loro robot di trading per un periodo in cui avevano qualcosa scambiato su questo simbolo, usando robot, qualsiasi cosa, tutti hanno confermato questo fatto che oltre alle transazioni nel tester, il grafico è sovrapposto a scambi reali che sono stati scambiati in passato.


Se hai dei trade in qualsiasi strumento, esegui qualsiasi robot per questo periodo e vedrai che questi trade saranno applicati al grafico e se l'autotrading è disabilitato, quelli reali non saranno applicati.

Penso che valga la pena dirlo agli sviluppatori, mi piace questo bug, ora posso testare il robot per una settimana e confrontare la differenza di trade sul grafico, idealmente dovrebbe essere diversa di un paio di tick

 
Konstantin Seredkin:

Oltre ai trade del tester, vengono sovrapposti al grafico i trade reali che sono stati scambiati in passato.

Questo comportamento è invisibile a coloro che usano simboli personalizzati. Ma per i simboli reali sembra abbastanza scomodo.

 

Nel debugger, il valore diGetLastError(); non può essere recuperato?

solo attraverso una variabile o un _LastError predefinito ?

File:
 
awsomdino:

Nel debugger, il valore di GetLastError(); non può essere recuperato?

Solo attraverso una variabile o un _LastError predefinito ?

Sì. Qui è dove _Value è utile.

 
fxsaber:

Sì. Questo è quello che serve a _Value.

Forse gli sviluppatori aggiungeranno la possibilità di guardare nel debugger dalla funzioneGetLastError();

altrimenti queste comode e semplici 2 linee sono inutili

   if(GetLastError()>0)
      DebugBreak();
 
awsomdino:

forse gli sviluppatori aggiungeranno la possibilità di guardare nel debugger dalla funzioneGetLastError();

altrimenti queste comode e semplici 2 linee sono inutili.

Non usate solo questa funzione.

 

Al fine di minimizzare il numero di voci delle precedenti correzioni "review", i difetti precedentemente risolti non sono stati trasferiti:

Difetti nel funzionamento delle funzioni/classi dei template:
(non risolto da MT5(build 2474)) *** Errore di compilazione, bug nel tentativo di accedere alla classe interna per il parametro della funzione template.
(non corretto da MT5 (build 2474)) ** Errore di compilazione, bug sul valore di ritorno di una funzione template quando il valore di ritorno è una classe interna a una classe template il cui tipo di parametro è specificato dal tipo di argomento della funzione template.
(non corretto da MT5 (build 2474)) ** Errore di compilazione, spazio dei nomi e bug di ambito nel costruttore di template quando si chiama la classe base quando lo stesso nome di classe è usato nell'ereditarietà e nella classe interna.
(non corretto da MT5 (build 2474)) * Errore di compilazione, bug sulla chiamata della funzione template con tipi di argomenti espliciti quando viene chiamata da una funzione non template sovraccaricata.
(non risolto
da MT5(build 2474)) Errore di compilazione, bug sulla definizione interna della classe - nessun riferimento allo spazio dei nomi globale quando si specifica una classe base.
(non corretto da MT5 (build 2474)) * Errore di compilazione, quando si chiama l'istruzione di assegnazione tramite l'indicazione esplicita della classe base. Il problema si verifica per una classe template dove il parametro template agisce come una classe base.
(corretto
da MT5(build 2474)) Errore di compilazione, quando si usa il modificatore di accesso predefinito per l'ereditarietà in una classe template dove il parametro template è una classe base.
(corretto da MT5 (build 2474)) * (nuovo) Compile Error, errore di compilazione quando si eredita da una classe template dal namespace.
(corretto da MT5 (build 2474)) ** (nuovo) Errore di compilazione, operator= predefinito non è accessibile da un oggetto puntatore.
(non corretto
da MT5 (build 2474)) *** (nuovo) Errore dicompilazione, errore di compilazione per la dichiarazione in avanti del metodo della classe template .
(
non corretto da MT5 (build 2474)) ** (nuovo) Errore dicompilazione quando la classe contiene un puntatore a una classe wrapper che usa la classe come campo.


Difetti relativi alla mancata corrispondenza delle priorità delle chiamate di funzioni sovraccaricate in MQL rispetto al C++:
(non risolto in MT5 (build 2474)) ** Errore di compilazione quando la prima delle funzioni template sovraccaricate usa una classe base template completamente specializzata e la seconda usa una classe base template non specializzata.
(non corretto da MT5 (build 2474)) ** Errore di compilazione, un errore di compilazione si verifica quando si genera il codice di una funzione template nonostante il fatto che ci sia una funzione template sovraccaricata con una firma adatta ai parametri passati.
(non corretto da MT5 (build 2474)) * Errore di compilazione, "chiamata ambigua a funzione sovraccaricata" quando si chiamano funzioni template sovraccaricate con diverso numero di parametri template.

( non risolto da MT5 (build 2474)) *** Errore di compilazione, errore nella chiamata di funzioni template sovraccaricate.
( non risolto da MT5 (build 2474)) ** Errore di compilazione, la conversazione implicita del tipo è usata quando si chiama una funzione per un argomento con il tipo di dati colore nonostante ci sia una funzione template overloaded con firma corrispondente con il tipo di dati colore.
( non risolto da MT5 (build 2474)) * Errore di compilazione, nonostante la specializzazione esplicita quando viene chiamata la funzione template sovraccaricata, la funzione template viene chiamata comunque di default, il che porta all'overflow dello stack...
( non risolto da MT5 (build 2474)) * Errore di compilazione, errore di compilazione quando si chiama una funzione tramite il suo puntatore quando si usa un array di puntatori di funzioni.
( corretto da MT5(build 2474)) * (nuovo) Errore di compilazione, problemi con la priorità di chiamata delle funzioni sovraccaricate nello spazio dei nomi.

Bug relativi a MetaEditor:
(non risolto da ME5 (build 2474)) *** Debugger, un punto di interruzione nelmetodo della strutturastatica causa il blocco del terminale MT.
(non risolto in ME5 (build 2474)) ** Compilazione, la descrizione dell'errore di compilazione non rientra nel limite di 256 caratteri e viene tagliata, rendendo così impossibile capire per quale tipo di dati viene generato l'errore perché la parte richiesta viene tagliata.
(risolto in ME5(build 2474)) ** Debugger, StepInto (F11) e set breakpoint non funzionano.
(risolto in ME5(build 2474)) * Debuger, dopo l'attivazione di un punto di interruzione, invece di continuare l'esecuzione del codice premendo (F5), lo stesso punto di interruzione viene effettivamente attivato di nuovo senza eseguire alcun codice.
(non risolto in ME5 (build 2474)) * Compilazione, firma errata del parametro del modello di funzione nella descrizione dell'errore e nelle informazioni sul parametro.
(non risolto in ME5 (build 2474)) * MetaEditor, la funzionalità Replace (Strl + H) non funziona per "In selection" abilitato insieme a "Backward direction" quando la parte necessaria dell'applicazione è selezionata, ma non l'intero codice.
(non risolto da ME5 (build 2474)) * (nuovo) MetaEditor, l'attivazione di un punto di interruzione induce l'utente a credere che una condizione di input sia stata soddisfatta, quando in realtà potrebbe non esserlo affatto.


Difetti relativi all'esecuzione lenta delle funzioni, ottimizzatore di codice:
(risolto da MT5(build 2474)) **(up) Runtime, grande overhead quando si aggiunge un elemento alla volta in un array usando ArrayResize, nonostante il fatto che la memoria per loro sia stata riservata in anticipo, per esempio, le strutture sono fino a 7 volte più lente.


Suggerimenti:
- aggiungere a ME la ricerca/sostituzione per progetto corrente, mentre durante il refactoring passare attraverso ogni file e cercare le occorrenze non è molto buono.
link- in ME alla compilazione per riempire le colonne vuote File, Line, Column con informazioni appropriate sul file sorgente, da cui è stato fatto include.
link- sull'introduzione del supporto intellisense per la funzionalità dello spazio dei nomi sulla base del lavoro intellisense per i metodi statici nelle classi.
link- sulla possibilità di passare letterali e variabili temporanee come argomenti const ref di una funzione.
link- quando sispostano i file del progetto nella scheda "Progetto", per i file spostati che sono aperti e si trovano nelle schede ME, aggiornare automaticamente il loro percorso.
link- sulla necessità di introdurre la funzionalità di dichiarazione typedef in MQL.
link- sulla possibilità di forzare la generazione di costruttori di copia e operatori di assegnazione predefiniti.

 
Sergey Dzyublik :

Per ridurre al minimo il numero di voci dell'ultima "revisione" delle correzioni, i difetti precedentemente corretti non sono stati portati avanti:
.
..

Questo è sulla tua lista? Se no, potreste aggiungere questo per favore.

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

Sintassi MQL sbagliata?

Dan Marinescu, 2020.05.27 22:47

Ho definito un'interfaccia universale e voglio usarla in un'altra classe. Non riesco a capire cosa c'è di sbagliato in questo codice:

 #property  strict

template < typename T> interface IGenericHandler {
     bool Handle(T &item);
};

#define  DOES_NOT_WORK

class GenericHandler {
     public :
#ifdef  DOES_NOT_WORK   
         template < typename T> bool Handle(T &val, IGenericHandler<T> *handler);
#else   
         template < typename T> bool Handle(T &val, IGenericHandler<T> *handler) { return false ; }
#endif        
 };

#ifdef  DOES_NOT_WORK
template < typename T> bool GenericHandler::Handle(T &val, IGenericHandler<T> *handler) { return false ; }
#endif 

Se DOES_NOT_WORK non è definito, tutto funziona. Ma quando DOES_NOT_WORK è definito, il compilatore dice:

'Handle' - member function already defined with different parameters

Perché?


 
Alain Verleyen:

Questo è sulla tua lista? Se no, potreste aggiungere questo per favore.

Grazie per l'aggiunta, sì, c'è una descrizione di questo problema nella lista:
(non risolto da MT5 (build 2474)) *** (nuovo)Errore di compilazione,errore di compilazione per la dichiarazione in avanti del metodo template della classe.

 
Sergey Dzyublik :

Grazie per l'aggiunta, sì, c'è una descrizione di questo problema nella lista:
( non risolto da MT5 (build 2474)) *** (nuovo) Errore di compilazione , circa l' errore di compilazione per la dichiarazione in avanti del metodo della classe template .

Grande, grazie.