Errori, bug, domande - pagina 2784

 

printf(), doppio, forma scientifica. Il numero di cifre decimali che posso impostare, la lunghezza totale del numero che posso impostare:

double d=12.3456789;
printf("d=%012.4E",d);

Risultato: d=001.2346E+01

Posso aggiungere degli zeri prima di una potenza? Dovrebbe essere così: d=001.2346E+0001
 
sershi87:
Come ho detto sopra, dopo l'aggiornamento il terminale è molto lento e si blocca completamente. Prima dell'aggiornamento non c'erano questi problemi e tutto funzionava bene. Sono consapevole della questione Debian e sono pienamente d'accordo sul fatto che è un disco molto stabile. Tuttavia, penso che la necessità di una versione nativa sia attesa da tempo e dobbiamo perseguirla.

Ho un'ipotesi che i rallentamenti e i crash siano causati da un'errata sincronizzazione con il server della storia.
Cioè, per esempio, l'impostazione delle barre nella finestra del terminale è 100000, per esempio richiedo 3000 barre dal codice
ma la sincronizzazione può fallire e inizia a sincronizzarsi con tutta la storia disponibile sul server e a pompare tutta la storia dal server.
A causa di questo pompaggio completo della storia, il terminale si blocca, finché non scarica tutta la storia del server disponibile.
Se aspettate questo download, il terminale si blocca e inizia a funzionare.

 
Roman:

Ho un'ipotesi che i rallentamenti e i crash siano causati da un'errata sincronizzazione con il server della storia.
Cioè, per esempio, l'impostazione delle barre nella finestra del terminale è 100000, per esempio richiedo 3000 barre dal codice
ma la sincronizzazione può fallire e inizia a sincronizzarsi con tutta la storia disponibile sul server e a pompare tutta la storia dal server.
A causa di questo pompaggio completo della storia, il terminale si blocca, finché non scarica tutta la storia del server disponibile.
Se aspettate questo download, il terminale si blocca e inizia a funzionare.

La frenata inizia solo quando si apre il vetro. Si chiude il bicchiere e tutto va bene. Ma non si può lavorare senza.
 

MT5 (build 2496) è MOLTO male con i grafici personalizzati che sono calcolati da una formula definita dall'utente.
Carica permanentemente la CPU - carico del nucleo al 100%.
Carica permanentemente il disco - ci scrive solo da 3 GB e più di dati.
Hogs terminale se qualsiasi indicatore con un buffer per essere disegnato nella finestra principale (per esempio, Indicatori/Trend/Adaptive Moving Average).


Passi per giocare:
MetaQuotes-Demo, conto Hedge.
Impostare il numero massimo di barre per grafico: 1000

Create Custom Symbol: Ctrl+U ==> Create Custom Symbol:
- Symbol: NZDUSD_AUDUSD
- Formula: NZDUSD-AUDUSD
- Allow negative prices: True

Risultato: il sistema inizia a consumare fino a 3 GB su disco.
Se apro un grafico con un simbolo personalizzato, il carico sul kernel salta al 100%.
Se aggiungo un indicatore (per esempio, Indicatori/Trend/Adaptive Moving Average) e cambio il TF, la finestra dei dati inizia a convogliare, e in un paio di secondi, il terminale non risponde affatto.


 
UPD. Anche decine di migliaia di voci monotone sono scritte nel registro:
QG      0       18:18:12.209    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
ML      0       18:18:12.209    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
LF      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
GO      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
CD      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
QN      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
FG      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
JL      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
FF      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
QO      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
MD      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
LN      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
GG      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
CL      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
NF      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
IO      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
ED      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
RN      0       18:18:12.227    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated

La dimensione totale del registro si avvicina a 1GB.


UPD... Se dopo tutti i calcoli si chiude il terminale e si riapre - tutti i 3-8 GB di dati calcolati vengono cancellati con successo e il calcolo ricomincia, usando una quantità più modesta di spazio - circa 500 MB.
Se apro il grafico con il simbolo personalizzato dopo il riavvio del terminale - diventa vuoto per qualche motivo, solo 3 barre su M1 (il comportamento è qualcosa come la bandiera "Consenti prezzi negativi" disattivata).

 

Dove posso inviare le mie segnalazioni di bug per essere affrontate dagli sviluppatori?

Da qualche release la compilazione delle classi template che chiamano funzioni statiche è rotta. Esempio:

Class Bar è stato compilato sia con MQL5 a 64 bit che a 32 bit. Ora genera un errore. costruire 2485 05 giu 2020

class Foo {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
public:
    Bar() {
        T::Start();
    }
};

class Foz {
public:
    Foz() {
    }

    void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Baz {
public:
    Baz() {
        T t;
        t.Start();                                                                                                                                                                                          
    }
};

void OnStart() {
    Bar<Foo> var;
    Baz<Foz> vaz;
}

template_static_bug.mq5 : information: compiling 'template_static_bug.mq5'
template_static_bug.mq5(12,12) : error 256: 'Start' - undeclared identifier
Result: 1 errors, 0 warning
 
YanGillan:

Dove posso inviare le mie segnalazioni di bug per essere affrontate dagli sviluppatori?
Da qualche release la compilazione delle classi template che chiamano funzioni statiche è rotta. Esempio:
La classe Bar è stata compilata sia con MQL5 a 64 bit che a 32 bit. Ora genera un errore. build 2485 05 giugno 2020.

Sarai da qualche parte intorno al 5° utente a lamentarsi di questo bug in un modo o nell'altro...

 
Sergey Dzyublik:

Sarai circa il quinto utente a lamentarsi di questo bug in una forma o nell'altra...

Sì, beh, che fare? So del workaround tramite la classe base, ma è una stampella. E non è una buona idea applicare una patch a tutto il codice.

Dove posso scaricare le build precedenti? Non li ho trovati presso il mio broker o sul sito di mt5.

 
YanGillan:

Sì, beh, che fare? So del workaround attraverso la classe base, ma è una stampella. E non è una buona idea mettere una patch a tutto il codice.

Dove posso scaricare le build precedenti? Non li ho trovati sul sito del broker e sul sito di mt5.

 
YanGillan:

So del workaround attraverso la classe base, ma è una stampella. E non è una buona idea mettere una patch a tutto il codice.

Intendi questo metodo o un altro?

template<typename T>
class GetClassType{
public:
   class type : public T{}; 
};


class Foo {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
public:
    Bar() {
        GetClassType<T>::type::Start();
    }
};

void OnStart() {
    Bar<Foo> var;
}