Marché fermé

 

Vous êtes les développeurs !

Quand allez-vous synchroniser l'heure du terminal avec l'heure d'Exchange ?

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]

ajouté

L'heure de négociation est vérifiée avant l'envoi de l'ordre.

//+------------------------------------------------------------------+
//| 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:

Vous êtes les développeurs !

Quand allez-vous synchroniser l'heure du terminal avec l'heure d'Exchange ?

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]

Il faut comprendre qui crache sur l'heure mondiale et fixe la sienne, la bourse ou le courtier. Avec des intérêts particuliers ou juste par stupidité.

Qui a la même heure que l'heure universelle ?

 
Sergey Chalyshev:

Il faut savoir qui crache sur l'heure du monde et fixe la sienne, la bourse ou le courtier. Que ce soit par intérêt personnel ou par simple stupidité.

Qui a la même heure que l'heure universelle ?

Oui, que ce soit, l'heure mondiale, nous sommes en train de négocier à la bourse de Moscou, à la même heure,

et ce n'est pas la faute du courtier, c'est celle des développeurs, car toute cotation provenant de la Bourse

a l'heure, donc l'heure de la dernière cotation connue devrait être

heure connue de l'échange (PAS DU SERVEUR) et du TERMINAL

TempsCourant

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


TimeCurrent, renvoie l'heure du SERVEUR, pas du TERMINAL !

C'est probablement de là que proviennent les "jambes".

 
prostotrader:

Oui, que ce soit, le monde, nous sommes en train de négocier à la Bourse de Moscou, selon l'heure de la Bourse,

et ce n'est pas la faute du courtier, c'est celle des développeurs, car toute cotation provenant de la Bourse

a le temps, et donc l'heure de la dernière cotation connue devrait être

heure connue de l'échange (PAS DU SERVEUR) et du TERMINAL

TempsCourant

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


TimeCurrent, renvoie l'heure du SERVEUR, pas de l'échange !

D'où, probablement, "les jambes poussent".

Et si le serveur est à Moscou, et que l'échange est au Brésil, est-ce possible ?

 
Sergey Chalyshev:

Et si le serveur est à Moscou et l'échange est au Brésil, est-ce possible ?

Je me fiche de l'endroit où se trouve le serveur !

La citation (ou plutôt le TEMPS de citation) est le TEMPS actuel.

Ajouté

En ce moment, que se passe-t-il ?

Le serveur MT5 se contente d'envoyer une cotation au terminal, indépendamment du moment de la cotation,

L'heure du serveur et l'heure de la cotation ne sont pas synchronisées car il y a un pré-marché.

L'EA envoie l'ordre, le terminal le confirme et le serveur vérifie l'heure en fonction de la date et de l'heure.

Le serveur vérifie l'heure SAUF si je la connais et la commande est redirigée avec une erreur d'environ 3 secondes (mon heure) ! !!!.

 
prostotrader:

Je me fiche de l'endroit où se trouve le serveur !

La cotation (ou plutôt l'HEURE de la cotation) est l'heure actuelle du TRADE.

Ajouté par

En ce moment, ce qui se passe est

Le serveur MT5 envoie simplement une cotation au terminal, quelle que soit l'heure de la cotation,

L'heure du serveur et l'heure de la cotation ne sont pas synchronisées car il y a un pré-marché.

L'EA envoie l'ordre, le terminal le confirme et le serveur vérifie l'heure par rapport à l'heure d'arrivée.

le serveur vérifie l'heure PARTOUT et réajuste la commande avec une erreur d'environ 3 secondes !!!!.

La citation (ou plutôt le TEMPS de la citation) est le TEMPS actuel.

C'est l'heure du stock.

L'heure du serveur n'est pas du tout transférée au terminal : TimeLocal == TimeTradeServer.

 

Moi aussi, j'en ai assez de ce problème. C'est un sujet qui a été abordé à plusieurs reprises sur le forum. Chacun résout ce problème à sa manière, mais je n'ai pas vu la bonne solution. Il est nécessaire de déterminer comment corriger et d'exhorter les développeurs à le faire.

Maintenant, il y a trois fonctions pour obtenir l'heure (si ma mémoire est bonne) est :

TimeLocal==TimeTradeServer, heure de l'ordinateur,

TimeTradeServer == fonction sans valeur,

TimeCurrent == heure de la dernière citation.

Nous devons ajouter l'heure de change, rejet erTimeTradeServerou transmettre l'heure de change actuelle à la place, ou encore ajouter un typeTimeExchange.




 

Et le mieux serait d'introduire des données spécifiques dans le terminal sans s'embarrasser de temps :

- Vous pouvez mettre en place de nouvelles applications,

- Vous pouvez supprimer des commandes,

- Les échanges sont autorisés.

Pour une raison quelconque, cette fonctionnalité n'existe pas dans le terminal pour le moment.

 

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

Ce n'est toujours pas une option pour notre échange, je ne sais pas pour les autres.

Ils commencent à négocier quand ils le veulent, parfois à 10h00, parfois à 10h03 ou 10h05.

Apparemment, quand ils se réveillent et boivent du café, ils l'allument)).


 

Sergei !

Lisez l'aide de TimeCurrent - il est indiqué qu'il s'agit de l'heure du SERVEUR.

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