Bibliothèque: MultiTester - page 50

 

Mon message a été créé dans le mauvais fil, il devrait être ici :

 
Stanislav Korotky #:

Pourquoi 30 et non 31 ? Le titre semble être pour 31 jours.

Les indices de 0 à 30 sont 31.

 
fxsaber #:

Les indices de 0 à 30 sont de 31 pièces.

Exactement, de 0 à 30 inclus - un total de 31.

 
Stanislav Korotky #:

Exactement, de 0 à 30 inclus - 31 au total.

Vous avez donc bien compris ?

 
fxsaber #:

Vous l'avez donc bien compris ?

Non. Dans l'en-tête du fichier, pour autant que je puisse voir, le tableau pour 31 jours est réservé, ce qui est logique. Il devrait donc s'agir de 12*31 dans le code. Où est-ce que je me trompe ?

Ou fournissez un lien vers la description du format tkc, où il est dit qu'il doit y avoir (au maximum) 30 jours dans un mois.

 
Stanislav Korotky #:

Non. L'en-tête du fichier, pour autant que je puisse le voir, réserve un tableau pour 31 jours, ce qui est logique.

Je n'ai aucune information sur l'en-tête. Je faisais un caractère personnalisé et je regardais quels octets étaient modifiés. Ce n'est qu'à partir de ces actions que j'ai réalisé ce que certains octets de l'en-tête représentaient.

Il devrait donc s'agir de 12*31 dans le code. Où est-ce que je me trompe ?

Ou fournissez un lien vers la description du format tkc où il est dit qu'il devrait y avoir (au plus) 30 jours dans un mois.

      uint Buffer[64 + 12 * 30];
      uint Read;

      kernel32::ReadFile(handle, Buffer, sizeof(Buffer), Read, 0);

      if (Read == sizeof(Buffer))
        for (int i = 63; i < (sizeof(Buffer) >> 2); i += 12)
          Res += (int)Buffer[i];

La variable i prend 31 valeurs.

 
fxsaber #:

Je n'ai aucune information sur l'en-tête. J'ai créé un symbole personnalisé et j'ai observé quels octets étaient modifiés. Ce n'est qu'à partir de ces actions que j'ai compris ce que certains octets de l'en-tête représentaient.

La variable i prend 31 valeurs.

Il est clair que la boucle compte à partir de 63, mais lors de la description du tableau, 64 sont alloués pour l'en-tête, ce qui équivaut à ce que la boucle commence à partir de -1. Ce n'est pas très intuitif, mais le calcul est juste.

 
fxsaber #:
Obtenir le nombre de ticks d'un mois calendaire d'une manière non standard.

Obtenir des informations sur les ticks historiques disponibles par symbole.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132

string NumToString( ulong Num, const string Delimeter = " " )
{
  string Res = (Num ? NULL : "0");

  while (Num)
  {
    Res = ((Num < 1000) ? (string)(Num % 1000) : ::IntegerToString(Num % 1000, 3, '0')) +
          ((Res == NULL) ? NULL : Delimeter) + Res;

    Num /= 1000;
  }

  return(Res);
}

string TicksDataToString( const string Symb )
{
  datetime From = 0;
  datetime To;
  
  const int Amount = MTTESTER::GetAmountFileTicks(From, To, Symb);
  const string SizeStr = ::DoubleToString((long)Amount * sizeof(MqlTick) / (double)(1 << 20), 3) + " MB";
  
  return(Symb + ": " + NumToString(Amount) +" ticks (MqlTick[] = " + SizeStr + ")" +
         (From ? ", " + ::TimeToString(From) + " - " + ::TimeToString(To) +
                 ", " + GetDiffTime(From, To) // https://www.mql5.com/ru/forum/170952/page308#comment_57872629
               : NULL));  
}

void OnStart()
{
  const int Size = SymbolsTotal(true);
  
  for (int i = 0; i < Size; i++)
    Print(IntegerToString(i + 1, 3, '0') + "/" + IntegerToString(Size, 3, '0') +
          ". " + TicksDataToString(SymbolName(i, true)));
}


Résultat.

001/045. EURUSD: 473 689 648 ticks (MqlTick[] = 27104.739 MB), 2011.12.01 00:00 - 2025.09.01 00:00, 13 Years 9 Months
002/045. GBPUSD: 508 981 458 ticks (MqlTick[] = 29124.153 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
003/045. USDCAD: 402 756 151 ticks (MqlTick[] = 23045.892 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
004/045. USDCHF: 353 129 808 ticks (MqlTick[] = 20206.250 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
005/045. USDJPY: 482 177 651 ticks (MqlTick[] = 27590.427 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
006/045. AUDCAD: 446 882 461 ticks (MqlTick[] = 25570.820 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
007/045. AUDCHF: 387 336 224 ticks (MqlTick[] = 22163.557 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months


Vous pouvez voir la cause de l'erreur 4004.

 
MTTester.mqh ne compile pas. Je suppose que c'est à cause de la récente version de MT5 où il y a pas mal de choses qui soudainement ne compilent plus. Est-ce qu'il y a une chance que vous puissiez fournir une version mise à jour de cette bibliothèque ? Il semble que ce soit une bibliothèque extraordinaire.
 
Goesta Torsten Hulden #:
MTTester.mqh n'est pas compilé.

Une version à jour n'est disponible que sur la page en russe de la bibliothèque.