Come scoprire se il mercato è chiuso? (mql4) - pagina 3

 

Qual è la necessità pratica di tutti questi controlli?

Perché controllare, per esempio, se l'esperto è autorizzato a fare trading? Chi è l'obiettivo? Un utente down? La bandiera del permesso di commercio è impostata nel terminale una volta, tutto qui. Perché dovremmo controllarlo ad ogni spunta? O controllarlo ogni n secondi? L'Expert Advisor non ha altro da fare?

Perché controllare se il mercato è aperto? Il mercato apre quando vuole? O qualche strumento scambia alle 16 di oggi e alle 14 di domani e questo casino succede sempre? Se il programma di trading è noto e non cambia mai, perché dovresti controllare ogni tick o ogni n-secondo se il mercato è aperto?

E questo divertente consiglio sull'invio di una richiesta di trading per sapere se il mercato è aperto? Per chi ama farsi una risata? O per un utente soddisfatto?

Niente spunta, niente scambio.

 
abolk:

Qual è la necessità pratica di tutti questi controlli?

Perché controllare, per esempio, se l'esperto è autorizzato a fare trading? Chi è l'obiettivo? Un utente down? La bandiera del permesso di commercio è impostata nel terminale una volta, tutto qui. Perché dovremmo controllarlo ad ogni spunta? O controllarlo ogni n secondi? L'Expert Advisor non ha altro da fare?

Perché controllare se il mercato è aperto? Il mercato apre quando vuole? O qualche strumento scambia alle 16 di oggi e alle 14 di domani e questo casino succede sempre? Perché, se il programma di trading è noto e non cambia mai, dovremmo controllare ogni tick o ogni n-secondo se il mercato è aperto?

E questo trucco di inviare una richiesta di trading per vedere se il mercato è aperto?

Nessuna spunta - nessuno scambio.

I compiti sono diversi. Non posso parlare per tutti, ma il mio compito era quello di aprire ordini per diversi simboli da un EA e alcuni di essi avevano diverse sessioni di trading (intendo la possibilità di lavorare con qualsiasi set di simboli disponibili per il conto).

Pertanto, tutti i controlli sono stati fatti non in OnTick ma in OnTimer. Ho descritto la mia versione nella pagina precedente. Anche se, in linea di principio, è una specie di controllo "no tick - no trade".

 
abolk:

... Il mercato si apre quando vuole? O qualche strumento scambia dalle 16 di oggi e dalle 14 di domani ed è sempre un casino?

...

Succede... Ci sono diverse feste... Diversi paesi. Il Forex ha funzionato, ma l'oro e l'argento no.

E se hai l'opportunità di usare i futures sopra il Forex, la chiusura anticipata delle sessioni, e i cut-off per aver superato un limite e altri trucchi accadono.

 
papaklass:

Ecco un'altra opzione per i quattro:

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;  
}//----------------------------------------------------------------------------+

opzione sorprendente -- la cosa principale è eseguire l'advisor prima che i mercati aprano -- e se non lo spegni, non sovraccarichi, non cambi il timeframe -- allora l'advisor non funzionerà mai, perché la bandiera sarà sempre nello stato "no

p.s. thread di consigli divertenti

p.s.2. Particolarmente strano quando dicono che in un mercato chiuso

MarketInfo(Symbol(), MODE_BID)

dà ZERO.

 

Controllare il ritardo tra i tick e dedurre un trade vicino su questa base è una cattiva decisione.

 
avtomat:

Controllare il ritardo tra i tick e dedurre un trade vicino su questa base è una cattiva decisione.

Tuttavia:
1) se la risposta non è "i trade sono chiusi", ma "è possibile aprire un trade a questo prezzo" (alle condizioni attuali);
2) sapendo in anticipo che se una quotazione è più vecchia di xx minuti, allora il server è garantito per restituire fuori quotazioni su un tentativo di aprire un ordine;
allora sarebbe accettabile. IMHO, naturalmente.
 

C' è stata qualche discussione su questo problema per MT5.

L'opzione corretta per me è usare SymbolInfoSessionTrade() per determinare se le compravendite sono disponibili.


//+------------------------------------------------------------------+
//|Открыта ли торговая сессия                                        |
//|                                                 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:

Ho commutato l'Expert Advisor in modalità OnTimer() e ora quando il mercato è chiuso non lo capisce e cerca di fare trading, in generale contatta il server e ovviamente riceve errori e intasa i log. GetLastError() = Il mercato è chiuso. Quali altre condizioni possono essere usate per controllare se il mercato è chiuso o in un fine settimana?

Durata = (valore impostato in millisecondi. es. 6 ore = 1000*60*60*6)

if(GetLastError()==132(il mercato è chiuso) ) Sleep (Durata);

 

Una volta ho sperimentato conSymbolInfoSessionTrade() e Quote e si è scoperto che i dati di queste funzioni corrispondono solo approssimativamente alla realtà, e in alcuni casi non lo fanno.

Forse una combinazione di diversi controlli darà una risposta inequivocabile alla domanda se lo scambio è finito?

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

Wow, è un sacco di testo.

MarketInfo(Symbol(),MODE_TRADEALLOWED)

Motivazione: