Tiki en temps réel - page 17

 
Yuriy Zaytsev:

VOUS EN ÊTES SÛR ?


4 secondes ? ??? Pas possible ! Vous pensez vraiment que le processeur a gelé pendant 4 secondes ou que la mémoire est libérée pendant 4 secondes ? Vous plaisantez ?

Il est plus probable qu'il s'agisse de la file d'attente d'écriture sur le disque.

Le disque est plus lent que la mémoire et le processeur.

Et puis flush() , il y a une telle commande dans le langage C, probablement vous le savez, elle est exécutée quand c'est pratique et confortable et peut être exécutée avec un certain retard plus souvent lié au chargement du disque.

C'est ce qui est appelé lorsque les tampons doivent être réinitialisés sur le disque.

Eh bien, je n'en suis pas si sûr, puisque je ne l'ai pas vérifié expérimentalement dans MT. Mais c'est une sorte de norme - pourquoi dans un journal il y a le temps d'écriture sur le disque, si le temps de l'événement, qui a causé cette écriture sur un journal, est plus important, n'est-ce pas logique ?

Et si nous supposons, que le journal est écrit sur le disque en temps d'écriture, et si le disque est chargé, de toute façon vous aurez un retard dans l'enregistrement physique, et le temps sera d'envoyer une commande d'écriture au tampon d'écriture.

En d'autres termes, la purge ne modifie pas le tampon - elle le réinitialise juste un peu plus tard s'il y a un retard.

wp. a noté à juste titre qu'il faut écrire l'heure, car de toute façon, seule l'heure est formée par le terminal lui-même lors de l'écriture dans le journal, il est inutile d'orienter.

 
Aleksey Mavrin:

Je n'en suis pas si sûr, car je ne l'ai pas vérifié expérimentalement dans MT. Mais c'est une sorte de norme - pourquoi dans le journal l'heure d'enregistrement sur le disque, si plus important est l'heure de l'événement, qui a causé cet enregistrement au journal, logiquement ?

Et si nous supposons, que le journal est écrit sur le disque en temps d'écriture, et si le disque est chargé, de toute façon vous aurez un retard dans l'enregistrement physique, et le temps sera d'envoyer une commande d'écriture au tampon d'écriture.

En d'autres termes, la purge ne modifie pas le tampon - elle le réinitialise juste un peu plus tard s'il y a un retard.

s.s. a noté à juste titre que la nécessité d'écrire et le temps, parce que dans tous les cas, seul le temps que le terminal lui-même génère lors de l'écriture dans le journal, guidé aucun sens.


J'ai supposé - que le temps est inséré juste avant l'écriture sur le disque, puis tout s'emboîte.

essayons de décrire le scénario étape par étape - pour le rendre plus clair


1-Le tick est arrivé (hit onTick) - devrait être imprimé

2-Et OnTick imprime un journal - il a été sauvegardé avec succès.

3-Ce tick arrive aussi à OnTick - il doit aussi être imprimé.

4-Et voilà le cauchemar : Windows déverse soudainement 20 flux de données sur le disque en provenance de divers programmes à ce moment précis et verrouille temporairement le disque...

Le pilote a placé sa tête d'aimant de données ailleurs -) et écrit ses propres données.

5 - C'est quand le metatrader essaie d'envoyer quelque chose au disque.

Mais le disque est terriblement occupé par le système d'exploitation Windows - Le système d'exploitation dit au metatrader sorry MQ que j'ai des choses plus importantes à faire - attendez...

6- 4 secondes passent.

7- et ensuite Windows après 4 secondes - a effacé la file d'attente vers le lecteur - et dit au MetaTrader - Cher terminal de trading - vous voulez écrire quelque chose sur le disque ? - Ok, écrivez-le !

8-metatrader écrit sur le disque avec un retard de 4 secondes et enregistre l'HEURE dans le journal, non pas quand il voulait écrire les données sur le disque, mais quand il l'a fait.

C'est de là que viennent les 4 secondes.



---

Tout autre scénario, tel que le terminal a mis l'heure locale dans le tampon - mais l'écriture a été retardée de 4 secondes - NE FONCTIONNE PAS un tel scénario.

sinon le moment aurait coïncidé !

 
Aleksey Mavrin:

Je n'en suis pas si sûr, car je ne l'ai pas vérifié expérimentalement dans MT. Mais c'est une sorte de norme - pourquoi dans le journal l'heure d'enregistrement sur le disque, si plus important est l'heure de l'événement, qui a causé cet enregistrement au journal, il est logique, non ?

Et si nous supposons, que le journal est écrit sur le disque en temps d'écriture, et si le disque est chargé, de toute façon vous aurez un retard dans l'enregistrement physique, et le temps sera d'envoyer une commande d'écriture au tampon d'écriture.

