¿Cómo saber si el mercado está cerrado? (mql4) - página 9

 
Vasyl Nosal:

Es un deseo persistente de engañar y engañarse a sí mismo :) .

Añadido: ¿Has probado a desplegar todos los símbolos y mostrar la columna "Tiempo" en la ventana "Visión general del mercado" y descubrir el símbolo de bitcoin que está cotizando de forma ininterrumpida? Además, una comprobación tan básica también ayuda:

1

2

3

 

No es una solución única, pero a mí me funciona


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:

Pero seguro que hay situaciones en las que realmente se puede operar ahora y no en una hora

Por supuesto que sí, cada vez que una hora antes del cierre del mercado ))))
 
Ihor Herasko:
Por supuesto que sí - cada vez que una hora antes del cierre del mercado ))))

No estoy de acuerdo. La última fecha congelada en la pantalla es el viernes a las 21:59. Si establezco el desplazamiento a 3600 seg - el segundo parámetro IsTradeAllowed(Symbol(), TimeCurrent()+3600 devuelve trude. He añadido algunos segundos adicionales para que funcione. Bueno, si es el viernes a las 21:50, todo debería funcionar.

Para ser honesto, no lo comprobé, sólo comprobé la conexión con el broker Reconnector (lo encontré en algún lugar del foro) que siempre se reconectaba los fines de semana. Así que no es significativo para mí.

 
/// Ждём разрешения торговать
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);

}

Varía, por lo que esta comprobación no garantiza nada.

Así que la negociación por parte de los expertos está prohibida, pero el mercado está abierto.


Ahora, el lunes, el mercado está abierto y los expertos están prohibidos por la oficina:


 
Por el contrario, ocurre que en algunas otras oficinas los fines de semana, cuando el mercado está cerrado, estas comprobaciones indican que el mercado está abierto y los expertos han recibido permiso para operar.
 
Олег avtomat:
Por el contrario, ocurre que en algunas otras oficinas los fines de semana, cuando el mercado está cerrado, estas comprobaciones indican que el mercado está abierto y los expertos han recibido permiso para operar.

ayer.

hasta ahora está funcionando,

Este no lo hace:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

¿Cómo sé que no hay comercio los fines de semana?

Renat Akhtyamov, 2018.02.11 05:27

¡GRACIAS!

Para 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);
}



 

hay algo en la función 5p que no funciona:

(Me pregunto por qué...)

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

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