Errori, bug, domande - pagina 1628

 
HistoryOrderGetInteger(OrderTicket, ORDER_TIME_DONE_MSC ) - restituisce zero nel tester!
 

Errore nell'apertura di un file da parte dell'esaminatore. E se per esempio

1. rimuovere "alcuni codici irrilevanti" (vedi sotto)

2. o rimuovere ::Sleep(1000)

non c'è nessun errore

//Test.mq5
#import "Test001.ex5"
        string f( string file );
#import
string __Period() { return StringSubstr( EnumToString((ENUM_TIMEFRAMES)Period()), 7 ); }
void OnInit()
{
        Print( Symbol(), ",", __Period(), ", результат=", f( "test.txt" ));
}

Sequenza di azioni:

1. Creare un nuovo profilo (ad esempio "Test")

2. aprire due nuovi grafici allegando l'Expert Advisor Test.ex5 a entrambi i grafici (vedi immagine)

4. Seleziona qualsiasi altro profilo esistente

5. Selezionare il profilo "Test".

risultato:

Con Test001.mq5 che assomiglia a questo:

//Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        ::ResetLastError();
        int hFile = ::FileOpen( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
        if ( hFile == INVALID_HANDLE )
                return ::StringFormat( "Error(%d): Не был открыт файл: %s", ::GetLastError(), file );
        ::Sleep( 1000 );
        ::FileClose( hFile );
        return "OK";
}
File:
Test001.ex5  16 kb
 

Il file test.txt stesso non è allegato al messaggio, ma assomiglia a questo

Informazioni aggiuntive: posizione del file da aprire nel senso di FILE_COMMON - non influenza l'errore

 
Andrey Barinov:

Questa è l'ottimizzazione del codice.

Se in metaeditor.ini nel campo [Experts] scrivete OPTIMIZE=0, allora la velocità di compilazione sarà come in 4. Ho alcuni progetti che compilano in 20 secondi e altri che vanno in loop di ottimizzazione infinita :)

Wow, grazie amico! Dov'eri prima! ) E stavamo agonizzando qui... La cosa più strana è che gli sviluppatori non hanno detto nulla di questa opzione
 
Alexey Navoykov:
Wow, grazie amico! Dove sei stato prima! ) E qui stiamo soffrendo ... La cosa strana è che gli sviluppatori non hanno parlato di questa opzione.

Non silenzioso. C'è un argomento di 18 pagine sul forum dove questa opzione è stata appena descritta.

A proposito, l'ottimizzazione non è abilitata quando si compila per il debug.

 
Andrey Barinov:

Questa è l'ottimizzazione del codice.

Se in metaeditor.ini nel campo [Experts] scrivete OPTIMIZE=0, allora la velocità di compilazione sarà come in 4. Ho alcuni progetti che compilano in 20 secondi, e altri che vanno in loop di ottimizzazione infinita :)

Esattamente! Detto questo, io stesso l'ho impostato a 1 qualche tempo fa e me ne sono dimenticato. ))

Alexey Navoykov:
... E stiamo ancora lottando qui... La cosa strana è che gli sviluppatori non hanno detto nulla di questa opzione

L'argomento è stato discusso in dettaglio:Test di un nuovo compilatore MQL5 per piattaforme x64 - accelerazione da 2 a 10 volte!>>>

>>> L'ho dimenticato. )

All'inizio non avevo nemmeno questa ottimizzazione funzionante. Cioè la compilazione fallirebbe in alcuni casi. Ma poi sono riuscito a trovare la ragione. Poi è stato risolto e ho impostato il parametro a 1 in uno dei terminali e me ne sono dimenticato. E ieri ero seduto e mi chiedevo perché in un editor MT5 la compilazione è molto più veloce che in un altro editor MT5.

//---

Ora, se lo imposto a 0, la compilazione è ~25 volte più veloce.

0 error(s), 0 warning(s), compile time: 668 msec                1       1
 
Anatoli Kazharski:

Naturalmente, anche i miei progetti più complessi in MetaTrader 5 richiedono molto tempo per la compilazione. Ci vogliono anche 11 secondi. Esattamente le stesse versioni, ma in MetaTrader 4 può essere fino a 25 volte più veloce.

In MT5, il compilatore è più avanzato e ottimizza il codice in modo che venga eseguito fino a 10 volte più velocemente che in MT5. Ne abbiamo scritto e spiegato prima.

Il compilatore MQL5 deve creare due copie del codice per compatibilità - per la vecchia versione a 32 bit (senza ottimizzazione completa) e la versione massimamente ottimizzata per 64 bit. La piena potenza di MQL5 si rivela solo in 64 bit.

 
Renat Fatkhullin:

Il compilatore di MT5 è più avanzato, ottimizza il codice in modo da farlo girare fino a 10 volte più veloce di MT5.

Inoltre, il compilatore deve creare due copie del codice per compatibilità - per la vecchia versione a 32 bit (senza ottimizzazione completa) e la versione massimamente ottimizzata per 64 bit. L'intera potenza di MQL5 si rivela solo in 64 bit.

Grazie. Ho già rinfrescato la memoria sul thread in cui tutto questo è stato discusso.

Lo imposterò a 0 per il tempo di sviluppo, poiché devo spesso eseguire la compilazione ed è molto fastidioso aspettare 10 secondi. E per il prodotto finale prima della compilazione finale, metterò 1.

 
Renat Fatkhullin:

In MT5, il compilatore è più avanzato e ottimizza il codice in modo da farlo girare fino a 10 volte più velocemente che in MT5. Lo abbiamo già scritto e spiegato prima.

Il compilatore MQL5 deve creare due copie del codice per compatibilità - per la vecchia versione a 32 bit (senza ottimizzazione completa) e la versione massimamente ottimizzata per 64 bit. La piena potenza di MQL5 si rivela solo in 64 bit.

Se si cambia il parametroOPTIMIZE quando MetaEditor è in esecuzione, è necessario ricaricarlo per accettare le impostazioni o no?
 
coderex:
se il parametroOPTIMIZE viene cambiato quando il MetaEditor è in esecuzione, deve essere ricaricato per accettare le impostazioni o no?
È più veloce provare da soli. L'ho appena testato. Non è necessario riavviare l'editor.
Motivazione: