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

 

¿Cuál es la necesidad práctica de todos estos controles?

¿Por qué comprobar, por ejemplo, si el experto está autorizado a operar? ¿Quién es el objetivo? ¿Un usuario de baja? La bandera del permiso de comercio se establece en el terminal una vez, eso es todo. ¿Por qué debemos comprobarlo en cada garrapata? ¿O comprobarlo cada n segundos? ¿El Asesor Experto no tiene nada más que hacer?

¿Por qué comprobar si el mercado está abierto? ¿Abre el mercado cuando quiere? ¿O algún instrumento cotiza hoy a las 16 horas y mañana a las 14 horas y este lío ocurre siempre? Si el horario de negociación es conocido y nunca cambia, ¿por qué hay que comprobar cada tick o cada n segundos si el mercado está abierto?

¿Y este divertido consejo sobre el envío de una solicitud de negociación para saber si el mercado está abierto? Para los que les gusta reírse... ¿O para un usuario satisfecho?

Sin garrapata, no hay comercio.

 
abolk:

¿Cuál es la necesidad práctica de todos estos controles?

¿Por qué comprobar, por ejemplo, si el experto está autorizado a operar? ¿Quién es el objetivo? ¿Un usuario de baja? La bandera del permiso de comercio se establece en el terminal una vez, eso es todo. ¿Por qué debemos comprobarlo en cada garrapata? ¿O comprobarlo cada n segundos? ¿El Asesor Experto no tiene nada más que hacer?

¿Por qué comprobar si el mercado está abierto? ¿Abre el mercado cuando quiere? ¿O algún instrumento cotiza hoy a las 16 horas y mañana a las 14 horas y este lío ocurre siempre? ¿Por qué, si el horario de negociación es conocido y nunca cambia, debemos comprobar cada tick o cada n segundos si el mercado está abierto?

¿Y este truco de enviar una solicitud de comercio para ver si el mercado está abierto?

Si no hay garrapata, no hay comercio.

Las tareas son diferentes. Para todo no puedo decir, pero mi tarea era abrir órdenes para diferentes símbolos de un EA y algunos de ellos tenían diferentes sesiones de comercio (me refiero a la posibilidad de trabajar con cualquier conjunto de símbolos disponibles para la cuenta).

Por lo tanto, toda la comprobación se ha realizado no en OnTick sino en OnTimer. He descrito mi versión en la página anterior. Aunque, en principio, se trata de una especie de control "no tick - no trade".

 
abolk:

... ¿El mercado se abre cuando quiere? ¿O algún instrumento cotiza desde las 16:00 horas de hoy y desde las 14:00 horas de mañana y es un lío todo el tiempo?

...

Sucede que... Hay diferentes fiestas... Diferentes países. El Forex funcionó, pero el oro y la plata no.

Y si tiene la oportunidad de utilizar los futuros además del Forex, el cierre anticipado de las sesiones, y los cortes por exceder un límite y otros trucos ocurren.

 
papaklass:

Aquí hay otra opción para los cuatro:

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

opción increíble -- lo principal es ejecutar el asesor antes de la apertura de los mercados -- y si no lo desactiva, no sobrecarga, no cambia el marco de tiempo -- entonces el asesor nunca funcionará, porque la bandera siempre estará en el estado "no".

p.d. Hilo de consejos divertidos

p.s.2. Especialmente extraño cuando dicen que en un mercado cerrado

MarketInfo(Symbol(), MODE_BID)

da CERO.

 

Comprobar el desfase entre los ticks e inferir una operación cerrada sobre esa base es una mala decisión.

 
avtomat:

Comprobar el desfase entre los ticks e inferir una operación cerrada sobre esa base es una mala decisión.

Sin embargo:
1) si la respuesta no es "están cerradas las operaciones", sino "es posible abrir una operación a este precio" (en las condiciones actuales);
2) saber de antemano que si una cotización tiene más de xx minutos, se garantiza que el servidor devuelva las cotizaciones apagadas al intentar abrir un pedido;
entonces sería aceptable. En mi opinión, por supuesto.
 

Se ha discutido sobre este tema para MT5.

La opción correcta para mí es utilizar SymbolInfoSessionTrade() para determinar si las operaciones están disponibles.


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

Cambié el Asesor Experto al modo OnTimer() y ahora cuando el mercado está cerrado no entiende esto e intenta operar, en general contacta con el servidor y por supuesto recibe errores y atasca los registros. GetLastError() = El mercado está cerrado. ¿Qué otras condiciones pueden utilizarse para comprobar si el mercado está cerrado o en fin de semana?

Duración = (valor establecido en milisegundos. Por ejemplo, 6 horas = 1000*60*60*6)

if(GetLastError()==132(el mercado está cerrado) ) Sleep (Duration);

 

Una vez experimenté conSymbolInfoSessionTrade() y Quote y resultó que los datos de estas funciones sólo se corresponden aproximadamente con la realidad, y en algunos casos no.

¿Quizás una combinación de varias comprobaciones dé una respuesta inequívoca a la pregunta de si el comercio ha terminado?

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

Vaya, es mucho texto.

MarketInfo(Symbol(),MODE_TRADEALLOWED)

Razón de la queja: