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

 
Alexey Viktorov #:

Valery, faites attention à la ligne

dans mon code... J'utilise des fonctions hexadécimales depuis un certain temps déjà, mais une fonction similaire

a donné un 0 rassis.

Donc, pensez à l'endroit où se trouvent les cafards... Et puisque mt4 refuse de le supporter, vous pouvez supposer qu'il ne sera jamais réparé...

Tout le reste doit être vérifié. Je ne m'en suis pas occupé depuis si longtemps que je ne veux même pas m'en souvenir.

Hmmm... Le temps est émulé) Je vais devoir m'y mettre)

int sd;
/*******************Expert initialization function*******************/
int OnInit()
 {
  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  datetime lt = iTime(_Symbol, PERIOD_M15, 0);
  static datetime ct = 0;
  if(ct != lt)
  {
   ct = lt;
   Print(DoubleToString(iMA("EURJPY", PERIOD_M15, 21, 0, MODE_SMA, PRICE_CLOSE, 0), sd),
    " Time[0] ",TimeToStr( Time[0])," iTime(EURJPY,0,0) ",TimeToStr(iTime("EURJPY",0,0)));
  }

Résultat

2021.09.21 15:30:48.696 2021.08.13 20:15:00  testMulti EURUSD,M15: 129.482 Time[0] 2021.08.13 20:15 iTime(EURJPY,0,0) 2021.08.13 20:15
2021.09.21 15:30:48.632 2021.08.13 20:00:00  testMulti EURUSD,M15: 129.495 Time[0] 2021.08.13 20:00 iTime(EURJPY,0,0) 2021.08.13 20:00
2021.09.21 15:30:48.568 2021.08.13 19:45:00  testMulti EURUSD,M15: 129.512 Time[0] 2021.08.13 19:45 iTime(EURJPY,0,0) 2021.08.13 19:45
2021.09.21 15:30:48.504 2021.08.13 19:30:00  testMulti EURUSD,M15: 129.527 Time[0] 2021.08.13 19:30 iTime(EURJPY,0,0) 2021.08.13 19:30
2021.09.21 15:30:48.440 2021.08.13 19:15:00  testMulti EURUSD,M15: 129.539 Time[0] 2021.08.13 19:15 iTime(EURJPY,0,0) 2021.08.13 19:15

ZZY travaille à l'obtention de données de barres à partir d'autres caractères)))). Mais l'histoire doit être chargée spécifiquement, en sortant du tableau uniquement sur un instrument non chargé ou en demandant des données à une barre éloignée.

ZS ZS

Ça marche vraiment ! !! J'ai dû télécharger les archives de cotations de toutes les paires de devises nécessaires et cela fonctionne sur une minute à partir de juin 21, sur les débuts plus anciens et plus tardifs).

 
giros #:

Pouvez-vous me suggérer où je peux apprendre MQL5 (en russe) ?

Ici. Je n'ai rien lu d'autre.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Bonjour. J'essaie de trouver le prix d'ouverture de l'avant-dernier ordre, mais cela fonctionne bien s'il n'y a pas d'ordres de vente. Pouvez-vous me dire quelle est l'erreur ? Je pense que ça les compte aussi. MQL4

 
makssub #:


Bonjour. J'essaie de trouver le prix d'ouverture de l'avant-dernier ordre, mais cela fonctionne bien s'il n'y a pas d'ordres de vente. Pouvez-vous me dire quelle est l'erreur ? Je pense que ça les compte aussi. MQL4

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
Valeriy Yastremskiy #:


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Merci. J'ai revérifié, ça compte toujours pour Sell aussi(

 
makssub #:


Merci. J'ai revérifié, ça compte toujours pour Sell aussi(

Probablement parce que vous soustrayez au nombre total de commandes.

OrdersTotal()- 2 

et ne regarder que dans

OP_BUY
 
makssub #:


Merci. J'ai revérifié, ça compte toujours pour Sell aussi(

Ne pas imprimer avant le deuxième si et à l'intérieur du deuxième si le numéro, le ticket et le type de commande.

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print("Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print("Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

Il existe deux constructeurs. Lorsque j'appelle le premier constructeur à partir du second et que je fixe des valeurs pour les variables ci-dessus, lorsque je retourne au second, ces variables deviennent NULL.
Mais si je copie simplement le code du premier constructeur au second et que je ne l'appelle pas, tout fonctionne. Quel est le problème ?

CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL;
   nextWave = NULL;
   name = namePref+"_"+TimeToString(startTime, TIME_DATE|TIME_MINUTES);
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this.prevWave = prevWave;
   prevWave.nextWave = &this;
  }
 
Roman Sharanov NULL.
Mais si je copie simplement le code du premier constructeur au second et que je ne l'appelle pas, tout fonctionne. Quel est le problème ?


Le problème se trouve dans MQL.

Dans de telles situations, je place l'initialisation dans une méthode séparée que je tire de différents constructeurs.

---

Il y a également un problème avec l'appel du constructeur parent.

 
Valeriy Yastremskiy #:

Imprimez avant le deuxième if et à l'intérieur du deuxième if le numéro, le ticket et le type de commande.

Merci. Je vais vérifier plus tard dans la journée.

Raison: