L'auteur de l'idée : ef91 (début de la discussion associée #62)
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
- Utiliser MQL5 Wizard pour Créer un Expert Advisor Basé sur les Modèles de Chandeliers Englobants et MFI
- Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI
- Découvrez l'Expert Advisor exp_iCustom_v5 pour MetaTrader 4
- RRS Impulse : L'Expert EA Indispensable pour MetaTrader 4
- Découvrez CoensioTrader1V06 : Votre nouvel allié sur MetaTrader 5