Erreurs, bugs, questions - page 1628

 

Erreur d'ouverture d'un dossier par l'examinateur. Et si par exemple

1. supprimer "certains codes non pertinents" (voir ci-dessous)

2. ou supprimer ::Sleep(1000)

il n'y a pas d'erreur

//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" ));
}

Séquence d'actions :

1. Créer un nouveau profil (par exemple "Test")

2. ouvrez deux nouveaux graphiques en attachant le Conseiller Expert Test.ex5 aux deux graphiques (voir image)

4. Sélectionnez un autre profil existant

5. Sélectionnez le profil "Test".

résultat :

Avec Test001.mq5 ressemblant à ça :

//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";
}
Dossiers :
Test001.ex5  16 kb
 

Le fichier test.txt lui-même n'est pas joint au message, mais ressemble à ceci

Information supplémentaire : emplacement du fichier à ouvrir au sens de FILE_COMMON - n'affecte pas l'erreur

 
Andrey Barinov:

Il s'agit d'une optimisation du code.

Si dans metaeditor.ini dans le champ [Experts] écrivez OPTIMIZE=0, alors la vitesse de compilation sera comme dans 4. J'ai des projets qui compilent en 20 secondes et d'autres qui entrent dans une boucle d'optimisation infinie :)

Wow, merci mon pote ! Où étiez-vous avant ! ) Et nous étions en train d'agoniser ici... Le plus étrange, c'est que les développeurs n'ont rien dit sur cette option.
 
Alexey Navoykov:
Wow, merci mon pote ! Où étiez-vous avant ! ) Et nous voilà en train de souffrir... Ce qui est étrange, c'est que les développeurs ont gardé le silence sur cette option.

Pas silencieux. Il y a un sujet de 18 pages sur le forum où cette option vient d'être décrite.

À propos, l'optimisation n'est pas activée lors de la compilation pour le débogage.

 
Andrey Barinov:

C'est l'optimisation du code.

Si dans metaeditor.ini dans le champ [Experts] écrivez OPTIMIZE=0, alors la vitesse de compilation sera comme dans 4. J'ai des projets qui compilent en 20 secondes, et d'autres qui entrent dans une boucle d'optimisation infinie :)

Exactement ! Cela dit, je l'ai moi-même réglé sur 1 il y a quelque temps et je l'ai oublié. ))

Alexey Navoykov:
... Et nous sommes toujours en train de lutter ici... Ce qui est étrange, c'est que les développeurs n'ont rien dit sur cette option.

Le sujet a été discuté en détail :Test d'un nouveau compilateur MQL5 pour les plateformes x64 - accélération de 2 à 10 fois !>>>

>>> C'est juste que j'ai oublié. )

Au début, je n'ai même pas réussi à faire fonctionner cette optimisation. C'est-à-dire que la compilation échouerait dans certains cas. Mais ensuite, j'ai réussi à trouver la raison. Puis il a été corrigé et j'ai mis le paramètre à 1 dans l'un des terminaux et je l'ai oublié. Et hier, je me demandais pourquoi la compilation est beaucoup plus rapide dans un éditeur MT5 que dans un autre éditeur MT5.

//---

Maintenant, si je le mets à 0, la compilation est ~25 fois plus rapide.

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

Bien sûr, mes projets les plus complexes dans MetaTrader 5 prennent également beaucoup de temps à compiler. Cela prend même jusqu'à 11 secondes. Exactement les mêmes versions, mais dans MetaTrader 4, elles peuvent être jusqu'à 25 fois plus rapides.

Dans MT5, le compilateur est plus avancé et optimise le code de sorte qu'il s'exécute jusqu'à 10 fois plus vite que dans MT5. Nous l'avons déjà écrit et expliqué.

Le compilateur MQL5 doit créer deux copies du code pour la compatibilité - pour l'ancienne version 32 bits (sans optimisation complète) et la version optimisée au maximum pour 64 bits. La pleine puissance de MQL5 ne se révèle qu'en 64 bits.

 
Renat Fatkhullin:

Le compilateur de MT5 est plus avancé, il optimise le code de sorte qu'il s'exécute jusqu'à 10 fois plus vite que MT5.

En outre, le compilateur doit créer deux copies du code pour la compatibilité - pour l'ancienne version 32 bits (sans optimisation complète) et la version optimisée au maximum pour 64 bits. Toute la puissance de MQL5 ne se révèle qu'en 64 bits.

Merci. Je me suis déjà rafraîchi la mémoire sur le fil où tout cela a été discuté.

Je le mettrai à 0 le temps du développement car je dois souvent effectuer une compilation et il est très fastidieux d'attendre 10 secondes. Et pour le produit final avant la compilation finale, je mettrai 1.

 
Renat Fatkhullin:

Dans MT5, le compilateur est plus avancé et optimise le code de sorte qu'il s'exécute jusqu'à 10 fois plus vite que dans MT5. Nous l'avons déjà écrit et expliqué.

Le compilateur MQL5 doit créer deux copies du code pour la compatibilité - pour l'ancienne version 32 bits (sans optimisation complète) et la version optimisée au maximum pour 64 bits. La pleine puissance de MQL5 ne se révèle qu'en 64 bits.

Si vous modifiez le paramètreOPTIMIZE lorsque MetaEditor est en cours d'exécution, devez-vous le recharger pour qu'il accepte les modifications ou non ?
 
coderex:
si le paramètreOPTIMIZE est modifié lorsque le MetaEditor est en cours d'exécution, doit-il être rechargé pour accepter les réglages ou non ?
C'est plus rapide de l'essayer soi-même. Je viens de le tester. Il n'est pas nécessaire de redémarrer l'éditeur.
 
Maxim Kozin:
Pouvez-vous me dire quelle est la difficulté. L'Expert Advisor dispose d'une analyse standard des indicateurs, si la condition est remplie, la fonction d'ouverture de l'ordre est écrite dans le code, avec vérification de l'exactitude du TP, de l'exactitude du SL du prix, etc. Il n'y a pas de boucle. Il n'y a pas de boucle. Après le contrôle d'ouverture, nous mémorisons la barre pour qu'elle ne s'ouvre pas sur cette barre et sur la suivante, puis nous revenons ;
Dans le testeur, tout fonctionne bien :) dans les comptes avec exécution instantanée, l'ordre est également ouvert normalement. Mais pour les comptes ECN, deux ordres sont ouverts en même temps avec quelques secondes d'écart. Comment cela peut-il arriver ? Comment lutter contre cela ? Peut-être faudrait-il prévoir un contrôle supplémentaire ?
Vérifiez au moins l'onglet "Journal".