Bibliotheken: MultiTester - Seite 50

 

Mein Beitrag wurde im falschen Thema erstellt, er sollte hier stehen:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Neue Version von MetaTrader 5 build 5200: OpenBLAS-Erweiterung und erhöhte Kontrolle in MQL5

Stanislav Korotky, 2025.09.05 11:13 AM

Warum 30 und nicht 31? Die Überschrift scheint für 31 Tage ausgelegt zu sein.

uint Buffer[64 + 12 * 30];

Und wenn Krypto?

 
Stanislav Korotky #:

Warum 30 und nicht 31? Die Schlagzeile scheint für 31 Tage zu sein.

Die Indizes von 0 bis 30 sind 31.

 
fxsaber #:

Die Indizes von 0 bis 30 sind 31 Stück.

Genau, von 0 bis 30, einschließlich - insgesamt 31.

 
Stanislav Korotky #:

Genau, 0 bis 30, einschließlich - insgesamt 31.

Also haben Sie das richtig verstanden?

 
fxsaber #:

Sie haben es also richtig verstanden?

Nein. Im Dateikopf ist, soweit ich sehen kann, das Feld für 31 Tage reserviert, was logisch ist. Im Code sollte es also 12*31 sein. Wo liege ich falsch?

Oder geben Sie einen Link zur Beschreibung des tkc-Formats an, in der steht, dass ein Monat (maximal) 30 Tage haben sollte.

 
Stanislav Korotky #:

Nein. Soweit ich sehen kann, wird im Dateikopf ein Feld für 31 Tage reserviert, was sinnvoll ist.

Ich habe keine Informationen über den Header. Ich habe ein benutzerdefiniertes Zeichen erstellt und nachgesehen, welche Bytes geändert wurden. Erst dadurch wurde mir klar, wofür bestimmte Bytes im Header zuständig sind.

Im Code sollte es also 12*31 sein. Wo liege ich falsch?

Oder geben Sie mir einen Link zur Beschreibung des tkc-Formats, wo es heißt, dass ein Monat (höchstens) 30 Tage haben sollte.

      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];

Die Variable i nimmt 31 Werte an.

 
fxsaber #:

Ich habe keine Informationen über den Header. Ich habe ein benutzerdefiniertes Symbol erstellt und beobachtet, welche Bytes geändert wurden. Erst dadurch habe ich erkannt, wofür bestimmte Bytes im Header zuständig sind.

Die Variable i kann 31 Werte annehmen.

Offensichtlich zählt die Schleife ab 63, aber bei der Beschreibung des Arrays werden 64 für den Header zugewiesen, was gleichbedeutend damit ist, dass die Schleife bei -1 beginnt. Nicht sehr intuitiv, aber die Mathematik passt.

 
fxsaber #:
Ermitteln Sie die Anzahl der Ticks in einem Kalendermonat auf eine nicht standardisierte Weise.

Abrufen von Informationen über verfügbare historische Ticks nach Symbolen.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/de/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)));
}


Ergebnis.

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


Sie können die Ursache des Fehlers 4004 sehen.

 
MTTester.mqh lässt sich nicht kompilieren. Ich nehme an, das liegt an dem neuen MT5-Build, bei dem sich einige Dinge plötzlich nicht mehr kompilieren lassen. Besteht die Möglichkeit, dass Sie eine aktualisierte Version dieser Bibliothek zur Verfügung stellen? Es scheint eine erstaunliche Bibliothek zu sein.
 
Goesta Torsten Hulden #:
MTTester.mqh ist nicht kompiliert.

Aktuelle Version nur auf der russischsprachigen Seite der Bibliothek.