und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Veröffentlicht:
- Vladimir Karputov
- Ansichten:
- 889
- Rating:
- Veröffentlicht:
- 2017.07.12 17:32
- Aktualisiert:
- 2018.02.27 13:24
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Der Autor der Idee: ef91 (der Anfang der Diskussion auf dem Forum #62)
Автор mql5 кода: Vladimir Karputov.
Wir warten, wann TP oder SL ausgelöst werden, und danach öffnen wir die Position in der entgegengesetzten Richtung. Die Überprüfung, ob Mittel ausreichend sind, bevor eine Handelsoperation durchgeführt wird. OnTradeTransaction.
Zum Beispiel, es wurde schon die Position Buy geöffnet. Wenn TP oder SL ausgelöst wurden, öffnen wir die neue Position Sell. Wenn TP oder SL ausgelöst wurden, öffnen wir die neue Position Buy.
So wird die Schließung des Trades in "OnTradeTransaction" gefangen:
//+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- if transaction is result of addition of the transaction in history 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; } } } }
Check volume before OrderSend (aufgrund des Beispiels der Eröffnung der Position Buy):
//+------------------------------------------------------------------+ //| Open Buy position | //+------------------------------------------------------------------+ void OpenBuy(double sl,double tp) { sl=m_symbol.NormalizePrice(sl); tp=m_symbol.NormalizePrice(tp); //--- check volume before OrderSend to avoid "not enough money" error (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(), ", description of result: ",m_trade.ResultRetcodeDescription()); } else { Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } else { Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } else { m_is_trade=false; } } else { m_is_trade=false; } //--- }
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/18294

Die Größe der Bar. Die Große der Kerze wird nach der folgenden Formel berechnet: "Minuend" - "Subtrahend".

Die ganze Information über das laufende Symbol (die Information wird aus dem Objekt der Klasse CSymbolInfo genommen) in Form vom Feld der Dialoge.

Diese Bibliothek bietet einen blitzschnellen Zugang zu Timeserien für die Realisierung der gewöhnlichen Methoden MQL4 (zum Beispiel, iBarShift) bei den empfindlichen Anwendungen auf MQL5.

Zwei Histogramme in einem Fenster, die maximalen durchschnittlichen Abweichungen des Preises von dem ursprünglichen Wert zeigen, die in den Punkten gemessen werden.