Comment exécuter une EA pour plusieurs paires ?

 
Bonjour
Je suis nouveau dans le monde du Forex et de MetaTrader et j'essaie de comprendre quelques principes de base.
En supposant que j'ai un EA qui est attaché à un graphique de l'EURUSD, MAIS je veux trouver des configurations dans plusieurs paires à partir de cet EA. Mais l'EA ne fonctionne que lorsqu'il y a un nouveau tick pour l'EURUSD. N'est-ce pas ? Maintenant, je vois cela comme une caractéristique limitative de MT, car mon EA peut traiter de nombreuses paires mais ne s'initie qu'avec le nouveau tick de la paire attachée (EURUSD dans ce cas). Cela entraîne probablement des ticks manqués pour les paires non attachées. D'où la question suivante--

L'EA peut-il fonctionner pour plusieurs paires, sans être attaché à un graphique ? Si ce n'est pas le cas, quelle est la solution pour résoudre le problème ci-dessus ? Veuillez nous conseiller.

Merci
Pankaj
 

C'est juste la façon dont mt4 fonctionne. Je pense qu'il n'y a pas de solution de contournement pour cela. Mais une chose m'est venue à l'esprit en ce moment. Si vous obtenez le tick de l'EURUSD au moins 1-2 minutes avant la nouvelle bougie (disons que c'est une bougie H1) vous pouvez exécuter la boucle while pour rechercher les nouvelles bougies sur d'autres paires. Dans ce cas, si le nouveau tick de l'EURUSD n'arrive même pas pendant 5 minutes ou plus, la boucle while est déjà en cours d'exécution et vous obtenez toutes les nouvelles bougies sur d'autres paires. J'espère que vous comprenez cela.

Mais la question est de savoir pourquoi vous avez besoin de cela ? Il est préférable d'exécuter l'EA sur différents graphiques car l'EA fonctionnant sur l'EURUSD ne serait pas en mesure d'exécuter une transaction sur une autre paire.

 

Bonjour,

Je préfère garder à l'esprit que nous travaillons toujours en temps réel, donc j'oublie d'utiliser la boucle while ou la fonction wait pour garder la main sur la communication !

Attacher votre EA à une paire comme l'EURUSD vous fournit suffisamment de signaux pour gérer toutes les autres paires, les ticks sont très fréquents. Ce n'est pas une question de minute mais de seconde (faire tourner une boucle pendant 2 minutes me semble vraiment fou). Si ce n'est pas une question de seconde, demandez-vous pourquoi ou voyez avec un autre courtier.

Si vous avez vraiment besoin de plus que ce que vous obtiendrez en attachant votre EA à eurusd, pensez à exécuter une instance séparée de votre EA attachée à chaque devise. Désolé mais j'ai tendance à penser "ou repenser votre système".

Désolé si ce message est un peu abrupt. Je voulais partager avec vous mon point de vue.

Bonne chance.

 
wrm:

Il est préférable d'exécuter l'EA sur différents graphiques, car un EA fonctionnant sur EURUSD ne serait pas en mesure d'exécuter une transaction sur une autre paire.

Ce n'est pas correct. La fonction OrderSend() peut être exécutée pour tout symbole que vous spécifiez comme premier paramètre, indépendamment du graphique.

Et vous pouvez récupérer les cours acheteur et vendeur les plus récents pour les symboles en dehors du graphique actuel en utilisant la fonction MarketInfo().

Vous avez donc les options suivantes.

- Avoir le même EA attaché à plusieurs graphiques et opérant pour le symbole natif de chaque graphique (en utilisant les variables intégrées Ask et Bid).

- Avoir un EA attaché à un graphique spécifique qui s'exécute pour tous les symboles choisis (avec la fonction MarketInfo() pour les symboles non-natifs) - en utilisant simplement les ticks du symbole natif comme dispositif de déclenchement.

- Avoir des EA maître et esclave attachés à des graphiques différents où l'un est déclenché par l'autre (par exemple, l'un écrit une valeur dans un fichier, l'autre lit constamment le fichier jusqu'à ce qu'il trouve cette donnée et effectue alors une transaction).

 
cloudbreaker:

Ce n'est pas correct. La fonction OrderSend() peut être exécutée pour tout symbole que vous spécifiez comme premier paramètre, indépendamment du graphique.

Et vous pouvez récupérer les cours acheteur et vendeur les plus récents pour les symboles en dehors du graphique actuel en utilisant la fonction MarketInfo().

Vous avez donc les options suivantes.

- Avoir le même EA attaché à plusieurs graphiques et opérant pour le symbole natif de chaque graphique (en utilisant les variables intégrées Ask et Bid).

- Avoir un EA attaché à un graphique spécifique qui s'exécute pour tous les symboles choisis (avec la fonction MarketInfo() pour les symboles non-natifs) - en utilisant simplement les ticks du symbole natif comme dispositif de déclenchement.

- Avoir des EA maître et esclave attachés à des graphiques différents où l'un est déclenché par l'autre (par exemple, l'un écrit une valeur dans un fichier, l'autre lit constamment le fichier jusqu'à ce qu'il trouve cette donnée et effectue alors une transaction).


Très instructif. Merci à vous tous. Je vais choisir la deuxième option car elle correspond à ce que je pensais avant.


wrm : Je veux que les choses soient aussi réduites que possible. Si c'est techniquement possible, je ne garderai qu'un seul EA. La seule raison de garder un EA séparé est le cas où j'aurais besoin de tracer un graphique, ce dont je n'ai pas besoin.


Bien sûr, je testerai une fois que l'EA sera là. S'il ne fonctionne pas comme je le souhaite, je le changerai.

 
//+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true;
bool wannaBuy1 = true;
extern double LotSize = 0.01;
extern string symbol1 = "EURUSD";
extern string symbol2 = "USDCHF";
extern int MaxDifference = 6;
extern int Slippage = 3;
extern int Magicnumber1 = 786;
extern int Magicnumber2 = 123;
int sendticket = 3;
string pairs[18];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[0] = symbol1;
pairs[1] = symbol2;
wannaBuy = true;
wannaBuy1 = true;

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if ( wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend( symbol1, OP_BUY, LotSize, MarketInfo( symbol1,MODE_ASK), Slippage, 0, 0, 0,0, Magicnumber1,0) & OrderSend( symbol2, OP_BUY, LotSize, MarketInfo( symbol2,MODE_ASK), Slippage, 0, 0, 0,0, Magicnumber2,0);
   if ( ticket1 <0 )
   {
   Print ("OrderSend failed with error #", GetLastError());
   return(0);
   }
   wannaBuy = false;
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+
Voici un code simple pour ouvrir EURUSD et USDCHF sur un graphique. Même ea est ajouté sur un autre graphique de sorte qu'il ouvrira EURUSD et USDCHF.
 
tigersoft:
Voici un code simple pour ouvrir EURUSD et USDCHF sur un graphique. Même l'ea est ajoutée sur un autre graphique pour qu'elle ouvre l'EURUSD et l'USDCHF.

Plutôt habile. Merci tigersoft

 
cloudbreaker

Ce n'est pas correct. La fonction OrderSend() peut être exécutée pour tout symbole que vous spécifiez comme premier paramètre, indépendamment du graphique.

Et vous pouvez récupérer les cours acheteur et vendeur les plus récents pour les symboles en dehors du graphique actuel en utilisant la fonction MarketInfo().

Vous avez donc les options suivantes.

- Avoir le même EA attaché à plusieurs graphiques et opérant pour le symbole natif de chaque graphique (en utilisant les variables intégrées Ask et Bid).

- Avoir un EA attaché à un graphique spécifique qui s'exécute pour tous les symboles choisis (avec la fonction MarketInfo() pour les symboles non-natifs) - en utilisant simplement les ticks du symbole natif comme dispositif de déclenchement.

- Avoir des EA maître et esclave attachés à des graphiques différents où l'un est déclenché par l'autre (par exemple, l'un écrit une valeur dans un fichier, l'autre lit constamment le fichier jusqu'à ce qu'il trouve cette donnée et effectue alors une transaction).


Bonjour, pourriez-vous développer l'option n°3 ?


Et aussi, comment les calculs de prix/indicateurs fonctionneraient-ils avec des symboles non natifs en utilisant l'option n°2 ? Je comprends l'envoi d'ordres vers des symboles non natifs, mais pas comment vérifier les conditions d'entrée sur les symboles non natifs.

 
skyhr:

Bonjour, pourriez-vous développer l'option n°3 ?


Et aussi, comment les calculs de prix/indicateurs fonctionneraient-ils avec des symboles non natifs en utilisant l'option n°2 ? Je comprends l'envoi d'ordres vers des symboles non-natifs, mais je ne sais pas comment vérifier les conditions d'entrée sur les symboles non-natifs.

Utilisez la fonction MarketInfo() pour les symboles non-natifs. C'est un ami :)

 
skyhr POUR EN SAVOIR PLUS :

Bonjour, pourriez-vous développer l'option n°3 ?


Et aussi, comment les calculs de prix/indicateurs fonctionneraient-ils avec des symboles non natifs en utilisant l'option n°2 ? Je comprends l'envoi d'ordres vers des symboles non natifs, mais pas comment vérifier les conditions d'entrée sur des symboles non natifs.

Option 3 - écrire simplement une valeur dans un fichier à partir d'un EA surveillant un symbole particulier. Demandez à un autre EA de surveiller ce fichier et d'exécuter un élément logique particulier lorsque cette valeur est présente.

Option 2 - Utilisez la fonction MarketInfo() pour récupérer les cours vendeur et acheteur pour les symboles non natifs plutôt que d'utiliser les variables Ask et Bid qui ne sont valables que pour le symbole natif.

 
cloudbreaker:

Option 3 - écrivez simplement une valeur dans un fichier à partir d'un EA surveillant un symbole particulier. Demandez à un autre EA de surveiller ce fichier et d'exécuter un élément logique particulier lorsque cette valeur est présente.

Option 2 - Utiliser la fonction MarketInfo() pour récupérer les cours vendeur et acheteur pour les symboles non natifs plutôt que d'utiliser les variables Ask et Bid qui ne sont bonnes que pour le symbole natif.

Je pense que les deux approches sont bonnes.

La seule chose que j'aimerais ajouter, c'est que l'option n° 2 présente des avantages en termes de performances, car elle entraîne moins de frais généraux. Tout sera en mémoire, ce qui est évidemment plus rapide qu'une opération sur fichier.

L'option n°3 présente un avantage si vous souhaitez utiliser les données du fichier pour quelque chose que MT4 ne peut pas faire.