Como saber se o mercado está fechado? (mql4) - página 3

 

Qual é a necessidade prática de todos esses controles?

Por que verificar, por exemplo, se o especialista está autorizado a negociar? Quem é o alvo? Um usuário abatido? A bandeira de permissão de comércio é hasteada uma vez no terminal, só isso. Por que devemos verificá-lo em cada carrapato? Ou verificar a cada n segundos? O Conselheiro Especialista não tem mais nada a fazer?

Por que verificar se o mercado está aberto? O mercado abre quando ele quer? Ou alguns instrumentos são comercializados às 16 horas de hoje e às 14 horas de amanhã e esta confusão acontece o tempo todo? Se o horário de negociação é conhecido e nunca muda, por que você deve verificar cada tique ou cada n-segundo se o mercado está aberto?

E esta dica engraçada sobre o envio de um pedido comercial para saber se o mercado está aberto? Para aqueles que gostam de rir? Ou para um usuário satisfeito?

Sem carrapato, sem comércio.

 
abolk:

Qual é a necessidade prática de todos esses controles?

Por que verificar, por exemplo, se o especialista está autorizado a negociar? Quem é o alvo? Um usuário abatido? A bandeira de permissão de comércio é hasteada uma vez no terminal, só isso. Por que devemos verificá-lo em cada carrapato? Ou verificar a cada n segundos? O Consultor Especialista não tem mais nada a fazer?

Por que verificar se o mercado está aberto? O mercado abre quando ele quer? Ou alguns instrumentos são comercializados às 16 horas de hoje e às 14 horas de amanhã e esta confusão acontece o tempo todo? Por que, se o cronograma comercial é conhecido e nunca muda, devemos verificar a cada tique ou a cada nsegundo se o mercado está aberto?

E este truque de enviar um pedido comercial para ver se o mercado está aberto?

Sem carrapato - sem comércio.

As tarefas são diferentes. Não posso falar por todos, mas minha tarefa era abrir pedidos para símbolos diferentes de uma EA e alguns deles tinham sessões comerciais diferentes (quero dizer, a possibilidade de trabalhar com qualquer conjunto de símbolos disponíveis para a conta).

Portanto, todas as verificações foram feitas não no OnTick, mas no OnTimer. Eu descrevi minha versão na página anterior. Embora, em princípio, seja uma espécie de cheque "sem carrapato - sem comércio".

 
abolk:

... O mercado abre quando quer? Ou algumas trocas de instrumentos a partir das 16h de hoje e a partir das 14h de amanhã e é uma bagunça o tempo todo?

...

Isso acontece... Há feriados diferentes... Países diferentes. Forex funcionava, mas ouro e prata não funcionavam.

E se você tiver a oportunidade de usar futuros em cima do Forex, fechamento antecipado das sessões e cortes por exceder um limite e outros truques acontecem.

 
papaklass:

Aqui está outra opção para os quatro:

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

opção incrível -- o principal é dirigir o assessor antes da abertura dos mercados -- e se você não o desligar, não sobrecarregar, não mudar o cronograma -- então o assessor nunca funcionará, porque a bandeira estará sempre no estado de "não

p.s. Tópico de conselho engraçado

p.s.2. Especialmente estranho quando dizem que em um mercado fechado

MarketInfo(Symbol(), MODE_BID)

dá ZERO.

 

Verificar a defasagem entre os carrapatos e inferir um comércio próximo com base nisso é uma má decisão.

 
avtomat:

Verificar a defasagem entre os carrapatos e inferir um comércio próximo com base nisso é uma má decisão.

No entanto:
1) se a resposta não for "são negócios fechados", mas "é possível abrir um negócio a este preço" (nas condições atuais);
2) sabendo antecipadamente que se uma cotação for maior que xx minutos, então o servidor tem a garantia de devolver as cotações na tentativa de abrir um pedido;
então seria aceitável. IMHO, é claro.
 

Temhavido alguma discussão sobre este assunto para o MT5.

A opção correta para mim é usar SymbolInfoSessionTrade() para determinar se as negociações estão disponíveis.


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

Mudou o Expert Advisor para o modo OnTimer() e agora quando o mercado está fechado ele não entende isso e tenta negociar, em geral entra em contato com o servidor e, é claro, recebe erros e entupimentos nos logs. GetLastError() = O mercado está fechado. Que outras condições podem ser usadas para verificar se o mercado está fechado ou em um fim de semana?

Duração = (valor definido em milissegundos. ex. 6 horas = 1000*60*60*6)

if(GetLastError()==132(mercado está fechado) ) Dormir (Duração);

 

Uma vez experimentei comSymbolInfoSessionTrade() e Quote e descobri que os dados destas funções só correspondem aproximadamente à realidade, e em alguns casos não correspondem.

Talvez uma combinação de várias verificações dê uma resposta inequívoca à pergunta se o comércio acabou?

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

Uau, isso é um monte de texto.

MarketInfo(Símbolo(),MODE_TRADEALLOWED)