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

 
makssub #:

C'est le dernier, pas l'avant-dernier.


Regarde ce que tu as écrit :

" Si le prix baisse et qu'un autre ordre est ouvert, l'ordre avec le maximum de OrderOpenPrice devient l'avant-dernier ordre. "

Cette fonction recherche le prix d'ouverture maximum ou minimum.

Si vous ne voulez que l'avant-dernier, vous avez intérêt à vous souvenir du billet lors de son ouverture.

 
MakarFX #:

Regarde ce que tu as écrit :

" Si le prix baisse et qu'un autre ordre est ouvert, l'ordre avec le maximum de OrderOpenPrice est l'avant-dernier ordre. "

Cette fonction recherche le prix d'ouverture maximum ou minimum.

Si vous ne voulez que l'avant-dernier, vous avez intérêt à vous souvenir du billet lors de son ouverture.

Je m'excuse, parfois je ne suis pas très clair.

Je l'ai déjà fait par tick et par temps, mais dans les fluctuations, lorsque le prix peut monter puis descendre, ce n'est pas forcément l'avant-dernier. Ces variantes ont déjà été élaborées. Le prix d'ouverture est donc la meilleure option. Ou un tas de fonctions qui vérifieront tout, et là je suis sûr que je serai très confus. Je n'ai pas beaucoup de temps pour tout garder dans ma tête.

J'ai déjà écrit sur l'avant-dernier et il a lâché. Un problème, il n'a pas fait la distinction entre OP_SELL et OP_BUY. Quand le deuxième apparaît, il commence à le compter(

 
makssub #:

Je m'excuse, parfois je ne suis pas très clair.

J'ai déjà fait au tick, et à temps, mais dans une fluctuation, quand le prix peut monter, puis descendre, ce n'est peut-être pas l'avant-dernier. Ces variantes ont déjà été élaborées. Le prix d'ouverture est donc la meilleure option. Ou un tas de fonctions qui vont tout revérifier, et là, je suis sûr que je vais être très confus. Je n'ai pas beaucoup de temps pour tout garder dans ma tête.

J'ai déjà écrit sur l'avant-dernier et il a lâché. Un problème, il n'a pas fait la distinction entre OP_SELL et OP_BUY. Quand j'obtiens le deuxième, il commence à le compter(

Écrivez simplement ce que vous devez trouver (si c'est arrivé, vous devez l'obtenir)... parce que je suis déjà confus aussi

 
MakarFX #:

Écrivez simplement ce que vous devez trouver (si c'est arrivé, vous devez l'obtenir)... parce que je suis déjà confus aussi

J'ai mis en évidence le prix de la commande que vous devez trouver.

Ce n'est pas difficile s'il n'y a pas de OP_BUY. Si OP_BUY apparaît, mon code ne fonctionne pas(

double FindPenultSellPrice()
{
   double  UpPrice = DBL_MAX, profit = 0;
   int    i;
   for(i = OrdersTotal()-2; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            if ( OrderOpenPrice() < UpPrice)
            {
               UpPrice = OrderOpenPrice();
            }
         }
      }
   }
   return(UpPrice);
}
 
MakarFX #:

Écrivez simplement ce que vous devez trouver (si c'est arrivé, vous devez l'obtenir)... Je suis déjà confus aussi

Ce n'est pas l'avant-dernier ordre par le temps, c'est l'avant-dernier ordre par le prix si le prix est allé dans l'autre sens. Alexei a bien écrit, nous devrions chercher par prix. Il ne faut pas changer les valeurs des maxima et des minima.

Zy. Je me serais souvenu de la dernière commande (c'est une grille) et j'aurais mis l'avant-dernière dans ma variable. L'algorithme ne doit être affiné que si l'on monte de un et que l'on descend immédiatement de un, puis que l'on monte de un et que l'on descend immédiatement de un)))). Si deux ordres vont dans le même sens, il faut se souvenir du ticket de l'avant-dernier et du dernier ordre au cas où. Si un troisième ordre s'ouvre, le ticket de l'avant-dernier ordre est égal au dernier et le ticket du dernier ordre est égal au troisième.

 
makssub #:

Surligné en couleur quel prix de commande à trouver

Ce n'est pas difficile s'il n'y a pas de OP_BUY. Si OP_BUY apparaît, mon code ne fonctionne pas(

Essayez de cette façon

//+------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                          |
//|  1 - размер лота последней позиции                               |
//|  2 - цена последней открытой позиции                             |
//|  3 - время последней открытой позиции                            |
//+------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0,f=0;
   
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderOpenTime(); l=OrderLots(); p=OrderOpenPrice();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }
//+------------------------------------------------------------------+
double FindOpenPrice()
  {
   double AbsPoint=DBL_MAX;
   double openprice=0;
   
   for(int pos=OrdersTotal()-2;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(AbsPoint>MathAbs(OrderOpenPrice()-GetInfoLastPos(2)))
                 {
                  AbsPoint=MathAbs(OrderOpenPrice()-GetInfoLastPos(2));
                  openprice = OrderOpenPrice();
                 }
              }
           }
        }
     }
   return(openprice);
  }
//+------------------------------------------------------------------+
 
MakarFX #:

Essayez ça.

Merci pour votre travail.

Il y a une nuance) Elle se trouve en haut, marquée en rouge. Pour OP_SELL, il se trouve en bas, marqué en bleu. Et je vous le dis tout de suite, je n'ai pas vérifié comment cela va compter si OP_BUY apparaît.

 
makssub #:

Merci pour votre travail.

Il y a une nuance) Elle se trouve en haut, marquée en rouge. Pour OP_SELL, il doit être en bas, marqué en bleu. Et je dois dire tout de suite que je ne savais pas comment cela fonctionnera si OP_BUY apparaît.

En haut, c'est le plus proche !

J'ai demandé d'écrire ce que vous devez trouver et vous donnez quelques portions.

Par exemple, j'ai besoin de : "Si un Sell s'est ouvert, je dois trouver le Sell le plus proche à partir du haut... etc.".

P.S. Qu'est-ce que tu as marqué en rouge ? Je ne vois pas 0_o
 
MakarFX #:

Celui du haut est le plus proche !

Je vous ai demandé d'écrire ce que vous devez trouver, mais vous donnez des portions...

Par exemple, j'ai besoin de : "Si un Sell s'est ouvert, alors vous devez trouver le Sell le plus proche à partir du haut... etc.".

P.S. Qu'est-ce que tu as marqué en rouge ? Je ne vois pas 0_o

Ça m'arrive. Je pense une chose et j'écris une autre. Pas attentif Désolé) A propos de rouge moi-même en état de choc)

 
makssub #:

Ça m'arrive. Je pense une chose et j'écris une autre. Je ne fais pas attention. Désolé. Je suis choqué par le rouge.)

Alors qu'est-ce que tu veux ?)