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:
- 64
- Ranking:
- Publicado:
- 2025.04.03 11:15
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Esta librería le permite leer/escribir archivos tst - MT5-Tester single pass format.
Algunas variantes de uso
Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading
fxsaber, 2019.10.04 07:18 pm.
Si abren el formato de archivos tst y colocan la carpeta de caché del Probador en el sandbox, es posible crear productos de Mercado de un nuevo tipo, que serán analizadores/correctores de los resultados del Probador.
Por ejemplo, será posible escribir un Market-combine que muestre todos los pases individuales disponibles en la caché.
- Se seleccionan los necesarios con el ratón y muestra las estadísticas combinadas.
- Limpia la caché de pases innecesarios.
- Calcula la cartera óptima con los coeficientes de ponderación adecuados a partir de los pases.
- Muestra los mejores intervalos de negociación para cada pase.
- Ofrece su propia visualización interactiva de las estadísticas, incluyendo filtros.
- Calcula el MM óptimo.
- Para cada posición de cobertura en el historial muestra OrderOpenPriceBest (el mejor precio de apertura durante la vida de la posición), OrderClosePriceBest (similar), OrderOpenPriceLength (cuánto tiempo el precio no fue peor que OrderOpenPrice durante la vida de la posición), OrderClosePriceLength (similar), OrderProfitBest (el mayor beneficio posible de una posición similar durante la vida de la posición original).
- Muestra la eficiencia de cada posición de cobertura.
- Calcula el resultado cuando la latencia está activada.
- Calcula el resultado con diferentes configuraciones de ejecución de órdenes (si se deslizan, etc.) y comisiones.
- Muestra el resultado de la TS en un historial de ticks diferente.
- ...
No es necesario lanzar el Probador para implementar cada elemento.
Todo esto se puede hacer ahora si pones la carpeta de caché en el sandbox a través de mklink. Sólo necesitas tst-format.
Quien sienta la fuerza en sí mismo probablemente debería empezar a escribir tal producto. Con mucho gusto me uniría al equipo de sus desarrolladores y lo compraría. El nicho está completamente vacío.
Si cache-folder no es sandboxed, puede haber una mayor posibilidad de que productos similares aparezcan fuera del ecosistema MQ, ya que serán escritos en otros lenguajes.
Ejemplos.
#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Datos de una sola pasada del probador. void OnStart() { SINGLETESTERCACHE SingleTesterCache; // Creado un objeto caché de comprobador. SingleTesterCache.Set(); // Pon la historia real de la puja. // ..\.\.\MQL5\Files/Test.tst. Print(SingleTesterCache.Save("Test.tst")); // Escribirlo en un archivo que pueda ser importado al Probador. }
Este script recopila el historial de operaciones de cuentas reales en formato tst. Se importa al Probador de la siguiente manera.
Resulta algo así
Las soluciones DLL no se pueden colocar en KB, por lo que a continuación se muestra el código fuente de otro script, que no se incluye en la entrega de KB.
#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // Datos de una sola pasada del probador. #include <Graphics\Graphic.mqh> #include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/es/code/26132 #define MIN_WIDTH 10 // Creación de un gráfico. string GraphPlot( const double &Y1[], const double &Y2[], int Width = 0, int Height = 0, const ENUM_CURVE_TYPE Type = CURVE_NONE, const string CurveName1 = NULL, const string CurveName2 = NULL, string ObjName = NULL ) { Width = Width ? Width : (int)::ChartGetInteger(0, CHART_WIDTH_IN_PIXELS); Height = Height ? Height : (int)::ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS); ObjName = (ObjName == NULL) ? __FUNCTION__ : ObjName; CGraphic Graphic; const bool Res = (::ObjectFind(0, ObjName) >= 0) ? Graphic.Attach(0, ObjName) : Graphic.Create(0, ObjName, 0, 0, 0, Width, Height); if (Res) { const int Size1 = ::ArraySize(Y1); const int Size2 = ::ArraySize(Y2); Graphic.CurveAdd(Y1, ((Type == CURVE_NONE) && Size1) ? ((Width / Size1 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName1); Graphic.CurveAdd(Y2, ((Type == CURVE_NONE) && Size2) ? ((Width / Size2 < MIN_WIDTH) ? CURVE_LINES : CURVE_POINTS_AND_LINES) : Type, CurveName2); Graphic.CurvePlotAll(); Graphic.Update(); } return (Res ? Graphic.ChartObjectName() : NULL); } void OnStart() { uchar Bytes2[]; if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Si fuera posible leer el último registro de caché de una sola ejecución { const SINGLETESTERCACHE SingleTesterCache(Bytes2); // Condúcelo al objeto correspondiente. SingleTesterCache.SaveSet(NULL, true, "Created by " + __FILE__); // Guarda el archivo set con los detalles. double Balance[]; double Equity[]; // Imprime el gráfico de saldo y patrimonio. if (SingleTesterCache.GetBalance(Balance) && SingleTesterCache.GetEquity(Equity)) GraphPlot(Balance, Equity, 1200, 500, CURVE_NONE, "Balance", "Equity"); Print(SingleTesterCache.Header.ToString()); // Salida de la cabecera de una sola pasada. Print(SingleTesterCache.Summary.ToString()); // Statistica. Print(SingleTesterCache.Inputs); // Parámetros de entrada. } }
Este script recogerá automáticamente los datos de la última pasada y mostrará sus datos, incluyendo un gráfico de balance/equidad.
Agradecimientos.
Gracias a los desarrolladores por crear las cachés de Tester y ayudarme a descomprimir sus formatos.
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/27611

Este script es una solución de referencia para mapear nombres de símbolos configurados por los usuarios en EAs o scripts de MetaTrader 5 con los nombres reales proporcionados por el broker. Utiliza el algoritmo de distancia de Levenshtein para identificar automáticamente el símbolo más similar en Market Watch. Ideal para desarrolladores que enfrentan problemas de compatibilidad con prefijos o sufijos en los nombres de los símbolos. Es un punto de partida personalizable para adaptarse a cualquier necesidad específica.

Este script ayuda a los traders a entender la distribución y amplitud de las velas en un período específico, lo que puede ser útil para tomar decisiones de trading como qué Take Profit o Stop Loss usar según los valores históricos.

Calendario: análisis fundamental histórico y en tiempo real.

Detección del inicio de una nueva barra o vela en el manejador de eventos OnTick() de un Asesor Experto.