Discussion de l'article "Présentation de MQL5 : Comment écrire un simple Expert Advisor et un indicateur personnalisé"

 

Un nouvel article Présentation de MQL5 : Comment écrire un simple Expert Advisor et un indicateur personnalisé a été publié :

Le langage de programmation MetaQuotes 5 (MQL5), inclus dans le terminal client MetaTrader 5, offre de nombreuses nouvelles possibilités et des performances supérieures par rapport au MQL4. Cet article vous aidera à vous familiariser avec ce nouveau langage de programmation. Les exemples simples de rédaction d'un Expert Advisor et d'un Indicateur personnalisé sont présentés dans cet article. Nous considérerons également quelques détails du langage MQL5, qui sont nécessaires pour comprendre ces exemples.

Auteur : Denis Zyatkevich

 
Je ne peux pas démarrer le débogueur pour un indicateur, par exemple MACD ou Custom Moving Average. En appuyant sur la touche F5, le bouton "Compile" se transforme en bouton "Cancel", après une fraction de seconde l'écran clignote et tout revient à l'état initial. L'onglet "Debug" n'apparaît pas. Dans le cas du débogage du script "AccountInfo", le débogueur fonctionne normalement, Build 257.
 
Le débogage des indicateurs n'est pas implémenté pour le moment.
 

Joyeux Jour de la Victoire !

Pourriez-vous me conseiller ?

Le conseiller expert contient un cycle de recherche alternée de toutes les positions ouvertes. La fonction PositionGetDouble(POSITION_SL) est utilisée dans le cycle. Il ressort de la description du paramètre POSITION_SL qu'il peut être utilisé pour obtenir leniveau de Stop Loss pour une position ouverte.

Question 1 : quelle valeur la fonction PositionGetDouble(POSITION_SL) affichera-t-elle si une position ouverte a été formée à la suite du déclenchement de plusieurs ordres en attente avec différents niveaux de Stop Loss ?

Question 2 : si une position ouverte a été formée suite au déclenchement de plusieurs ordres en attente avec différents niveaux de stop-loss, quelle est la meilleure façon d'obtenir des données sur ces niveaux de stop-loss ?

Si ce sujet a déjà été abordé, veuillez fournir un lien.

Документация по MQL5: Торговые функции / PositionGetDouble
Документация по MQL5: Торговые функции / PositionGetDouble
  • www.mql5.com
Торговые функции / PositionGetDouble - Документация по MQL5
 
Yedelkin:

Joyeux Jour de la Victoire !

Question 1 : quelle valeur la fonction PositionGetDouble(POSITION_SL) affichera-t-elle si une position ouverte a été formée suite au déclenchement de plusieurs ordres en attente avec des niveaux de stop-loss différents ?
Avez-vous vérifié ce que la fonction retourne ?
 
sergeev:
avez-vous vérifié ce que la fonction renvoie ?

Non, je ne l'ai pas fait. Parce que je ne connais pas toutes les conditions initiales importantes qui doivent être observées lors de la vérification (du test) d'une fonction particulière. Et aussi à cause de mon attitude négative à l'égard de la possibilité d'utiliser la méthode scientifique "poke" lors de l'apprentissage d'un langage de programmation nouveau pour moi.

Explication. Le très petit nombre d'articles consacrés aux Expert Advisors et l'absence d'un manuel sur MQL5 obligent l'utilisateur moyen à s'appuyer sur le matériel disponible sur le web, y compris cet article (très utile), pour mettre en œuvre sa propre stratégie de trading.

Comme vous le comprenez très bien, mes questions concernent des aspects théoriques et appliqués qui ne sont pas reflétés dans la version actuelle du Guide de référence MQL5, ainsi que dans les articles existants sur les conseillers experts MQL5.

Dans ces conditions, je pense qu'il est beaucoup plus raisonnable de poser des questions à des personnes compétentes (développeurs du langage et auteurs d'articles) sur certains aspects théoriques et appliqués des fonctions MQL5, plutôt que de mener des expériences, de "vérifier ce qu'une fonction renvoie" dans certaines conditions, et d'autres pratiques d'amateurisme similaires.

Je suis d'accord pour dire qu'une réponse de personnes compétentes sur "ce qui devrait être" semble plus optimale qu'une contre-question du type "avez-vous vérifié ce que la fonction renvoie" (en l'absence de ma compréhension des particularités de son fonctionnement).

 

J'ai trouvé la réponse. Dans le guide de l'utilisateur du terminal client :

...Уровни Тейк Профит и Стоп Лосс устанавливаются для позиции по последнему ордеру (рыночному или сработавшему отложенному).
Иными словами, стоп уровни в каждом последующем ордере по одной позиции заменяют предыдущие. 
...Срабатывание ордеров Тейк профит и Стоп Лосс приводит к полному закрытию позиции.  

Étrange. Puisqu'une seule position ouverte est possible pour chaque instrument financier, il s'avère que les scénarios avec fermeture partielle d'une position par stop-loss ne peuvent en principe pas être mis en œuvre?

P.S. Après avoir découvert cette particularité inhérente à MT5, il n'est pas nécessaire de vérifier la valeur renvoyée par la fonction PositionGetDouble(POSITION_SL) si une position ouverte a été formée à la suite du déclenchement de plusieurs ordres en attente avec des niveaux de stop-loss différents.

 
Yedelkin:

J'ai trouvé la réponse. Dans le manuel d'utilisation du terminal client :

Étrange. Étant donné qu'une seule position ouverte est possible pour chaque instrument financier, il s'avère que les scénarios avec fermeture partielle d'une position par stop loss ne peuvent en principe pas être mis en œuvre?

P.S. Après avoir découvert cette particularité inhérente à MT5, il n'est pas nécessaire de vérifier quelle valeur retourne la fonction PositionGetDouble(POSITION_SL), si une position ouverte a été formée suite au déclenchement de plusieurs ordres en attente avec différents niveaux de stop-loss.

il est possible de réaliser sous la forme de la fonction "izpodvypodvert vypert vypert podvypert" qui répartira le take profit en fonction du volume de transactions sur l'instrument donné en ordres en attente par niveaux.

Mais personnellement, je considère que cette fonction n'est pas nécessaire car je connais les terminaux de trading officiels où il n'y a pas de verrouillage.

 
CoreWinTT:

peut être fait comme une fonction "from-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub" ...

Oui, je me suis déjà creusé la tête sur ce sujet. Il y a trois options :)

- soit retravailler de manière créative les scénarios existants pour les adapter aux particularités de MT5 ;

- soit créer une classe de fonctions sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous-sous ;

- ou éviter d'utiliser des stop-loss et des take-profits dans les ordres, en opérant d'abord avec des paquets d'ordres de direction opposée.

Qu'à cela ne tienne, nous y arriverons ! :)

 

Question sur l'emplacement des fonctions ArraySetAsSeries dans le Conseiller Expert.

Les fonctions ArraySetAsSeries sont placées dans la fonction OnTick() juste après les fonctions CopyTime, CopyHigh et CopyLow.

Y a-t-il des inconvénients à placer les fonctions ArraySetAsSeries dans la fonction OnInit(), ou les tableaux doivent-ils toujours être indexés après avoir été copiés ?

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
Операции с массивами / ArraySetAsSeries - Документация по MQL5
 
Yedelkin:

Question concernant l'emplacement des fonctions ArraySetAsSeries dans l'EA.

Les fonctions ArraySetAsSeries sont placées dans la fonction OnTick() juste après les fonctions CopyTime, CopyHigh et CopyLow.

Y a-t-il des obstacles à placer les fonctions ArraySetAsSeries dans la fonction OnInit(), ou les tableaux doivent-ils toujours être indexés seulement après avoir été copiés ?

Pour les tampons d'indicateurs, il est indiqué SetIndexBuffer:

Remarque

Après la liaison, le tableau dynamique buffer[] sera indexé comme un tableau normal, même si le tableau lié est prédéfini pour être indexé comme une série temporelle. S'il est nécessaire de modifier l'ordre d'accès aux éléments du tableau de l'indicateur, il faut appliquer la fonction ArraySetAsSeries() après avoir lié le tableau avec la fonction SetIndexBuffer().

Il devrait en être de même pour les Expert Advisors.