Wie erfahre ich, ob der Markt geschlossen ist? (mql4) - Seite 3

 

Wozu sind all diese Kontrollen praktisch notwendig?

Warum sollte man zum Beispiel prüfen, ob der Sachverständige zum Handel zugelassen ist? Wer ist das Ziel? Ein gestörter Benutzer? Das Kennzeichen der Handelserlaubnis wird einmalig im Terminal gesetzt, das ist alles. Warum sollten wir sie bei jeder Zecke überprüfen? Oder alle n Sekunden überprüfen? Hat der Expert Advisor nichts anderes zu tun?

Warum prüfen, ob der Markt geöffnet ist? Öffnet der Markt, wann er will? Oder ein Instrument wird heute um 16 Uhr und morgen um 14 Uhr gehandelt, und dieses Chaos passiert ständig? Wenn der Handelsplan bekannt ist und sich nie ändert, warum sollten Sie dann jeden Tick oder alle n-Sekunden prüfen, ob der Markt geöffnet ist?

Und dieser lustige Tipp, eine Handelsanfrage zu senden, um herauszufinden, ob der Markt geöffnet ist? Für diejenigen, die gerne lachen? Oder für einen zufriedenen Nutzer?

Kein Häkchen, kein Handel.

 
abolk:

Wozu sind all diese Kontrollen praktisch notwendig?

Warum sollte man zum Beispiel prüfen, ob der Sachverständige zum Handel zugelassen ist? Wer ist das Ziel? Ein gestörter Benutzer? Das Kennzeichen der Handelserlaubnis wird einmalig im Terminal gesetzt, das ist alles. Warum sollten wir sie bei jeder Zecke überprüfen? Oder alle n Sekunden überprüfen? Hat der Expert Advisor nichts anderes zu tun?

Warum prüfen, ob der Markt geöffnet ist? Öffnet der Markt, wann er will? Oder ein Instrument wird heute um 16 Uhr und morgen um 14 Uhr gehandelt, und dieses Chaos passiert ständig? Warum sollten wir, wenn der Handelsplan bekannt ist und sich nie ändert, jeden Tick oder jede n-Sekunde prüfen, ob der Markt geöffnet ist?

Und dieser Trick mit dem Senden einer Handelsanfrage, um zu sehen, ob der Markt geöffnet ist?

Kein Häkchen - kein Handel.

Die Aufgaben sind unterschiedlich. Ich kann nicht für alle sprechen, aber meine Aufgabe war es, Aufträge für verschiedene Symbole von einem EA zu öffnen, und einige von ihnen hatten verschiedene Handelssitzungen (ich meine die Möglichkeit, mit jedem Satz von Symbolen zu arbeiten, die für das Konto verfügbar sind).

Daher wurden alle Prüfungen nicht in OnTick, sondern in OnTimer durchgeführt. Ich habe meine Version auf der vorherigen Seite beschrieben. Obwohl es sich im Prinzip um eine Art "no tick - no trade"-Kontrolle handelt.

 
abolk:

... Öffnet der Markt, wann er will? Oder ein Instrument wird heute ab 16.00 Uhr und morgen ab 14.00 Uhr gehandelt, und es herrscht die ganze Zeit ein Chaos?

...

Das kommt vor... Es gibt verschiedene Feiertage... Verschiedene Länder. Der Devisenmarkt funktionierte, aber Gold und Silber nicht.

Und wenn Sie die Möglichkeit haben, zusätzlich zum Forex auch Futures zu nutzen, werden die Sitzungen vorzeitig geschlossen, es gibt Cut-offs bei Überschreitung eines Limits und andere Tricks.

 
papaklass:

Hier ist eine weitere Option für die vier:

bool flag;
//-----------------------------------------------------------------------------+

bool RealSymbol(string str)
{
   return(MarketInfo(str, MODE_BID) != 0);
}//----------------------------------------------------------------------------+
 
void init()
{
   flag = RealSymbol(Symbol());
         
   return;  
}//----------------------------------------------------------------------------+
 
void deinit()
{
   return;
}//----------------------------------------------------------------------------+
 
void start()
{
   if (!flag)
   {
      return;
   }
   
   //дальше Ваш рабочий код
     
   return;  
}//----------------------------------------------------------------------------+

Tolle Option - das Wichtigste ist, den Advisor vor der Öffnung der Märkte laufen zu lassen - und wenn Sie ihn nicht ausschalten, nicht überladen, den Zeitrahmen nicht ändern - dann wird der Advisor nie funktionieren, weil die Flagge immer im Zustand "nein" sein wird

p.s. Lustiger Ratgeber-Thread

p.s.2. Besonders seltsam ist es, wenn sie das in einem geschlossenen Markt sagen

MarketInfo(Symbol(), MODE_BID)

ergibt NULL.

 

Es ist eine schlechte Entscheidung, die Verzögerung zwischen den Ticks zu prüfen und daraus auf einen Abschluss zu schließen.

 
avtomat:

Es ist eine schlechte Entscheidung, die Verzögerung zwischen den Ticks zu prüfen und daraus auf einen Abschluss zu schließen.

Allerdings:
1) wenn die Antwort nicht lautet "sind die Geschäfte geschlossen", sondern "ist es möglich, ein Geschäft zu diesem Preis zu eröffnen" (unter den aktuellen Bedingungen);
2) im Voraus zu wissen, dass der Server, wenn ein Angebot älter als xx Minuten ist, bei einem Versuch, einen Auftrag zu eröffnen, garantiert keine Angebote zurückgibt;
dann wäre es akzeptabel. IMHO, natürlich.
 

Es gab einige Diskussionen zu diesem Thema für MT5.

Die richtige Option für mich ist die Verwendung von SymbolInfoSessionTrade(), um festzustellen, ob Trades verfügbar sind.


//+------------------------------------------------------------------+
//|Открыта ли торговая сессия                                        |
//|                                                 Copyright,Sergeev|
//|                           https://login.mql5.com/ru/users/sergeev|                 
//+------------------------------------------------------------------+
bool IsTradeSessionOpen()
  {
   MqlDateTime _DateTime;
   datetime _TimeCurrent=TimeTradeServer(_DateTime);

// проверяем время торгов по инструменту
   datetime _TradeEnd=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_TIME);
   if(_TimeCurrent>_TradeEnd && _TradeEnd>0) return(false);

   datetime _TradeStart=(datetime)SymbolInfoInteger(_Symbol,SYMBOL_START_TIME);
   if(_TimeCurrent<_TradeStart && _TradeStart>0) return(false);

// проверяем сессии инструмента
   datetime _DayStart=_TimeCurrent/(60*60*24); _DayStart*=(60*60*24); // начало текущего дня
   datetime _sec=_TimeCurrent-_DayStart; // число секунд от начала дня

   for(int i=0; i<10; i++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
      datetime _from,_to;
      if(!SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)_DateTime.day_of_week,i,_from,_to)) break; // данные сессии
      if(_sec>=_from && _sec<=_to) return(true);
     }
   return(false);
  }
Как узнать, что по выходным нет торговли?
Как узнать, что по выходным нет торговли?
  • www.mql5.com
Пытаюсь дать понять советнику, что по выходным дням торговать не нужно :). - - Категория: общее обсуждение
 
Kino:

Ich habe den Expert Advisor in den OnTimer()-Modus geschaltet und jetzt, wenn der Markt geschlossen ist, versteht er das nicht und versucht zu handeln, kontaktiert im Allgemeinen den Server und erhält natürlich Fehler und verstopft die Logs. GetLastError() = Markt ist geschlossen. Welche anderen Bedingungen können verwendet werden, um zu prüfen, ob der Markt geschlossen ist oder am Wochenende stattfindet?

Dauer = (eingestellter Wert in Millisekunden. z. B. 6 Stunden = 1000*60*60*6)

if(GetLastError()==132(Markt ist geschlossen) ) Sleep (Duration);

 

Ich habe einmal mitSymbolInfoSessionTrade() und Quote experimentiert und es stellte sich heraus, dass die Daten aus diesen Funktionen nur annähernd mit der Realität übereinstimmen und in einigen Fällen auch nicht.

Vielleicht wird eine Kombination mehrerer Kontrollen eine eindeutige Antwort auf die Frage geben, ob der Handel beendet ist?

SymbolInfoSessionTrade - Документация на MQL4
  • docs.mql4.com
SymbolInfoSessionTrade - Документация на MQL4
 

Wow, das ist eine Menge Text.

MarketInfo(Symbol(),MODE_TRADEALLOWED)

Grund der Beschwerde: