Auto-apprentissage du langage MQL5 à partir de zéro - page 65

 
MrBrooklin:

Bonjour, Valery ! Merci beaucoup, votre version "...si les positions avec notre magik et à notre symbole sont égales à zéro, nous vérifions le temps et ouvrons une position..." s'est avérée être la plus simple et la plus efficace. Je l'ai ajouté à la condition de vérification du temps && PositionTotal()==0 et une seule position avec le montant nécessaire est ouverte !

Sincèrement, Vladimir.


Malheureusement, MKL ne dispose pas de commande qui renvoie le nombre de positions sur le symbole. TotalPosition renvoie toutes les positions du compte sur tous les symboles. Par conséquent, pour obtenir des positions sur le symbole, vous devez rechercher toutes les positions et comparer la position du symbole à la nôtre.

Aussi. La logique dans le temps de tête, l'ouvrir et vérifier la présence de notre position, trilling n'est pas toujours optimale. Parfois, il est préférable de vérifier d'abord si la position est ouverte avec notre assistant et si elle l'est, nous vérifions l'heure de clôture, ou bien nous la chalutons, ou bien nous vérifions l'heure d'ouverture.

L'objectif est de réduire le nombre d'actions d'EE.

 
Valeriy Yastremskiy:

Malheureusement, il n'existe pas de commande dans MKL qui renvoie le nombre de positions sur un symbole. TotalPositions renvoie toutes les positions sur tous les symboles. Par conséquent, pour obtenir les positions sur un symbole, vous devez rechercher toutes les positions et comparer la position du symbole à la nôtre.

Aussi. La logique dans le temps de tête, l'ouvrir et vérifier la présence de notre position, trilling n'est pas toujours optimale. Parfois, il est préférable de vérifier d'abord si la position est ouverte avec notre assistant et si elle l'est, nous vérifions l'heure de clôture, ou bien nous la chalutons, ou bien nous vérifions l'heure d'ouverture.

L'objectif est de réduire le nombre d'actions d'EE.

Tout est clair, Valery ! J'essaie de mettre en œuvre vos conseils.

Sincèrement, Vladimir.

 
Valeriy Yastremskiy:

Si les positions avec notre Magik et sur notre symbole sont nulles, nous vérifions l'heure et ouvrons une position, si elle est de 1, nous n'ouvrons pas de position, nous vérifions l'heure de clôture et chalutons, si elle est supérieure à 1, nous alertons et ne travaillons pas. On peut utiliser des parchemins ou des chèques iff.

Bonjour, Valery ! J'ai essayé d'écrire le code sans l'énumération de la position. Je l'ai écrit, je l'ai vérifié, tout fonctionne.

   if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
   && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
      OpenBUY();
Sincèrement, Vladimir.
 
MrBrooklin:

Bonjour Valery ! J'ai essayé d'écrire le code sans l'énumération de la position. Je l'ai écrit, je l'ai vérifié, tout fonctionne.

Salutations, Vladimir.

C'est bien pour un début, mais seulement pour un début. Les conditions sont trop strictes. S'il n'y a aucune position sur notre symbole et aucune position avec notre magik sur tous les instruments, alors cela semble normal. Dans la vie réelle, vous pouvez avoir 2 fenêtres ouvertes sur un symbole et une autre peut avoir une position. Vous pouvez simplement utiliser Magik pour comptabiliser par exemple comme trishkin, les 3 premiers chiffres - code du symbole et les 2 suivants - code du script/conseiller. Et la première étape consiste à coder manuellement, ou à générer une magik en ajoutant des lignes en fonction du symbole de la fenêtre et du code du script, puis à convertir la ligne en un nombre.

La méthode classique consiste à rechercher tous les ordres ou toutes les positions.

Mais c'est trop pour le début.

C'est pourquoi il est bon de commencer par là.

 
Valeriy Yastremskiy:

C'est bien de commencer par, mais seulement de commencer par. Les conditions sont trop strictes. S'il n'y a aucune position sur notre symbole et aucune position avec notre magik sur tous les instruments, alors cela semble normal. Dans la vie réelle, vous pouvez avoir 2 fenêtres ouvertes sur un symbole et une autre peut avoir une position. Vous pouvez simplement utiliser Magik pour comptabiliser par exemple comme trishkin, les 3 premiers chiffres - code du symbole et les 2 suivants - code du script/conseiller. Et la première étape consiste à coder manuellement, ou à générer un magik en ajoutant des lignes en fonction du symbole de la fenêtre et du code du script, puis à convertir la ligne en un nombre.

La méthode classique consiste à rechercher tous les ordres ou toutes les positions.

Mais c'est trop pour le début.

C'est pourquoi il est bon de commencer par là.

Merci, Valeriy ! La recherche de tous les postes est l'une des prochaines étapes de l'auto-apprentissage que je ne manquerai pas de faire.

Salutations, Vladimir.

 
Valeriy Yastremskiy:

Pour une raison quelconque, tous les ordres ou positions sont considérés comme un dépassement classique.

Hélas, c'est une tradition dans la communauté MQL, toutes les EA sont développées en tenant compte d'une perte soudaine de connexion et/ou d'une panne de courant d'un PC.

