Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 716

 
Alex Pirate:
Bonjour à tous, que faut-il vérifier ? ?? donne un avertissement lors de la modification et à l'ouverture de ..... ( ???) il renvoie une valeur et je dois la vérifier ... comment ? ?? EA ouvre des ordres comme je l'entends ... (((
extern string MMM          = "MMM";
extern double Lot          = 0.1;
extern int    TakeProfit   = 50;
extern int    StopLoss     = 20;
extern int    Slippage     = 3;
extern int    Magic        = 888;
// Moving Average 1
extern string Indi_MA1        = "MA1";
extern int    MA1_Period   = 22;
extern int    MA1_Shift    = 0;
extern int    MA1_Method   = 0;
extern int    MA1_Price    = 0;
// Moving Average 2
extern string Indi_MA2        = "MA2";
extern int    MA2_Period   = 55;
extern int    MA2_Shift    = 0;
extern int    MA2_Method   = 0;
extern int    MA2_Price    = 0;
//+------------------------------------------------------------------+
double MA1,MA2,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
    if (Digits == 3 || Digits == 5)
    {
      TakeProfit = TakeProfit * 10;
      StopLoss = StopLoss     * 10;
      Slippage = Slippage     * 10;
    }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
 return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() 
 {           
    MA1 = iMA(Symbol(),0,MA1_Period,MA1_Shift,MA1_Method,MA1_Price,0);
    MA2 = iMA(Symbol(),0,MA2_Period,MA2_Shift,MA2_Method,MA2_Price,0);
    
    if (Ask >= MA1 && MA1 >= MA2 && CountBuy() == 0)
    {
       SL = NormalizeDouble(Ask - StopLoss   * Point,Digits);
       TP = NormalizeDouble(Ask + TakeProfit * Point,Digits);
       ticket = OrderSend(Symbol(),OP_BUY ,Lot,Ask,Slippage,0,0,"",Magic,0,Green);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) )  return;

       }      
        
    if (Bid <= MA1 && MA1 <= MA2 && CountSell() == 0) 
    
       SL = NormalizeDouble(Bid + StopLoss   * Point, Digits);
       TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
       ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"",Magic,0,Red);
       if (ticket > 0)
       { 
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
            if( !OrderModify(ticket,OrderOpenPrice(),SL,TP,0) ) return;

       }                
    }
 }
//+------------------------------------------------------------------+
int CountBuy()
{
   int count = 0; 
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic)
      {
        if (OrderType() == OP_BUY)
        count++; 
      } 
   }
   return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
   int count = 0;
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
   {
      if( !OrderSelect(trade,SELECT_BY_POS, MODE_TRADES) ) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic) 
      {
        if (OrderType() == OP_SELL)
        count++; 
      }
   }
   return(count);
}
//+------------------------------------------------------------------+
 
Konstantin Nikitin:

Merci ! !! Je vais essayer.

 
les erreurs ont disparu... Mais pour une raison quelconque, toutes les commandes ne s'ouvrent pas et ne sont pas mises à jour... il semble que nous devions vérifier la modification d'une manière ou d'une autre... J'ai dû me tromper quelque part...
 
Alex Pirate:
les erreurs ont disparu... Mais toutes les commandes ne s'ouvrent pas et ne sont pas mises à jour pour une raison quelconque... il semble que nous devions vérifier le contrôle de modification d'une manière ou d'une autre... J'ai dû me tromper quelque part...

Je ne me suis pas trompé dans le code. Je n'y comprends rien... Alors, c'est vous l'expert, je vous laisse faire.

 
Konstantin Nikitin:

Je n'ai pas trouvé le code. Donc votre expert, vos cartes sont entre vos mains.

Je l'ai. Merci quand même.

 
Maxim Kuznetsov:

cela peut être fait via les variables globales du terminal. A condition que vous ayez le code source de l'indicateur et que vous puissiez le modifier.

Cela signifie que l'indicateur calculera le paramètre non pas à travers l'extern, mais à partir de l'appel de GlobalVariableGet(). En conséquence, le conseiller expert modifiera cette variable par le biais de GlobalVariableSet.

Merci, Maxim, au moins maintenant je sais par où commencer.
 
Comment appeler une méthode virtuelle d'une classe parente ?
 
Il y a un indicateur zigzag qui montre la valeur du prix d'un extremum, j'ai besoin de dessiner une ligne de tendance de l'extremum au futur (le jour suivant), comment puis-je faire cela sans connaître les coordonnées du deuxième point et la valeur du temps du premier point ?
 
Vladimir Pastushak:
Comment appeler une méthode virtuelle de la classe mère ?

une méthode virtuelle est une méthode virtuelle car elle n'a qu'une description, et le corps est écrit dans chaque classe séparément

bien que si votre tâche consiste simplement à appeler une méthode à partir d'une classe parente (c'est-à-dire que la méthode a déjà un corps), elle (la méthode) sera disponible comme une méthode normale par héritage - voir le code source

 
Igor Makanu:

une méthode virtuelle est une méthode virtuelle car elle n'a qu'une description, et le corps est écrit dans chaque classe séparément

bien que si votre tâche consiste simplement à appeler une méthode à partir d'une classe parente (c'est-à-dire que la méthode a déjà un corps), elle (la méthode) sera disponible comme une méthode normale par héritage - le code source devrait être vu

Merci. Je n'arrive pas à faire appeler une méthode de la classe mère.

Autant que je me souvienne, cela se fait par la méthode parent : :.

Raison: