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

 
Vladimir Pastushak:

Merci. J'ai des difficultés à appeler une méthode de la classe mère.

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

La méthode elle-même a-t-elle un corps dans le parent ?

 
Artyom Trishkin:

La méthode elle-même dans le parent a-t-elle un corps ?

Oui, c'est vrai.

Voici le code, qu'est-ce que je fais mal ?

//+------------------------------------------------------------------+

class A

  {

public:

   virtual int Test_A()

     {

      return 100;

     }

  };

//+------------------------------------------------------------------+

class B :public A

  {

public:

   virtual int Test_A()

     {

      return 200;

     }

  };


B b;

//+------------------------------------------------------------------+

void OnStart()

  {

   Comment (A::b.Test_A());

  }

//+------------------------------------------------------------------+


 
Il y a un indicateur zigzag qui montre la valeur du prix d'un extremum, j'ai besoin de dessinerune ligne de tendance de l'extremum au futur (le jour suivant), comment puis-je faire cela sans connaître les coordonnées du second point et la valeur du temps du premier point ?
 
Vladimir Pastushak:

Voici le code, qu'est-ce que je fais mal ?

non, ça ne marchera pas comme ça

en écrivant le corps de test() dans la classe B, vous avez fermé l'ancienne fonction Test() et maintenant, lorsque vous déclarez une instance de la classe et que vous appelez la méthode Test(), elle exécutera toujours B::Test(), mais si vous n'aviez pas écrit B::Test(), elle aurait toujours exécuté A::Test().

Voici un exemple. Faites-en l'expérience

//+------------------------------------------------------------------+
class A
  {
public:
   virtual int Test_A()  { Print(__FUNCSIG__); return 100;  }
  };

//+------------------------------------------------------------------+
class B :public A
  {
public:
   virtual int Test_A()  { Print(__FUNCSIG__," = ", A::Test_A()); return 200;   }
  };

B b;

//+------------------------------------------------------------------+

void OnStart()

  {
   Print (__FUNCSIG__," = ",b.Test_A());
  }
//+-------------------------------------------------------------
 
Salut. Comment faire un calcul ordinal ? Ainsi, à la place de VENDRE d'abord, il y aura 1, puis 2 et ainsi de suite... ...jusqu'à ce qu'il se rafraîchisse lorsqu'il n'y a plus de commandes. Quelques conseils !
        if((fMarketOrderss(OP_SELL)>=1)) { 
       if( ((Bid-Opens)/ma+Times/1440) > SELL ) {
if(OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,NULL,321,0,1)>0){} }}
 
Hmm, étrange, personne ne répond.
 
Rustam Bikbulatov:
Hmm, étrange, personne ne répond.

Je pense que personne n'a compris ton message :)


 

Bonjour, comment faire pour que l'EA ouvre une position avec un volume spécifié d'ordres simples des deux positions, par ex.

Nous avons spécifié le volume d'un seul ordre = 1,35 lot, et le volume total des positions ouvertes est de 500 lots. L'EA ouvre un ordre d'achat de 1,35 lot, puis ouvre un ordre de vente de 1,35 lot,

puis répète jusqu'à ce que 500 lots d'achat et 500 lots de vente soient ouverts, et puisque le nombre de lots n'est pas un multiple de 1,35, le dernier ordre doit être inférieur à 1,35

 

Salutations.

J'ai créé une fonction qui, lorsqu'un ordre atteint les points de profit "bezubitok", modifie l'ordre en le déplaçant au niveau d'ouverture de l'ordre. Il semble fonctionner correctement, mais pendant le test (et sur tous les ticks), toutes les 10 à 20 fois, il envoie l'erreur 1 au journal.

Pas d'erreur, mais le résultat est inconnu

void Bezubitok(){
   for (int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic){
            if(OrderType()==OP_BUY){
               if (OrderStopLoss()!=OrderOpenPrice() && Ask-OrderOpenPrice()>bezubitok*Point){
                  double sl1 = OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), sl1, OrderTakeProfit(), 0, Indigo)) {}
                  }
               }
            if(OrderType()==OP_SELL){
               if (OrderStopLoss()!=OrderOpenPrice() && OrderOpenPrice()-Bid>bezubitok*Point){
                  double sl1 = OrderOpenPrice();
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), sl1, OrderTakeProfit(), 0, DeepPink)) {}
                  }
               }
            }   
         }
      }
   }

Quelle est la raison de ce phénomène et comment puis-je y remédier ?

 
Andrey Sokolov:

Salutations.

J'ai créé une fonction qui, lorsqu'un ordre atteint les points de profit "bezubitok", modifie l'ordre en le déplaçant au niveau d'ouverture de l'ordre. Il semble fonctionner correctement, mais pendant les tests (et sur tous les ticks), toutes les 10 à 20 fois, l'erreur 1 est écrite dans le journal.

Quelle est la raison de ce phénomène et comment puis-je y remédier ?

L'erreur 1 n'est pas une erreur, mais le résultat est inconnu. Le fait est que vous essayez de modifier le stop au même prix que celui auquel il se trouve déjà. Avant de le modifier, comparez le prix du stop avec le prix auquel vous voulez le fixer. S'il est déjà à ce prix, il n'y a rien à modifier.

Raison: