Fermeture des demi-lots. - page 12

 
DomGilberto:
Ah oui - je l'ai eu ! Je pense que je sais comment le faire - je retourne jouer maintenant :)
 
int start()
   {
   if(IsNewCandle())
      {
      CheckForMaTrade();
      if(UseCandleTrail)AdjustTrail();
      }

   if(OpenOrdersThisPair(Symbol())>0)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
      }
   }
Est-ce que ça marcherait ? Est-ce que ça vérifierait chaque tick à partir de là ? (CloseHalfOrder() )

CI-DESSOUS - cela fonctionne :)
 

Désolé - je devrais arrêter de poser les questions 101 avant d'essayer les choses :P

Oui - cela fonctionne. J'ai maintenant réussi à faire en sorte qu'il se ferme dès que le tick entre et que l'offre est >= le prix spécifié dans l'OrderClose :D

Un grand pas dans la bonne direction ! Maintenant, il faut mettre un frein à la fermeture constante des moitiés à chaque fois que le prix revient au même prix spécifié dans la fonction OrderClose :)

(Je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !) Hmmm, je ne peux pas penser à la logique correcte pour qu'il attende après que la première cible (1:1) ait fait son ordre de fermeture... Une idée ? Le numéro de l'OrderTicket() est le même... donc ça ne peut pas être comme ça ? Je suis bloqué sur cette partie maintenant :) après que j'ai ce morceau, c'est craqué à peu près :)

Mec, je suis tellement reconnaissant pour votre aide !

 
DomGilberto:


Je suis tellement reconnaissant pour votre aide !

De rien, je n'ai aucun problème à aider les gens qui écoutent et sont heureux d'essayer de s'aider eux-mêmes d'abord.
 
Incroyable 1 2 3 4 5 6 7 8 9 10 11 12

quel énorme sujet c'est

Fermer des demi-lots.

j'espère que vous pouvez expliquer à quelqu'un d'autre comment faire le moment que vous connaissez

101 questions... qui veut les lire toutes...

Pour (je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !)

cela se produit la plupart du temps si vous essayez de modifier la transaction avec les paramètres qu'elle a déjà.

 

C'est tellement gratifiant une fois que tu as trouvé la solution ! Merci aussi pour votre contribution !

La dernière chose sur laquelle je suis bloqué est de dire à la boucle d'arrêter de diviser par deux l'ordre ouvert au prix de sortie de OrderClose(), continuellement ? Honnêtement, je n'arrive pas à comprendre la logique ? Il est parfait avec le QUAND et le QUEL prix pour la fermeture partielle. J'ai juste besoin de lui dire de s'arrêter UNE FOIS qu'il a divisé l'ordre en deux une fois ?

Le problème est qu'une fois que l'OrderClose() a fermé la moitié de la position ouverte, il sera appelé encore et encore parce que le "int start" appelle "CloseHalfOrder()" chaque fois qu'il y a un "OP_BUY" ouvert... Une idée ?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...


//+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   //Print("The minimum lots are: ",DoubleToStr(minLot,Digits));

   double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   //Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));

   double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
   Print("The Lots to close is: ",DoubleToStr(half,Digits));

for(int c=OrdersTotal()-1; c>=0; c--)
      {
      if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
         {
         Print("Order Ticker Number = ",OrderTicket());
         Print("Order Lots Open = ",OrderLots());
         }
      else
          {
          Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?
          continue;
          }

      double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
      Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
      
      if(OrderMagicNumber()==MagicNumber)
         if(OrderSymbol()==Symbol())
            if(OrderLots()>minLot)
            {
            Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
            int HalfCloseTicket = OrderTicket();
            
            if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
               {
               Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
               bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
               if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
               if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
               }
            }
         if(Close_Half_Order_Buy==True)
         {
         MoveToBreakEven(); // This is a void.
         EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
         }    
     }
}
 
deVries:
incroyable 1 2 3 4 5 6 7 8 9 10 11 12

quel énorme sujet c'est

Fermer des demi-lots.

j'espère que vous pouvez expliquer à quelqu'un d'autre comment faire le moment que vous connaissez

101 questions... qui veut les lire toutes...

Pour (je me suis débarrassé de cette ennuyeuse erreur OrderModify 1 aussi !)

cela se produit la plupart du temps si vous essayez de modifier la transaction avec les paramètres qu'elle a déjà.


Mate je serai plus qu'heureux d'écrire un fil de discussion expliquant un moyen simple et efficace de fermer partiellement un ordre ouvert - je suis coincé avec juste un dernier morceau, et puis ça marche à la menthe ! Je vais rassembler tout cela dans un sujet / fil concis pour que les autres puissent l'utiliser ? (je ne suis pas sûr de la façon dont je vais m'y prendre).

Voir le dernier message ci-dessus - J'ai presque réussi, mais je n'arrive pas à trouver la logique pour dire à la boucle d'ARRÊTER de fermer les moitiés au même prix de sortie OrderClose() en permanence ?

Merci aussi pour le conseil concernant l'erreur 1 de OrderModify :)
 
DomGilberto:

Je serais plus qu'heureux d'écrire un fil de discussion expliquant un moyen simple et efficace de fermer partiellement un ordre ouvert - je suis coincé avec juste une dernière partie, et puis ça marche à merveille ! Je vais rassembler tout cela dans un sujet / fil concis pour que les autres puissent l'utiliser ? (je ne suis pas sûr de la façon dont je vais m'y prendre).

Voir le dernier message ci-dessus - J'ai presque réussi, mais je n'arrive pas à trouver la logique pour dire à la boucle d'ARRÊTER de fermer les moitiés au même prix de sortie OrderClose() en permanence ?

Merci pour le conseil concernant l'erreur 1 de OrderModify également :)

Pourquoi ne pas d'abord déplacer votre ticket vers le breakeven, comme on vous l'a déjà dit, puis fermer une partie de la transaction .... si OrderLots() >= ........
 
deVries:

Pourquoi ne pas d'abord déplacer votre ticket vers le breakeven, comme on vous l'a déjà dit, puis fermer une partie de la transaction .... if OrderLots() >= ........

Pour cette raison ? Cela n'a pas d'importance si je me déplace d'abord au seuil de rentabilité... Le premier obstacle est cette partie que je ne comprends pas ? Même si j'arrive d'abord à l'équilibre, puis que je ferme la moitié de la position, cela va appeler TOUTES les positions ouvertes à nouveau et OrderClose() au même prix en appelant "CloseHalfOrder() ;"?

int start()
   {
    
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
      
   }
 
DomGilberto:

A cause de ça ? Ça n'a pas d'importance si je bouge pour atteindre le seuil de rentabilité d'abord... Le premier obstacle est cette partie que je ne comprends pas ? Même si je me déplace d'abord jusqu'à l'équilibre, puis que je ferme la moitié, cela appellera TOUTES les positions ouvertes à nouveau et OrderClose() au même prix en appelant "CloseHalfOrder() ;"?


Vous ne vous déplacez vers BE et fermez la moitié que si le SL n'est pas déjà à BE.
Raison: