Guarda come scaricare robot di trading gratuitamente
Ci trovi su Twitter!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Visualizzazioni:
19
Valutazioni:
(4)
Pubblicato:
\MQL5\Scripts\fxsaber\ \MQL5\Include\fxsaber\TicksShort\
Freelance MQL5 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.

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

Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/61126

Modulo segnali di trading, basato sull'indicatore T3 Modulo segnali di trading, basato sull'indicatore T3

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

T3 T3

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

Auto Tp Auto Tp

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.

Value Area Retracement Volume Indicator Value Area Retracement Volume Indicator

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.