Discussion de l'article "Création d’Expert Advisors Multiples sur la base de Modèles de Trading" - page 4

 

Merci beaucoup à l'auteur pour l'article et le code. Aujourd'hui, j'ai remanié le code d'un Expert Advisor simple pour la classe de modèle. Après quelques efforts, j'ai réussi à travailler en parallèle sur différentes paires et différents délais.

La seule chose que j'ai dû corriger dans le code a été de moderniser légèrement la fonction GetMyPosition() afin qu'elle ne compte le volume que pour le symbole passé en paramètre. Sinon, un modèle travaillant sur un ensemble de deux paires ou plus, lorsqu'il appelle GetMyPosition(), obtient le volume total pour plusieurs paires au lieu du volume séparé requis pour chaque paire. J'ai également ajouté une méthode à la classe CTableOrders pour obtenir le symbole de l'ordre.

string            OrderSymbol(){return(m_symbol);}


Merci encore !

 

Merci, chers amis, pour l'appréciation de mon travail ! Il est agréable de constater que les questions que j'aborde sont pertinentes et nécessaires. N'entrons pas dans la polémique avec les critiques analphabètes. Ils seront toujours là et on ne les convaincra pas, même sur des choses évidentes.

H.Y. Il est préférable de surcharger la méthode double GetMyPosition() en conséquence : double GetMyPosition(string Symbol). Cela vous donnera plus de flexibilité et de souplesse.

Il ne fait aucun doute que le code sera amélioré et modifié au fil du temps, car il est impossible de prendre en compte tous les domaines d'application possibles à la fois.

Merci encore et bonne année 2011 ! Bonheur et bonne chance !

 
Огромное спасибо автору за статью, обязательно возьму себе на вооружение.
 

Merci Vasily pour cet article - à mon avis, c'est la meilleure approche jusqu'à présent. C'est tout simplement incroyable de voir comment vous avez pu déboguer ce code.

Vasily - comment avez-vous débogué ce code sans débogueur dans un testeur ? Je trouve qu'il est très difficile de travailler sans débogueur dans un testeur - parce que les signaux sont différents et dans des conditions différentes.

Partagez votre expérience du débogage.

 

Je vous remercie pour cet excellent tutoriel. Respekt pour ce super tutoriel.

J'ai débogué ce code et j'ai trouvé une erreur à la ligne 355 dans Model.mqh

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;

sous ORDER_TYPE_BUY : il n'y a pas de fonction. Est-ce vrai ? pas de fonction par Buy ?
J'ai changé le code dans :

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;


Mais, dans Jornual vous voyez, il n'a pas de position longue seulement courte.


ea_modelclass



Je ne trouve pas l'erreur.besoin d'aide.


MfG Christian

Dossiers :
logfile.txt  100 kb
 
Après les dernières mises à jour du terminal, le modèle a cessé de fonctionner. Quelqu'un peut-il expliquer ce qui s'est passé ?
 
YYURIYY:
Après les dernières mises à jour du terminal, le modèle a cessé de fonctionner. Quelqu'un peut-il expliquer ce qui s'est passé ?


De même. J'ai analysé le code virgule par virgule pendant une semaine. La stratégie place des ordres de vente, mais la fonction GetNumberOrders() ne renvoie que des ordres de vente = 0, mais des ordres d'achat = 1.

Je voudrais demander à Vasily, en tant que développeur de ce code, de m'aider. Je n'ai pas encore trouvé la raison de ce problème.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Compliments pour cet article !!!

Je suis heureux que plus de gens pensent à cette idée. Il y a quelques temps, j'ai essayé de développer un modèle d'EA multidevise et multistratégie en MQL4.

Depuis que MQL5 est là, j'ai essayé de concevoir le modèle d'objet d'un tel EA et de commencer à l'implémenter.

Malheureusement, je n'ai pas de temps libre pour ces activités... :-(

S'il vous plaît, continuez ce projet... c'est la façon dont je pense... avoir un cadre, où il est possible d'implémenter facilement un grand nombre de stratégies et avec la possibilité d'activer/désactiver n'importe laquelle d'entre elles, manuellement ou même automatiquement. Ainsi, nous pouvons avoir un portefeuille d'EA et même ajouter ou supprimer certains EA si nécessaire.

Merci pour cela !

PS : voici un lien si cela vous intéresse...

https:// www.mql5.com/en/forum/118148

Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
  • www.mql5.com
Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
 
YYURIYY:
Après les dernières mises à jour du terminal, le modèle a cessé de fonctionner. Quelqu'un peut-il expliquer ce qui s'est passé ?

Je pense que j'ai trouvé. Dans le code, il faut changer :

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

#include <Trade\_OrderInfo.mqh>
#include <Trade\_HistoryOrderInfo.mqh>
#include <Arrays\List.mqh>
class CTableOrders : CObject
{
private:
   ulong             m_magic;       // Magik de l'expert qui a donné l'ordre
   ulong             m_ticket;      // Ticket de l'ordre principal
   ulong             m_ticket_sl;    // Ticket de l'ordre de rachat de la transaction exécutée sur la base de l'ordre principal (Stop Loss)
   ulong             m_ticket_tp;    // Ticket de l'ordre de rachat de la transaction exécutée sur la base de l'ordre principal (Take Profit)
   ENUM_ORDER_TYPE   m_type;         // Type d'ordre principal
   datetime          m_time_setup;  // Heure d'établissement de la commande
   double            m_price;       // Prix de la commande
   double            m_sl;          // Prix du Stop Loss suggéré
   double            m_tp;          // Prix du Take Profit estimé
   double            m_volume_initial;      // Volume des commandes
public:
                     CTableOrders();
   bool              Add(COrderInfo &order_info, double stop_loss, double take_profit);
   bool              Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit);
   double            StopLoss(void){return(m_sl);}
   double            TakeProfit(void){return(m_tp);}
   ulong             Magic(){return(m_magic);}
   ulong             Ticket(){return(m_ticket);}
   int               Type() const;
   datetime          TimeSetup(){return(m_time_setup);}
   double            Price(){return(m_price);}
   double            VolumeInitial(){return(m_volume_initial);}
};

CTableOrders::CTableOrders(void)
{
   m_magic=0;
   m_ticket=0;
   m_type=0;
   m_time_setup=0;
   m_price=0.0;
   m_volume_initial=0.0;
}

bool CTableOrders::Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit)
{
   if(HistoryOrderSelect(history_order_info.Ticket())){
      m_magic=history_order_info.Magic();
      m_ticket=history_order_info.Ticket();
       m_type=history_order_info.OrderType();
      m_time_setup=history_order_info.TimeSetup();
      m_volume_initial=history_order_info.VolumeInitial();
      m_price=history_order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

bool CTableOrders::Add(COrderInfo &order_info, double stop_loss, double take_profit)
{
   if(OrderSelect(order_info.Ticket())){
      m_magic=order_info.Magic();
      m_ticket=order_info.Ticket();
      m_type=order_info.OrderType();
      m_time_setup=order_info.TimeSetup();
      m_volume_initial=order_info.VolumeInitial();
      m_price=order_info.PriceOpen();
      m_sl=stop_loss;
      m_tp=take_profit;
      return(true);
   }
   else return(false);
}

int   CTableOrders::Type() const
{
   return((ENUM_ORDER_TYPE)m_type);
}
 

Le champ d'application de cet article est vaste et *très* bien pensé.

Je ne peux pas vous dire avec des mots combien j'apprécie vos efforts pour construire ce cadre ; vous avez également expliqué le raisonnement derrière votre approche à un niveau compréhensible (au moins pour moi !). Cet article va bien au-delà des concepts, je suis d'accord - il s'agit d'une application pratique, appropriée et surtout prudente du commerce et des techniques de programmation OO !

Une demande - vos commentaires dans les fichiers anglais peuvent-ils être traduits ? De plus, quelqu'un peut-il m'indiquer des outils pour travailler davantage avec la langue russe ? Les commentaires dans MetaEditor n'apparaissent même pas en russe, mais plutôt sous la forme de caractères accentués brouillés qui ne sont pas très différents de cet exemple :

 // Èíèöèàëèçèóðóåì óêàçàòåëü ìîäåëüþ MACD

J'utilise Chrome+Google Translate pour consulter le site russe depuis un certain temps maintenant, mais pour les articles plus longs (en particulier celui-ci), je ne peux traduire qu'une partie limitée du document. J'étais très impatient de lire cet article en profondeur et j'ai dû attendre un certain temps, ce qui, pour moi en tout cas, était difficilement tolérable ! Tout conseil visant à améliorer la compréhension des langues étrangères est le bienvenu !

Un chef-d'œuvre, M. Sokolov. Je vous adresse mes compliments et ma gratitude pour votre travail, et j'ai hâte de mettre en œuvre mes visions de cette grande approche des systèmes de négociation. Vous avez résolu de nombreux conflits que j'avais en essayant de concevoir un système qui pourrait répondre à mes exigences du système que je veux finalement commercialiser. Pour les problèmes qui restent à résoudre, ce cadre oriente mes efforts dans la bonne direction.