Tiki en temps réel

 

Bonne journée à vous tous.

Il est devenu nécessaire de tester l'algorithme de trading sur des ticks réels du courtier "Otkritie".
Ainsi, l'algorithme montre des résultats différents dans le mode en ligne et dans le testeur dans le mode des ticks réels.
En partant de là, l'étape suivante a été la collecte des ticks en ticks réels et leur comparaison avec l'historique (ticks historiques), obtenu par la fonction CopyTicksRange().
Les tiques ont été collectées sur les contrats à terme du SBRF pour le 21.01.2020.

Des résultats intéressants ont été obtenus et certaines questions ont été soulevées.

1. Le nombre de ticks réels et de ticks historiques diffère considérablement, mais il y a les mêmes ticks au début et à la fin de la journée de négociation.
Peut-être est-ce dû à une caractéristique du gestionnaire OnTick(), qui peut sauter le traitement des ticks.

Plus de la moitié des ticks historiques, en plus des drapeaux standards (TICK_FLAG_BID ... etc.) ont un drapeau supplémentaire activé 9 bits.
Nous ne le voyons pas dans les ticks réels - il n'y a pas un seul tick avec le drapeau 9 bits activé.

3. Nous n'avons pas trouvé de différence systématique entre les ticks réels et historiques, ainsi que l'inclusion du bit 9 dans les ticks historiques.
Les ticks historiques peuvent tout à fait correspondre aux ticks réels, et le 9e bit de leur drapeau peut être activé ou désactivé.
Les ticks réels et historiques peuvent être incohérents même pendant les périodes de faible activité commerciale, lorsque la réception de ticks dans le terminal n'est pas aussi intensive.

Cochez la case

Et les questions sont en conséquence :

Aux développeurs - que signifient les 9 bits du drapeau tique ?

Et à la communauté - quelqu'un a-t-il rencontré une telle collision ?
Comment tester les algorithmes sur des ticks réels ? Seulement en ligne ?

Ci-joint les fichiers avec le collecteur et l'analyseur de tics.
Et des ticks réels sur SBRF-3.20 pour le 21.01.2020.

Dossiers :
ticks.zip  553 kb
 
Vladimir Mikhailov:

Bonne journée à vous tous.

Il est nécessaire de tester l'algorithme de trading sur les ticks réels du courtier "Otkritie".
Ainsi, l'algorithme montre des résultats différents en mode en ligne et dans le testeur en mode ticks réels.
C'est pourquoi l'étape suivante est la collecte des ticks en temps réel (ticks réels) et leur comparaison avec l'historique des ticks (ticks historiques), obtenu par la fonction CopyTicksRange().
Les tiques ont été collectées sur les contrats à terme du SBRF pour le 21.01.2020.

Des résultats intéressants ont été obtenus et certaines questions ont été soulevées.

1. Le nombre de ticks réels et de ticks historiques diffère considérablement, mais il y a les mêmes ticks au début et à la fin de la journée de négociation.
Peut-être est-ce dû à une caractéristique du gestionnaire OnTick(), qui peut sauter le traitement des ticks.

2. plus de la moitié des ticks historiques, en plus des drapeaux standards (TICK_FLAG_BID ... etc.) ont un drapeau supplémentaire inclus de 9 bits.
Nous ne le voyons pas dans les ticks réels - il n'y a pas un seul tick avec le drapeau 9 bits activé.

3. Nous n'avons pas trouvé de différence systématique entre les ticks réels et historiques, ainsi que l'inclusion du bit 9 dans les ticks historiques.
Les ticks historiques peuvent tout à fait correspondre à des ticks réels, et le 9e bit de leur drapeau peut être activé ou désactivé.
Les ticks réels et historiques peuvent être incohérents même pendant les périodes de faible activité commerciale, lorsque la réception de ticks dans le terminal n'est pas aussi intensive.

Et les questions sont en conséquence :

Aux développeurs - que signifient 9 bits dans un drapeau à tic-tac ?

Et à la communauté - quelqu'un a-t-il rencontré une telle collision ?
Comment tester les algorithmes sur des ticks réels ? Seulement en ligne ?

Vous trouverez ci-joint des fichiers avec le collecteur et l'analyseur de tics.
Et des ticks réels sur SBRF-3.20 pour le 21.01.2020.

Vous m'avez fait rire avec votre collectionneur de tiques :)

Prenez comme base "l'homme à tout faire".

https://www.mql5.com/ru/code/16210

Complété

Et oubliez le testeur pour les instruments d'échange

Лента всех сделок
Лента всех сделок
  • www.mql5.com
Хитрый усреднитель Hello Smart Эксперт усредняет убыточные позиции по определенному алгоритму. ColorJSatl_Digit Сглаженный быстрый цифровой фильтр JSatl с цветовой индикацией направления движения, с отображением последнего значения в виде ценовой метки и с возможностью округлять уровни...
 
prostotrader:

Vous me faites rire avec votre collectionneur de tiques :)

Prenez comme base "All Transactions Feed".

https://www.mql5.com/ru/code/16210

Complété

Et oubliez le testeur pour les instruments d'échange

L'exemple ci-dessus n'est qu'une façon d'agréger la bande des transactions, et encore une fois la référence est à l'historique.
Ce que je ne voudrais pas faire, car cela ralentit l'algorithme. Tout d'abord, nous sommes intéressés par les ticks qui sont traités par l'événement OnTick().

Oublier le testeur pour MetaTrader en général ou le testeur dans MT5 ?

 
Vladimir Mikhailov:

Cet exemple n'est qu'une des méthodes d'agrégation des métiers, et il s'agit là encore d'une référence à l'histoire.
1. ce que vous ne voudriez pas faire, car cela ralentit l'algorithme. Tout d'abord, nous sommes intéressés par les ticks qui sont traités par l'événement OnTick().

2. Oublier le testeur pour les instruments d'échange en principe ou le testeur dans MT5 ?

1. Rien ne ralentit et rien ne ralentira.

Vous avez reçu une solution toute prête, qu'il suffit d'adapter à vos besoins.

L'événement OnTick() n'affiche pas tous les changements dans la pioche, c'est-à-dire qu'il ne prend pas en compte tous les ticks!

Voici un exemple simple que vous pouvez vérifier

//+------------------------------------------------------------------+
//|                                                   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;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = MarketBookAdd(Symbol());
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
    if(is_book == true) MarketBookRelease(Symbol());
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    Print(__FUNCTION__ + " Tick is done!");
   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
    if(Symbol() == symbol)
    {
      Print(__FUNCTION__ + " Tick is done!");
    }
   
  }
//+------------------------------------------------------------------+
2020.01.23 16:56:53.226	Ticks_test (GOLD-3.20,M1)	OnTick Tick is done!
2020.01.23 16:56:53.226	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!
2020.01.23 16:56:53.712	Ticks_test (GOLD-3.20,M1)	OnTick Tick is done!
2020.01.23 16:56:53.712	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!
2020.01.23 16:56:53.930	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!
2020.01.23 16:56:53.996	Ticks_test (GOLD-3.20,M1)	OnTick Tick is done!
2020.01.23 16:56:53.996	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!
2020.01.23 16:56:54.016	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!
2020.01.23 16:56:54.280	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!
2020.01.23 16:56:54.392	Ticks_test (GOLD-3.20,M1)	OnBookEvent Tick is done!

2. Pour les instruments d'échange (déjà écrit pour les actions)

Ajouté

Si vous avez décidé de "ramper" du FOREX vers la Bourse, je vous recommande de trouver ce sujet dans le site suivant

La section "Aide pour les débutants" et lisez-la en détail.

Sur la Bourse, Glass, et non OnTick(), est la "tête" de tout.
 
prostotrader:

1. Rien ne ralentit et rien ne ralentira.

Vous avez reçu une solution toute prête, qu'il suffit d'adapter à vos besoins.

L'événement OnTick() n'affiche pas tous les changements dans le verre, c'est-à-dire que tous les ticks ne sont pas pris en compte !

Voici un exemple simple que vous pouvez vérifier

2. Pour les instruments négociables en bourse (déjà écrit pour les actions)

Ajouté

Si vous avez décidé de "ramper" du FOREX vers la Bourse, je vous recommande de trouver le sujet dans cette page.

section "Guide du débutant" et lisez-la en détail.

Sur la Bourse, Glass, et non OnTick(), est la "tête" de tout.

1. Vous avez raison. L'événement OnTick() n'est pas exactement lié à l'événement OnBookEvent().
Le premier événement gère l'arrivée de nouveaux ticks - changement de cotation, opérations de change.
Le deuxième événement gère le changement de tick, qui ne se traduit pas toujours par une transaction boursière.
Comme l'opération d'échange ne passe pas nécessairement par le téléscripteur.
. C'est-à-dire que nous pouvons dire que le premier événement se réfère au téléscripteur de l'opération, et que le second événement se réfère au téléscripteur.

2. Ce qu'il faut utiliser pour l'analyse et la prise de décision - la bande de transactions ou le curseur ou les deux, dépend de l'algorithme de trading.

Il semble que je doive utiliser l'événement OnTimer() avec une période de quelques millisecondes pour analyser la bande.
Je vais continuer à expérimenter.

 
Vladimir Mikhailov:

1. Vous avez raison. L'événement OnTick() n'est pas exactement lié à l'événement OnBookEvent().
Le premier événement gère l'arrivée de nouveaux ticks - changement de cotation, transactions boursières.
Le deuxième événement gère le changement de tick, qui ne se traduit pas toujours par une transaction boursière.
Un échange ne doit pas non plus nécessairement passer par la coupe.
C'est-à-dire que nous pouvons dire que le premier événement se réfère à la bande des métiers et le second à la coupe.

2. Le choix de l'analyse et de la prise de décision - le téléscripteur de la transaction, le marché ou les deux - dépend de l'algorithme de négociation.

Il semble que je doive utiliser l'événement OnTimer() avec une période de quelques millisecondes pour analyser la tranche d'affaires.
Je vais continuer à expérimenter.

L'utilisation d'un minuteur n'est pas une bonne idée.

Vous devez décider ce que vous voulez : travailler en temps réel ou par minuterie...

Votre tête est dans un état de confusion.

Tout changement dans la pile est un tick, ce qui inclut le "flux commercial".

Lorsque OnBookEvent() est déclenché, cela signifie que :

1. Un échange a eu lieu ou

2. Un nouvel ASK s'est produit ou

3. Un nouveau Bid est apparu, ou

4. Quelqu'un a retiré sa commande en cours ou

5. 5. demander le changement de volume ou

6 Le volume du Bid a changé

Tout ceci est reflété dans OnBookEvent() .....

Bonne chance !

Ajouté

Contrairement au FOREX, où vous négociez avec un ordinateur DC,

Sur le FOREX, vous avez de vrais adversaires (particuliers et entreprises) !

La bourse ne fait que "coupler" vos ordres(pas gratuitement, bien sûr :) ) .

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
<br / translate="no">

Contrairement au FOREX, où vous négociez avec un ordinateur DC,

Sur le FOREX, vous avez de vraies contreparties (de vrais individus et entreprises) !

La Bourse ne fait que "coupler" vos ordres(pas gratuitement, bien sûr :) ) .

Avez-vous entendu parler de l'ECN ?

 
Aleksey Mavrin:

Avez-vous déjà entendu parler de l'ECN ?

)))))))))

En savoir plus sur l'ECN


Обсуждение статьи "Выцарапываем профит до последнего пипса"
Обсуждение статьи "Выцарапываем профит до последнего пипса"
  • 2019.07.25
  • www.mql5.com
Опубликована статья Выцарапываем профит до последнего пипса: Автор: fxsaber...
 
Aleksey Mavrin:

Jamais entendu parler de l'ECN ?

Pourquoi es-tu venu ici ?

Continuez à chercher le graal sur le FOREX...

 
prostotrader:

Pourquoi es-tu venu ici ?

Continuez à chercher le graal sur le FOREX...

Quel est votre territoire privé ici ?

Et ce n'est pas poli de dire aux gens que vous ne savez pas quoi faire. Cela montre un peu le faible niveau de votre développement.

 
Vladimir Mikhailov:

Aux développeurs - que signifie le bit 9 dans le drapeau de tique ?

Je ne sais pas pour le bit 9, la question portait sur le bit 7 non documenté :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Nouvelle version de MetaTrader 5 build 1930 : fenêtres de graphiques flottants et bibliothèques .Net dans MQL5

Slava, 2018.12.04 11:09

Alain Verleyen:

2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 1 tick : 2018.12.03 00 : 52 : 27.671 1.13338 / 1.13354 / 0.00000 0 flags :230
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 2 tick : 2018.12.03 00 : 52 : 27.743 1.13335 / 1.13348 / 0.00000 0 flags :230
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 3 tick : 2018.12.03 00 : 52 : 27.821 1.13327 / 1.13343 / 0.00000 0 flags :230
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 4 tick : 2018.12.03 00 : 52 : 27.888 1.13326 / 1.13343 / 0.00000 0 flags :226
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 5 tick : 2018.12.03 00 : 52 : 27.965 1.13327 / 1.13345 / 0.00000 0 flags :230
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 6 tick : 2018.12.03 00 : 52 : 28.194 1.13328 / 1.13346 / 0.00000 0 flags :230
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 7 tick : 2018.12.03 00 : 52 : 28.265 1.13328 / 1.13346 / 0.00000 0 flags : 96
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 8 tick : 2018.12.03 00 : 52 : 28.327 1.13326 / 1.13344 / 0.00000 0 flags :230
2018.12.03 09 : 58 : 06.898 TicksInfo (EURUSD, M5) EURUSD : 9 tick : 2018.12.03 00 : 52 : 28.405 1.13326 / 1.13344 / 0.00000 0 flags : 96
2018.12.03 09 : 58 : 06.899 TicksInfo (EURUSD, M5) EURUSD : 10 tick : 2018.12.03 00 : 52 : 28.809 1.13326 / 1.13344 / 0.00000 0 flags : 96
2018.12.03 09 : 58 : 06.899 TicksInfo (EURUSD, M5) EURUSD : 11 tick : 2018.12.03 00 : 52 : 29.289 1.13326 / 1.13344 / 0.00000 0 flags : 96

Apparemment le drapeau est bit par bit 7 (valeur 128,non documenté), est-il possible de connaître la valeur ?

Il s'agit d'un indicateur de service qui est activé par le datafeed si le drapeau TICK_FLAG_BID n'a pas été activé pour une raison quelconque, alors que le tick doit être appliqué à une barre.


Raison: