mardi 25 janvier 2011

Fermer un ordre

Si tout ne se passe pas comme prévu, ou bien si l' ordre n' a pas de Stoploss ni de Takeprofit, il est nécessaire de clore la position à un moment ou à un autre. Il faut donner l' ordre à Metatrader de fermer la position grâce à la fonction OrderClose().


La fonction :
bool OrderClose(int ticket, double nblots, double prix, int slippage, color arow = CLR_NONE)
Cette fonction est booléenne ( comme true et false ). C' est logique, il n' y a que 2 dénouements : soit l' ordre est stoppé, soit il ne l' est pas.   

   - ticket : est le ticket ( numéro unique ) de l' ordre passé sur lequel l' ordre de clôture porte.

   - nblots : est le nombre de lots que concernent l' ordre de fermeture.

   - prix : est le prix auquel on souhaite clôturer l' ordre.

   - slippage : est la différence maximale de pips acceptée par le trader entre le prix souhaité et le prix auquel l' ordre est finalement exécuté.

   - arrow : indique un point ou une flèche sur la courbe du graphique Metatrader à l' endroit où l' ordre a été clôturé. Pas obligatoire.


A noter : pour fermer les ordres en attente, on utilise la fonction OrderDelete() de la même façon que OrderClose().


Un exemple d' utilisation :
La fonction suivante va fermer tous les ordres, passés ou en attente, d' un seul coup s' il est 20 heures passées.

bool vrai = true;

int start()
  {
   int dath = Hour();
   if (dath > 20)
    {
     int i = OrdersTotal() - 1;
     while (i >= 0)
      {
       OrderSelect(i, SELECT_BY_POS);
       int type = OrderType();
       if (type == OP_BUY)
        {
     OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 2);
        }
       if (type == OP_SELL)
        {
     OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 2);
        }
       if (type == OP_BUYLIMIT || type == OP_BUYSTOP || type == OP_SELLLIMIT || type == OP_SELLSTOP)  
        {
         OrderDelete(OrderTicket());
        }
       i -= 1  // décrémentation i = i - 1
      }
    }
return;
}

Cette fonction contient beaucoup de nouveaux éléments que je vais expliquer un par un :

   - OrdersTotal() renvoie le nombre total d' ordre passé ou en attente.

   - OrderSelect() permet de sélectionner un ordre. Cette fonction prends en compte 2 paramètres : la place de l' ordre choisi ( ici c' est la variable i ), et la manière de trier les ordres. Ici, on classe les ordres du plus ancien au plus récent avec SELECT_BY_POS. Cela signifie que l' ordre le plus ancien est numéroté 0, le suivant 1, et ainsi de suite...

   - OrderType() désigne le type de l' ordre en question ( achat, vente, stop, limité )

   - OrderTicket() est le ticket unique de l' ordre.

   - OrderLots() est le nombre de lots engagés dans l' ordre.

   - OrderSymbol() est similaire à Symbol() et renvoie donc le nom de la paire traitée.

   - || correspond à OU dans une parenthèse. Dans le même registre && correspond à ET.

---> Leçon suivante

Aucun commentaire:

Enregistrer un commentaire