Questions des débutants MQL5 MT5 MetaTrader 5 - page 1076

 

Comment lire un grand fichier en une seule ligne ?

FileReadString()

Lors de la lecture d'un fichier binaire, la longueur de la chaîne à lire doit être spécifiée. Lors de la lecture d'un fichier txt, la longueur de la chaîne n'est pas requise, et la chaîne sera lue de la position actuelle jusqu'au caractère de saut de ligne "\r\n". Lors de la lecture d'un fichier csv, la longueur de la chaîne n'est pas requise, la chaîne sera lue à partir de la position actuelle jusqu'au délimiteur le plus proche ou jusqu'au caractère de fin de la chaîne de texte.

Le seul indicateur pour le fichier entier est FILE_BIN, mais dans MQL5, contrairement à MQL4, il est limité à 4095 octets. Comment obtenir un texte volumineux d'un fichier sur une seule ligne ?
 
Сергей Таболин:

Ce n'est pas ce que je veux dire.

"Et avec un NOT logique à résoudre - inverser les bits, mais je n'ai pas de terminal - je ne me souviens pas comment faire un NOT par bit dans MQL, et je ne veux pas lire l'aide en ligne".

Je veux dire, soit vous me donnez une preuve, soit vous ne brouillez pas les pistes. ))))

"Tout le monde peut faire une erreur. Seuls les forts peuvent admettre une erreur !". Si personne ne l'a encore exprimé, c'est ma sagesse ;))). Si quelqu'un l'a déjà dit - j'ai répété la sagesse d'un homme sage ))))

Je ne comprends toujours pas vos affirmations ? Vous suggérez que je dois vous prouver quelque chose ? - Pourquoi ? ))))

Ici, j'ai reproduit via NOT et vérifié toutes les variantes discutées :

void OnStart()
  {
//---
   uint TForiginal=OBJ_PERIOD_M1|OBJ_PERIOD_M2|OBJ_PERIOD_M3|OBJ_PERIOD_M4|OBJ_PERIOD_M5|OBJ_PERIOD_M6|OBJ_PERIOD_M10|
                   OBJ_PERIOD_M12|OBJ_PERIOD_M15|OBJ_PERIOD_M20|OBJ_PERIOD_M30|OBJ_PERIOD_H1;

   uint TFwithNOT=(~OBJ_PERIOD_H1&OBJ_PERIOD_H2)-1;
   uint TFwithShift=OBJ_ALL_PERIODS>>9;
   Print("TForiginal = ",TForiginal);
   Print("TFwithNOT = ",TFwithNOT);
   Print("TFwithShift = ",TFwithShift);
  }
//+------------------------------------------------------------------+

La variante NOT fonctionne avec n'importe quel TF, mais se remplit en fonction de (~TF_ en dessous duquel on affiche & TF_un plus ancien que le TF requis)-1 ;

 

Bonjour à tous ! Une dernière question...

Il y a un programme MQL5, il a un réglage (beaucoup) de "paramètres d'entrée". Le programme effectue des calculs et crée/supprime et gère des objets graphiques selon les besoins.

Après la modification des paramètres d'entrée à partir de la fenêtre de configuration, l'événementInit est généré, ce qui entraîne l'initialisation du programme et les objets "recalculer" et "redessiner", ce qui est, en principe, ce dont on a besoin, maisl'événementInitest également généré lorsque la période du graphique est modifiée (et autre), ce qui fait que le processus se répète à chaque fois, même lorsque ce n'est pas nécessaire.

Question :Comment puis-je exclure l'initialisation du programme lors de l'événementInit siles paramètres d'entrée ne sont pas modifiés mais laissent l'initialisation au démarrage du programme (terminal) ?

Variante possible : mémoriser les valeurs définies et les comparer lorsque l'événement Init se produitet, si elles sont différentes, permettre l'initialisation, mais il y a beaucoup de paramètres d'entrée...

 
Anzhela Sityaeva:

Bonjour à tous ! Une dernière question...

Il y a un programme MQL5, il a un réglage (beaucoup) de "paramètres d'entrée". Le programme effectue des calculs et crée/supprime et gère des objets graphiques selon les besoins.

Après la modification des paramètres d'entrée à partir de la fenêtre de configuration, l'événementInit est généré, ce qui entraîne l'initialisation du programme et les objets "recalculer" et "redessiner", ce qui est, en principe, ce dont on a besoin, mais l'événementInit est également généré lorsque la période du graphique est modifiée (et autre), ce qui fait que le processus se répète à chaque fois, même lorsque ce n'est pas nécessaire.

Question :Comment puis-je exclure l'initialisation du programme lors de l'événementInit si les paramètres d'entrée ne sont pas modifiés mais laisser l'initialisation au démarrage du programme (terminal) ?

Variante possible : mémoriser les valeurs définies et les comparer lorsque l'événement Init se produitet, si elles sont différentes, permettre l'initialisation, mais il y a beaucoup de paramètres d'entrée...

Voici quelques conseils pour un autre problème similaire

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Fonctionne dans l'EA, mais pas bien dans l'indicateur, musique quand l'indicateur démarre

Ihor Herasko, 2019.06.17 14:12

Oui.

  1. Lorsque l'indicateur démarre, il crée une variable terminale globale. Comme... je suis en train de démarrer.
  2. Un message d'accueil est diffusé.
  3. Lors du déchargement (coché dans OnDeinit), la variable globale du terminal est supprimée.
  4. Si, au cours de l'opération, le TF est modifié ou les paramètres changés, alors à la sortie, dans OnInit, la variable globale du terminal est vérifiée. Si c'est le cas, la salutation n'est pas jouée. Dans le cas contraire, le message d'accueil est diffusé.

 
Alexey Viktorov:

Voici quelques conseils pour un autre problème similaire



Merci pour la réponse, il semble que dans notre cas, nous devrons suivre l'état de quelques dizaines de changements de correspondancesen décrivant cela via un "blanc" sur un graphe pour suivre leurs changements, ou supporter une initialisation inutile tant qu'il n'y a pas trop d'objets...
 
Anzhela Sityaeva:
Merci pour la réponse, il semble que dans notre cas nous devrons suivre l'état de quelques dizaines de changements de correspondances en le décrivant par un "blanc" sur le graphe pour suivre leurs changements, ou supporter une initialisation inutile tant qu'il n'y a pas tant d'objets...

Mais la question que vous avez posée était.

Anzhela Sityaeva:

Bonjour à tous ! Une dernière question...

Il y a un programme MQL5, il a des paramètres (beaucoup) "Paramètres d'entrée". Le programme effectue des calculs et crée/supprime et gère des objets graphiques selon les besoins.

Après la modification des paramètres d'entrée à partir de la fenêtre de configuration, l'événementInit est généré, ce qui entraîne l'initialisation du programme et les objets "recalculer" et "redessiner", ce qui est, en principe, ce dont on a besoin, mais l'événementInit est également généré lorsque la période du graphique (et autre)est modifiée , ce qui fait que le processus se répète à chaque fois, même lorsque ce n'est pas nécessaire.

Question :Comment puis-je exclure l'initialisation du programme lors de l'événementInitsi les paramètres d'entrée ne sont pas modifiés mais laissent l'initialisation au démarrage du programme (terminal) ?

Variante possible : mémoriser les valeurs définies et les comparer lorsque l'événement Init se produitet, si elles sont différentes, permettre l'initialisation, mais il y a beaucoup de paramètres d'entrée...

Et dans votre situation, l'une de ces astuces permettra d'éviter ces redessinages inutiles d'objets. Et si ces objets sont supprimés dans OnDeinit(), vous devez interdire la suppression à cet endroit également lors du changement de graphique.

Il s'agit d'un forum pour le trading, les systèmes de trading automatisés et les tests de stratégies.

Comment supprimer la variable globale du terminal à la clôture du graphique ?

Alexey Viktorov, 2019.06.29 08:40

Prêtez attention à ce tableau

REASON_PROGRAMME

0

L'expert a cessé de fonctionner en appelant ExpertRemove()

REASON_REMOVE

1

Programme retiré du tableau

RAISON_RECOMPILATION

2

Programme recompilé

RAISON_CHARTCHANGE

3

Le symbole ou la période du graphique a été modifié

RAISON_CHARTCLOSE

4

La carte est fermée

PARAMÈTRES_DE_RAISON

5

Les paramètres d'entrée ont été modifiés par l'utilisateur

REASON_ACCOUNT

6

Un autre compte a été activé ou reconnecté au serveur commercial parce que les paramètres du compte ont été modifiés.

MOTIF_TEMPLATE

7

Un autre modèle de graphique a été appliqué

RAISON_INITFAITE

8

Le gestionnaire OnInit() a renvoyé une valeur non nulle.

REASON_CLOSE

9

Le terminal était fermé


et sur cette ligne de votre code

   if(reason==1) GlobalVariableDel("val");

Mais si je me souviens bien du début de votre problème, il est préférable de poser la condition comme ceci

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

Mais dans votre question, c'était

Dans votre situation, l'une de ces astuces permettra d'éviter ces redessinages inutiles d'objets. Et si ces objets sont supprimés dans OnDeinit(), alors vous devez interdire la suppression à cet endroit également lors du changement de graphique.


La direction est claire, essayons... Je vous remercie de votre réponse.
 
Je n'ai pas trouvé d 'exemple d'EA dans Codebase où une condition de clôture peut être définie, pas seulement le SL/TP standard. Quelqu'un peut-il me donner un indice ?
 
Sprut112:
Je n'ai pas trouvé d 'exemple d'EA dans Codebase où une condition de clôture peut être définie, pas seulement le SL/TP standard. Quelqu'un peut-il me donner un indice ?

Quelle est la différence entre une condition d'ouverture et une condition de fermeture ?

 
Sprut112:
Je n'ai pas trouvé dans Codebase un exemple d'EA où l'on peut écrire la condition de fermeture d'une position, et pas seulement le SL/TP standard. Quelqu'un peut-il me le dire ?

Vladimir Karputov avait de telles conditions dans ses codes, mais vous devez apprendre à lire son code vous-même).

Raison: