Caractéristiques du langage mql5, subtilités et techniques - page 29

 
Andrey Dik:

Lors des tests, les données minute sont considérées comme plus fiables.

Les barres de minutes sont-elles plus fiables ? Les données à cocher ne sont-elles pas le dernier recours ? Pourquoi avons-nous besoin de données réelles si elles ne sont pas prises en compte ?

J'avais l'habitude de faire ça naïvement : je testais sur des barres minutes, puis sur des ticks, puis sur des ticks réels comme dernière vérification de précision. Je comprends maintenant que le troisième contrôle n'a pas beaucoup de sens.


Les jambes poussent à partir d'ici

https://www.mql5.com/ru/forum/188047

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
Vladimir Karputov:


Pas besoin de sortir la phrase de son contexte. La phrase ressemble à ceci :

Comme vous le voyez, si vous n'essayez pas de le manipuler, vous vous rendrez compte que vous avez mal interprété la référence.

Je ne manipulais rien. L'aide indique clairement que les barres des minutes sont d'une importance capitale. En l'absence de données tick - les ticks sont générés selon les barres de minutes.

A mon avis, les TFs minutes devraient être calculées à partir des ticks réels dans le mode "Real ticks", sinon ce mode n'a aucun sens.

 
Andrey Dik:

A mon avis, les TFs minutes doivent être formées à partir de ticks réels en mode "Real ticks", sinon ce mode n'a pas beaucoup d'intérêt.


orientant vers l'historique des minutes et conduisant à une situation où les tics réels du 02.04.17 au 08.04.17

2017.04.08 18:06:17.780 сколько тиков (GOLD-9.17,H1)    Колво тиков за 2017.04.02 00:00:00 = 116844

et le testeur n'utilise les ticks que pour 88 barres minutes existantes. tous les autres ticks n'existent que quelque part dans ...

2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: 5918 ticks, 88 bars generated. Environment synchronized in 0:00:00.070. Test passed in 0:00:03.125 (including ticks preprocessing 0:00:00.070).
2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: total time from login to stop testing 0:00:03.195 (including 0:00:02.944 for history data synchronization)
2017.04.08 18:05:17.263 Core 1  166135 total ticks for all symbols
2017.04.08 18:05:17.263 Core 1  GOLD-9.17: generate 5918 ticks in 0:00:00.020, passed to tester 5918 ticks
 
Journal du testeur
GOLD-6.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-6.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-6.17,H1: 145777 ticks, 70 bars generated. Environment synchronized in 0:00:01.388. Test passed in 0:00:00.062 (including ticks preprocessing 0:00:00.031).

Et voici le nombre de tics réels


C'est Metaquotes-Demo.

Il s'avère que les ticks réels sont de 147700 pendant la semaine, alors que le testeur dans son mode le plus précis montre 145777 ticks de type inconnu.

 
fxsaber:
Journal du testeur

Et voici le nombre de tics réels


C'est Metaquotes-Demo.

Il s'avère que les ticks réels sont de 147700 pendant la semaine, alors que le testeur dans son mode le plus précis donne 145777 ticks inconnus.


Le testeur utilise moins de tics qu'il ne l'était en réalité, car il se concentre sur eux.

Il vaut mieux regarder les contrats à long terme, l'image y est plus claire.

 
kaus_bonus:


Il manque plusieurs barres M1 et comme le point de repère se trouve sur celles-ci, le testeur utilise moins de ticks qu'il ne l'était réellement.

Les barres M1 se forment lorsqu'il y a un prix flipper. S'il n'y en a pas, il n'y a pas de barre. Et le fait qu'il y avait des ticks d'achat et de vente à ce moment-là est ignoré !

Le problème ne se situe donc pas seulement au niveau du testeur, mais aussi au niveau de l'algorithme de formage des barres.

Vous feriez mieux de regarder les contrats à long terme, la situation y est plus claire.

Exactement à long terme, cette situation, comme je l'ai écrit ci-dessus, se produit le plus souvent.

Vous avez raison, je vais juste démontrer la situation plus clairement.

GOLD-9.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-9.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-9.17,H1: 5918 ticks, 39 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:00:00.046.

Les ticks réels sont 116844, les ticks du testeur dans le mode le plus précis sont 5918. Un modeste 20 fois moins.


SZY La réfutation d'une hypothèse selon laquelle la situation donnée est développée en raison du saut par le testeur de tics identiques.

#include <TypeToBytes.mqh>

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2017.04.03' * 1000, D'2017.04.08' * 1000);
  
  int Count = 1;
  
  for (int i = 1; i < Amount; i++)
    if (_R(Ticks[i]) != Ticks[i - 1])
      Count++;
      
  Print(TOSTRING(Amount) + TOSTRING(Count));
}
Résultat
Test2 (GOLD-9.17,H1)    Amount = 116844 Count = 116840

Seuls 4 tics identiques ont pu être manqués.

 
Traduction de MqlTick en chaîne de caractères

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

Bibliothèques : Price_Compare

fxsaber, 2016.10.19 17:18

string GetTickFlag( uint tickflag )
{
  string flag = "";

#define TICKFLAG_MACRO(A) flag += ((bool)(tickflag & TICK_FLAG_##A)) ? " TICK_FLAG_" + #A : "";
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

  if (flag == "")
    flag = " FLAG_UNKNOWN (" + (string)tickflag + ")";
    
  return(flag);
}

#define TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  return(TOSTRING(time) + "." + (string)IntegerToString(Tick.time_msc %1000, 3, '0') +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(TickToString(Tick));
}
Résultat
time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
fxsaber:
Traduction de MqlTick en chaîne de caractères
Résultat

Indéchiffrable:

time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
Dennis Kirichenko:

Indéchiffrable:

Je ne comprends pas. Je l'utilise moi-même pour imprimer toutes les structures simples, les types et les tableaux.

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

MetaEditor build 1463

fxsaber, 2016.11.10 10:42

class PRINTCLASS
{
public:  
  template <typename T>
  static void MyPrint( const T &Value )
  {
    T Array[1];
    
    Array[0] = Value;
    
    ::ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN);
  }
  
  template <typename T>
  static void MyPrint( const T Value )
  {
    ::Print(Value);
  }

  template <typename T>
  static void MyPrint( const T &Value[] )
  {
    ::ArrayPrint(Value);
  }
};

#define Print(A) PRINTCLASS::MyPrint(A)

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(Tick);
}

Le résultat
             [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]
2017.04.07 23:58:18  110620  110640  110630        1 1491609498000      30

Tout dépend des objectifs.
 
Les commentaires non liés à ce sujet ont été déplacés vers "Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes".