Abfrage ob Markt verkaufsbereit, Systemssteuerung wenn Markt geschlossen

 

Hallo,

ich habe zwei zusammenhängende Fragen:

-Wie mache ich von einem Chart aus eine Abfrage zu einem Symbol eines anderen Charts, ob dieser handelsbereit ist, also der Markt geöffnet ist? Ich möchte von dem ersten Chart Orders in verschiedenen Symbolen anderer Charts schließen, nach der Abfrage.

-Wie kann ich den Code im ersten Chart auch dann ablaufen lassen, wenn bei diesem selbst der Markt geschlossen ist. Ich habe den Code immer unter der Funktion OnTick() ablaufen lassen. Nun stellte ich fest, dass der Code aber gestoppt wird, wenn der Markt geschlossen ist.


Danke im Vorraus

 
Stefan Heinze:

Hallo,

ich habe zwei zusammenhängende Fragen:

-Wie mache ich von einem Chart aus eine Abfrage zu einem Symbol eines anderen Charts, ob dieser handelsbereit ist, also der Markt geöffnet ist? Ich möchte von dem ersten Chart Orders in verschiedenen Symbolen anderer Charts schließen, nach der Abfrage.

-Wie kann ich den Code im ersten Chart auch dann ablaufen lassen, wenn bei diesem selbst der Markt geschlossen ist. Ich habe den Code immer unter der Funktion OnTick() ablaufen lassen. Nun stellte ich fest, dass der Code aber gestoppt wird, wenn der Markt geschlossen ist.


Danke im Vorraus

Zu 1. Frage:

Die Information bekommst du von folgenden Funktionen:

bool  SymbolInfoSessionQuote(
   string            name,                // Symbolname 
   ENUM_DAY_OF_WEEK  day_of_week,         // Wochentag
   uint              session_index,       // Nummer der Notierungssitzung
   datetime&         from,                // Anfang der Notierungssitzung
   datetime&         to                   // Ende der Notierungssitzung
   );
bool  SymbolInfoSessionTrade(
   string            name,                // Symbolname
   ENUM_DAY_OF_WEEK  day_of_week,         // Wochentag
   uint              session_index,       // Nummer der Handelssitzung
   datetime&         from,                // Anfang der Handelssitzung
   datetime&         to                   // Ende der Handelssitzung
   );

https://www.mql5.com/de/docs/marketinformation/symbolinfosessionquote

https://www.mql5.com/de/docs/marketinformation/symbolinfosessiontrade


Zu 2

Nutze für sowas das Event OnTimer

https://www.mql5.com/de/docs/event_handlers/ontimer

Dokumentation zu MQL5: Marktinformation erhalten / SymbolInfoSessionQuote
Dokumentation zu MQL5: Marktinformation erhalten / SymbolInfoSessionQuote
  • www.mql5.com
SymbolInfoSessionQuote - Marktinformation erhalten - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Ok. Danke.

1:
SymbolInfoSessionTrade liefert die regelmäßigen Handelszeiten. Aber was ist, wenn Feiertage anstehen?

Identifiziert der session_index immer den exakt jetzigen Tag, damit also, ob der Handel im jetzigen Augenblick möglich ist? Woher kommt der session_index?

2:
Event OnTimer klingt gut.
 
Ok, ich nehme an, der Index 0 beschreibt immer die aktuelle Handelssitzung? Das probiere ich dann.

Mmh, den heutigen Wochentag muss ich dann aber auch ständig berechnen, wie ich gerade feststelle.

Geht das nicht einfacher? Ich will nur abfragen, ob der Markt im Augenblick handlungsfähig ist. 
 
Stefan Heinze:
Ok, ich nehme an, der Index 0 beschreibt immer die aktuelle Handelssitzung? Das probiere ich dann.

Mmh, den heutigen Wochentag muss ich dann aber auch ständig berechnen, wie ich gerade feststelle.

Geht das nicht einfacher? Ich will nur abfragen, ob der Markt im Augenblick handlungsfähig ist. 

Einfacher ? ...sicher doch. Probiere es doch erstmal. Keine Ahnung, ob dein Broker überhaupt die Information liefert.

Du schreibst die einmal eine Funktion.

bool TradeSessionOpen(string symbol)

{

....

}

schau mal in den Thread .... https://www.mql5.com/de/forum/317993

Feiertage wird kniffliger da Länderabhängig.

datetime
datetime
  • 2019.07.15
  • www.mql5.com
Hallo, mal eine kurze Frage zu datetime, versuche ja gerade, mir die Handelszeiten als Comment einzublenden, merke mir ja nicht wann welche Future...
 

