Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Ansichten:
78
Rating:
(6)
Veröffentlicht:
\MQL5\Scripts\fxsaber\ \MQL5\Include\fxsaber\TicksShort\
Table.mqh (100 KB) ansehen
MQL5 Freelance Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Diese Bibliothek implementiert die Arbeit mit dem Tick-Speicherformat, das ein gutes Verhältnis zwischen Leistung (Lesen/Schreiben) und Größe aufweist.


Format.

Es werden nur die folgenden Felder desursprünglichen MqlTickgespeichert:

struct MqlTick
  {
   datetime     time;          // Zeitpunkt der letzten Preisaktualisierung
   double       bid;           // Aktueller Preis Gebot
   double       ask;           // Aktueller Briefkurs
   double       last;          // Aktueller Preis des letzten Geschäfts (Last)
   ulong        volume;        // Volumen für den aktuellen Preis Letzte
   long         time_msc;      // Zeitpunkt der letzten Preisaktualisierung in Millisekunden
   uint         flags;         // Tick-Flags
   double       volume_real;   // Volumen für den aktuellen Preis Zuletzt mit erhöhter Genauigkeit
  };


Beispiele.

Sie können die Methoden der Bibliothek im MetaEditor mit der Tastenkombination ALT+M aufrufen. Nachfolgend finden Sie einige Beispiele für deren Verwendung.


Schreiben/Lesen über Datei.

#property script_show_inputs

input datetime inFrom = D'2024.12.01';

#include <fxsaber\TicksShort\TicksShort.mqh> // Kurzes Tick-Speicherformat.

void OnStart()
{        
  MqlTick Ticks[]; // Für Quellenzecken.

  if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0)
  {
    FileSave("Ticks.bin", Ticks); // Wir haben die normalen Ticks gespeichert, damit wir die Dateigrößen vergleichen können.
    
    TICKS_SHORT::Save("TicksShort.bin", Ticks); // Speichern Sie die Ticks in einem komprimierten Format.

    MqlTick Ticks2[]; // Für zerquetschte Zecken.
    TICKS_SHORT::Load("TicksShort.bin", Ticks2); // Herunterladen der Zecken in einem komprimierten Format.
    
    Print("Ratio = " + DoubleToString((double)FileGetInteger("Ticks.bin", FILE_SIZE) /
                                      FileGetInteger("TicksShort.bin", FILE_SIZE), 3));
    
    Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks2)); // Verglichen.
  }
}

Das obige Skript speichert Ticks in eine neue Formatdatei und lädt sie aus einer Datei.


Ergebnis.

TicksShort_SaveLoad (EURUSD,M1) Ratio = 10.000
TicksShort_SaveLoad (EURUSD,M1) Correct = true

Die Ausgabe im Protokoll zeigt, dass die Komprimierungsrate 10-mal ist. Und wenn die Komprimierung aufgehoben wird, stimmen die Ticks mit den ursprünglichen Ticks überein.


Leistung.

#property script_show_inputs

input datetime inFrom = D'2024.12.01';

#include <fxsaber\TicksShort\TicksShort.mqh> // Kurzes Tick-Speicherformat.

// Gibt die Größe des Arrays in Bytes zurück.
template <typename T>
ulong GetSize( const T &Array[] ) { return((ulong)sizeof(T) * ArraySize(Array)); }

// Leistungskriterium für das Komprimierungsformat.
template <typename T1, typename T2>
double Criterion( const T1 &Decompression[], const T2 &Compression[], const ulong Interval )
{
  const double Performance = (double)ArraySize(Decompression) / Interval;
  
  return(Performance * ((double)GetSize(Decompression) / GetSize(Compression)));
}

void OnStart()
{        
  MqlTick Ticks[]; // Für Quellenzecken.

  if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0)
  {
    TICK_SHORT Ticks2[]; // Für komprimierte Ticks.
    
    ulong Interval = GetMicrosecondCount();
    TICKS_SHORT::Compress(Ticks, Ticks2); // Gequetscht.
    Interval = GetMicrosecondCount() - Interval;
    const double Performance = (double)ArraySize(Ticks) / Interval;
    
    Print("Compress performance: " + DoubleToString(Performance, 1) + " Ticks (millions)/sec.");
    Print("Compress performance criterion: " + DoubleToString(Criterion(Ticks, Ticks2, Interval), 1));
    
    MqlTick Ticks3[]; // Für zerquetschte Zecken.
    
    ulong Interval2 = GetMicrosecondCount();
    TICKS_SHORT::Decompress(Ticks2, Ticks3); // Entkrampft.
    Interval2 = GetMicrosecondCount() - Interval2;
    const double Performance2 = (double)ArraySize(Ticks3) / Interval2;
    
    Print("Decompress performance: " + DoubleToString((double)ArraySize(Ticks3) / Interval2, 1) + " Ticks (millions)/sec.");
    Print("Decompress performance criterion: " + DoubleToString(Criterion(Ticks3, Ticks2, Interval2), 1));
    
    Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks3)); // Verglichen.
  }
}

Dieses Skript konvertiert ein Quell-Array von Ticks in ein komprimiertes Array und zurück. Die Daten zur Leistung/Effizienz werden ausgegeben.


Ergebnis.

TicksShort_Performance (EURUSD,M1)      Compress performance: 67.7 Ticks (millions)/sec.
TicksShort_Performance (EURUSD,M1)      Compress performance criterion: 677.1
TicksShort_Performance (EURUSD,M1)      Decompress performance: 42.1 Ticks (millions)/sec.
TicksShort_Performance (EURUSD,M1)      Decompress performance criterion: 420.9
TicksShort_Performance (EURUSD,M1)      Correct = true

Schreib- und Lesevorgänge werden unter Beibehaltung der ursprünglichen Informationen mit einer Geschwindigkeit von über 40 Millionen Ticks pro Sekunde durchgeführt.


Alternativen.

https://www.mql5.com/en/code/30791

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/61126

Symbol Swap Panel Utility Symbol Swap Panel Utility

Symbol Swap Panel: Wechseln Sie mühelos das aktive Symbol in Ihrem Chart und fügen Sie gleichzeitig das neue Symbol zu Market Watch hinzu. Dieses Tool gewährleistet eine nahtlose Integration und den Zugang zu Echtzeit-Marktdaten und optimiert Ihren Handels-Workflow.

Checking the server time changes due to the daylight saving time (DST) changeover Checking the server time changes due to the daylight saving time (DST) changeover

Leider musste ich feststellen, dass einige Broker aufgrund der Sommerzeit etwas schlampig mit der Umstellung der Serverzeit umgehen, was ich nicht erwartet hatte und was mich sehr überrascht hat. Hier ist ein Skript, mit dem jeder seinen Broker überprüfen kann.

Auto Tp Auto Tp

Auto TP und SL setzen: Die Funktion "Auto TP und SL setzen" (Take Profit und Stop Loss) ist ein entscheidendes Instrument in jeder Handelsstrategie, um das Risiko- und Ertragsmanagement zu automatisieren. Sie ermöglicht es Händlern, feste Kursniveaus zu definieren, bei denen ein Handel automatisch geschlossen werden soll, um entweder Gewinne zu sichern (TP) oder Verluste zu begrenzen (SL), wodurch die Notwendigkeit einer ständigen manuellen Überwachung entfällt. Wenn diese Funktion aktiviert ist, enthält jede Position, die Sie eröffnen, automatisch ein vordefiniertes Take Profit- und Stop Loss-Niveau, das auf Ihren benutzerdefinierten Parametern basiert, wie z. B. einer bestimmten Anzahl von Pips, einem bestimmten Prozentsatz des Saldos oder technischen Niveaus. Dies spart nicht nur Zeit, sondern stellt auch sicher, dass Ihre Trades vor plötzlichen Marktbewegungen und emotionalen Entscheidungen geschützt sind.

Monthly VWAP Monthly VWAP

Der monatliche VWAP (volumengewichteter Durchschnittspreis) ist ein wesentlicher MQL5-Indikator, der den volumengewichteten Durchschnittspreis für jeden Handelsmonat berechnet und anzeigt. Er ist ein leistungsfähiges Werkzeug, um die langfristige Marktstimmung zu verstehen, den wichtigsten monatlichen Marktwert zu identifizieren und strategische Entscheidungen zu treffen.