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

 
Vasyl Nosal:

Es ist ein hartnäckiger Wunsch, sich selbst zu täuschen und zu betrügen :) .

Hinzugefügt: Haben Sie versucht, alle Symbole anzuzeigen und die Spalte "Zeit" im Fenster "Marktübersicht" einzublenden und das Bitcoin-Symbol zu entdecken, das ununterbrochen gehandelt wird? Auch ein solcher Basis-Check ist hilfreich:

1

2

3

 

Keine Einheitslösung, aber für mich funktioniert sie


bool CanTrade()
{

bool res1=IsTradeAllowed(Symbol(), TimeCurrent());
bool res2=IsTradeAllowed(Symbol(), TimeCurrent()+4000); //с запасом,

if (!res1) return false; //сейчас торговать запрещено
if (res1 && res2) return true; //и сейчас и через час торговать можно
return false; //если зависло разрешение от TimeCurrent, то через час (или с запасом в несколько минут) покажет фалсе.
// Но наверняка есть ситуации когда реально сейчас можно торговать а через час нельзя - тогда неправильный ответ :(
}

 
Igor-san:

Aber es gibt sicherlich Situationen, in denen man wirklich jetzt handeln kann und nicht in einer Stunde

Natürlich gibt es sie - jedes Mal eine Stunde vor Börsenschluss ))))
 
Ihor Herasko:
Natürlich tut sie das - jedes Mal eine Stunde vor Börsenschluss ))))

Da bin ich anderer Meinung. Das letzte auf dem Bildschirm eingefrorene Datum ist Freitag 21:59 Uhr. Wenn ich Shift auf 3600 Sekunden setze, gibt der zweite Parameter IsTradeAllowed(Symbol(), TimeCurrent()+3600 trude zurück. Ich habe einige zusätzliche Sekunden hinzugefügt, damit es funktioniert. Nun, wenn es Freitag um 21:50 Uhr ist, sollte alles funktionieren.

Um ehrlich zu sein, habe ich das nicht überprüft, sondern nur die Verbindung zum Broker Reconnector (den ich irgendwo im Forum gefunden habe), der an den Wochenenden immer die Verbindung wiederherstellt. Für mich ist es also nicht von Bedeutung.

 
/// Ждём разрешения торговать
void TradeAllowed()
{
symb=Symbol();/// Текущий символ или символ на котором нужно произвести проверку

if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
   {Print("Automated trading is forbidden at the trade server side");return;}
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)) 
   {Print("Trading is forbidden!");return;}
if (!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))  
   {Print("Check if automated trading is allowed in the terminal settings!");return;}
if(!IsTradeAllowed(symb,TimeLocal())
   {Print("Trading on the symbol "+symb+" is forbidden!");return;}

while(IsTradeContextBusy())
   {
   if(IsStopped()) {Print("Forced shutdown ");break;}
   Print("Trading is occupied. Wait.");
   Sleep(1000);
   RefreshRates(); 
   }  
}
 

bool MarketOpen(string Symbl)
{
   if(IsTradeAllowed(Symbl,TimeCurrent()+1)==false)return(false); //рынок закрыт

   return(true);

}

 
Renat Akhtyamov:

bool MarketOpen(string Symbl)
{
   if(IsTradeAllowed(Symbl,TimeCurrent()+1)==false)return(false); //рынок закрыт

   return(true);

}

Das ist unterschiedlich, so dass diese Prüfung keine Garantie darstellt.

Der Handel durch Experten ist also verboten, aber der Markt ist offen.


Jetzt, am Montag, ist der Markt geöffnet, und die Sachverständigen werden vom Büro verbannt:


 
Im Gegenteil, es kommt vor, dass in einigen anderen Büros an Wochenenden, wenn der Markt geschlossen ist, diese Kontrollen anzeigen, dass der Markt geöffnet ist und die Experten die Erlaubnis zum Handel erhalten haben.
 
Олег avtomat:
Im Gegenteil, es kommt vor, dass in einigen anderen Büros an Wochenenden, wenn der Markt geschlossen ist, diese Kontrollen anzeigen, dass der Markt geöffnet ist und die Experten die Erlaubnis zum Handel erhalten haben.

gestern.

Bis jetzt funktioniert es,

Dieser hier nicht:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Woher weiß ich, dass an den Wochenenden kein Handel stattfindet?

Renat Akhtyamov, 2018.02.11 05:27

DANKESCHÖN!

Für MT4.

//------------------------------------------------------------------    IsSessionOpen
bool IsSessionOpen(string smb)
{
     //MqlDateTime dt; datetime tc=TimeTradeServer(dt);
      datetime tc= TimeCurrent();
     // проверяем время торгов по инструменту
     datetime t=(datetime)SymbolInfoInteger(smb, SYMBOL_EXPIRATION_TIME);
     if (tc>t && t>0) return(false);
     t=(datetime)SymbolInfoInteger(smb, SYMBOL_START_TIME);
     if (tc<t && t>0) return(false);
     
     // проверяем сессии инструмента
     datetime ds=tc/(60*60*24); ds*=(60*60*24); // начало сегодня
     datetime sec=tc-ds; // число секунд от начала дня
     bool b=false;
     for (int l=0; l<10; l++) // подразумеваем, что админ сделал не более 10 сессий в сутки
     {
             datetime fs, ts;
             if (!SymbolInfoSessionTrade(smb, TimeDayOfWeek(TimeCurrent()), l, fs, ts)) break; // данные сессии
             if (sec>=fs && sec<=ts) return(true);
     }
     return(false);
}



 

Die Funktion 5p funktioniert irgendwie nicht:

(Ich frage mich warum???)

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/cterminalinfo/cterminalinfoistradeallowed

Документация по MQL5: Стандартная библиотека / Торговые классы / CTerminalInfo / IsTradeAllowed
Документация по MQL5: Стандартная библиотека / Торговые классы / CTerminalInfo / IsTradeAllowed
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTerminalInfo / IsTradeAllowed - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5