OrderClose ne fonctionne pas - page 5

 
Merci GumRai
 

Bonjour,


J'attache un EA à plusieurs graphiques de devises différentes. L'EA ouvre plusieurs ordres dans un seul graphique si les conditions sont remplies. Quel codage pour assurer un seul ordre par graphique ?

 
chuale:

Bonjour,


J'attache un EA à plusieurs graphiques de devises différentes. L'EA ouvrira plusieurs ordres dans un seul graphique si les conditions sont remplies. Quel codage pour assurer un seul ordre par graphique ?


Boucle à travers les ordres ouverts et vérification du numéro magique et du symbole.

S'il y a déjà un ordre ouvert, n'en ouvrez pas d'autres.

PS. Vous auriez vraiment dû commencer un nouveau fil de discussion, car votre question n'est en aucun cas liée au titre du fil :)

 
chuale:

Salut thrdel,

Est-ce que Time[0] fait référence à l'heure de la mesure 0 ? Existe-t-il un Time[1], un Time[2], etc ? J'ai essayé de le googler mais il n'y a pas beaucoup d'informations sur Internet. De plus, si j'attache cet EA à deux paires de devises, cela signifie-t-il que OrderSelect ne sélectionne que les ordres dans le graphique lui-même ou tous les ordres dans le terminal ?




Time[0] est l'heure à laquelle la barre actuelle a commencé. Oui, Time[1] est l'heure à laquelle la barre précédente a commencé et ainsi de suite.

Si vous voulez exécuter le même EA sur plusieurs graphiques, vous devez vous assurer que la variable "MagicMunber" est différente pour chaque EA, même si vous avez le même symbole sur différents graphiques.

Ainsi, les EA n'interféreront pas avec les ordres des autres.

OrderSelect() ne reçoit pas la valeur du graphique mais du serveur.

Les informations concernant votre compte et vos ordres sont stockées sur le serveur et c'est pourquoi, lorsque vous éteignez votre ordinateur, votre ordre stop ou tp est toujours exécuté.

 
chuale:

Bonjour thrdel,


Pourquoi ai-je ce message d'avertissement "implicit conversion from 'number' to 'string' postin forum.mq4 69 61" pour le codage " if(ticket<0)Print("Error OP_BUY order failed, error : "+GetLastError()) ;"?


Si vous voulez afficher une variable double avec Comment() ou si vous voulez imprimer avec Print(), vous devez la convertir en chaîne avec la fonction DoubleToString().

Pour les variables int la conversion est évidente donc si vous n'utilisez pas IntToString () pour le faire, cela compilera et fonctionnera quand même puisque c'est si évident.

 
chuale:

Bonjour,


J'attache l'EA à quelques graphiques de devises différentes. L'EA ouvrira plusieurs ordres dans un seul graphique si les conditions sont remplies. Quel codage pour assurer un seul ordre par graphique ?


Bonjour Chuale,

J'ai fait quelques modifications à votre EA pour qu'il fonctionne.

MagicNumber est une variable, vous devez vous assurer qu'elle est différente sur chaque graphique !

Si vous voulez que je vous explique pourquoi et comment les changements fonctionnent, envoyez-moi un message et je serai heureux de vous aider si je peux.

Vous pouvez faire quelques tests vous-même et voir comment cela fonctionne, je l'ai testé sur USDJPY.

Les variables Max et Min remplacent les valeurs 1 et -1 dans votre condition, vous pouvez donc optimiser et voir si d'autres valeurs fonctionnent mieux.


if(bar2 <-1) //changed to 
if(bar2 < Min
if(bar2 > 1) //changed to 
if(bar2 > Max

Savez-vous comment optimiser des paramètres?

Si vous avez des questions, faites-le moi savoir ou envoyez-moi un message.

Voici le code :

//+------------------------------------------------------------------+
//|                                                 chuale_test1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=150;
extern double   Lots=0.1;
extern double   StopLoss=300;
extern int      Max = 6;
extern int      Min = -9;
extern int      MagicNumber = 12345;
extern int      Slip  = 3;
double     bar1;
double     bar2;
double     bar3;
double     bar3max,bar3min;
int        myTrades,ticket;
datetime   previousTime;
int        xMultiply;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---
if(Digits==3) xMultiply=100;
if(Digits==5) xMultiply=10000;
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
 
   myTrades = CountTrades();
//
   bar1=(iClose(Symbol(),0,2)-iClose(Symbol(),0,3))*xMultiply;
   bar2=(iClose(Symbol(),0,1)-iClose(Symbol(),0,2))*xMultiply;
   bar3=(iClose(Symbol(),0,0)-iClose(Symbol(),0,1))*xMultiply;
   //
   if(myTrades>0)
     {
      if(bar3<Min) CloseThisSymbolAll("OP_BUY");
      if(bar3>Max) CloseThisSymbolAll("OP_SELL");
     }
  //
   if(Time[0]==previousTime) return(0);    
   previousTime=Time[0];          
   //
   if(myTrades<1)
     {
      if(bar2>1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",MagicNumber,0,Green);
         if(ticket<0)Print("Error OP_BUY order failed. error : "+GetLastError()); 
         return(0);
        }
      if(bar2<-1)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",MagicNumber,0,Red);
         if(ticket<0)Print("Error OP_SELL order failed. error : "+GetLastError());
         return(0); 
        }
     }
   return(0);
  }
//========================================================================
int CountTrades()
{
int count=0;
int trade;
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
   if(OrderType()==OP_SELL || OrderType()==OP_BUY)
   count++;
   }
return(count);
}
//========================================================================
void CloseThisSymbolAll(string direction)
  {
  string dir = direction;
   int trade;
   for(trade=OrdersTotal();trade>=0;trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
        {
         if(OrderType()==OP_BUY && dir == "OP_BUY")OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
         if(OrderType()==OP_SELL&& dir == "OP_SELL")OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
        }
     }
  }
//========================================================================
 

Bonjour Thrdel,


Merci beaucoup. Vous êtes très aimable et utile. Je vais d'abord passer par votre codage. Merci encore.

 

Salut Thrdel,

Cela signifie que je dois essayer avec différentes valeurs de Max et Min pour chaque backtest afin de déterminer quelle est la valeur la plus optimale ?

Merci