Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1531

 

Comment faire face à un gel terminal ?

Le code est simple, mais il est très lent.

   for(int i=limit;i>=0;i--)
     {
      RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i);
      RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,MA_Period,0,MODE_SMA,i);
     }
 
Alexey Viktorov:

Il est plus facile et plus sûr de mettre le drapeau de premier démarrage dans OnTick().

Il doit effectuer les calculs et le rendu en même temps, même, par exemple, le week-end.

 
Igor Makanu:

Je ne vais pas deviner ce qui va se passer, la première chose que je vois est que vous avez fait une pause pour obtenir les valeurs de l'indicateur dans OnInit() - que se passera-t-il si l'utilisateur change de TF à ce moment-là ?

SZY : Comment se comporterait votre code si vous exécutez une EA, puis fermez le terminal et le rouvrez avec une EA en cours d'exécution ?

ces variantes sont considérées

 

S'il te plaît, rappelle-moi une chose insignifiante. Mon EA ouvre et ferme les ordres dans le testeur normalement. Cela fait déjà une semaine que je travaille avec la démo et tout va bien. Mais dans deux cas, lors de l'ouverture du deuxième ordre (pour une position Mart), il n'a pas fermé les deux lorsque le solde est positif, mais un seul s'est battu avec le deuxième jusqu'à ce que je ferme l'ordre de prise. J'ai regardé le journal - le prixétait "requalification". Cela ne devrait pas être un problème et devrait se fermer de toute façon, mais ce n'est pas le cas.

Ainsi, je n'ai pas écrit la fonction ENVOYER (OBLIGATOIRE) DE LA FERMETURE DE LA COMMANDE en cas de condition. S'il vous plaît, dites-moi comment écrire cette banalité. Merci.

 
Порт-моне тв:

S'il te plaît, rappelle-moi une chose insignifiante. Mon EA ouvre et ferme les ordres dans le testeur normalement. Cela fait déjà une semaine que je travaille avec la démo et tout va bien. Mais dans deux cas, lors de l'ouverture du second ordre (Marting), mon EA n'a pas fermé les deux lorsque le solde est positif, mais un seul s'est battu avec le second jusqu'à ce que je ferme l'ordre de prise. J'ai regardé le journal - le prixétait "requalification". Cela ne devrait pas être un problème et devrait se fermer de toute façon, mais ce n'est pas le cas.

Je n'ai donc pas écrit la fonction ENVOI (OBLIGATOIRE) DE LA FERMETURE DE LA COMMANDE en cas de condition. S'il vous plaît, dites-moi comment écrire cette banalité. Merci.

if(GetLastError()==138)OrderClose(...);
ou augmenter le glissement
 
MakarFX:
Ou augmenter le glissement.

Merci de votre réponse. Pourquoi 138 ???? S'agit-il d'un numéro d'erreur ? Et de combien augmenter le glissement (veuillez expliquer la signification de l'augmentation). Merci.

 
Порт-моне тв:

Pourquoi 138 ???? S'agit-il d'un numéro d'erreur ?

Oui

Port mone tv:

Et de combien augmenter le glissement (veuillez expliquer la signification de l'augmentation).

C'est vous qui voyez, plus il y a de glissement, moins il y a de requêtes.

 
MakarFX:

Comment faire face à un gel terminal ?

Le code est simple, mais il est très chargé.

C'est étrange...

Je l'ai fait avec int start() au lieu de OnCalculate et il ne se bloque pas du tout.

Pourquoi ?

 
Andrey Sokolov:

Il est nécessaire de faire les calculs et les rendus en une seule fois, même, par exemple, le week-end.

Les indicateurs fonctionnent en un seul fil, si l'un d'eux attend, tous les autres attendent, jusqu'à ce que le terminal se bloque.
Lors du démarrage de MT, l'initialisation de l'indicateur (-s) peut se faire avant l'initialisation des variables terminales, c'est-à-dire qu'il est très facile d'attraper un hang.

Raison: