Errori, bug, domande - pagina 2588

 
Aleksey Vyazmikin:

Ancora non capisco - avete predittori che richiedono un calcolo più profondo? Ho bisogno di un - MA sul grafico giornaliero :) Sto solo eseguendo i test un anno prima e il commercio prima di quella data può essere vietato...

Sì - la profondità della storia è necessaria per più di un anno. La soluzione è già stata trovata. Ora farò anche un lancio anticipato di 3 anni e li salterò.
 
Il KB non passa il codice. Dà questi errori
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\Deal.mqh(10,34) : error 279: 'ToNull' - call non-const method for constant object
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(202,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(214,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,32) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(225,34) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(416,35) : error 351: 'ToNull' - access to non-static member or function
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,33) : error 239: '::' - syntax error
MQL5\Include\fxsaber\BestInterval\BestInterval.mqh(435,35) : error 351: 'ToNull' - access to non-static member or function

Si prega di aggiornare il compilatore KB.

 
Vladimir Simakov:
Quando tornerò dalle vacanze, se non sarà troppo disturbo, studierò la questione. Ma logicamente il bug potrebbe essere nel tuo codice e non in mql.
A proposito, solo per divertimento, e se avete una libreria che funziona con quale codifica? Sei sicuro che utf-16, ma cosa succede se è utf-8, dopo tutto, il più comune.

Non l'ho ancora controllato, grazie per il suggerimento. Scaverò in quella direzione.
La libreria è per Ocean, le classi con cui sto lavorando sono selezionate con una W, cioè Unicode.

Come ho capito la codifica.

const char *Utf8;
const char *Ansi;
const wchar_t *Utf16;
const wchar_t *Utf32;

utf-16 implica il tipo wchar_t, la funzione di libreria che legge la stringa restituisce const wchar_t*
Da questo risulta chiaro che la funzione restituisce un puntatore alla stringa in codifica utf-16
Nelle proprietà del progetto, il supporto dei caratteri Unicode è anche selezionato.
La documentazione di mql dice che la stringa funziona in Unicode.

 

Sto ottimizzando di nuovo, non sono sicuro di poter testare la velocità di esecuzione di questo codice:

void OnStart()
{  datetime m_stoptime = 0;
//1.
   if(m_stoptime < TimeCurrent())
   {
      //расчеты   
   }


//2.
   MqlTick last_tick;
   if(SymbolInfoTick(_Symbol, last_tick))
   {  if(m_stoptime < last_tick.time) 
      {
         //расчеты
      }
   }

}

Ho il sospetto che la variante 2 girerà più velocemente?

se è così, dove possono essere le insidie - uso in OnTick() - per cercare nell'ottimizzatore il tempo di scambio, cercando modi per ottimizzare il codice


SZZ: posso chiedere come controllare le opzioni di velocità numero 1 e numero 2, è molto probabile che il compilatore ottimizzi il codice eseguibile e i test non saranno corretti - quindi chiedo

 
Igor Makanu:

Posso chiedere come verificare le varianti 1 e 2 in termini di velocità, c'è un'alta probabilità che il compilatore ottimizzi il codice eseguibile e i test non saranno corretti - quindi chiedo

Eseguire il solito test separatamente per 1 e 2 e confrontare i tempi? )

Se il tempo è trascurabile, eseguite la stessa ottimizzazione con la variante 1 e la variante 2.

 
Igor Makanu:

HH: Posso chiedere come testare le varianti #1 e #2 sulla velocità, è altamente probabile che il compilatore ottimizzi il codice eseguibile e i test non saranno corretti - ecco perché chiedo

https://www.mql5.com/ru/code/18804

TesterBenchmark
TesterBenchmark
  • www.mql5.com
При написании разных версий кода может возникнуть необходимость измерения влияния их на общую производительность советника в тестере. Это позволяет не только понять, насколько оптимален написанный код по сравнению с другим, но и дает предпосылки к будущей быстрой оптимизации советника. Такой подход позволяет выявить "бутылочное горлышко" в...
 
Igor Makanu:

Sto ottimizzando di nuovo, non sono sicuro di poter testare la velocità di esecuzione di questo codice:

Ho il sospetto che la variante 2 girerà più velocemente?

se è così, dove possono essere le insidie - uso in OnTick() - per trovare nel tempo di scambio dell'ottimizzatore, cercando modi per ottimizzare il codice


SZZ: posso chiedere come controllare le opzioni di velocità numero 1 e numero 2, è molto probabile che il compilatore ottimizzi il codice eseguibile e i test non saranno corretti - quindi chiedo

Controlla in modalità debug. Il compilatore non dovrebbe ottimizzare lì, anche se non so come sia nella realtà.
 

Domanda su ArrayResize. Faccio una riserva per diversi gigabyte in una volta sola. Poi aumento gradualmente la dimensione che è inferiore alla riserva iniziale.

Perché TaskManager mostra un aumento del consumo di memoria durante l'aumento delle dimensioni?

 
fxsaber:

Domanda su ArrayResize. Faccio una riserva per diversi gigabyte in una volta sola. Poi aumento gradualmente la dimensione che è inferiore alla riserva iniziale.

Perché TaskManager mostra un aumento del consumo di memoria durante l'aumento delle dimensioni?

Perché oltre a metatrader c'è il sistema operativo Windows, che alla fine decide quale delle dozzine di processi (a proposito, ognuno di loro ha 4 GB di spazio di indirizzamento per impostazione predefinita) dovrebbe davvero essere assegnato alla RAM (quanta RAM hai lì?).
 
Andrey Khatimlianskii:

Eseguire un test normale separatamente per 1 e 2 e confrontare i tempi? )

Se il tempo è trascurabile, eseguite la stessa ottimizzazione con la variante 1 e la variante 2.

Sto facendo qualcosa di sbagliato, ancora non ho potuto vedere la differenza, i risultati fluttuano intorno a 0,1 sec su una singola corsa