[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 287

 
Est-ce que je pourrai voir le bon code ?
 
sergeev:
au premier ordre de non-achat, vous inonderez le compte d'ordres d'achat.


Merci ! J'ai trouvé une autre erreur !

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

extern double lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (OrdersTotal()==0)
   OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() != OP_BUY)
       OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
     }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
icas:


Merci ! J'ai trouvé une autre erreur !


Mm-hmm.

mais la précédente n'a pas été réparée.

Vous ne pouvez pas mettre un ordre d'ouverture immédiate dans une boucle. Vous devez d'abord faire une boucle complète sur les commandes et déterminer exactement s'il y a un achat ou non.

Et c'est seulement après ça que vous mettez un Buy, après ce cycle.

 
sergeev:

Mm-hmm.

mais la précédente n'a pas été réparée.

Vous ne pouvez pas mettre un ordre d'ouverture immédiate dans une boucle. Vous devez d'abord faire une boucle complète sur les ordres et savoir exactement s'il y a un Achat ou un Non.

Et ce n'est qu'après cela que vous devez placer un achat si ce n'est pas encore le cas.



C'est vrai, j'ai juste pris un morceau de mon programme posti sans le refaire. Je vais le faire maintenant - cinq minutes...
 
Mais ce code n'est pas correct non plus ! Il n'ouvrira un ordre d'achat que s'il n'y a pas d'autres ordres pour un autre instrument financier, et s'il y a d'autres ordres, il n'ouvrira pas d'ordre d'achat.
 
icas:

C'est vrai, j'ai juste pris un morceau de mon programme posti sans le refaire. Je vais le faire maintenant - cinq minutes...
//+------------------------------------------------------------------+
//|                                                      OnlyBuy.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() == OP_BUY) return(0);
     }
   }
  OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  Sleep(10000); //Пауза 10 сек. для исполнениея ордера
//----
   return(0);
  }
//+------------------------------------------------------------------+
Tout de suite, non ?
 
icas:
C'est maintenant ?
Sleep(10000); //Пауза 10 сек. для исполнениея ордера

Quel est l'intérêt de cette pause ?
 
kolyango:

Pourquoi cette pause ?

L'ordre n'est pas exécuté immédiatement. Sans une pause sur le prochain tick, l'ordre peut ne pas être encore ouvert, et le programme enverra une autre commande pour l'ouvrir. Dans le testeur MT5, vous pouvez déjà entrer le délai d'exécution.
 
icas:
Est-ce que c'est correct maintenant ?

Avez-vous essayé de faire de la recherche de la présence/absence d'éléments une fonction distincte ?

Par exemple :

bool ExistPositions(int mn, string sy="", int op=-1) {
   if (sy=="") sy=Symbol();
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (op<0 || OrderType()==op)  
            return(True);
         }
      }
   return(False);
}

Magic - numéro magique de l'EA (défini dans les paramètres, ou généré automatiquement par l'EA). Ensuite, pour vérifier l'absence de position Achetez par le symbole actuel doit être écrit :

if (!ExistPositions(Magic, Symbol(), OP_BUY)) {
   // ... Тут код для вызова функции открытия позиций ... 
   }

Remarque - il ne s'agit pas seulement d'une commande pour ouvrir un ordre d'achat, mais d'une fonction complète avec traitement de tous les paramètres d'ouverture de l'ordre et des erreurs renvoyées par le serveur.

Cependant, pour un testeur, on peut se passer de vérifier la validité des paramètres entrés...

 
artmedia70:

Avez-vous essayé de faire de la recherche de la présence/absence d'éléments une fonction distincte ?

Par exemple :

Ensuite, pour vérifier l'absence de la position d'achat par le symbole actuel doit être écrit :

Remarque - il ne s'agit pas seulement d'une commande pour ouvrir un ordre d'achat, mais d'une fonction complète avec traitement de tous les paramètres de l'ouverture de l'ordre et des erreurs renvoyées par le serveur.

Toutefois, le testeur peut se passer de vérifier les valeurs admissibles des paramètres saisis...



Dans le premier message, j'ai donné les fonctions, ce qui n'a pas plu à kolyango. Aussi, je n'aime pas travailler avec des magiciens.