Unisciti alla nostra fan page
- Visualizzazioni:
- 19
- Valutazioni:
- Pubblicato:
-
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Questa libreria implementa il lavoro con il formato di memorizzazione tick, che ha un buon rapporto tra prestazioni (lettura/scrittura) e dimensioni.
Formato.
Vengono memorizzati solo i seguenti campi delMqlTick originale:
struct MqlTick { datetime time; // Ora dell'ultimo aggiornamento dei prezzi double bid; // Prezzo corrente Bid double ask; // Prezzo corrente richiesto double last; // Prezzo attuale dell'ultima transazione (Last) ulong volume; // Volume per il prezzo corrente Ultimo long time_msc; // Ora dell'ultimo aggiornamento del prezzo in millisecondi uint flags; // Bandiere di spunta double volume_real; // Volume per il prezzo corrente Ultimo con maggiore precisione };
Esempi.
I metodi della libreria possono essere visualizzati in MetaEditor con il tasto di scelta rapida ALT+M. Di seguito sono riportati alcuni esempi del loro utilizzo.
Scrittura/lettura tramite file.
#property script_show_inputs input datetime inFrom = D'2024.12.01'; #include <fxsaber\TicksShort\TicksShort.mqh> // Formato di memorizzazione dei tick brevi. void OnStart() { MqlTick Ticks[]; // Per le zecche di origine. if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0) { FileSave("Ticks.bin", Ticks); // Abbiamo salvato i tick normali per poter confrontare le dimensioni dei file. TICKS_SHORT::Save("TicksShort.bin", Ticks); // Salva le zecche in un formato compresso. MqlTick Ticks2[]; // Per le zecche schiacciate. TICKS_SHORT::Load("TicksShort.bin", Ticks2); // Scaricato le zecche da un formato compresso. Print("Ratio = " + DoubleToString((double)FileGetInteger("Ticks.bin", FILE_SIZE) / FileGetInteger("TicksShort.bin", FILE_SIZE), 3)); Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks2)); // Confronto. } }
Lo script precedente salva i tick in un nuovo file di formato e li carica da un file.
Risultato.
TicksShort_SaveLoad (EURUSD,M1) Ratio = 10.000 TicksShort_SaveLoad (EURUSD,M1) Correct = true
L'output nel registro mostra che il rapporto di compressione è 10 volte. E quando non sono compresse, le zecche corrispondono a quelle originali.
Prestazioni.
#property script_show_inputs input datetime inFrom = D'2024.12.01'; #include <fxsaber\TicksShort\TicksShort.mqh> // Formato di memorizzazione dei tick brevi. // Restituisce la dimensione dell'array in byte. template <typename T> ulong GetSize( const T &Array[] ) { return((ulong)sizeof(T) * ArraySize(Array)); } // Criterio di prestazione del formato di compressione. 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[]; // Per le zecche di origine. if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0) { TICK_SHORT Ticks2[]; // Per le zecche compresse. ulong Interval = GetMicrosecondCount(); TICKS_SHORT::Compress(Ticks, Ticks2); // Spremuto. 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[]; // Per le zecche schiacciate. ulong Interval2 = GetMicrosecondCount(); TICKS_SHORT::Decompress(Ticks2, Ticks3); // Non stringere. 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)); // Confronto. } }
Questo script converte un array sorgente di tick in un array compresso e viceversa. Vengono forniti i dati relativi alle prestazioni e all'efficienza.
Risultato.
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
Le scritture e le letture vengono eseguite preservando le informazioni originali a velocità superiori a 40 milioni di tick al secondo.
Alternative.
Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/61126

Il segnale per l'apertura di posizioni è l'attraversamento della linea dell'indicatore T3 da parte del prezzo.

Media mobile T3 con smoothing esponenziale multiplo della serie di prezzi.

Imposta TP e SL automatici: la funzione "Imposta TP e SL automatici" (Take Profit e Stop Loss) è uno strumento fondamentale per qualsiasi strategia di trading, progettato per automatizzare la gestione del rischio e del rendimento. Consente ai trader di definire livelli di prezzo fissi in cui un'operazione deve essere chiusa automaticamente per garantire i profitti (TP) o limitare le perdite (SL), eliminando la necessità di un costante monitoraggio manuale. Quando questa funzione è attivata, ogni posizione aperta includerà automaticamente un livello predefinito di Take Profit e Stop Loss basato su parametri personalizzati, come un numero specifico di pip, una percentuale del saldo o livelli tecnici. In questo modo non solo si risparmia tempo, ma si garantisce anche che le operazioni siano protette da movimenti improvvisi del mercato e da decisioni emotive.

The Value Area Retracement indicator, is a powerful volume profile-based tool designed to identify key trading levels—Point of Control (POC), Value Area High (VAH), Value Area Low (VAL), and Profile High/Low—across different timeframes. It helps traders spot potential retracement opportunities to the POC, breakout zones, and value areas, making it useful for intraday, swing, and position trading.