Processing

Algorithme principal de traitement.

virtual bool  Processing()

Valeur de retour

vrai si l'opération a été éxécutée, sinon faux.

Note

Effecute les étapes suivantes :

1. Vérifie l'existence d'une position ouverte sur le symbole. Si aucune position n'est trouvée, passe à l'étape №5.
2. Vérifie les conditions pour retourner une position ouverte (méthode CheckReverse()). Si la position a été retournée, la fonction se termine.
3. Vérifie les conditions pour fermer la position (méthode CheckClose()). Si la position a été clôturée, passe à l'étape №5.
4. Vérifie les conditions pour modifier les paramètres de la position (méthode CheckTrailingStop()). Si les paramètres de la position ont été modifiés, la fonction se termine.
5. Vérifie l'existence d'ordres en attente sur le symbole. Si aucun ordre en attente n'est trouvé, passe à l'étape №9.
6. Vérifie les conditions pour supprimer un ordre (méthode CheckDeleteOrderLong() pour les ordres en attente de type buy ou CheckDeleteOrderShort() pour les ordres en attente de type sell). Si l'ordre a été supprimé, passe à l'étape №9.
7. Vérifie les conditions pour modifier les paramètres d'un ordre en attente (CheckTrailingOrderLong() pour les ordres de type buy ou CheckTrailingOrderShort() pour les ordres de type sell). Si les paramètres de l'ordre ont été modifiés, la fonction se termine.
8. Sortie.
9. Vérifie les conditions pour ouvrir une position (méthode CheckOpen()).

Si vous voulez implémenter votre propre algorithem, vous devez surcharger la méthode Processing() de la classe dérivée.

Implémentation

//+------------------------------------------------------------------+
//| Fonction principale                                              |
//| ENTREE : aucune.                                  |
//| SORTIE : vrai si une opération a été effectuée, faux sinon. |
//| REMARQUE : aucune.                                                |
//+------------------------------------------------------------------+
bool CExpert::Processing()
  {
//--- vérifie l'existence de positions ouvertes
   if(m_position.Select(m_symbol.Name()))
     {
      //--- ouvre la position
      //--- vérifie la possibilité de renverser la position
      if(CheckReverse()) return(true);
      //--- vérifie la possibilité de fermer la position/supprimer les ordres en attente
      if(!CheckClose())
        {
         //--- vérifie la possibilité de modifier la position
         if(CheckTrailingStop()) return(true);
         //--- retour sans traitement
         return(false);
        }
     }
//--- vérifie la présence d'ordres en attente
   int total=OrdersTotal();
   if(total!=0)
     {
      for(int i=total-1;i>=0;i--)
        {
         m_order.SelectByIndex(i);
         if(m_order.Symbol()!=m_symbol.Name()) continue;
         if(m_order.OrderType()==ORDER_TYPE_BUY_LIMIT || m_order.OrderType()==ORDER_TYPE_BUY_STOP)
           {
            //--- vérifie la possibilité de supprimer un ordre long en attente
            if(CheckDeleteOrderLong()) return(true);
            //--- vérifie la possibilité de modifier un ordre long en attente
            if(CheckTrailingOrderLong()) return(true);
           }
         else
           {
            //--- vérifie la possibilité de supprimer un ordre sell en attente
            if(CheckDeleteOrderShort()) return(true);
            //--- vérifie la possibilité de modifier un ordre sell en attente
            if(CheckTrailingOrderShort()) return(true);
           }
         //--- retour sans traitement
         return(false);
        }
     }
//--- vérifie la possibilité d'ouvrir une position / de mettre un ordre en attente
   if(CheckOpen()) return(true);
//--- retour sans traitement
   return(false);
  }