Trade Stats Multicurrency
- Utilidades
-
Vsevolod Morozov
Narm - Versión: 1.32
- Activaciones: 5
1. Resumen
Trade Stats es un asesor experto de análisis no operativo para MetaTrader 5. Lee el historial de operaciones cerradas de la cuenta, agrupa cada operación por su «número mágico» y muestra una tabla compacta de estadísticas en tiempo real directamente en el gráfico. Su objetivo es responder a una pregunta: ¿qué asesor experto de esta cuenta está generando realmente beneficios y cuánto cuesta el funcionamiento de cada uno?
No realiza órdenes, no modifica nada y nunca interviene en las posiciones. Solo lee el historial y dibuja etiquetas en el gráfico.
2. Lo que no hace
- No realiza operaciones, no gestiona el dinero ni envía señales: no puede abrir ni cerrar nada.
- No realiza escrituras en la cuenta, ni llamadas a redes externas, ni subidas de archivos.
- Solo se crean objetos de gráficos, todos con el prefijo ByMagic_, y todos ellos se eliminan en OnDeinit.
3. Cómo funciona
- Selección del historial: en cada actualización, el EA llama a HistorySelect(from, to) para el periodo definido por los parámetros de periodo (mes actual, semana actual, hoy, los últimos N días o fechas personalizadas). Se utiliza la hora del servidor.
- Filtrado de operaciones: solo se contabilizan las operaciones de mercado que afectan al saldo (DEAL_TYPE_BUY / DEAL_TYPE_SELL). Se ignoran las operaciones de saldo. Filtros opcionales: número mágico exacto, nombre del símbolo y «ocultar operaciones manuales» (magic = 0).
- Las operaciones de salida definen una «operación»: el contador de filas solo se incrementa para las operaciones que reducen una posición: DEAL_ENTRY_OUT, DEAL_ENTRY_OUT_BY, DEAL_ENTRY_INOUT. Las operaciones de entrada no aumentan el recuento de operaciones.
- Acumulación de costes: la comisión, las tarifas del bróker, el swap y (opcionalmente) un spread estimado se acumulan para todas las operaciones, incluidas las de entrada, ya que los brókeres contabilizan estos costes en las operaciones de entrada.
- Resultado neto por operación: beneficio + comisión + tarifa + swap + estimación del spread, donde cada componente se incluye únicamente si el correspondiente indicador está activado. Este mismo valor alimenta las ganancias/pérdidas, el beneficio/pérdida bruto, el P/L y la mejor/peor operación.
- Resolución de nombres de expertos (por orden de prioridad descendente):
- mapa explícito de usuarios de InpExpertNames ( magic=Name; );
- el comentario «significativo» que más se repite en las operaciones de entrada para ese «magic» (mecanismo de votación);
- el último comentario significativo;
- en caso contrario, la fila se muestra como — . Se filtran los comentarios técnicos del bróker: cadenas que comienzan por [, sl, tp, so:, from #, by #, y comentarios que contengan «cancelado», «cancelado», «parcial», «dividido», «tiempo de espera», «eliminado», así como comentarios compuestos únicamente por dígitos y signos de puntuación.
- Ordenación: por «Magic» en orden ascendente (las operaciones manuales siempre aparecen al final), o por P/L neto, factor de beneficio, número de operaciones o porcentaje de ganancias, en orden ascendente o descendente; los empates se resuelven por «Magic» para garantizar un orden estable.
- Representación: se vuelve a dibujar una cuadrícula de etiquetas ligera: los anchos de columna se miden con TextSetFont / TextGetSize a partir del encabezado y las celdas visibles, de modo que la tabla se ajusta automáticamente al contenido en cualquiera de los dos idiomas.
4. Diseño del panel
Cinco líneas de información encima de la tabla:
| Línea | Ejemplo (inglés) |
|---|---|
| Título | ESTADÍSTICAS DE INTERCAMBIOS — POR NÚMERO MÁGICO |
| Período | Período: 01/10/2026 → 28/10/2026 |
| Contadores | Grupos mágicos: 4 Operaciones cerradas: 187 |
| Costes | Costes: comisión -42,10; swap -3,55; spread* -18,40 |
| Estado | Actualizado: 13:20:57 * El spread se calcula a partir de los ticks |
A continuación, el encabezado de la tabla, las filas y la fila TOTAL. Si el número de grupos supera InpMaxRows, el resto se muestra como «... y N más Magic».
Columnas: Magic | Experto | Operaciones | G | P | Porcentaje de ganancias | [Comisión] | [Swap] | [Diferencial*] | P/L | PF
«Comm.», «Swap» y «Spread*» solo aparecen cuando sus opciones están activadas. Las columnas numéricas están alineadas a la derecha; el nombre del experto está alineado a la izquierda y se trunca con «..» cuando supera el ancho de la columna (límite máximo de 320 px). Se aplica un código de colores por celda: beneficio/positivo → clrLime, pérdida/negativo → clrOrangeRed, neutro → clrSilver; el «Magic» de las operaciones manuales se muestra en plata, y los números «Magic» del programa, en cian.
5. Métricas y fórmulas
- Operaciones: número de operaciones de cierre de posiciones en el periodo.
- G/P — operaciones cerradas con resultado neto > 0 y < 0; las operaciones con resultado nulo se cuentan por separado (no se muestran en una columna, se exportan en CSV).
- Porcentaje de ganancias: ganancias / (ganancias + pérdidas + resultados nulos) × 100.
- Beneficio bruto / pérdida bruta: sumas de los resultados netos positivos y negativos absolutos.
- P/L — resultado neto de todas las operaciones del grupo, incluidos los componentes de coste habilitados.
- PF (Factor de beneficio): beneficio bruto / pérdida bruta; cuando no hay pérdidas pero sí beneficios, se limita a 99,99; en caso contrario, es 0.
- Mejor/peor operación, operación media, hora de la última operación: se calculan y se exportan a CSV (no se muestran en el panel).
- Fila «TOTAL »: sumas de todos los grupos, más la tasa de acierto y el factor de beneficio a nivel de cartera.
6. Datos de entrada
| Datos de entrada | Valor por defecto | Significado |
|---|---|---|
| InpPeriodMode | PERIOD_CURRENT_MONTH | Mes actual / semana actual / hoy / últimos N días / fechas personalizadas |
| InpLastDays | 30 | Número de días para el modo «últimos N días» |
| InpCustomFrom, InpCustomTo | 01/01/2025, 31/12/2025 | Intervalo de fechas personalizado (la fecha de finalización se amplía hasta las 23:59:59) |
| InpMagicFilter | 0 | Analizar un único número mágico (0 = todos) |
| InpShowManual | true | Incluir operaciones manuales (mágico = 0) |
| InpSymbolFilter | "" | Analizar solo un símbolo («» = todos) |
| InpShowCommission | true | Mostrar la columna de comisiones e incluir comisiones + gastos en P/L |
| InpShowSwap | true | Mostrar la columna de swap e incluir el swap en la cuenta de resultados |
| InpShowSpread | false | Mostrar la columna de spread y restar un spread estimado de las pérdidas y ganancias |
| InpSpreadMaxCalc | 300 | Número máximo de nuevas estimaciones de diferencial por actualización (0..5000) |
| InpLanguage | LANG_ENGLISH | Idioma del panel y del diario: inglés (por defecto) o ruso |
| InpShowComment | true | Obtener los nombres de los expertos a partir de los comentarios de la operación |
| InpCommentLen | 20 | Longitud máxima de un nombre de experto derivado |
| InpExpertNames | "" | Mapa de nombres explícito, p. ej., 20261012=GoldScalperPro;1=ScalperProM30 |
| InpSortMode | STATS_SORT_MAGIC | Magic / P/L neto / Factor de beneficio / operaciones / Porcentaje de aciertos |
| InpSortDesc | true | Orden descendente (se ignora para «por Magic», que siempre es ascendente) |
| InpRefreshSec | 5 | Intervalo mínimo entre recálculos, en segundos (1..3600) |
| InpPanelX, InpPanelY | 10, 20 | Desplazamiento del panel en píxeles |
| InpTextColor, InpBgColor, InpHeaderColor | clrWhite, C'15,15,25', clrGold | Colores |
| InpFontSize, InpFontName | 9, Consolas | Fuente (tamaño 6..30); una fuente monoespaciada mantiene las columnas alineadas |
| InpMaxRows | 30 | Número máximo de filas visibles (0 = todas) |
| InpExportCSV | false | Guardar una instantánea en CSV con cada actualización |
| InpCSVFileName | stats_by_magic.csv | Nombre del archivo CSV, creado en el entorno de pruebas MQL5\Files de la terminal |
Las entradas no válidas (límites del periodo, tamaño de fuente, longitud del comentario, intervalo de actualización, presupuesto para el spread) interrumpen la inicialización con el código INIT_PARAMETERS_INCORRECT y un mensaje en el diario.
7. Estimación del spread
MT5 no almacena el spread de una operación, por lo que, cuando InpShowSpread está activado, el EA lo estima: copia los ticks de un intervalo de ±5 segundos alrededor de la hora de la operación con CopyTicksRange, toma el tick más cercano al momento de la ejecución y calcula
spread_cost = 0,5 × (precio de venta − precio de compra) × volumen × tamaño del contrato
El valor se almacena como una contribución negativa al resultado y se guarda en caché por cada ticket de operación en una matriz ordenada por tickets mediante búsqueda binaria, de modo que cada operación se estima una sola vez. Las estimaciones se limitan mediante InpSpreadMaxCalc por actualización; si no existen ticks para ese momento, no se almacena nada en caché y la operación se vuelve a intentar en una actualización posterior. El panel y el diario marcan explícitamente este valor como una estimación (spread*).
8. Exportación a CSV
FILE_WRITE | FILE_CSV | FILE_ANSI , ; delimitador, una fila por grupo mágico, siempre en inglés:
Magic;Expert;Operaciones;Ganancias;Pérdidas;Cero;Porcentaje de ganancias;Comisión;Swap;Spread;Beneficio neto; Beneficio bruto;Pérdida bruta;Factor de beneficio;Mejor operación;Peor operación;Operación media;Última operación
El archivo se guarda en la carpeta de datos del terminal (MQL5\Files\...), para que pueda ser leído por otras herramientas o servicios.
9. Localización
Todo el texto en tiempo de ejecución (mensajes del panel y del diario) se resuelve mediante la función auxiliar T(ENUM_TXT) a partir de una tabla en tiempo de compilación de cadenas en inglés u otros idiomas. El inglés es el idioma predeterminado; al cambiar InpLanguage, el panel se actualiza en la siguiente actualización sin necesidad de reiniciar el EA. Las etiquetas del cuadro de diálogo de propiedades del EA son cadenas estáticas en inglés (MQL5 no puede localizar los títulos de los campos de entrada en tiempo de ejecución).
10. Notas sobre el rendimiento
- El recálculo está limitado por InpRefreshSec y controlado tanto por un temporizador de 1 segundo como por OnTick, por lo que el panel permanece activo sin ticks; el primer cálculo se ejecuta en OnInit.
- Un HistorySelect más una pasada lineal por las operaciones del periodo por cada actualización; la agrupación es un escaneo lineal breve, y la ordenación se realiza mediante ordenación por inserción (el número de grupos es reducido).
- Las etiquetas del gráfico se crean una sola vez y solo se actualizan posteriormente; los objetos de filas/columnas obsoletos se eliminan mediante HideUnusedRows, y el fondo se recrea si desaparece (por ejemplo, tras un cambio de plantilla).
11. Limitaciones y supuestos
- Solo se analizan las operaciones cerradas dentro del periodo seleccionado; no se incluyen las posiciones abiertas ni las ganancias y pérdidas no realizadas.
- El recuento de operaciones sigue la estructura de operaciones del bróker: los cierres parciales aparecen como varias salidas, y DEAL_ENTRY_INOUT (reversiones de compensación) se trata como una salida.
- Los resultados se muestran en la divisa de depósito de la cuenta; no se realiza ninguna conversión de divisas.
- La comisión se indica exactamente tal y como la registra el bróker; si un bróker contabiliza la comisión únicamente en las operaciones de apertura, se mantiene ese comportamiento.
- El spread es una estimación por diseño y no es idéntico al margen real del bróker.
- Los nombres de los expertos son heurísticos basados en comentarios; utilice InpExpertNames para obtener una denominación exacta.
- El EA es un indicador o herramienta de análisis: está pensado para añadirlo a cualquier gráfico y dejarlo en ejecución.
12. Compatibilidad y validación
- MetaTrader 5, MQL5; compilado con 0 errores y 0 advertencias en la versión 6230 del compilador.
- El binario publicado está compilado para X64 Regular, por lo que es aceptado por el MQL5 Market (allí se rechazan las compilaciones AVX2/AVX512).
- Comprueba en una cuenta demo o en el modo visual del Probador de estrategias que el panel se ajuste al gráfico, que los anchos de las columnas sean correctos en ambos idiomas y que los valores CSV exportados coincidan con el historial de la cuenta.
13. Aviso sobre riesgos
Trade Stats solo ofrece estadísticas históricas. El rendimiento pasado de un asesor experto no garantiza resultados futuros, y las estimaciones de los spreads y los nombres derivados de los comentarios pueden diferir de la realidad del bróker. Valida siempre cualquier decisión basada en estas cifras contrastándola con tus propios registros.
