und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 78
- Rating:
- Veröffentlicht:
-
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.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/61126

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.

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 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.

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.