Test des "CopyTicks". - page 20

 

Quand non-zéro De l'intérieur CopyTicks cherche (probablement une recherche binaire) un endroit pour commencer - index dans la base interne.

Veuillez ajouter une fonction qui renvoie l'index dans la base de données par heure. Il sera alors possible de résoudre cette tâche de manière optimale

fxsaber:
Quel est l'algorithme optimal (le plus rapide) pour obtenir les ticks de_time à_time ?
 

Pour de bonnes raisons, le sujet "Qu'est-ce qu'une tique ?" a été supprimé. Je vais donner certaines de mes réponses à partir de l 'histoire qui a survécu.

В парадигме MT тик - это то, что пришло от биржи. Единица стрима(-ов). Поэтому два подряд идущих тика могут полностью совпадать (MqlTick), но при этом не обозначать одно и то же событие. Помимо MqlTick-данных есть еще номер тика, который не показывается в MT. И есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.

deux ticks consécutifs (provoquant un événement Tick/Calculate) peuvent être identiques dans la structure MqlTick (tous les prix, volumes, temps et drapeaux sont égaux), mais sont en réalité différents. Bid/Ask est toujours un multiple de TickSize. Last (hors bourse) peut ne pas être un multiple de TickSize. TickSize peut être plusieurs fois plus grand que Point (regardez RTS, par exemple). Il n'est donc pas tout à fait correct de parler de Point dans ce cas.

Cela peut être utile. SymbolInfoTick est une fonction non synchronisée. Cela signifie qu'il peut renvoyer différents ticks à différents endroits de OnTick. De plus, même si vous appelez SymbolInfoTick au début de OnTick, le tick résultant ne sera pas l'initiateur de l'événement Tick pour lequel OnTick est déclenché. Les champs de sa structure MqlTick ne seront pas égaux au tick provenant de la bourse, car ces champs sont synthétisés par le terminal lui-même et sont égaux aux valeurs Marketwatch.

 
Pourquoi les types INFO du testeur de forex ne sont-ils pas les mêmes que les types ALL ?
 
Exécution du conseiller expert dans le testeur de stratégie
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

Résultat

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

Devrait renvoyer zéro, mais renvoie un. Ticks[] ne change pas. Bug !

 
fxsaber:
Lancement d'un conseiller expert dans le testeur de stratégie
void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    MqlTick Ticks[1];
    
    if (SymbolInfoTick(_Symbol, Ticks[0]))  
      Print(CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, Ticks[0].time_msc + 1)); // Сколько тиков со временем больше последнего
    FirstRun = false;
  }
}

Résultat

2016.10.15 13:23:57.689 2016.10.12 00:00:16   1

Il devrait renvoyer zéro, mais il renvoie un. Dans ce cas, Ticks[] ne change pas. Bug !

Est-ce que ça pourrait être le week-end ?

De l'aide. CopyTicks La fonction récupère le ticks_array des ticks accumulés par le terminal pendant la session de travail en cours.

 
Alexey Volchanskiy:

Est-ce que ça pourrait être le week-end ?

Dans le fichier d'aide. CopyTicks La fonction récupère les ticks accumulés par le terminal pendant la session de travail en cours dans le tableau ticks_array.

Il y a un bug dans le testeur.
 

Problème de performance de CopyTicks.

Robo

Network 'xxx': authorized on RoboForexEU-MetaTrader 5 through Europe #1 (ping: 56.66 ms)

BCS

Network 'xxx': authorized on BCS-MetaTrader5 through Access Server #2 (ping: 45.53 ms)



Il s'agit des données de l'indicateur tick. Dans les deux cas, il y a 2 à 3 mille tiques téléchargées. Mais en robo, il est plus d'un ordre de grandeur plus rapide.

J'ai vu les mêmes vitesses sur le marché des changes dans la journée - le marché était alors plus agile. Copitix semble ralentir une veille active du marché.

Le seul graphique et le seul indicateur dans les deux cas. Et kopitix avait certainement déjà des citations téléchargées dans la base de données/cache.

 

1) les piles étaient-elles sur les deux ?

2) les ticks de commerce et d'information ont-ils été séparés dans leur fil d'origine? Les fils complexes nécessitent un nouveau calcul et une émission simple.

3) quelle était la demande réelle ?

4) par combien de requêtes les résultats ont-ils été validés ? Suivi des règles d'essai et de la manière exacte dont elles ont été suivies : prise en compte du démarrage à froid, élimination des valeurs aberrantes, répétabilité des résultats par série, code de reproduction.

De manière générale, les résultats numériques doivent être précédés d'un code exact afin que chacun puisse les reproduire. Sinon, il est inutile d'en discuter.

 
Renat Fatkhullin:

1) les piles étaient-elles sur les deux ?

2) les ticks de commerce et d'information ont-ils été séparés dans leur fil d'origine? Les fils complexes nécessitent un nouveau calcul et une émission simple.

3) quelle était la demande réelle ?

4) par combien de requêtes les résultats ont-ils été validés ? Suivi des règles d'essai et de la manière exacte dont elles ont été suivies : prise en compte du démarrage à froid, élimination des valeurs aberrantes, répétabilité des résultats par série, code de reproduction.

De manière générale, les résultats numériques doivent être précédés d'un code exact afin que chacun puisse les reproduire. Sinon, il n'y a pas lieu d'en discuter.

Je vous ai donné un lien vers le code exact.

  1. Il n'y avait pas de gobelets.
  2. Uniquement les types INFO.
  3. COPY_TICKS_INFO avec from > 0.
  4. Voir l'indicateur sur le lien en fonctionnement. La répétabilité est complète. Démarrage à froid exclu. Émissions similaires.
 

Nous allons vérifier.

Mais sur l'absence d'un gobelet dans l'un des serveurs, il y a de gros doutes. Le fait que le culbuteur ne soit pas rendu n'a aucune importance. Si un symbole en dispose, ses données sont toujours présentes et un algorithme d'émission plus complexe fonctionne lors de la demande de ticks.

Raison: