Questions sur l'assistant MQL5 et la bibliothèque standard de classes de trading - page 10

 
Sevrer:

Bonjour.

J'ai décidé d'écrire mon propre module de signal à des fins purement cognitives. J'ai été confronté à un problème. J'ai compris que cela peut être fait par CExpertSignal::OpenLongParams(...). Mais j'ai un problème - mon testeur m'avertit d'une expiration invalide. Après avoir creusé le code source, je me suis rendu compte que nous ne pouvons pas obtenir de type de temps autre queORDER_TIME_SPECIFIED et que nous voudrions ORDER_TIME_GTC.

J'ai fait un geste intelligent jusqu'à présent, mais ce n'est pas tout à fait ça. J'ai corrigé la fonction dans la bibliothèque :

Que pouvez-vous nous conseiller ?

Bonjour.

Vous avez tout à fait raison. Je n'ai pas pris en compte les expirations zéro.

Votre solution est bonne. J'apporterai les modifications appropriées à la bibliothèque standard.

Merci.

 
uncleVic:

Bonjour.

Vous avez tout à fait raison. Je n'ai pas pris en compte l'expiration zéro.

Votre solution est bonne. J'apporterai les modifications appropriées à la bibliothèque standard.

Merci.

Ce sera bien, mais en attendant, dans cette situation, j'ai trouvé une autre issue, la bonne :) En créant une classe héritée de CExpert, dans laquelle j'ai surchargé les fonctions CheckOpenLong() et CheckOpenShort(), et j'y ai apporté des corrections de ce type :

        if (expiration == TimeCurrent() || expiration == 0)
        {
                m_expiration = 0;
                m_trade.SetOrderTypeTime(ORDER_TIME_GTC);
        }
        else
        {
              if(!m_trade.SetOrderExpiration(expiration))
        	{
         		 m_expiration=expiration;
        	}
        }
 
Sevrer:

Mais en attendant, j'ai trouvé un autre moyen de sortir de cette situation - le bon :) En créant une classe héritée de CExpert, dans laquelle j'ai surchargé les fonctions CheckOpenLong() et CheckOpenShort(), et y ai effectué des corrections de ce type :


L'héritage est la bonne approche.
 

Veuillez expliquer la logique du paramètre Expert_EveryTick.

Si Expert_EveryTick=true, le conseiller expert traite chaque tick ? C'est-à-dire qu'il vérifie les conditions d'entrée/sortie et le suivi des positions (trawl) à chaque nouveau tick, n'est-ce pas ?

Et si Expert_EveryTick=fasle - seulement au premier tick d'une nouvelle barre? Et le trail sera aussi déclenché seulement au premier tick ?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
mr.Taras:

Veuillez expliquer la logique du paramètre Expert_EveryTick.

Si Expert_EveryTick=true, le conseiller expert traite chaque tick ? C'est-à-dire qu'il vérifie les conditions d'entrée/sortie et le suivi des positions (trawl) à chaque nouveau tick, n'est-ce pas ?

Et si Expert_EveryTick=fasle - uniquement au premier tick d'une nouvelle barre? et le chalut sera également déclenché uniquement au premier tick ?


Oui, tu as raison.
 

Plus de questions sur la logique du conseiller expert :


il y a une position ouverte, par exemple un achat, et un lot fixe, par exemple 1.

Il y a un signal de l'autre côté, pour vendre.

que doit faire l'EA ? y aura-t-il deux transactions d'un lot chacune (la première sera clôturée par un lot) ou une transaction de 2 lots ? cela fait-il une différence si l'achat actuel est dans le rouge ou dans le bleu ?


S'il y a une position d'achat et à nouveau un signal d'achat, quelles méthodes dois-je redéfinir pour la fermer ?

 
mr.Taras:

Plus de questions sur la logique du conseiller expert :


1. Il y a une position ouverte, par exemple un achat, et un lot fixe, par exemple 1.

il y a un signal pour l'autre côté, pour vendre.

Que doit faire le conseiller expert ? va-t-il ouvrir deux transactions d'un lot chacune (la première sera fermée d'un lot) ou une transaction de deux lots ? y a-t-il une différence si l'achat actuel est dans le rouge ou dans le plus ?


2. l'EA ne va pas devenir long par lui-même, c'est-à-dire s'il y a une position d'achat et à nouveau un signal d'achat ? Quelles méthodes dois-je redéfinir pour qu'il devienne long, CheckOpenLong()?


1. deux seuils de déclenchement (paramètres de l'Expert Advisor). Si le seuil de fermeture est dépassé, la position se ferme simplement, si deux seuils sont dépassés (fermeture et ouverture), la position s'inverse. -/+ Il n'y a pas de différence.

2. méthode de traitement

 
uncleVic:

1. deux seuils de déclenchement ( paramètres EA). si le seuil Close est dépassé, la position se ferme simplement. si deux seuils sont dépassés (Close et Open), la position s'inverse. -/+ Il n'y a pas de différence.

2. méthode de traitement

Les seuils Close et Open sont le résultat d'un "vote", que renvoient ShortCondition() ou LongCondition() dans le module des signaux ?

 
mr.Taras:

Les seuils Close et Open sont-ils le résultat du "vote" de ce que ShortCondition() ou LongCondition() renvoie dans le module des signaux ?

Les seuils sont des paramètres (Signal_ThresholdOpen et Signal_ThresholdClose) auxquels le résultat du "vote" est comparé.
 

Trois questions :

  1. Comment faire pour que le module de signal ne fonctionne que sur les prix d'ouverture et non sur chaque tick ?
  2. Comment puis-je obtenir les valeurs de vote du module de signal dans le module de suivi de position ? Vous devez chaluter sur un signal déjà calculé et ne pas inventer un autre module de signal à suivre.
  3. Comment obtenir les valeurs de vote du module d'alarme dans le module de gestion de l'argent et des risques ? Vous devez ouvrir les volumes en fonction des signaux de trading déjà calculés, et non pas composer un autre module de signaux pour le calcul des volumes.

En théorie, nous pouvons bien sûr construire l'EA à l'aide de l'assistant, puis ajouter toutes ces fonctionnalités manuellement au code. Mais il est souhaitable que tout cela soit implémenté sous la forme de méthodes standard, c'est-à-dire pour les nuls qui veulent utiliser l'assistant, afin qu'ils n'aient pas à entrer dans le code et à le modifier, par exemple, s'ils veulent remplacer un module de signal par un autre.