Mercado fechado

 

Vocês são os desenvolvedores!

Quando você vai sincronizar o tempo do terminal com o tempo de troca?

2017.01.13 10:00:03.969 Trades  'xxxxx': buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.969 Trades  'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades  'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades  'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]
 
2017.01.13 10:00:03.210 Trades  'xxxxx': buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.210 Trades  'xxxxx': sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.216 Trades  'xxxxx': accepted buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.218 Trades  'xxxxx': accepted sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.219 Trades  'xxxxx': failed buy limit 1.00 MXI-6.17 at 2230.15 [Market closed]
2017.01.13 10:00:03.220 Trades  'xxxxx': failed sell limit 1.00 MXI-6.17 at 2300.75 [Market closed]

adicionado

O tempo de negociação é verificado antes que a ordem seja enviada

//+------------------------------------------------------------------+
//| Expert Check traiding time function                              |
//+------------------------------------------------------------------+
bool CheckTradingTime(MqlDateTime &tick_time)
{
  datetime lk_time = TimeCurrent(tick_time);
  if ( ( tick_time.day_of_week == int(FirstDay)) ||
       ( tick_time.day_of_week == int(SecondDay)))//выходные
  {
    return(false);
  }
#ifdef DEBUG
  if ((tick_time.hour >= 0) && (tick_time.hour < 6))   // DEBUG 6-00
  {
    return(false);
  }
#else
  
if ((tick_time.hour >= 0) && (tick_time.hour < 10))
  {
    return(false);
  }
#endif
// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30
// 14 * 3600                = 50400 - 14:00:00
// 14 * 3600 + 30           = 50430 - 14:00:30
// 14 * 3600 + 60           = 50460 - 14:01:00

// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30
// 18 * 3600 + 45 * 60      = 67500 - 18:45:00
// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30
// 18 * 3600 + 46 * 60      = 67560 - 18:46:00

// 19 * 3600                = 68400 - 19:00:00
// 19 * 3600 + 60           = 68460 - 19:01:00  

// 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30
// 23 * 3600 + 50 * 60      = 85800 - 23:50:00
// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30
// 23 * 3600 + 51 * 60      = 85860 - 23:51:00
//---
  ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec;  
//---                    //10:00:02                      
  if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
      ((trade_time >= time_st_day) && (trade_time < 67470)) ||
      ((trade_time >= time_st_evn) && (trade_time < 85770)))
  {
    return(true);
  }

return(false); 


}
input string          TimeStMon    = "10:00:02";         //Время начала утренней сессии

ulong time_st_mon = GetStringTime(TimeStMon);
ulong GetStringTime(const string a_string)
{
  int k = 0;
  string s_sec, s_min, s_hour;
  int str_size = StringLen(a_string);
//---
  if(str_size != 8) return(0);  
//---  
  for(int i = str_size - 1; i >= 0; i--)
  {
    ushort let_symbol = StringGetCharacter(a_string, i);
    
    if(let_symbol == ':')
    {
      k++;
      switch(k)
      {
        case 1:
          s_sec = StringSubstr(a_string, i + 1, str_size - i - 1);
        break;
        case 2:
          s_min = StringSubstr(a_string, i + 1, str_size - i - 4);
          s_hour = StringSubstr(a_string, 0, i);
        break;
      }
//---
    }
  }
  if(k != 2) return(0);
  ulong t_sec = ulong(StringToInteger(s_sec));
  ulong t_min = ulong(StringToInteger(s_min)) * 60;
  ulong t_hour = ulong(StringToInteger(s_hour)) * 3600;
//---    
  return(t_hour + t_min + t_sec);
}
 
prostotrader:

Vocês são os desenvolvedores!

Quando você vai sincronizar o tempo do terminal com o tempo de troca?

2017.01.13 10:00:03.969 Trades  'xxxxx': buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.969 Trades  'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades  'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades  'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]

É necessário entender quem cospe no tempo do mundo e estabelece o seu próprio tempo, a bolsa ou o corretor. Com interesse próprio ou apenas por estupidez.

Quem tem o mesmo tempo que o tempo mundial?

 
Sergey Chalyshev:

Você tem que descobrir quem cospe no tempo do mundo e estabelece seu próprio tempo, a bolsa de valores ou o corretor. Seja por interesse próprio ou apenas por estupidez.

Quem tem o mesmo tempo que o tempo mundial?

Sim, esqueça o tempo do mundo, nós negociamos na Bolsa de Moscou ao mesmo tempo,

e não é culpa do corretor, é dos desenvolvedores, porque qualquer cotação que venha da Bolsa

tem tempo, e portanto a hora da última citação conhecida deve ser

tempo conhecido da troca (NÃO O SERVIDOR) e o TERMINAL

TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.


TimeCurrent, retorna o tempo do SERVIDOR, não o TERMINAL!

É provavelmente daqui que as "pernas crescem".

 
prostotrader:

Sim, que seja, o mundo, nós estamos negociando na Bolsa de Moscou, de acordo com a época da Bolsa,

e não é culpa do corretor, é dos desenvolvedores, porque qualquer cotação que venha da Bolsa

tem tempo, e portanto a hora da última citação conhecida deve ser

tempo conhecido da troca (NÃO O SERVIDOR) e o TERMINAL

TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.


TimeCurrent, retorna o tempo do SERVIDOR, não a troca!

Portanto, provavelmente "as pernas crescem".

E se o servidor em Moscou, e a troca for no Brasil, pode ser?

 
Sergey Chalyshev:

E se o servidor estiver em Moscou e a troca estiver no Brasil, isso pode ser?

Não me interessa onde está o servidor!

A cotação (ou melhor, o TEMPO da cotação) é o TEMPO atual.

Adicionado

Neste momento, o que está acontecendo?

O servidor MT5 apenas envia uma cotação para o terminal, independente do momento da cotação,

A hora do servidor e a hora da cotação não estão sincronizadas porque existe um pré-mercado.

A EA envia o pedido, o terminal confirma-o e o servidor verifica o tempo em relação

O servidor verifica o tempo UNLESS I know what it is e o pedido é redirecionado com um erro de cerca de 3 segundos (de acordo com meu tempo computacional) !!!!.

 
prostotrader:

Não me interessa onde está o servidor!

A cotação (ou melhor, o TEMPO da cotação) é a hora atual do COMÉRCIO.

Adicionado por

Neste momento, o que está acontecendo é

O servidor MT5 simplesmente envia uma cotação para o terminal, independentemente da hora da cotação,

A hora do servidor e a hora da cotação não estão sincronizadas porque existe um pré-mercado.

A EA envia o pedido, o terminal confirma-o e o servidor verifica o tempo em relação

o servidor verifica o tempo TUDO e reajusta o pedido com um erro de cerca de 3 segundos!!!!

Citar (ou melhor, citar TIME) é o TIME atual.

este é o tempo de estoque.

O tempo do servidor não é transferido para o terminal: TimeLocal == TimeTradeServer.

 

Eu também estou farto deste problema. É um tópico que já surgiu no fórum várias vezes. Todos resolvem este problema à sua maneira, mas eu ainda não vi a solução certa. É necessário determinar como corrigir e instar os desenvolvedores a consertá-la.

Agora há três funções para obter o tempo (se a memória servir bem) é:

TimeLocal==TimeTradeServer, tempo de computador,

TimeTradeServer == função sem valor,

TimeCurrent == hora da última cotação.

Precisamos adicionar o tempo de troca, jogar fora oTimeTradeServerou passar o tempo de troca atual, ou adicionar um tipoTimeExchange.




 

E o melhor seria obter dados específicos dentro do terminal sem ficar atolado no tempo:

- Você pode colocar novas aplicações,

- Você pode eliminar pedidos,

- O comércio é permitido.

Por algum motivo, não existe tal funcionalidade no terminal neste momento.

 

Нужно добавить время биржы, выкинуть TimeTradeServer или вместо него передавать текущее время биржи, или добавить типа TimeExchange.

Ainda não é uma opção para nosso intercâmbio, eu não sei sobre outros.

Eles começam a negociar quando querem, às vezes às 10:00, às vezes às 10:03 ou 10:05.

Aparentemente, quando acordam e bebem café, eles o ligam))).


 

Sergei!

Leia a ajuda da TimeCurrent - ela diz que este é o tempo SERVIDOR

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.