Errori, bug, domande - pagina 1733

 
Комбинатор:

Il riferimento per gli array è una stampella nel linguaggio MQL, non un riferimento.

E se [] è un modificatore di tipo come *, dovrebbe avere il proprio const! e non un riferimento.

So solo come scrivere qualcosa in MQL.
 
A100:
L'errore è giustificato - questi identificatori sono elencati come ReadOnly nell'aiuto (non combinati con ChartSetInteger)https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property
L'ho già capito, ma grazie lo stesso :)
 
coderex:
sarebbe d'aiuto?

Leggetelo molto attentamente. C++ è molto più difficile da capire di MQL. Non capisco molto dall'articolo. E non capisco affatto come sia collegato a ciò di cui si sta discutendo qui.

Tuttavia, mi è piaciuta la caratteristica,

perfectforwarding

Prima di descrivere cos'è, torniamo alla norma precedente e descriviamo il problema esistente. Supponiamo di avere una funzione modello pippo che prende un parametro e lo passa alla funzione bar(T& qualcosa):

template <typename T>
void foo(T& Object)
{
    bar(Object);
}

Quindi, tutto è a posto. Ma cosa succede se vogliamo passare, per esempio, il numero 100 come argomento di una funzione?

Non preoccupatevi, lo scriveremo così:

template <typename T>
void foo(const T& Object)
{
    bar(Object);//Ooops
}

Ma in questo caso ci sarà un errore di compilazione perché bar prende un riferimento non costante. Quindi, dobbiamo fornire 2 funzioni bar - costante e non costante. E ora immaginiamo che non ci sia un solo parametro ma 2, 3 o 5. Si scopre che questo compito è molto difficile da implementare, poiché abbiamo (2^n - 1) funzioni sovraccaricate dove n è il numero di argomenti della funzione. Se pensate che un tale numero di parametri sia un cattivo stile e che nessuno scriva in questo modo, allora guardate std::bind, std::make_shared ecc.


Ora vediamo quale soluzione ci offre il nuovo standard:

template <typename T>
void foo(T&& Object)
{
    bar(std::forward<T>(Object));
}

Usando il codice di cui sopra, il problema del passaggio dei parametri è completamente risolto, questo è chiamato passaggio perfetto, perché il tipo di argomento è conservato tra le chiamate alla funzione esterna foo e la funzione interna bar. Non c'è più bisogno di sovraccaricare un mucchio di funzioni - gli sviluppatori di codice generico possono essere soddisfatti.


Questa soluzione è possibile perché se il parametro del template è T&, il tipo passato si salva, e std::forward è necessario perché qualsiasi tipo nominato all'interno della funzione foo si trasforma in un lvalue e abbiamo bisogno del tipo originale - questo è ciò a cui serve std::forward - salva il tipo originale e spoglia l'argomento del suo nome (risultante in T&&), che permette di passarlo alla funzione bar esatta in seguito.

"(2^n - 1) funzioni sovraccaricate, dove n è il numero di argomenti della funzione" - Ho affrontato tale inconveniente in MQL.
 
2016.10.15 09:48:01.820 MQL5    wrong type, loading of Test9 failed
Che cos'è?
 
1455 - il debug sui dati storici (CTRL+F5) non funziona. Appare la finestra del tester, la visualizzazione non si avvia.
 
fxsaber:
1455 - il debug sui dati storici (CTRL+F5) non funziona. Appare la finestra del tester, la visualizzazione non si avvia.
Non è vero. Inoltre, non ci sono dettagli tecnici o descrizioni delle vostre azioni. Questo è un ramo specializzato in cui dovete preparare e fornire informazioni aggiuntive prima di scrivere su un presunto bug trovato.
 
fxsaber:

Leggetelo molto attentamente. C++ è molto più difficile da capire di MQL. Non capisco molto dall'articolo. E non capisco affatto come sia collegato a ciò di cui si sta discutendo qui.

Tuttavia, mi è piaciuta questa caratteristica,

Ho incontrato "(2^n - 1) funzioni sovraccaricate, dove n è il numero di argomenti della funzione" - questo è un inconveniente in MQL.

Si tratta di capire rvalue / lvalue / prvalue / xvalue / gvalue, cioè quello di cui stavi parlando fondamentalmente per diverse pagine :) Come vedo, MQ ha seguito gli standard C++, prendendo le cose più preziose da lì, secondo loro, senza fermarsi solo a rvalue / lvalue.

Io stesso non sono ancora pienamente consapevole di questi concetti, anche se li capisco logicamente :)

A proposito, il gestore di memoria in MT5 funziona in modo incomprensibile, se il programma usa la memoria al massimo. Non l'ho misurato sulle taglie piccole.

Per esempio, possiedo 4 giga di RAM, 2 core, MT5 v1455 x64 su macchina virtuale.

Sto caricando la memoria con gli oggetti e in Task Manager vedo che vengono utilizzati 1,5 Gbyte di memoria per terminale e 1,5 Gbyte di memoria virtuale.MQL_MEMORY_USED mostra 400 MB di memoria utilizzabile. Prima dell'inizio erano circa 140 mb per il terminale e 150 mb per l'app virtuale.

Ho anche notato che non appena l'uso della memoria supera i 400 mb, il gestore di memoria può non riuscire a liberarla completamente, anche se gli oggetti vengono effettivamente cancellati. E il comportamento del debugger è imprevedibile - arrivo a cancellare gli oggetti, aspetto la loro completa rimozione e dopo di che fermo il debug (con il pulsante STOP nel debugger), si ferma, MT5 manager non ha allocato la memoria al sistema, cioè ci sono ancora 1,5 Gb appesi per il terminale e 1,5 Gb per la memoria virtuale. МТ5 stesso non ha completato il processo di debug, anche se ME mostra che il debug è completato. Se la memoria dell'oggetto è inferiore a 400 mb, tutto va bene, tranne che la memoria viene liberata.

La memoria viene rilasciata solo dopo aver rimosso il compito terminale dall'elenco dei compiti in esecuzione.

 
Karputov Vladimir:
Non lo fa. Inoltre, non ci sono dettagli tecnici o descrizioni delle vostre azioni. Questo è un ramo specializzato in cui è necessario preparare e fornire informazioni aggiuntive prima di scrivere su un presunto bug trovato.

Gli sviluppatori del Service Desk hanno già memorizzato più volte la mia configurazione.

Prendo un qualsiasi Expert Advisor standard e premo CTRL+F5 nel MetaEditor. La finestra principale di Strategy Tester apparirà con le impostazioni specificate nel MetaEditor. Ma la visualizzazione non parte.

Il registro

2016.10.15 10:06:09     Tester  Leverage 1:100 set error
 
fxsaber:
Gli sviluppatori di Service Desk si sono già ricordati più volte della mia configurazione.

Non hai nemmeno capito di cosa stavo parlando.

Cosa hai fatto prima di iniziare il debugging della storia? Hai configurato MetaEditor (scheda "Strumenti" - "Impostazioni" - "Debug")? Dai uno screenshot da MetaEditora (scheda "Strumenti" - "Impostazioni" - "Debug"), cosa è scritto nel Tester nella scheda "Log"? Cosa viene scritto nel Visualizzatore nella scheda "Log"?

 
fxsaber:

Gli sviluppatori del Service Desk hanno già memorizzato più volte la mia configurazione.

Prendo un qualsiasi Expert Advisor standard e premo CTRL+F5 nel MetaEditor. La finestra principale di Strategy Tester apparirà con le impostazioni specificate nel MetaEditor. La visualizzazione non parte.

MACD Sample sarà lanciato normalmente. Forse c'è qualcosa di sbagliato nelle impostazioni?