En d'autres termes, la purge ne modifie pas le tampon - elle le réinitialise juste un peu plus tard s'il y a un retard.

s.s. a noté à juste titre qu'il faut écrire l'heure, car de toute façon, seule l'heure que le terminal lui-même génère en écrivant dans le journal, il n'y a pas lieu de s'y attarder.

Et si vous ne vérifiez pas, alors ne racontez pas de conneries.

Savez-vous seulement de quoi nous parlons dans ce fil de discussion ?

Montrez-moi le test, ou bien sortez d'ici.

 
Aleksey Mavrin:

Je n'en suis pas si sûr, car je ne l'ai pas vérifié expérimentalement dans MT. Mais c'est une sorte de norme - pourquoi dans le journal l'heure d'enregistrement sur le disque, si plus important est l'heure de l'événement, qui a causé cet enregistrement au journal, logiquement ?

Et si nous supposons, que le journal est écrit sur le disque en temps d'écriture, et si le disque est chargé, de toute façon vous aurez un retard dans l'enregistrement physique, et le temps sera d'envoyer une commande d'écriture au tampon d'écriture.

En d'autres termes, la purge ne modifie pas le tampon - elle le réinitialise juste un peu plus tard s'il y a un retard.

s.s. a noté à juste titre que vous devez écrire le temps, parce que dans tous les cas, seul le temps qui forme le terminal lui-même lors de l'écriture dans le journal, guidée par aucun sens.

Juste dans notre cas, nous avons le temps d'écrire sur le disque !

Mais le temps peut être arrangé dans la procédure GetTickDescription, je l'ai écrit à l'auteur ci-dessus.

Et s'il l'avait mis là, nous n'aurions pas discuté de la cause possible du retard en 4 secondes. Dans le journal, il est fort probable que l'heure locale soit la même pour OnBock et OnTick, mais que le temps sur le disque soit différent de 4 secondes.

//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription(MqlTick &tick)
{
..
..
Sergey Chalyshev:

Et si vous ne l'avez pas vérifié, alors n'en avez rien à foutre.

Avez-vous la moindre idée de ce dont il est question dans ce fil de discussion ?

Montrez-moi le test ou foutez le camp d'ici.

Ne sois pas si dur avec moi.

 

Il est possible d'améliorer ce suivi, de le régler sur une semaine ou deux, et peut-être de saisir le moment où la date d'enregistrement dans le journal s'écarte de la date de l'événement.

Bien entendu, il est possible d'accélérer ce processus en chargeant périodiquement un disque pour l'enregistrement.

Une autre question, la plus importante : pourquoi perdre du temps dans cette recherche ?) quel est l'avantage pratique.

---

Pour l'instant, il est clair que les ticks arrivent d'abord dans OnTick et seulement ensuite dans OnBuk. Ce qui est bien, c'est que OnBuk n'est pas seulement appelé avec les ticks mais par exemple avec les changements de volumes sur le marché, c'est-à-dire que quelqu'un a ouvert un ordre, l'a fermé ou l'a supprimé, les volumes ont changé. Et c'est une information assez importante pour le marché.

Et bien sûr en suivant la logique des décisions de trading sur le marché des actions / futures logique de prendre exactement dans OnBuk, et non dans OnTick.

 
Sergey Chalyshev:

Et si vous n'avez pas vérifié, alors n'en avez rien à foutre.

Avez-vous la moindre idée de ce dont il est question dans ce fil de discussion ?

Montrez-moi le test, ou bien foutez le camp d'ici.

C'est toi qui jacasse, connard, 16 pages n'ont pas pensé à chronométrer l'événement avant l'impression et à écrire la vitesse qu'ils mesurent, experts, bon sang).

Ce que vous m'avez si fièrement fait remarquer, ils disent, je n'ai pas vérifié, vous ne comprenez même pas vraiment de quoi je parle, je parie. Mais il est peu probable que vous le compreniez.

Et le fait que cette heure ne corresponde pas exactement à l'heure d'enregistrement sur le disque, est vérifié.

 
Sergey Chalyshev:

Et si vous n'avez pas vérifié, alors n'en avez rien à foutre.

Avez-vous la moindre idée de ce dont il est question dans ce fil de discussion ?

Montrez-moi le test ou foutez le camp d'ici.

Que dis-tu de ça, petit malin, montre-moi au moins un moyen crédible de tester ce à quoi tu veux en venir, et je me tirerai d'affaire et admettrai que je ne comprends pas, sinon admets que tu ne comprends pas toi-même, excuse-toi, ou tire-toi d'affaire tout seul.

A savoir - au moins un moyen 100% fiable de vérifier expérimentalement l'heure exacte à laquelle le terminal écrit dans le journal, à savoir les options principales :

1. le moment où le terminal reçoit la commande Print dans la file d'attente.

2. l'heure de début de la commande d'impression.

3. l'heure de fin de l'impression dans le tampon).

Cette variante peut être l'heure exacte :

4. Temps d'exécution de l'impression sur le disque.

 
Aleksey Mavrin:

Que dis-tu de ça, petit malin, tu me montres au moins un moyen fiable de vérifier où tu veux en venir, et je me casse et admets que je n'ai pas compris, sinon admets que tu ne comprends pas toi-même, excuse-toi, ou casse-toi toi-même.

A savoir - au moins un moyen 100% fiable de vérifier expérimentalement l'heure exacte à laquelle le terminal écrit dans le journal, à savoir les options principales :

1. le moment où le terminal reçoit la commande Print dans la file d'attente.

2. l'heure de début de la commande d'impression.

3. l'heure de fin de l'impression dans le tampon).

Cette variante peut être l'heure exacte :

4. le temps d'exécution de l'impression sur disque.

Alors, quel est l'intérêt ?

J'attends votre code...

 
prostotrader:

Alors, c'est quoi le problème ?

J'attends votre code...

Quel code attendez-vous ? Je t'ai promis quelque chose ? Quel était le prix déjà ?)

p/s/ toi aussi tu n'as pas compris, comme ton ami, de quoi je parle.
 

Pendant que le débat se poursuit, j'ai fait une autre expérience.

//+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
bool is_book;
ulong st_time, func_time;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_book = MarketBookAdd(Symbol());
  st_time = GetMicrosecondCount();
  func_time = GetMicrosecondCount();
  Print(__FUNCTION__, "; Time: ", MathAbs((func_time - st_time)/1000), " ms");
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
  if(Symbol() == symbol)
  {
    func_time = GetMicrosecondCount();
    Print(__FUNCTION__, "; Time: ", MathAbs((func_time - st_time)/1000), " ms");
  }
}
void OnTick()
{
  func_time = GetMicrosecondCount();
  Print(__FUNCTION__, "; Time: ", MathAbs((func_time - st_time)/1000), " ms");
}
//+------------------------------------------------------------------+

Je veux dire, pendant l'initialisation, je le chronomètre d'une microseconde,

et avant chaque impression, je perce à nouveau le temps.

Idéalement, il devrait en être ainsi

2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnTick; Time: 1395 ms
2020.02.04 21:28:01.316	Ticks_test_2 (GOLD-3.20,M1)	OnBookEvent; Time: 1395 ms

Mais très souvent, cela se passe ainsi (expositions logarithmiques) :

2020.02.04 21:28:11.133 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 11212 ms
2020.02.04 21:28:11.139 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 11218 ms

2020.02.04 21:28:15.603 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 15682 ms
2020.02.04 21:28:15.609 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 15688 ms

2020.02.04 21:28:29.521 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 29599 ms
2020.02.04 21:28:29.790 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 29868 ms
2020.02.04 21:28:29.790 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 29868 ms

2020.02.04 21:28:33.109 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 33188 ms
2020.02.04 21:28:33.115 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 33194 ms

2020.02.04 21:28:40.800 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 40878 ms
2020.02.04 21:28:40.807 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 40885 ms

2020.02.04 21:28:41.891 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 41969 ms
2020.02.04 21:28:41.896 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 41974 ms

2020.02.04 21:28:52.984 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 53063 ms
2020.02.04 21:28:52.991 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 53070 ms

2020.02.04 21:28:54.457 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 54536 ms
2020.02.04 21:28:55.276 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 55355 ms

2020.02.04 21:29:10.643 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 70722 ms
2020.02.04 21:29:10.650 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 70729 ms

2020.02.04 21:29:14.674 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 74752 ms
2020.02.04 21:29:14.681 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 74759 ms

2020.02.04 21:29:25.306 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 85384 ms
2020.02.04 21:29:25.313 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 85390 ms

2020.02.04 21:29:30.468 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 90546 ms
2020.02.04 21:29:30.481 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 90559 ms

2020.02.04 21:29:30.866 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 90944 ms
2020.02.04 21:29:30.874 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 90951 ms

2020.02.04 21:29:36.680 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 96758 ms
2020.02.04 21:29:36.688 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 96766 ms

2020.02.04 21:29:37.891 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 97968 ms
2020.02.04 21:29:37.910 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 97987 ms

Ainsi, l'heure locale est écrite dans l'impression lorsque l'impression est appelée.

Mais ça ne colle pas avec 4 secondes...