D'un côté, c'est une bonne méthodologie, mais d'un autre côté, cela impose de grandes restrictions sur le style d'écriture du code EA - EA ne travaille qu'avec des maîtres d'ordres. Par exemple, si vous avez besoin d'écrire une martingale, EA cherchera dans l'historique le dernier ordre avec ses maîtres et regardera le profit/la perte et décidera d'augmenter ou non le nouveau lot.

... en général, depuis la création de MT - tout le monde attend que l'internet disparaisse et la stratégie elle-même n'est plus si importante ;))

 
Igor Makanu:

Hélas, c'est une tradition dans la communauté MQL, toutes les EA sont développées en pensant à une perte soudaine de connexion et/ou une panne de courant du PC.

D'un côté, c'est une bonne méthodologie, mais d'un autre côté, cela impose de grandes restrictions sur le style d'écriture du code EA - EA ne travaille qu'avec des maîtres d'ordres. Par exemple, si vous avez besoin d'écrire une martingale, EA cherchera dans l'historique le dernier ordre avec ses maîtres et regardera le profit/la perte et décidera d'augmenter ou non le nouveau lot.

... en général depuis la création de MT - tout le monde attend que l'Internet disparaisse, et la stratégie elle-même n'est plus si importante ;))

Bonjour Igor, merci d'avoir partagé ces informations très utiles.

Sincèrement, Vladimir.

 
Igor Makanu:

Hélas, c'est une tradition dans la communauté MQL, toutes les EA sont développées en pensant à une perte soudaine de connexion et/ou une panne de courant du PC.

D'un côté, c'est une bonne méthodologie, mais d'un autre côté, cela impose de grandes restrictions sur le style d'écriture du code EA - EA ne travaille qu'avec des maîtres d'ordres. Par exemple, si vous avez besoin d'écrire une martingale, EA cherchera dans l'historique le dernier ordre avec ses maîtres et regardera le profit/la perte et décidera d'augmenter ou non le nouveau lot.

... En général, depuis la création de MT - tout le monde attend que l'internet disparaisse, et la stratégie elle-même n'est plus si importante ;))

Il faut toujours se protéger contre le feu, les inondations et la bêtise !) En général, je me limite à des arrêts en cas de perte de connexion avec DT.

 

Bonne journée et bonne humeur à tous !

Je continue à étudier le langage de programmation MQL5. J'ai commencé une étude détaillée de l'opérateur de boucle for, qui selon la référence MQL5, et je cite :

L'opérateur de boucle for

Exécute l'opérateur jusqu'à ce que l'expression vérifiée devienne fausse. L'expression est vérifiée avant chaque itération


Je vais à la description de l'opérateur de boucle for et là je lis cela :

Оператор for состоит из трех выражений и выполняемого оператора:

for(выражение1; выражение2; выражение3) 
   оператор;

Выражение1 описывает инициализацию цикла. Выражение2 - проверка условия завершения цикла.
Если оно истинно, то выполняется оператор тела цикла for. Все повторяется, пока выражение2 не станет ложным. 
Если оно ложно, цикл заканчивается и управление передается следующему оператору. 
ВыражениеЗ вычисляется после каждой итерации.

L'opérateur exécute un opérateur ? OK. Je prends et lance l'opérateur de boucle for pour rechercher toutes les positions ouvertes, puis j'écris l'instruction if avec les conditions dont j'ai besoin :

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
         && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
         OpenBUY();
     }

et ensuite rien ne se passe. La position d'achat n'est pas ouverte. Comment dois-je comprendre cela ? Je dois faire quelque chose de mal, ou je ne comprends pas du tout le terme de l'instruction for correctement ?

Cher expert ! Veuillez me conseiller, mais pas en mots, pas dans un code corrigé, sinon je n'apprendrai jamais le langage de programmation MQL5.

Sincèrement, Vladimir.
 
MrBrooklin:

Bonne journée et bonne humeur à tous !

Je continue à étudier le langage de programmation MQL5. J'ai commencé une étude détaillée de l'opérateur de boucle for, qui selon la référence MQL5, et je cite :

L'opérateur de boucle for

Exécute l'opérateur jusqu'à ce que l'expression vérifiée devienne fausse. L'expression est vérifiée avant chaque itération


Je vais à la description de l'opérateur de boucle for et là je lis cela :

L'opérateur exécute un opérateur ? OK. Je prends et j'exécute l'opérateur for loop pour essayer toutes les positions ouvertes, puis je tape l'instruction if avec les conditions dont j'ai besoin :

et rien ne se passe. La position d'achat n'est pas ouverte. Comment dois-je comprendre cela ? Je dois faire quelque chose de mal ou je ne comprends pas du tout le but de l'opérateur de boucle for?

Chers spécialistes ! Je vous demande de me donner votre avis, mais pas en paroles, sinon je n'apprendrai jamais le langage de programmation MQL5.

Sincèrement, Vladimir.

L'opérateur de boucle et les opérateurs dans le corps de la boucle. Ce n'est pas tout à fait une langue russe classique.

Tout est bon, bien sûr, mais où se trouve l'itérateur i dans le corps de la boucle ? Et pour obtenir le caractère de position et son symbole magique, il faut d'abord le sélectionner. La description du poste est une structure (dans MQL5 tout est une structure, les commandes, le temps et les affaires), et elle est remplie par sélection, par l'itérateur qui n'est pas un ticket de poste, mais un numéro de poste. Et nous devons nous rappeler que la structure de la description du poste est toujours le dernier choix.