Ok. Danke. 

Ich weiß jetzt, wie ichs mache. Ich werde von den Unterprogrammen bei jedem Durchlauf eine Meldung als Globale Variable senden, die sich das Steuerprogramm abgreift und sofort wieder löscht. Damit ist immer sichergestellt, dass nur Charts zur Berechnung einbezogen werden, die auch tatsächlich online sind.

 
Stefan Heinze:

Ok. Danke. 

Ich weiß jetzt, wie ichs mache. Ich werde von den Unterprogrammen bei jedem Durchlauf eine Meldung als Globale Variable senden, die sich das Steuerprogramm abgreift und sofort wieder löscht. Damit ist immer sichergestellt, dass nur Charts zur Berechnung einbezogen werden, die auch tatsächlich online sind.

Vielleicht ist das ja noch was für dich.


Einen Dienst programmieren. Der läuft dann unabhängig von Charts im eigenen Thread.

Sind auch mehrere möglich.

https://www.mql5.com/de/docs/runtime/running

Laden und Löschen von Diensten

Dienste werden unmittelbar nach dem Start des Terminals geladen, wenn sie zum Zeitpunkt der Terminalabschaltung gestartet wurden. Das Löschen der Dienste erfolgt unmittelbar nach Beendigung ihrer Arbeit.

Dienste haben nur eine einzige Funktion, OnStart(), in der Sie eine Endlosschleife für Empfang und Behandeln der Daten implementieren können, z.B. um nutzerdefinierte Symbole mit Hilfe der Netzwerkfunktionen zu erstellen und zu aktualisieren.

Im Gegensatz zu Expert Advisors, Indikatoren und Skripten sind Dienste nicht an ein bestimmtes Chart gebunden, daher wird ein separater Mechanismus bereitgestellt, um sie zu starten.  Im Navigator wird mit dem Befehl "Dienst starten" eine neue Instanz des Dienstes angelegt. Eine Dienst-Instanz kann über das entsprechende Menü der Instanz gestartet, gestoppt und entfernt werden. Um alle Instanzen zu verwalten, verwenden Sie das Menü der Dienste.

 

Für bessere Verständigung der Expertenarbeit ist es empfehlenswert, Kode des im Beispiel angeführten Experten zu kompilieren und Operationen von Laden/Ausladen der Experten, Schablonen-, Symbol-, Timeframewechsel usw. durchführen.

Beispiel:

//+------------------------------------------------------------------+
//|                                                   TestExpert.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
class CTestClass
  {
public:  
   CTestClass() { Print("CTestClass constructor"); }
   ~CTestClass() { Print("CTestClass destructor"); }
  };
CTestClass global;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("Initialisation");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print("Deinitialisation with reason",reason);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
Dokumentation zu MQL5: MQL5 Programme / Programmausführung
Dokumentation zu MQL5: MQL5 Programme / Programmausführung
  • www.mql5.com
Programmausführung - MQL5 Programme - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Stefan Heinze:

Ok. Danke. 

Ich weiß jetzt, wie ichs mache. Ich werde von den Unterprogrammen bei jedem Durchlauf eine Meldung als Globale Variable senden, die sich das Steuerprogramm abgreift und sofort wieder löscht. Damit ist immer sichergestellt, dass nur Charts zur Berechnung einbezogen werden, die auch tatsächlich online sind.

Überleg doch erst einmal: Wenn ein Markt geschlossen ist, kannst Du dort keine Positionen schließen, öffnen oder verändern. Also was willst Du dort - nichts ändert sich, alles bleibt?
 
Carl Schreiber:
Überleg doch erst einmal: Wenn ein Markt geschlossen ist, kannst Du dort keine Positionen schließen, öffnen oder verändern. Also was willst Du dort - nichts ändert sich, alles bleibt?
Ich möchte den Profit von bestimmten Trades aus verschiedenen Charts ausrechnen und diese dann schließen, wenn eine bestimmte Schwelle erreicht ist. 
Das darf aber nur von einem Chart aus gesteuert werden, sonst wollen alle nacheinander das gleiche schließen...

Wenn nun bei einem der Charts der Markt geschlossen ist (z.B. USDRUB in der Nacht), werden diese Trades zwar eingerechnet, aber nicht geschlossen...damit kippt das System. 

... Ich werde es jetzt mit der letzten TickZeit machen, wenn diese zu groß ist, wird der Markt als geschlossen markiert... wobei ich noch nicht mal die letzte TickZeit brauche. Es genügt ja eine Meldung beim Durchlauf von OnTick().