[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 525

 
Je suis désolé. Tu peux imaginer que le dernier addendum n'est pas enregistré ?
//----
   for ( i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
    if( OrderMagicNumber( )==2000 
    &&OrderSymbol()==Symbol()&&
    OrderTakeProfit( )==OrderClosePrice(        )&&wremjapomnim<OrderCloseTime( ) ||
   OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()
   &&OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )){
   Alert ("нашли MODE_HISTORY");
 for ( i=OrdersTotal();i>0;i--)  {
 Alert ("паследний цикл",i);
  OrderSelect(i-1,SELECT_BY_POS );
  if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
  || OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol())  { 
  Alert ("OrderTicket( )",OrderTicket( )); 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); 
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
   Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }}}}                              
   

Plus précisément, la ligneAlert ("OrderTicket( )",OrderTicket( )) ; Ce qui pourrait signifier que le dernier cycle n'est pas terminé !!!

Voici le journal. Avant, je réécrivais souvent le code, je rencontrais souvent des erreurs, je pense4108 et 4050, maintenant il n'y a pas d'erreur ! Ouais, eh bien, ça ne marche pas, de toute façon !

 

Ouais, eh bien, je suppose que c'est là que ça devient délicat.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

C'est vrai, s... Qu'est-ce que j'ai fait de mal dans la ligne ?


 
Bon sang, je ne sais pas, une condition comme une condition.
 
Dimka-novitsek:

Ouais, eh bien, je suppose que c'est là que ça devient délicat.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

C'est vrai, s... Qu'est-ce que j'ai fait de mal dans la ligne ?


|| est exécuté en premier, puis &&
 
ilunga:
mais à ce stade, il pourrait s'agir d'un ordre à distance en attente et le résultat serait inhabituel ;)

Je ne comprends pas, ce ne sont pas les supprimés que je sélectionne ici, ni les historiques des mods. OK, pas besoin, c'est pour plus tard.
 

-AAH ! !! Donc je vais mettre les deux côtés entre parenthèses ! !! MERCI !!!!!

Ouf ! !!

Ok, je vais prendre une douche. C'est chaud.

 
Dimka-novitsek:

Je ne comprends pas, je n'élimine pas ceux qui ont été supprimés, pas les historiques de mode. Ok, pas besoin, c'est plus tard.

Supposons que nous ayons un ordre en attente à supprimer et que nous ayons atteint la ligne (pour faciliter la lecture, je l'ai décomposée par opérateur).

OrderDelete(OrderTicket( ));
Alert ("OrderDelete-vse",  GetLastError( ) );
OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);
Alert ("OrderClose-vse",  GetLastError( ) );
 C=0;

Donc, nous avons cet ordre :

1) nous les supprimons, et ce faisant :

a) nous avons de la chance et il est supprimé

b) il se peut qu'elle ne soit pas supprimée parce que le prix est trop proche/le serveur est surchargé/l'Internet est en panne/etc. Mais nous allons quand même de l'avant.

2) si quelque chose ne va pas, nous l'écrivons.

3) fermer l'ordre (en attente !!! que nous avons supprimé au premier point !!!)

résultat... Je ne peux pas prédire à 100%, mais il semble qu'une autre erreur

4) afficher un message à ce sujet

 
Dimka-novitsek:

Ouais, eh bien, c'est le problème.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

C'est tellement juste... Qu'est-ce que j'ai raté dans la ligne ?

Disons-le comme ça... Pour que personne ne se fasse tirer dessus et qu'on ne vous donne pas d'ordres... :))

Commençons par l'ordre. D'abord, nous allons trouver la dernière position fermée et nous assurer qu'elle est fermée à la prise :

   int j=-1;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for (int i=0; i<OrdersHistoryTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderSymbol()!=Symbol())     continue;
         if (OrderType()>1)               continue;
         if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
            if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
               }
            }
         }
      }
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
      if (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<0.5*Point) {
         Alert("Позиция с тикетом #",OrderTicket()," закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера");
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

Ceci :

// Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

Ce sera votre devoir... :)

 
MERCI !!!!!!
 
Cool writing !!!!
Raison: