Accueil Trading Systématique Publication

Optimisez vos trades avec le système de trading Cheduecoglioni sur MetaTrader 5

Pièce jointe
18294.zip (1.98 KB, Télécharger 0 fois)

L'auteur de l'idée : ef91 (début de la discussion associée )

Auteur du code MQL5 : Vladimir Karputov.

Ce système de trading (EA) attend qu'un Take Profit (TP) ou un Stop Loss (SL) se déclenche avant d'ouvrir une position dans la direction opposée. Il vérifie également s'il y a suffisamment de fonds disponibles avant d'envoyer une demande de trade.

Par exemple, si nous avons une position d'achat ouverte. Une fois que le TP ou le SL se déclenche, une nouvelle position de vente est ouverte. Ensuite, après le déclenchement du TP ou du SL, une nouvelle position d'achat est également ouverte.

La fermeture des transactions est surveillée dans la fonction OnTradeTransaction :

//+------------------------------------------------------------------+
//| Fonction TradeTransaction                                            |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obtenir le type de transaction en tant que valeur d'énumération 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- si la transaction est le résultat de l'ajout à l'historique
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_time         =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
              {
               if(deal_type==DEAL_TYPE_BUY)
                  m_close_pos_type=POSITION_TYPE_SELL;
               else if(deal_type==DEAL_TYPE_SELL)
                  m_close_pos_type=POSITION_TYPE_BUY;
               else
                  return;
               m_is_trade=true;
          }
           }
        else if(deal_entry==DEAL_ENTRY_IN)
           {
            m_is_trade=false;
           }
        }
     }
  }

Vérifiez le volume avant d'envoyer l'ordre (en considérant l'ouverture d'une position d'achat comme exemple) :

//+------------------------------------------------------------------+
//| Ouvrir une position d'achat                                          |
//+------------------------------------------------------------------+
void OpenBuy(double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);

//--- vérifier le volume avant d'envoyer l'ordre pour éviter l'erreur "pas assez d'argent" (CTrade)
   double check_volume_lot=m_trade.CheckVolume(m_symbol.Name(),InpLots,m_symbol.Ask(),ORDER_TYPE_BUY);

   if(check_volume_lot!=0.0)
     {
      if(check_volume_lot>=InpLots)
        {
         if(m_trade.Buy(InpLots,NULL,m_symbol.Ask(),sl,tp))
           {
            if(m_trade.ResultDeal()==0)
              {
               Print("Achat -> faux. Code de résultat : ",m_trade.ResultRetcode(),
                     ", description du résultat : ",m_trade.ResultRetcodeDescription());
              }
              else
              {
               Print("Achat -> vrai. Code de résultat : ",m_trade.ResultRetcode(),
                     ", description du résultat : ",m_trade.ResultRetcodeDescription());
              }
         }
         else
         {
            Print("Achat -> faux. Code de résultat : ",m_trade.ResultRetcode(),
                  ", description du résultat : ",m_trade.ResultRetcodeDescription());
           }
        }
      else
        {
         m_is_trade=false;
        }
     }
   else
     {
      m_is_trade=false;
     }
//---
  }

Articles connexes

Commentaire (0)