Mira cómo descargar robots gratis
¡Búscanos en Twitter!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Visualizaciones:
142
Ranking:
(6)
Publicado:
\MQL5\Scripts\fxsaber\ \MQL5\Include\fxsaber\TicksShort\
TickShort.mqh (6.38 KB) ver
TicksShort.mqh (20.8 KB) ver
Table.mqh (100 KB) ver
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Esta biblioteca implementa el trabajo con el formato de almacenamiento tick, que tiene una buena relación entre rendimiento (lectura/escritura) y tamaño.


Formato.

Sólo se almacenan los siguientes camposdel MqlTick original:

struct MqlTick
  {
   datetime     time;          // Hora de la última actualización de precios
   double       bid;           // Precio actual Oferta
   double       ask;           // Precio de venta actual
   double       last;          // Precio actual de la última operación (Última)
   ulong        volume;        // Volumen para el precio actual Último
   long         time_msc;      // Hora de la última actualización de precios en milisegundos
   uint         flags;         // Tick Flags
   double       volume_real;   // Volumen para el precio actual Último con mayor precisión
  };


Ejemplos.

Puede ver los métodos de la biblioteca en el MetaEditor mediante la tecla de acceso rápido ALT+M. A continuación se muestran algunos ejemplos de su uso.


Escribir/Leer vía fichero.

#property script_show_inputs

input datetime inFrom = D'2024.12.01';

#include <fxsaber\TicksShort\TicksShort.mqh> // Formato de almacenamiento de ticks cortos.

void OnStart()
{        
  MqlTick Ticks[]; // Para los ticks de origen.

  if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0)
  {
    FileSave("Ticks.bin", Ticks); // Guardamos los ticks normales para poder comparar los tamaños de los archivos.
    
    TICKS_SHORT::Save("TicksShort.bin", Ticks); // Guarda los ticks en un formato comprimido.

    MqlTick Ticks2[]; // Para garrapatas aplastadas.
    TICKS_SHORT::Load("TicksShort.bin", Ticks2); // Descarga los ticks desde un formato comprimido.
    
    Print("Ratio = " + DoubleToString((double)FileGetInteger("Ticks.bin", FILE_SIZE) /
                                      FileGetInteger("TicksShort.bin", FILE_SIZE), 3));
    
    Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks2)); // Comparado.
  }
}

El script anterior guarda los ticks en un nuevo archivo de formato y los carga desde un archivo.


Resultado.

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

La salida al registro muestra que el ratio de compresión es 10 veces. Y cuando se descomprime, los ticks coinciden con los originales.


Rendimiento.

#property script_show_inputs

input datetime inFrom = D'2024.12.01';

#include <fxsaber\TicksShort\TicksShort.mqh> // Formato de almacenamiento de ticks cortos.

// Devuelve el tamaño del array en bytes.
template <typename T>
ulong GetSize( const T &Array[] ) { return((ulong)sizeof(T) * ArraySize(Array)); }

// Criterio de rendimiento del formato de compresión.
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[]; // Para los ticks de origen.

  if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0)
  {
    TICK_SHORT Ticks2[]; // Para ticks comprimidos.
    
    ulong Interval = GetMicrosecondCount();
    TICKS_SHORT::Compress(Ticks, Ticks2); // Exprimido.
    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[]; // Para garrapatas aplastadas.
    
    ulong Interval2 = GetMicrosecondCount();
    TICKS_SHORT::Decompress(Ticks2, Ticks3); // Unclenched.
    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)); // Comparado.
  }
}

Este script convierte un array fuente de ticks en un array comprimido y viceversa. Se muestran los datos de rendimiento/eficiencia.


Resultado.

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

Las escrituras y lecturas se realizan preservando la información original a velocidades superiores a 40 millones de ticks por segundo.


Alternativas.

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

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/61126

Symbol Swap Panel Utility Symbol Swap Panel Utility

Panel de intercambio de símbolos: Cambie sin esfuerzo el símbolo activo en su gráfico mientras añade simultáneamente el nuevo símbolo a Market Watch. Esta herramienta garantiza una integración perfecta y el acceso a los datos de mercado en tiempo real, optimizando su flujo de trabajo de negociación.

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

Desgraciadamente, he descubierto que algunos brokers son un poco chapuceros con el cambio de hora del servidor debido al horario de verano (DST), algo que no me esperaba y que me ha sorprendido mucho. Aquí tenéis un script con el que cualquiera puede comprobar su broker.

Auto Tp Auto Tp

Establecer TP y SL automáticos: La función "Establecer TP y SL automáticos" (Take Profit y Stop Loss) es una herramienta crucial en cualquier estrategia de negociación, diseñada para automatizar la gestión de riesgos y beneficios. Permite a los operadores definir niveles de precios fijos en los que una operación debe cerrarse automáticamente para asegurar los beneficios (TP) o limitar las pérdidas (SL), eliminando la necesidad de una supervisión manual constante. Cuando esta función está activada, cada posición que abra incluirá automáticamente un nivel predefinido de Take Profit y Stop Loss basado en sus parámetros personalizados, como un número específico de pips, porcentaje de saldo o niveles técnicos. Esto no sólo ahorra tiempo, sino que también garantiza que sus operaciones estén protegidas de movimientos bruscos del mercado y de decisiones emocionales.

Monthly VWAP Monthly VWAP

El VWAP Mensual (Precio Medio Ponderado por Volumen) es un indicador esencial de MQL5 que calcula y muestra el Precio Medio Ponderado por Volumen de cada mes de negociación. Es una poderosa herramienta para comprender el sentimiento del mercado a largo plazo, identificar el valor razonable mensual clave e informar las decisiones estratégicas.