Histoire d'un tic-tac - page 24

 
juriy5555:

À en juger par les requêtes de l'indicateur de tic, les données du champ time_msk sont un multiple de 1000. c'est-à-dire que nous ne parlons pas de millisecondes, la résolution est de 1 seconde.

Question : quel était alors l'intérêt d'étendre la structure de MqlTick?

Et à quel serveur commercial vous êtes-vous connecté ?
 
J'ai une démo chez Openbroker et un compte réel là aussi. Sur le réel tous les serveurs d'accès donnent le même résultat. bien, et sur la démo est le même. J'ai regardé Si-6.16, RTS-6.16, SBRF-6.16. Tous les changements sont des multiples de 1000.
Ce n'est pas le cas chez vous ?
 
juriy5555:
J'ai un compte de démonstration sur Openbroker et un compte réel sur le même site. Sur le serveur réel All Access, le résultat est le même, de même que sur la démo. J'ai examiné Si-6.16, RTS-6.16, SBRF-6.16. Tous les changements sont des multiples de 1000.
N'est-ce pas ?

Actuellement, la requête SymbolInfoTick renvoie des zéros dans la structure MqlTick au lieu de millisecondes réelles (un multiple de 1000).

Veuillez attendre la prochaine version.

PS sur demande CopyTicks millisecondes sont donnés tels quels

 

J'ai téléchargé cet indicateur à partir de ce fil de discussion pour le tester. Il obtient les 30 derniers ticks exactement via CopyTicks. Sinon, je devrais peut-être l'essayer sur un autre serveur (pas openbroker).

>> "Des zéros sont donnés à la place des millisecondes réelles".

On ne donne pas de zéros, mais toujours les mêmes chiffres avec un multiple de 1000. (...2064, ...2064, ...3064, ..., ..., ..4064 )

Dossiers :
 
juriy5555:

J'ai téléchargé cet indicateur à partir de ce fil de discussion pour le tester. Il obtient les 30 derniers ticks exactement via CopyTicks. En option, je devrais peut-être l'essayer sur un serveur différent (pas openbroker).

>> "Des zéros sont donnés à la place des millisecondes réelles".

On ne donne pas de zéros, mais toujours les mêmes chiffres avec un multiple de 1000. (...2064, ...2064, ...3064, ..., ..., ..4064 )

Les zéros sont transmis par la fonction SymbolInfoTick.

Dans CopyTicks, les millisecondes réelles sont données. Si ces chiffres sont 2064, 3064, 4064, cela signifie qu'il en était ainsi. Je ne sais pas pourquoi il en a été ainsi.

J'ai regardé votre code. Quel est le spécificateur de sortie %-4d ? time_msc est long, donc juste d ne fonctionne pas. Ça devrait être %I64d.

 
Slawa:

Les zéros sont donnés par la fonction SymbolInfoTick.

Dans CopyTicks, les millisecondes réelles sont données. Si c'est 2064, 3064, 4064, alors c'était le cas. Je ne sais pas pourquoi il en a été ainsi.

J'ai regardé votre code. Quel est le spécificateur de sortie %-4d ? time_msc est long, donc juste d ne fonctionne pas. Ça devrait être %I64d.

Oui, désolé. Le code n'est pas le mien. L'auteur du code a vraiment une erreur dans StringFormat. J'ai imprimé à chaque itération de la boucle par Print (tick.time_msc) . Le résultat est entièrement nul à la fin et nous n'obtenons toujours pas de millisecondes. La requêteCopyTicks persiste.

Dossiers :
99999.jpg  332 kb
 
Slawa:

Les zéros sont donnés par la fonction SymbolInfoTick.

Dans CopyTicks, les millisecondes réelles sont données. Si c'est 2064, 3064, 4064, alors c'était le cas. Je ne sais pas pourquoi il en a été ainsi.

J'ai regardé votre code. Quel est le spécificateur de sortie %-4d ? time_msc - c'est long, c'est pourquoi juste d ne fonctionne pas. Ça devrait être %I64d.

Indicateur modifié par rapport au premier message - ne jouez pas avec StringFormat, ça devrait être comme ça maintenant :

string tick_string=IntegerToString(i,2,'0')+"  "+TimeToString(tick.time,TIME_MINUTES|TIME_SECONDS)+"  "+
                            DoubleToString(tick.bid,Digits())+"  "+DoubleToString(tick.ask,Digits())+"  "+
                            DoubleToString(tick.last,Digits())+"  "+IntegerToString(tick.volume,7,'0')+"  "+
                            IntegerToString(tick.time_msc,19,'0')+"  "+IntegerToString(tick.flags,2,'0');
 
juriy5555:

Oui, désolé. Le code n'est pas le mien. L'auteur a vraiment un bug dans StringFormat. Imprimer (tick.time_msc) à chaque itération de la boucle. Le résultat est entièrement nul à la fin et nous n'obtenons toujours pas de millisecondes. La demandeCopyTicks va tout le temps.

Voici votre indicateur sur les données MetaQuotes Demo


Demandez à votre courtier l'absence de millisecondes dans les ticks.

 
Slawa:

Voici votre indicateur sur les données MetaQuotes Demo


Demandez à votre courtier l'absence de millisecondes dans les ticks.

Je ne sais pas encore à quoi et à qui écrire, j'y suis depuis quelques mois. J'espère qu'OpenBroker mettra le serveur à jour après tout.
ps mon client construit 1340
 

juriy5555 :
Пока не знаю, что и у кому конкретно писать, я в этом несколько месяцев.  Буду надеяться, что  ОпенБрокер всё таки обновит сервер. 
ps мой билд клиента 1340

J'ai aussi une question, bien qu'un plan un peu différent, et je me demande aussi si les informations transmises par les tiques sont correctes.

Une question sur les volumes réels.

Si vous demandez des informations sur les ticks à partir de l'indicateur, le volume réel y va dans le tableau volume[]. Et, en théorie, si vous obtenez des informations à partir de ticks, le volume accumulé par bougie doit correspondre à la valeur du tableau volume[].

Voici un exemple de code de test :

 //+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//--- Получение данных по тику
   MqlTick tick;                                               // Структура хранения инфо по тику
   SymbolInfoTick ( _Symbol ,tick );                             // Получение данных по тику
   Print ( "ask: " + DoubleToString (tick.ask, _Digits )+ ", bid: " + DoubleToString (tick.bid, _Digits )+ ", last: " + DoubleToString (tick.last, _Digits )+
         ", vol: " ,tick.volume, ", flags: " ,tick.flags);
//--- Формирование объема
   static ulong sVol;                                         // Суммарный объем из тиков на свече
   if (prev_calculated<= 0 )                                     // Если первый запуск
      sVol=tick.volume;                                       // Запоминаем значение тика
   else
     {
       if (rates_total>prev_calculated) // Если образовалась новая свеча
        {
         sVol=tick.volume;                                     // Запоминаем значение объема первого тика
        }
       else                                                      // Если новая свеча не образовалась
         sVol+=tick.volume;                                    // Суммируем объем тика с накопленным объемом
     }
   Print ( "Реальный объем: " ,volume[rates_total- 1 ], ", накопленный объем: " ,sVol);
//--- 
   return (rates_total);
  }
//+------------------------------------------------------------------+

Ne nous attachons pas aux drapeaux pour l'instant, et supposons que chaque tick reçu modifie le volume total de sVol (bien que, pour autant que je sache, ce n'est pas le cas).

Nous attendons la formation d'une nouvelle bougie et regardons les entrées du journal. Ouverture du courtier, compte réel, build 1340, RTS-6.16 :

 2016.06 . 09 17 : 07 : 01.820 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 1 , накопленный объем: 1
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 3 , flags: 24
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 1 , накопленный объем: 4
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 3 , flags: 24
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 5 , накопленный объем: 7
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 3 , flags: 24
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 7 , накопленный объем: 10
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 3 , flags: 24
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 8 , накопленный объем: 13
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 3 , flags: 24
2016.06 . 09 17 : 07 : 03.142 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 11 , накопленный объем: 16
2016.06 . 09 17 : 07 : 03.266 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 03.266 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 16 , накопленный объем: 17
2016.06 . 09 17 : 07 : 03.266 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 03.266 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 18 , накопленный объем: 18
2016.06 . 09 17 : 07 : 03.266 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 03.266 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 19 , накопленный объем: 19
2016.06 . 09 17 : 07 : 03.700 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94660 , vol: 1 , flags: 24
2016.06 . 09 17 : 07 : 03.700 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 20 , накопленный объем: 20
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 22 , накопленный объем: 21
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 27 , накопленный объем: 22
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 28 , накопленный объем: 23
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 29 , накопленный объем: 24
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 31 , накопленный объем: 25
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 33 , накопленный объем: 26
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 38 , накопленный объем: 27
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 43 , накопленный объем: 28
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 45 , накопленный объем: 29
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 47 , накопленный объем: 30
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 49 , накопленный объем: 31
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 51 , накопленный объем: 32
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 56 , накопленный объем: 33
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 59 , накопленный объем: 34
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 60 , накопленный объем: 35
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.319 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 60 , накопленный объем: 36
2016.06 . 09 17 : 07 : 04.347 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.347 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 61 , накопленный объем: 37
2016.06 . 09 17 : 07 : 04.347 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 04.347 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 61 , накопленный объем: 38
2016.06 . 09 17 : 07 : 05.344 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 05.344 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 63 , накопленный объем: 39
2016.06 . 09 17 : 07 : 05.344 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94680 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 05.344 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 64 , накопленный объем: 40
2016.06 . 09 17 : 07 : 05.460 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 24
2016.06 . 09 17 : 07 : 05.460 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 65 , накопленный объем: 41
2016.06 . 09 17 : 07 : 05.516 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 24
2016.06 . 09 17 : 07 : 05.516 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 68 , накопленный объем: 42
2016.06 . 09 17 : 07 : 05.516 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 24
2016.06 . 09 17 : 07 : 05.516 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 69 , накопленный объем: 43
2016.06 . 09 17 : 07 : 06.016 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 24
2016.06 . 09 17 : 07 : 06.016 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 70 , накопленный объем: 44
2016.06 . 09 17 : 07 : 06.557 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94670 , last: 94670 , vol: 1 , flags: 0
2016.06 . 09 17 : 07 : 06.557 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 71 , накопленный объем: 45
2016.06 . 09 17 : 07 : 06.702 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94670 , vol: 2 , flags: 2
2016.06 . 09 17 : 07 : 06.702 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 73 , накопленный объем: 47
2016.06 . 09 17 : 07 : 06.702 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94680 , bid: 94660 , last: 94670 , vol: 2 , flags: 2
2016.06 . 09 17 : 07 : 06.702 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 73 , накопленный объем: 49
2016.06 . 09 17 : 07 : 06.718 test_ticks_openbroker (RTS- 6.16 ,M1)     ask: 94670 , bid: 94660 , last: 94670 , vol: 2 , flags: 0
2016.06 . 09 17 : 07 : 06.718 test_ticks_openbroker (RTS- 6.16 ,M1)     Реальный объем: 74 , накопленный объем: 51

Et ainsi de suite, le volume réel de l'indicateur sera beaucoup plus important que celui accumulé. Cela soulève quelques questions pour les développeurs :

1. Le volume obtenu à partir du tableau volume[] de la fonction OnCalculate() doit-il être le même que le volume cumulé obtenu à partir des ticks ? Mon avis, bien sûr, devrait, sinon pourquoi l'indiquer en ticks?

2. Est-il correct d'utiliser la fonction OnCalculate() pour accumuler le volume, ou est-il préférable d'obtenir le volume via OnBookEvent() ? L'aide dit :

L' événement Calculate est généré uniquement pour les indicateurs immédiatement après l'envoi de l'événement Init et lors de toute modification des données de prix. Géré par la fonction OnCalculate.

donc, en théorie, c'est correct, mais j'aimerais entendre un commentaire à ce sujet.

3. Les résultats des tests sont affichés SANS analyse des drapeaux. Si nous analysons les drapeaux, alors, pour autant que je sache, vous devez prendre des volumes de ticks avec des drapeaux 24 (changement simultané du dernier et du volume):

  • TICK_FLAG_LAST - le tick a changé le prix de la dernière transaction
  • TICK_FLAG_VOLUME - cocher le volume modifié

Mais dans ce cas, le volume accumulé sera encore moindre. J'aimerais entendre les commentaires des développeurs sur la façon d'analyser correctement les ticks maintenant (puisque tous les champs sont enregistrés) et les drapeaux sont-ils correctement implémentés ? La question de l'exactitude de l'implémentation s'est posée parce que je n'ai pas remarqué de ticks avec des drapeaux :

  • TICK_FLAG_BUY - le tick s'est produit à la suite d'une transaction d'achat
  • TICK_FLAG_SELL - un tick s'est produit à la suite d'un accord de vente

Quel est le nombre de ces drapeaux ?

Le fichier indicateur est également dans l'application.

Dossiers :
Raison: