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

 
Andrey Barinov:

C'est ainsi qu'il se compile :


Merci. Je pensais naïvement que la correction d'une douzaine d'erreurs de compilation transformerait un code mql4 fonctionnel en un indicateur mql5).

Il ne veut pas montrer le maximum et le minimum d'un jour. A quelle distance se trouve le but ?

 
bij:

Merci. Je pensais naïvement qu'en corrigeant une douzaine d'erreurs de compilation, un code mql4 fonctionnel deviendrait un indicateur mql5).

Il ne veut pas montrer un minimum d'un jour. A quelle distance se trouve le but ?

Je ne sais pas :)

Essayez d'étendre les tableaux de tampons au début de OnCalculate en utilisant ArraySetAsSeries

 
bij:

Merci. Je pensais naïvement que la correction d'une douzaine d'erreurs de compilation transformerait un code mql4 fonctionnel en un indicateur mql5).

Il ne veut pas montrer le maximum et le minimum d'un jour. A quelle distance se trouve-t-il de la cible ?

Il y a une telle quantité de lignes de code, juste pour montrer le haut et le bas de la journée ?
 
Alexey Viktorov:
C'est une quantité énorme de lignes de code juste pour montrer les hauts et les bas de la journée ?
Oui, il y a aussi la clôture du jour, mais elle se trouve dans l'historique, pas seulement le jour précédent. C'est là toute la difficulté.
 
bij:
Oui, également la clôture du jour, mais c'est dans l'historique, pas seulement le jour précédent. C'est la partie délicate.

C'est votre code ? Ou était-il écrit sur commande ?

Pouvez-vous me montrer un instantané de ce que cela donne dans MT4 ?

 
Alexey Viktorov:

C'est votre code ? Ou était-il écrit sur commande ?

Pouvez-vous me montrer un instantané de ce que cela donne dans MT4 ?

L'indicateur provient du réseau. Je n'ai pas MT4 sous la main, je vais vous le dire en mots. Lignes du début à la fin de chaque jour, par les prix High, Low et Close du jour. Mais, au lieu d'une ligne auprix de clôture du jour, je veux mettre une ligne au prix de clôture de la barre à 21:00.

Peut-être que l'on peut vraiment faire plus simple qu'artificiel.

 

Je ferme 4 positions en même temps, comment puis-je les compter comme une seule à la suite dans la fonction de comptage des pertes ?

Ils peuvent fermer, à cause du slippage, pas au même prix et l'heure peut être différente.

Essayez :

int CountLOS()
  {
  double priceold=0;
  datetime datold;
   int count=0;
   for(int trade=OrdersHistoryTotal()-1;trade>=0; trade--)
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_HISTORY);
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            if(OrderMagicNumber()==_MagicNumber)
              {
               if(OrderProfit()<=0&&datold !=OrderCloseTime()) {count++; datold =OrderCloseTime();}
               //if(OrderProfit()<=0&&priceold !=OrderClosePrice()) {count++; priceold =OrderClosePrice();}
               else  break;
              }
           }
        }
     }
   return(count);
  }
 
lil_lil:

Je ferme 4 positions en même temps, comment puis-je les compter comme une seule à la suite dans la fonction de comptage des pertes ?

Ils peuvent ne pas clôturer au même prix en raison du slippage et le timing peut être différent.

Le prix en raison du slippage est différent, tout comme le temps ; l'un a clôturé à la fin de la seconde, tandis que l'autre a clôturé au début de la seconde suivante. Essayez d'enregistrer les tickers des ordres au moment de la clôture. Vous pouvez les enregistrer dans un fichier...

 
lil_lil:

Je ferme 4 positions en même temps, comment puis-je les compter comme une seule à la suite dans la fonction de comptage des pertes ?

Ils peuvent fermer, à cause du slippage, pas au même prix et l'heure peut être différente.

Procès :

Je passe en revue les dernières fermées. Si le dernier fermé est négatif, alors je regarde tous les fermés pendant 120 secondes (2 minutes) et je calcule le profit total.

 
lil_lil:

Je ferme 4 positions en même temps, comment puis-je les compter comme une seule à la suite dans la fonction de comptage des pertes ?

Ils peuvent fermer, à cause du slippage, pas au même prix et l'heure peut être différente.

J'ai essayé :

Quelque chose comme ça :

 datetime _oct=0,time=0,_pt=0;
 int _cnt=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if(OrderSymbol()==symb && OrderMagicNumber()==mg) {
     int OrdersType=OrderType();
     // BUY && SELL
     if(OrdersType<=1) {
       CopyTime(OrderSymbol(),PERIOD_D1,0,1,itime);
       if((OrderCloseTime()>=itime[0] && OrderCloseTime()<itime[0]+86400)) {
         _Get.Hist.BS._ProfitDaily+=OrderProfit()+OrderCommission()+OrderSwap(); // Profit за сегодня
       }
       // 120 секунд разницы между закрытием первой и последней в сетке
       _oct=OrderCloseTime();
       if(_cnt==0 && _oct!=0) time=_oct;
        if(_oct+120>=time) {
          _Get.Hist.BS._ProfitOldClose+=OrderProfit()+OrderSwap()+OrderCommission(); // Profit последнего трейда
          _cnt++;
        }
     }
  }}} 
Raison: