Une minute et demie de différence entre l'heure locale et l'heure du tic-tac frais. Ce qu'il faut faire. - page 3

 
pivomoe:

TimeCurrent() - Le temps du dernier tic-tac sur un caractère sera inférieur au temps de retard, il peut donc être utilisé. L'utilisation de l'heure locale dans la première version n'était pas une bonne idée.

Whoa... La version actuelle semble également échouer.

Lisons la définition de TimeCurrent() :

HeureCourant

Renvoie la dernière heure connue du serveur, l'heure d'arrivée de la dernière cotation par un des symboles sélectionnés dans "Market Watch".

L'un d'eux signifie que l'heure de la plus fréquente (pour simplifier, la plus liquide) est affichée. Ce n'est pas ce que vous voulez. Ce qu'il vous faut, c'est SymbolInfoInteger( bla-bla, SYMBOL_TIME ). Ça ressemble à ça.

 
Alexey Kozitsyn:

Whoa... dac, la version actuelle semble échouer aussi.

Lisez la définition de TimeCurrent() :

Par un, on entend qu'il affiche l'heure du changement le plus fréquent (pour simplifier, le plus liquide). Et ce n'est pas ce dont vous avez besoin. Ce qu'il vous faut, c'est SymbolInfoInteger( bla-bla, SYMBOL_TIME ). Je pense que oui.

C'est ainsi que j'ai essayé pour prostotrader de porter ce que je vois le problème. Dans la dernière version, je passe en revue tous les symboles et je prends le temps maximum du dernier tick reçu.

   for(int i=0; i<KolichestvoSimvolov; i++)     
   if( InformaziaOPoslednemTike[i].LastTick.time_msc > VremaySamogoSvegegoTikaPoVsemSimvolam ) VremaySamogoSvegegoTikaPoVsemSimvolam= InformaziaOPoslednemTike[i].LastTick.time_msc;
Alexey Kozitsyn:

Si quelqu'un a reçu des informations sur une tique à 17:59:01, et que je ne les ai pas reçues même à 18:00 - c'est un gros problème.

Et voici la question. Quel est le problème (et y en a-t-il un) ? Dans le serveur du courtier, qui ne donne pas le tick (à tout le monde) pendant un long moment, ou dans MT5, qui ne le reçoit pas pendant un long moment.

D'une part le temps moyen entre "TimeCurrent" et l'heure d'arrivée du dernier tick est de 5 millisecondes, d'autre part il y a des ticks qui arrivent avec des dizaines de secondes de chute. Par exemple, de 18 à 25 ans. J'ai attrapé un tic avec un délai de 45 secondes. Et ce, sur quelques dizaines de symboles non liquides.


+ à cela le problème de terme peut être exacerbé en utilisant CopyTicks pour obtenir le dernier tick.
if(CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,0,1)==1) 

Non seulement il est plus lent par temps, mais il peut être exécuté sur place pendant une seconde et demie.

J'ai également compris que le OnBookEvent ne convient que pour la négociation d'un seul symbole.

 
pivomoe:

C'est ainsi que j'ai essayé pour prostotrader de porter ce que je considère comme un problème. Dans la dernière version, je passe en revue tous les symboles et je prends le temps maximum du dernier tick reçu.

D'une part le temps moyen entre "TimeCurrent" et l'heure d'arrivée du dernier tick est de 5 millisecondes, d'autre part il y a des ticks qui arrivent avec une chute en dizaines de secondes. Par exemple, de 18 à 25 ans. J'ai attrapé un tic avec un délai de 45 secondes. Et ce, sur quelques dizaines de symboles non liquides.


+ à cela le problème de terme peut être exacerbé en utilisant CopyTicks pour obtenir le dernier tick.

Non seulement elle est plus lente par moments, mais elle peut être exécutée à plat pendant une seconde et demie.

J'ai également compris que OnBookEvent ne convient que pour la négociation d'un seul symbole.

Nous y sommes. Il s'avère que vous venez de comprendre que le verre du marché est formé pour chaque paire de devises séparément, donc le trading sur ses données pour différentes paires n'est pas possible.

J'espère que vous réaliserez bientôt que la poursuite des données de divers graphiques dans une certaine séquence, donnée par vous, ne correspond pas à la séquence des données entrantes sur les nouveaux ticks dans les graphiques de différentes paires de devises.

Par conséquent, si l'EURUSD est vérifié en premier, et le BTCUSD en dernier, et qu'il y a des dizaines de symboles entre eux, le temps de réception des ticks peut ressembler à ceci

18:50:00.000 ; 18:48:59.018 ; 18:51:00.001 ; 18:47:59.000 bien et ainsi de suite. Sans théorie du complot, ni faute de MT ou de courtier. Ce qu'ils ont programmé est ce qu'ils ont obtenu.

 
Алексей Тарабанов:

Nous y sommes. Il s'avère que vous venez de réaliser que le verre est formé pour chaque paire de devises séparément, donc trader sur ses données n'est pas possible pour différentes paires.

J'espère que vous réaliserez bientôt que la poursuite des données de divers graphiques dans une certaine séquence, donnée par vous, ne correspond pas à la séquence des données entrantes sur les nouveaux ticks dans les graphiques de différentes paires de devises.

Par conséquent, si l'EURUSD est vérifié en premier, et le BTCUSD en dernier, et qu'il y a des dizaines de symboles entre eux, le temps de réception des ticks peut ressembler à ceci

18:50:00.000 ; 18:48:59.018 ; 18:51:00.001 ; 18:47:59.000 bien et ainsi de suite. Sans théorie du complot, ni faute de MT ou de courtier. Ce que nous avons programmé est ce que nous avons obtenu.

Pour attraper de nouveaux tics via OnBookEvent, je me suis inspiré deprostotrade, qui a écrit que "c'est plus correct". Je n'utilise pas le tick lui-même, je m'abonne simplement à sa mise à jour pour tous les symboles dans le rapport de marché.OnBookEven en fait je l'utilise seulement pour identifier le symbole, par lequel le tick a été mis à jour. Ensuite, on vérifie s'il y a un nouveau tick, puis je regarde si l'EA a établi de nouveaux anti-records. C'esten fait la fonction entière:

void OnBookEvent(const string &symbol)
  {   
   if( MestoPoluchenieTikov == ON_TIMER ) return;
//--- Ищем индекс символа для которого полученно событие OnBookEvent
   int IndeksSimvola= -1;
   for(  int i=0;  i < KolichestvoSimvolov; i++ )
   if(  symbol == GCInformaziaOPoslednemTike[i].Simvol  ) { IndeksSimvola= i; break; }
   
   if( IndeksSimvola== -1 ){Print(__FUNCTION__,"Не удалось найти символ по которому полученно событие OnBookEvent ");ExpertRemove();return;}
   
   bool PoluchiliNoviiTick= false;
          
    //--- Получаем тик заданным в настройках способом.
   if( SposobPoluchenieTikov == SYMBOL_INFO_TICK  ) PoluchiliNoviiTick= PolychaemNoviiTickSymbolInfoTick(GCInformaziaOPoslednemTike[IndeksSimvola]);
   if( SposobPoluchenieTikov == COPY_TICKS       )  PoluchiliNoviiTick= PolychaemNoviiTickCopyTicks(GCInformaziaOPoslednemTike[IndeksSimvola]);    
       
     //--- Смотрим не установлены ли новые рекорды.  
   if(  PoluchiliNoviiTick ) PitaemsayObnovitRekordi( GCInformaziaOPoslednemTike, IndeksSimvola );                 
   
   ObnovlaemInformacyyNaGrafikeEslePora();
 
  }   
Alexei Tarabanov:

J'espère que vous comprenez que la poursuite des données de différents verres dans une certaine séquence, donnée par vous, ne correspond pas à la séquence des données entrantes sur les nouveaux ticks dans les verres de différentes paires de devises.

D'après ce que je comprends, si je ne reçois pas de coupe en utilisant MarketBookGet, alors je ne cherche rien. Peut-être que vous n'avez pas regardé mon code de la deuxième page.

 
pivomoe:

L'idée d'attraper les nouveaux tics via OnBookEvent m'a été donnée parprostotrade, qui a écrit que c'est "plus correct". Je n'utilise pas le tick lui-même, je m'abonne simplement à ses mises à jour pour tous les symboles dans le rapport de marché.OnBookEven, je l'utilise uniquement pour identifier le symbole sur lequel le tick a été mis à jour. Ensuite, on vérifie s'il y a un nouveau tick, puis je regarde si l'EA a établi de nouveaux anti-records. C'esten fait la fonction entière:

D'après ce que j'ai compris, si je n'obtiens pas la coupe en utilisant MarketBookGet, alors je ne vérifie rien. Vous n'avez probablement pas regardé mon code de la deuxième page.

Le signal MT n'est pas traité tant que le signal précédent n'est pas traité.

 
pivomoe:

L'idée d'attraper les nouveaux tics via OnBookEvent m'a été donnée parprostotrade, qui a écrit que c'est "plus correct". Je n'utilise pas le tick lui-même, je m'abonne simplement à ses mises à jour pour tous les symboles dans le rapport de marché.OnBookEven, je l'utilise essentiellement pour identifier le symbole pour lequel le tick a été mis à jour. Ensuite, on vérifie s'il y a un nouveau tick, puis je regarde si l'EA a établi de nouveaux anti-records. C'esten fait la fonction entière:

