Wie kann man im MT 5 nach dem Schließen von Positionen Handelspausen programmieren?

 

Hallo Leute,

ich beiß mir wirklich die Zähne aus...!

Ok... ich bin nur ein wießbegieriger Anfänger ohne viel Geduld... aber Vieles klappt schon.

Mir geht's nicht um eine tägliche Start- und Stopzeit zu programmieren, dass funktioniert einwandfrei in meinem EA!

Ich benötige eine Funktion, mit der ich nach jeder geschlossenen Position unmittelbar eine ca. 60 minütige (3600 Sek.)

Handelspause festlegen bzw. programmieren kann.

Hat jemand von euch eine Idee, wie das gehen könnte?

Vielen Dank im Voraus

Gruß Frank

 
static datetime canTrade = 0;
if (PosWurdeGeschlossen) canTrade  = TimeCurrent() + 3600; // 60 Min mit 60 Sek.
if (TimeCurrent() > canTrade && nOpnPos==0 ) {
   ... // trading
}
So in etwa.
 

Hallo Herr Schreiber,

erst einmal herzlichen Dank für das Beispiel.

Ich probiere das mal aus!

Danke noch einmal...!

Gruß Frank

 
Carl Schreiber #:
So in etwa.

Hallo Herr Schreiber,

ich bin ihrem Vorschlag gefolgt... aber vielleicht doch ein zu großer Anfänger, ihren

Gedankengang zu Ende zu bringen.

Könnten sie vieleicht die einzelnen Schritte für mich konkretisieren?

Ich bin halt ein Börsanier... und weniger ein Programmierer.

Das wäre für mich das letzte und fehlende Puzzel in (m)einem großen Spiel!

Mit hoffnungsvollen Grüßen

Frank Neben

 
  1. Zeit feststellen, zu der eine Position geschlossen wurde,
  2. diesen Zeitpunkt +3600 einer static (im Editor Courser drauf stellen und F1 drücken) Variablen canTrade zusweisen,
  3. und erst dann, wenn TimeCurrent() > canTrade, nach der nächsten Gelegenheit zu handeln suchen.

Vielleicht mal hierr hineingucken:

Quickstart for newbies: https://www.mql5.com/de/articles/496
und: https://www.mql5.com/de/articles/100
Kochbücher: https://www.mql5.com/de/search#!keyword=kochbuch

Schnelleinstieg oder Kurzanleitung für Anfänger
Schnelleinstieg oder Kurzanleitung für Anfänger
  • www.mql5.com
Liebe Leser, in diesem Artikel möchte ich Ihnen vermitteln und zeigen, wie man sich möglichst schnell und einfach die Grundlagen der Erstellung automatischer Handelssysteme, wie die Arbeit mit Indikatoren u. a., erschließt. Der Beitrag richtet sich an Neueinsteiger, in ihm kommen weder komplizierte noch schwer zu verstehende Beispiele zur Anwendung.
 
Franko-Nero:

Hallo Leute,

ich beiß mir wirklich die Zähne aus...!

Ok... ich bin nur ein wießbegieriger Anfänger ohne viel Geduld... aber Vieles klappt schon.

Mir geht's nicht um eine tägliche Start- und Stopzeit zu programmieren, dass funktioniert einwandfrei in meinem EA!

Ich benötige eine Funktion, mit der ich nach jeder geschlossenen Position unmittelbar eine ca. 60 minütige (3600 Sek.)

Handelspause festlegen bzw. programmieren kann.

Hat jemand von euch eine Idee, wie das gehen könnte?

Vielen Dank im Voraus

Gruß Frank

Hallo,

es ist schon bisschen länger her, aber habe einen Beispiel für Sie.

#include <Trade/Trade.mqh>
CTrade trade;

#include <Trade/SymbolInfo.mqh>
CPositionInfo  m_position;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {

// Handelsperiod Funktion
   // HandelsPeriod();

   // HistorySelect(von_datum,zum_datum);
   HistorySelect(iTime(_Symbol,PERIOD_D1,0),iTime(_Symbol,PERIOD_D1,0)+60*60*24);
   uint total=HistoryDealsTotal();
   ulong    ticket=0;
   datetime  localtime = TimeCurrent();


//--- for all deals
   for(uint i=0; i<total; i++) {
      //--- Sucht nach Tickets die grösser als Null sind
      if((ticket=HistoryDealGetTicket(i))>0) {
         long entry=HistoryDealGetInteger(ticket,DEAL_ENTRY);
         if(entry==DEAL_ENTRY_OUT)
            continue;

         string        symbol = HistoryDealGetString(ticket,DEAL_SYMBOL);
         ulong       deal_time = HistoryDealGetInteger(ticket,DEAL_TIME);

         //... processing of deal with some Symbol
         if(symbol==_Symbol) {


            if(localtime < ((datetime)deal_time + 3600)) {
               //---
               // Kein Trading
               return;
            }

         }
      }
   }


//---
   int    digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // number of decimal places
   double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);             // current buy price
   double price=bid;                                            // unnormalized open price
   price=NormalizeDouble(price,digits);                         // normalizing open price

   double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double price2=ask;                                            // unnormalized open price
   price2=NormalizeDouble(price2,digits);                         // normalizing open price

   if(PositionsTotal() < 4) {
      trade.Buy(0.10,_Symbol,price2,NULL,NULL,NULL);
      trade.Sell(0.10,_Symbol,price,NULL,NULL,NULL);

      Sleep(10000);

      for(int i=PositionsTotal()-1; i>=0; i--) // Gibt die Anzahl der offenen Positionen zurück
         if(m_position.SelectByIndex(i)) {
            //---
            if(m_position.Symbol()== _Symbol) {
               trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
               continue;
            }
         }
   }


}

Wurde für Tester geschrieben.

Gruß Igor

Grund der Beschwerde: