Marché fermé - page 6

 
fxsaber:

voyez que le timing ne sera différent que dans ces situations


Il a été discuté à plusieurs reprises que MqlTick ne retourne pas le tick tel quel. Qu'il existe deux flux de ticks - devis et transaction. Et que dans CopyTicks ils sont fusionnés parfois rétroactivement, parce que les flux ne sont pas synchronisés. Et que le timing de MqlTick et CopyTicks peut ne pas coïncider.


Est-il vraiment possible que 10 SEK. ne coïncident pas ?

2017.09.22 11:18:38.257 Test_time (RTS-12.17,M1)        CopyTicks time = 11:18:27; SymbolInfoTick = 11:18:37
 
prostotrader:

Est-ce que 10 SEC. ne peuvent pas correspondre ?

Il n'y a rien de tel sur Metaquotes-Demo.

 
fxsaber:

Rien de tel sur Metaquotes-Demo.


C'est un ouvreur de démo, je vais l'essayer sur le vrai...

Ajouté

Oui, c'est plus amusant quand ce n'est pas réel.

2017.09.22 11:58:03.892 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:03
2017.09.22 11:58:03.922 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:03
2017.09.22 11:58:05.186 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:04
2017.09.22 11:58:06.110 Test_time (Si-12.17,M1) CopyTicks time = 11:58:03; SymbolInfoTick = 11:58:05
2017.09.22 11:58:06.230 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:06.350 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:06.430 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:06.430 Test_time (Si-12.17,M1) CopyTicks time = 11:58:06; SymbolInfoTick = 11:58:06
2017.09.22 11:58:07.174 Test_time (Si-12.17,M1) CopyTicks time = 11:58:07; SymbolInfoTick = 11:58:07
 
prostotrader:

pas dans la vraie vie est plus drôle.

Les millisecondes et autres données sont là.

 

Pour l'instant, j'ai décidé de faire ce qui suit

//bool CheckMarketTime(const string a_symbol)
bool CheckMarketTime()
{
  sv_time.year = 0;
  TimeTradeServer(sv_time);
  if(sv_time.year > 0)
  {
    if((sv_time.day_of_week == int(FirstDay)) ||                 //первый выходной
       (sv_time.day_of_week == int(SecondDay))) return(false);   //Второй выходной
    sv_time.year = 0;   
    TimeCurrent(sv_time);
    if(sv_time.year > 0)
    {   
      ulong cur_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
      if(((cur_time >= time_st_mon) && (cur_time < 50370)) ||
         ((cur_time >= time_st_day) && (cur_time < 67470)) ||
         ((cur_time >= time_st_evn) && (cur_time < 85770)))
      {
        return(true);
      }
    }
  }
}
 

La bonne idée est de traduire simplement l'heure du serveur (échange)

au lieu de TimeCurrent(), qui provient de la dernière cotation connue dans Market Watch,

créer une fonction TimeServer(), qui traduit simplement l'heure de l'échange.

Alors la fonction TimeTradeServer() ne sera pas nécessaire.

Les deux fonctions seront suffisantes

TimeLocal() et TimeServer()

 
prostotrader:

Pour l'instant, j'ai décidé de le faire de cette façon

Cela me rappelle le comportement de TC dans ce fil.

Перевод string в часы и минуты
Перевод string в часы и минуты
  • 2017.09.06
  • www.mql5.com
Когда встаёт задача задать во входных параметрах время в формате ЧЧ:ММ, приходится решать дилему: удобство пользователя при вводе значений или удоб...
 

Dans l'image, la sortie sur le graphique est la fonction TimeTradeServer(), le temps s'écoule plus rapidement.
Si vous produisez TimeCurrent(), il s'agira de l'heure de la dernière cotation par le symbole actuel et donc aussi souvent d'une incohérence.
Comment puis-je obtenir l'heure de la cotation la plus récente de Market Watch afin de sortir l'heure de manière synchrone avec l'heure dans Market Watch ?



 
Vasiliy Pushkaryov:

Comment puis-je obtenir l'heure de la cotation la plus récente de Market Watch afin de sortir l'heure de manière synchrone avec l'heure dans Market Watch ?

TimeCurrent.

 
fxsaber:

TimeCurrent.

Ouais, ce n'est pas très bon non plus. J'utilise OnTimer pour sortir une fois par seconde, j'ai décidé d'ajouter la sortie du message à l'impression également. Je peux voir que le même temps y passe deux fois. Maintenant, j'ai seulement vu dans l'aide que TimeCurrent pour OnTimer est "l'heure de la dernière cotation pour tout symbole disponible dans la fenêtre Market Watch, la même heure qui est affichée dans l'en-tête de cette fenêtre".

C'est-à-dire que c'est ce qui est nécessaire. En théorie. Mais dans la pratique, quelque chose ne va pas.



Raison: