De auteur van dit idee: ef91 (begin van de gerelateerde discussie #62)
MQL5 code auteur: Vladimir Karputov.
Deze EA wacht tot een Take Profit (TP) of Stop Loss (SL) wordt getriggerd en opent dan een positie in de tegenovergestelde richting. Voordat de handelsaanvraag wordt verzonden, controleert het of er voldoende saldo beschikbaar is. Dit wordt gedaan in de functie OnTradeTransaction.
Bijvoorbeeld, als we een open Buy-positie hebben, wordt er een nieuwe Sell-positie geopend zodra TP of SL wordt getriggerd. Vervolgens, na het triggeren van TP of SL, wordt er weer een nieuwe Buy-positie geopend.
De sluiting van een deal wordt gecontroleerd in OnTradeTransaction:
//+------------------------------------------------------------------+ //| TradeTransaction functie | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- krijg het transactie type als enumeratie waarde ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- als de transactie het resultaat is van toevoeging aan de geschiedenis 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; } } } }
Controleer het volume voordat je OrderSend uitvoert (neem de opening van een Buy-positie als voorbeeld):
//+------------------------------------------------------------------+ //| Open Buy-positie | //+------------------------------------------------------------------+ void OpenBuy(double sl,double tp) { sl=m_symbol.NormalizePrice(sl); tp=m_symbol.NormalizePrice(tp); //--- controleer het volume voordat je OrderSend uitvoert om "niet genoeg geld"-fout te voorkomen (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("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", beschrijving van resultaat: ",m_trade.ResultRetcodeDescription()); } } } else { Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", beschrijving van resultaat: ",m_trade.ResultRetcodeDescription()); } } else { m_is_trade=false; } } else { m_is_trade=false; } //--- }
Gerelateerde berichten
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- MQL5 Wizard: Handelsignalen Geïnspireerd Door Morning/Evening Stars + MFI voor MetaTrader 5
- MQL5 Wizard: Handelsignalen Geïnspireerd door Morning/Evening Stars en RSI voor MetaTrader 5
- Efficiënt Trendvolgend Handelsysteem met Exp_X2MA_JFatl voor MetaTrader 5
- Close Cross MA: Efficiënt Orders Sluiten met MetaTrader 4