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

 

Tout est sélectionné normalement, mais les erreurs sont étranges, je n'arrive pas à comprendre avec le testeur.

Il indique que j'ai fermé le lot 0.3 et vendu le lot 0.7 en même temps. Est-ce ainsi qu'une partie d'une transaction est clôturée dans le testeur ? Je ne sais pas d'où proviennent ces volumes ; je ne vois aucune information sur ces volumes dans mon conseiller expert.

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

Tout est sélectionné normalement, mais les erreurs sont étranges, je n'arrive pas à comprendre avec le testeur.

Il indique que j'ai fermé le lot 0.3 et vendu le lot 0.7 en même temps. Est-ce ainsi qu'une partie d'une transaction est clôturée dans le testeur ? De même, je ne sais pas d'où viennent ces volumes lorsqu'une partie d'une transaction est fermée et qu'elle s'ouvre ensuite à 0,16, 0,24, 0,12 ; le conseiller expert ne dispose pas de tels volumes.

oui, c'est ainsi qu'une partie de la fermeture est affichée - d'abord tout est fermé, puis une partie est ouverte


J'ai deux questions :

1) comment savoir ce qu'il ne faut pas fermer ensuite ?

au prochain tick, la condition sera à nouveau remplie pour cette fonction.

2) si je ne me trompe pas, le ticket d'ordre change après la fermeture partielle, c'est à dire

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

il n'y aura pas de changement dans la deuxième ligne


3) Et n'oublions pas la normalisation...

 
ilunga:

Oui, c'est ainsi que la fermeture d'une pièce est affichée - d'abord tout ce qui est fermé, puis la partie ouverte.


deux questions immédiatement :

1) comment savez-vous qu'il n'est pas nécessaire de fermer davantage ?

la condition du prochain tick sera à nouveau remplie pour cette fonction.

2) si je ne me trompe pas, le ticket d'ordre change après la clôture partielle, c'est à dire

il n'y aura pas de changement dans la deuxième ligne


3) Et n'oublions pas la normalisation...


Le billet est-il vraiment en train de changer ? Cela doit être la raison de toutes ces erreurs. Alors pourquoi le ticket ne change-t-il pas lorsque la commande est modifiée manuellement ? J'ai besoin de savoir avec certitude si le billet change ou non.
 


Vraiment changeant, merci beaucoup
 
J'ai entendu dire que lorsque vous obtenez un prix à partir d'une paire de devises pour travailler plus avant avec elle, il doit être normalisé, par exemple, un prix obtenu à partir d'un minimum et il doit être normalisé pour le fixer à un stop loss, est-ce vrai ?
 
sss2019:
J'ai entendu dire que lorsque vous obtenez un prix à partir d'une paire de devises, vous devez le normaliser, par exemple, vous obtenez un prix à partir d'un bas et vous devez le normaliser à un stop loss, est-ce vrai ?

Oui, mais nous parlons de la normalisation au moment de la mise en place de Ordersend/OrderModify/... avant ces fonctions, vous pouvez travailler avec lui et effectuer des opérations
 
sergeev:

Oui, mais la normalisation se fait au moment de la substitution dans Ordersend/OrderModify/.... avant ces fonctions, vous pouvez travailler avec lui et effectuer des opérations
.

A combien de chiffres doit-il être normalisé ? Par défaut, le prix semble avoir 4 chiffres après la virgule, même pour les valeurs de prix à cinq chiffres, au moins Low[0] et High[0] ont toujours seulement 4 chiffres après la virgule, j'ai essayé de le sortir via Alert ou via Print,
 
sss2019:

A combien de chiffres doit-il être normalisé ? Par défaut, le prix semble avoir 4 chiffres après la virgule même pour une valeur à cinq chiffres, au moins Low[0] et High[0] ont toujours seulement 4 chiffres après la virgule, j'ai essayé de le sortir via Alert ou via Print,

par défaut, le prix Digits comporte des chiffres après la virgule.

et Alertes et Impressions n'en sortent que 4 par défaut. Utilisez la chaîne de caractères DoubleToStr( double valeur, int chiffres) pour en savoir plus

 

Aidez ensuite à mettre en place un stop suiveur, comme ceci. Ordre de vente

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

Le problème est que le stop loss ne devrait être reporté qu'en avant, mais dans mon ordre, il est également reporté en arrière.

________________________________

Ma question a disparu, désolé.

 
sss2019:

Aidez ensuite à mettre en place un stop suiveur, comme ceci. Ordre de vente

Le problème est que le seuil de déclenchement ne devrait être déplacé que vers l'avant, mais je l'ai également déplacé vers l'arrière.

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

est équivalent à

NewStopLoss2 = NewStopLoss;