Test des "CopyTicks". - page 39

 
 
fxsaber:

Il ne doit pas être lent et dépendant du serveur commercial.

Vitesse de livraison : le terminal stocke 4096 derniers ticks pour chaque symbole dans le cache pour un accès rapide (pour les symboles avec une statistique courante - 65536 ticks), les demandes à ces données sont plus rapides. Lorsqu'elle demande des ticks de la session de trading actuelle en dehors du cache, CopyTicks() accède aux ticks déjà stockés dans la mémoire du terminal, ces requêtes prennent plus de temps à s'exécuter. Les plus lentes sont les demandes de ticks pour les autres jours, car dans ce cas les données sont lues depuis le disque.

Si les terminaux sont sur le même disque, vous avez raison.

Avez-vous effectué plusieurs tests ? Vous rencontrez constamment des retards sur un certain serveur ? Juste au cas où le disque était occupé par une autre opération au moment du test...

 
Alexey Kozitsyn:

Si les terminaux sont sur le même lecteur, vous avez raison.

Avez-vous effectué plusieurs tests ? La latence est-elle constante sur un serveur particulier ? Juste au cas où le lecteur était occupé par une autre opération au moment du test...

C'est reproductible à 100%. Le terminal est le même.

 

Comment obtenir des ticks dans l'indicateur OnDeinit ? Je veux obtenir des ticks, qui existent déjà dans les fichiers tkc et qui sont donnés presque instantanément. Mais comment déterminer quelles tiques sont là et lesquelles ne le sont pas ?

Derrière tout l'attrait apparent de la simplicité de CopyTicks, il y a en fait des pièges cachés, qui sont impossibles à éviter en raison de la fonctionnalité limitée pour le bien de cet attrait extérieur à nouveau.

 
fxsaber:

Comment obtenir des ticks dans l'indicateur OnDeinit ? Je veux obtenir des ticks, qui existent déjà dans les fichiers tkc et qui sont donnés presque instantanément. Mais comment déterminer quelles tiques sont là et lesquelles ne le sont pas ?

Derrière tout l'attrait apparent de la simplicité de CopyTicks, il y a en fait des pièges cachés, qui sont impossibles à éviter en raison de la fonctionnalité limitée pour le bien de cet attrait extérieur à nouveau.

Pourquoi devrions-nous obtenir les ticks dans OnDeinit() ?
 
Alexey Kozitsyn:
Pourquoi obtenir des ticks dans OnDeinit() ?

Vous devez créer un symbole personnalisé et y écrire tout l'historique des ticks convertis (à partir d'une certaine date) qui existe déjà dans les fichiers tkc. Les tics, qui ne sont pas sur la machine, ne sont pas intéressants. Par conséquent, l'indicateur ne devrait pas ralentir à cette tâche. Cependant, CopyTicks ne permet pas de recevoir des ticks de cette manière.

 
Essayer d'obtenir des ticks sur un autre symbole dans OnInit
#include <Trade\Trade.mqh>

bool OpenPos( const string Symb )
{
  static CTrade Trade;
  
  return(Trade.Buy(1, Symb));
}

void OnInit()
{
  Sleep(3600 * 1000);    
  
  OpenPos("NZDUSD"); // Заставляем Агент получить тики по чужому символу

  MqlTick Ticks[];
  
  Print(CopyTicks("NZDUSD", Ticks, COPY_TICKS_INFO, 0, 5)); // 0
  
  ArrayPrint(Ticks);
}


Résultat

MetaTester 5 started on 127.0.0.1:3000
initialization finished
login (build 1653)
template file tester.tpl added. 2398 bytes loaded
38520 bytes of account info loaded
1482 bytes of tester parameters loaded
188 bytes of input parameters loaded
3456 bytes of symbols list loaded
expert file added: Experts\Test4.ex5. 44667 bytes loaded
initial deposit 10000000.00 USD, leverage 1:500
successfully initialized
48 Kb of total initialization data received
Intel Core i7-2700 K  @ 3.50 GHz, 16301 MB
EURUSD: symbol to be synchronized
EURUSD: symbol synchronized, 3464 bytes of symbol info received
EURUSD: history synchronization started
EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
EURUSD: history synchronized from 2016.01.04 to 2017.10.11
EURUSD: ticks synchronization started
EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
EURUSD: history ticks synchronized from 2017.04.03 to 2017.10.10
EURUSD,M1: history cache allocated for 667542 bars and contains 651824 bars from 2016.01.04 00:00 to 2017.09.29 23:59
EURUSD,M1: history begins from 2016.01.04 00:00
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Test4.ex5 from 2017.10.01 00:00 to 2017.10.11 00:00 started
EURUSD : real ticks begin from 2017.04.03 00:00:00
EURUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices
NZDUSD: symbol to be synchronized
NZDUSD: symbol synchronized, 3464 bytes of symbol info received
NZDUSD: history synchronization started
NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.000
NZDUSD: history synchronized from 2016.01.04 to 2017.10.11
NZDUSD: ticks synchronization started
NZDUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
NZDUSD: history ticks synchronized from 2017.10.02 to 2017.10.10
2017.10.01 01:00:00   instant buy 1.00 NZDUSD at 0.72043 (0.72017 / 0.72043)
2017.10.01 01:00:00   deal #2 buy 1.00 NZDUSD at 0.72043 done (based on order #2)
2017.10.01 01:00:00   deal performed [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   order performed buy 1.00 at 0.72043 [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   CTrade::OrderSend: instant buy 1.00 NZDUSD at 0.72043 [done at 0.72043]
2017.10.01 01:00:00   true
2017.10.01 01:00:00   0
NZDUSD : real ticks begin from 2017.10.02 00:00:00
NZDUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices


C'est-à-dire qu'il n'y a pas de données de tique au début sur le personnage de quelqu'un d'autre. Et les ticks sont générés dans la base de données lorsque OnTick apparaît. Est-ce que c'est conçu de cette façon ou les ticks pour les personnages aliens devraient être disponibles, ainsi que pour le symbole de test principal ?

 
Que signifie cette citation de la Documentation ?

Примечание

La fonction CopyTicksRange() est conçue pour demander les ticks d'une plage strictement spécifiée, par exemple, pour un jour particulier de l'historique. Alors que CopyTicks()permet despécifier uniquement la date de début, par exemple - pour obtenir tous les ticks du début du mois au moment actuel.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 

CopyTicks ne fonctionne qu'avec les caractères qui sont inclus dans la Market Review. Et cela a toujours été logique avant l'avènement des symboles personnalisés.

Les symboles personnalisés ont un vaste champ d'application et il est loin d'être toujours nécessaire d'utiliser ces symboles dans le Market Watch. Cependant, il est parfois nécessaire de récupérer une partie de l'historique des tics via CopyTicks.

Par conséquent, veuillez désactiver le retour d'erreur CopyTicks pour les symboles personnalisés si le symbole personnalisé n'est pas sélectionné dans Market Watch.

 
Pour les caractères personnalisés, pour connaître le nombre total de ticks, vous devez utiliser CopyTicksRange(Symb, Ticks) ( plus this) et surveiller la taille du tableau. Mais c'est du gaspillage !