[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 186

 
Pyro:

Bonjour à tous. Ma recherche dans l'historique ne renvoie pas le volume des lots. C'est comme ça que ça doit être ?


Il renvoie 0,1 lot, bien que les lots soient modifiés par le programme. Les tickets sont reflétés correctement (modifiés).


Ne cherchez pas les "bogues et les fonctionnalités" dans tout - parfois la porte s'ouvre très simplement ... :-)

Où est la boucle de commande ?

 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)   
             Comment("\n\n\n",OrderLots()," ",OrderTicket());                        
         }
      }
   }
 
Pyro:

Bonjour à tous. Ma recherche dans l'historique ne renvoie pas le volume des lots. Est-ce la bonne façon de faire ?


Il renvoie le lot 0.1, bien que les lots soient modifiés par le programme. les tickets sont affichés correctement (changement). un bug ? un bug ?


Voir code analogue, éditer, essayer :

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;  
    
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 

Roman


Je n'ai pas besoin d'un cycle. Je dois obtenir le LOT de la dernière commande, peu importe laquelle, je n'ai pas besoin de filtrage. Il n'est pas question de LOT dans l'exemple. Je suis perplexe.

 
Pyro:

Roman


Je n'ai pas besoin d'un cycle. Je dois obtenir le LOT de la dernière commande, peu importe laquelle, je n'ai pas besoin de filtrage. Il n'est pas question de LOT dans l'exemple. Je suis perplexe.


Jetez un coup d'oeil - j'ai modifié mon message précédent...
 
Je ne comprends pas. Une boucle est nécessaire lorsque vous devez filtrer selon certains critères, comme dans votre cas. Ma tâche est plus simple - prendre la dernière commande de l'historique. Par définition, il est fermé, et par définition, il n'y a pas de positions ouvertes sur le marché. Les ordres en attente ne sont pas utilisés. C'est-à-dire que la dernière commande sera certainement celle du marché. Les tickets sont retournés correctement, les lots ne le sont pas.
 
Pyro:
Je ne comprends pas. Une boucle est nécessaire lorsque vous devez filtrer selon certains critères, comme dans votre cas. Ma tâche est plus simple - prendre la dernière commande de l'historique. Par définition, il est fermé, et par définition, il n'y a pas de positions ouvertes sur le marché. Les tickets sont retournés correctement, les lots ne le sont pas.

C'est à moi ! Apprenez à utiliser la recherche ! :-)
 
Merci pour cela :) Le problème était autre.
 
MK07:

Merci de vouloir aider. J'ai mis if (D_sig==0) { command for signal ; }. Les "pas" sont devenus moins nombreux, mais ils le sont toujours.

J'ai mis MathAbs afin d'avoir un "couloir" de comparaison, car la probabilité que les lignes de signaux soient absolument égales est négligeable.

Peut-être que quelqu'un d'autre a des idées sur mon problème ?


Je l'ai écrit comme ça et il affiche D_Sig dans le commentaire.

         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
if(D_sig==0)  {   D_sig_Last=D_sig; }
      
//       break;          
             
           
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
 
Suggérer un "principe favori" de formation des noms d'EA - et qu'il tienne compte du principe de fonctionnement et de version, etc.
 

Bonjour à tous.

Il existe une fonction bool NewBar(), veuillez créer une fonction bool NewZZ() . Quand un nouveau genou en zigzag apparaît -> vrai.