EA pour chaque paire de devises - quel code pour ouvrir une seule fois par paire de devises ?

 

Pour chaque paire de devises, j'utilise un EA distinct.

Pour vérifier si une position doit être ouverte, je teste s'il n'y a pas d'ordre ouvert "if (OrdersTotal<1)" mais cela va bloquer toutes les autres paires de devises pour ouvrir des positions et je rate des opportunités.

En d'autres termes : Je veux ouvrir une seule position par paire de devises = plusieurs positions devraient être possibles mais dans des paires de devises différentes.

Quel code dois-je utiliser à la place du "if (OrdersTotal<1)" ? Quelqu'un peut-il m'aider ? Merci d'avance pour votre aide.

 

Chaque paire de devises doit avoir sa propre GlobalVariable, par exemple "MyEA_EURUSD".

Si vous limitez l'EA à une transaction par jour, le code serait le suivant :

string sCheck = "MyEA_" + Symbol() ;

datetime t = TimeCurrent() ;

datetime tTrade = t - TimeHour(t)*60*60 - TimeMinute(t)*60 - TimeSeconds(t) ;

if(!GlobalVariableCheck(sCheck)) GlobalVariableSet(sCheck, tTrade -PERIOD_D1 * 60) ;

if(GlobalVariableGet(sCheck) < tTrade) {

OrderSend(......) ;

GlobalVariableSet(sCheck, tTrade) ;

}

 

Désolé de ramener ce sujet en haut de l'écran mais j'ai le même problème en ce moment. Malheureusement, sxTed n'a pas répondu à ma question. Parce que décrire un temps de trading est quelque chose de différent de la quantité d'ordres pour chaque paire de devises.

J'ai essayé de modifier les lignes de sxTed mais je pense que j'ai échoué horriblement dans la résolution de ce problème :

string sCheck = "MyEA_" + Symbol();      // already the first error in the code, second quotes should be at the end of the line.

//I would correct this one to:
string sCheck = "MyEA_ + Symbol()";          //However symbol() is not a function anymore ??


int start ()
{

// Closing Orders here


if(!GlobalVariableCheck(sCheck))                    //checking Globalvariable, GV available so it becomes true (independently of what kind of GV we have)...

GlobalVariableSet(sCheck, Symbol() );               //.. assigning a new GlobalVariable to the function of the current symbol the EA is attached on (does it actually work like this?)

if(GlobalVariableGet(sCheck) == Symbol()) {         // checking if our Symbol is the one which the EA is attached on --> becomes true...


// Order Criteria (Open trades here)

// What now? Actually i'm missing any kind of numbers or smth that limits the open orders per currency pair.

S'IL VOUS PLAÎT : ne m'envoyez pas de lien vers une quelconque littérature à cet endroit ou ne me dites pas d'engager quelqu'un, j'étudie le livre en ce moment et je suis coincé ! !!

 
mqlfor:

Pour chaque paire de devises, j'utilise un EA distinct.

Pour vérifier si une position doit être ouverte, je teste s'il n'y a pas d'ordre ouvert "if (OrdersTotal<1)" mais cela va bloquer toutes les autres paires de devises pour ouvrir des positions et je rate des opportunités.

En d'autres termes : Je veux ouvrir une seule position par paire de devises = plusieurs positions devraient être possibles mais dans des paires de devises différentes.

Quel code dois-je utiliser à la place du "if (OrdersTotal<1)" ? Quelqu'un peut-il m'aider ? Merci d'avance pour votre aide.


int total=OrdersTotal() ; int count = 0 ; int magno = 12345 ; for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS) == false) continue ; if (OrderMagicNumber() != magno) continue ; if (OrderSymbol() != Symbol()) continue ; count++ ; } // Maintenant vous savez combien d'ordres pour ce symbole sont ouverts par cet EA. if (count < 1) { // faire quelque chose - ouvrir un ordre peut-être }
Est-ce que cela vous aide ?
 
texto:

Cela vous aide-t-il ?
Vous n'avez pas besoin du nombre magique... utilisez simplement le symbole...
 
texto:

Est-ce que cela aide ?
int total=OrdersTotal();

limite le total des ordres ouverts de TOUTES les paires de devises ou pas ?

J'ai inséré votre code comme suit

int total=OrdersTotal();
int count = 0;
for(int pos=0;pos<total;pos++) 
{
    if(OrderSelect(pos,SELECT_BY_POS) == false) continue;
    if (OrderSymbol() != Symbol()) continue;
    count++;
}

if (Sell_1_1 < Sell_1_2 && CloseSell1_1 > CloseSell1_2 && count < 1) Order = SIGNAL_SELL; // Trigger for Sell

if (Buy_1_1 > Buy_1_2 && CloseBuy1_1 < CloseBuy1_2 && count < 1) Order = SIGNAL_BUY;    // Trigger for Buy


if (order == SIGNAL_BUY)
{
OrderSend(...)
}   

et il n'ouvre toujours qu'une seule transaction. Que voulait nous dire sxTed avec sa variable globale ?

 
grey.unit:

limite le total des ordres ouverts de toutes les paires de devises ou non ?

J'ai inséré votre code comme suit

et il n'ouvre toujours qu'une seule transaction. Que voulait nous dire sxTed avec sa variable globale ?

Sur combien de graphiques votre EA fonctionne-t-il ?
 
RaptorUK:
Sur combien de graphiques votre EA fonctionne-t-elle ?
Pour tester le code, j'ai ouvert 5 graphiques mais je veux ouvrir N graphiques. Le nombre n'a pas d'importance.
 
grey.unit:
Pour tester le code j'ai ouvert 5 graphiques mais je veux ouvrir N graphiques. Le nombre n'a pas d'importance.
Avez-vous testé votre code sur chaque paire, une par une, pour vous assurer que votre EA ouvrira une transaction sur chaque paire, indépendamment de ce qui se passe sur les autres paires ? Peut-être que votre EA n'ouvre qu'une seule transaction parce qu'il n'ouvre qu'une seule paire spécifique.
 
Bien sûr que je l'ai fait. Lorsque j'ai une transaction ouverte sur, disons, EURJPY et que je la ferme manuellement, il se peut qu'un autre EA ouvre une transaction sur une autre paire de devises.
 
mqlfor:

Pour chaque paire de devises, j'utilise un EA distinct.

Pour vérifier si une position doit être ouverte, je teste s'il n'y a pas d'ordre ouvert "if (OrdersTotal<1)" mais cela va bloquer toutes les autres paires de devises pour ouvrir des positions et je rate des opportunités.

En d'autres termes : Je veux ouvrir une seule position par paire de devises = plusieurs positions devraient être possibles mais dans des paires de devises différentes.

Quel code dois-je utiliser à la place du "if (OrdersTotal<1)" ? Quelqu'un peut-il m'aider ? Merci d'avance pour votre aide.

Codez-le comme ceci :

 int Total_Order = OrdersTotal();
 for (pos = 0; pos <= Total_Order; pos ++)
      {
      if (OrderSelect (pos, SELECT_BY_POS) == true)
        {
        if (OrderSymbol () == Symbol ())
          {
          Print (":( Sorry already have that symbol opened ");
          // get outta here do something else
          break ;
          }
          else
          {
          Print ("No order opened for this symbol");
          Print ("Let\'s call waitress and order some drink :)");
          // do some order then break out and get out
          }
         }
       }