D'après ce que j'ai compris, si je n'obtiens pas la coupe en utilisant MarketBookGet, alors je ne vérifie rien. Vous n'avez probablement pas regardé mon code de la deuxième page.

Je ne l'ai pas fait.

 
pivomoe:

Votre logique est bonne, n'écoutez pas ceux qui passent.

1. Essayez de conserver 3 à 5 instruments (dont un illiquide). Est-ce qu'il jouera ?

2. Exécutez-le sur une machine propre, sans autre logiciel, en utilisant l'Internet. Cela va-t-il se répéter ?

3. Essayez de séparer la capture de la latence en plusieurs EA (1 par outil).

Si le problème n'est pas lié aux ressources (il y avait une limitation du nombre de threads alloués à un terminal), alors le bug doit être corrigé.

 
Andrey Khatimlianskii:

Votre logique est bonne, n'écoutez pas ceux qui passent.

1. Essayez de conserver 3 à 5 instruments (dont un illiquide). Est-ce qu'il jouera ?

2. Exécutez-le sur une machine propre, sans autre logiciel, en utilisant l'Internet. Cela va-t-il se répéter ?

3. Essayez de séparer la capture de la latence en plusieurs EA (1 par outil).

Si le problème n'est pas lié aux ressources (il y avait une limitation du nombre de threads alloués à un terminal), alors le bug doit être corrigé.

Merci pour la réponse. Aujourd'hui, j'ai fait quelques progrès dans la résolution de ce problème. Il est traité avec la commande Sleep() entre les appels à SymbolInfo(). Avant, je passais en boucle la vue d'ensemble du marché sans faire de pause. Je l'ai testé sur 40 symboles le soir. Si Sleep(5), j'obtiens "new tick", ce qui aurait dû être le cas il y a deux secondes. Mais Sleep(10) montre un retard de 400 millisecondes (dû à Sleep(10) ( 40 symboles *10 ). J'ai essayé de le tester sur 4 symboles les plus liquides à Vespers. Avec Sleep(1), pas de délai du tout.... tout est parfait. Ici je ne comprends pas comment cela peut être, si le symbole dans la revue est petit SymbolInfo peut être utilisé sans aucune pause. Et si le symbole est beaucoup, il faut utiliser des pauses.

Maintenant les réponses :

1) Le liquide du soir n'est pas joué.

2) A 40 caractères, il se répète même avec le logiciel désactivé.

3) Je ne comprends pas ce que vous suggérez. Attraper de nouveaux ticks à la fois à partir de deux EA dans un terminal ?

Je suis en train de creuser la faisabilité d'appeler SymbolInfo. Par exemple, j'ai réussi à découvrir que même un symbole dans l'aperçu du marché n'est pas capable d'envoyer de nouveaux ticks à plus de 3,5 millisecondes d'intervalle (c'était le soir, cependant).

 
pivomoe:

1) Sur les liquides, il ne joue pas sur les vêpres.

2) Sur 40 caractères, il se répète même si le logiciel est désactivé.

3) Je ne comprends pas ce que vous suggérez. Attraper de nouveaux ticks à la fois à partir de deux EA dans un terminal ?

Je suis en train de creuser la faisabilité d'appeler SymbolInfo. Par exemple, j'ai réussi à découvrir que même un symbole dans la vue d'ensemble du marché n'est pas capable de donner de nouveaux ticks de plus de 3,5 millisecondes (c'était à l'heure du soir cependant).

1. Essayez d'ajouter un illiquide

3. attraper les manques pour un instrument d'un EA. Et lancez 40 EAs.

 
pivomoe:

Merci de votre réponse. J'ai avancé un peu plus aujourd'hui dans la résolution de ce problème. Il est traité avec la commande Sleep() entre les appels SymbolInfo(). J'avais l'habitude de parcourir l'ensemble du marché sans faire de pause. Je l'ai testé sur 40 symboles le soir. Si Sleep(5), j'obtiens "new tick", qui aurait dû avoir lieu il y a deux secondes. Mais Sleep(10) montre un retard de 400 millisecondes (dû à Sleep(10) ( 40 symboles *10 ). J'ai essayé de le tester sur 4 symboles les plus liquides à Vespers. Avec Sleep(1), pas de délai du tout.... tout est parfait. Ici je ne comprends pas comment cela peut être, si le symbole dans la revue est petit SymbolInfo peut être utilisé sans aucune pause. Et si vous avez beaucoup de personnages, vous devez utiliser des pauses.

S'il vous plaît, fournissez moi un morceau de code qui rattrape les retards. Ici même, via le bouton d'insertion de code.