Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
- Visualizaciones:
- 142
- Ranking:
- Publicado:
-
¿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.
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/61126

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.

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.

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.

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.