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
TransactionCostCollector — Script para la elaboración de perfiles de costes de los corredores - script para MetaTrader 5
- Visualizaciones:
- 33
- Publicado:
-
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Los procesos de etiquetado de triple barrera suelen utilizar una constante arbitraria (0,5-1,0 %) o una hipótesis de diferencial heredada como umbral «min_ret ». Si el umbral se establece por debajo del coste real de ida y vuelta de la transacción, el proceso etiqueta el ruido generado por los costes como una señal negociable. El conjunto de datos etiquetado sobreestima entonces sistemáticamente el «edge», y cualquier modelo entrenado con esas etiquetas se sobreajusta a un artefacto del esquema de etiquetado en lugar de a la estructura real del mercado.
TransactionCostCollector.mq5 es un script independiente que resuelve la fase de recopilación de datos de este problema. Muestrea la distribución histórica del spread, lee las tasas de swap y los datos de comisiones del bróker correspondientes al símbolo del gráfico adjunto, y exporta toda la información a un archivo CSV estructurado. El archivo CSV es procesado por la clase de Python asociada TransactionCostModel, que convierte todos los costes en rendimientos fraccionarios y calcula el umbral min_ret específico del instrumento para su llamada de etiquetado.

Ilustración de tres paneles del resultado de TransactionCostCollector: desglose de los costes intradía por sesión (a), distribución completa de los costes (b) y curva de percentiles para la selección de min_ret (c)
Qué recopila el script
El script recopila tres componentes de coste para un único símbolo en una sola ejecución:
- Spread: distribución histórica obtenida mediante CopySpread() a lo largo del número de barras solicitado. Se presenta como media, desviación estándar y percentiles (p25, p50, p75, p90, p95, p99), todos en pips. También se calcula por hora UTC del día para poner de manifiesto los efectos de la sesión.
- Swap: tipos de swap a un día para posiciones largas y cortas leídos directamente de SYMBOL_SWAP_LONG / SYMBOL_SWAP_SHORT, incluyendo el modo de swap (puntos, divisa, interés) y el día de la semana en el que se cobra el triple swap.
- Comisión: solo con fines de diagnóstico. MQL5 no expone la comisión por lote como una llamada directa a la API en todos los brókers. El script registra ACCOUNT_COMMISSION_BLOCKED y una nota que explica cómo obtener la tasa por lote a partir de una única operación de referencia.
Parámetros de entrada
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
| InpBars | 50 000 | Número de barras del historial de spreads que se van a muestrear. Un valor mayor produce una distribución más representativa y capta una mayor variación de la sesión. 50 000 barras en H1 abarcan aproximadamente 5,7 años; en M15, abarcan aproximadamente 1,4 años. Redúcelo si la terminal tiene un historial limitado para el símbolo. |
| InpOutputFile | (en blanco) | Sobrescribe el nombre del archivo de salida. Si se deja en blanco (valor por defecto), el archivo se denomina <SYMBOL>_costs.csv; por ejemplo, EURUSD_costs.csv para el EURUSD. El archivo se guarda en MQL5\Files\ dentro de la carpeta de datos de la terminal (modoFILE_WRITE | FILE_CSV ). |
Formato de salida CSV
El CSV utiliza una estructura de cuatro columnas: sección, clave, valor, unidad. Las secciones son:
- symbol_properties: tamaño del punto, factor de pip, valor del tick, tamaño del contrato, identificadores de divisas.
- swap — tipos de swap para posiciones largas/cortas, modo de swap, días laborables con triple swap.
- commission — valor de diagnóstico y nota de derivación.
- spread_summary: media, desviación estándar y percentiles en todas las barras muestreadas.
- spread_by_hour: spread medio (pips) para cada hora del día, una fila por hora (UTC, hora del bróker).
Cómo ejecutarlo
- Coloca TransactionCostCollector.mq5 en tu carpeta MQL5\Scripts\Downloads\ y compílalo en MetaEditor.
- Abre un gráfico del símbolo de interés en cualquier marco temporal. El marco temporal determina el tipo de barra a partir del cual se toma la muestra de la distribución del spread; se recomienda H1 como un equilibrio razonable entre la granularidad y la longitud del historial.
- Arrastra el script al gráfico. Aparecerá el cuadro de diálogo de entrada (controlado por #property script_show_inputs). Establece InpBars en el número de muestras deseado y haz clic en Aceptar.
- Recupere el archivo CSV de salida de la carpeta MQL5\Files\ de la carpeta de datos del terminal (Archivo → Abrir carpeta de datos en MetaTrader 5).
Integración con Python
La clase complementaria de Python TransactionCostModel carga el archivo CSV y calcula min_ret para el etiquetado de triple barrera:
from afml.transaction_costs import load_cost_model import pandas as pd model = load_cost_model( csv_path = "EURUSD_costs.csv", spread_percentile = "p95_pips", # conservador slippage_pips = 0.4, commission_per_lot = 7.0, # de la operación de referencia lot_size = 0.01, ) close = pd.read_parquet("EURUSD_H1.parquet")["close"] min_ret = model.min_ret_for_symbol( price_series = close, holding_days = 1.0, cost_multiplier = 1.5, # 1,5 veces el umbral de rentabilidad ) print(f"min_ret = {min_ret:.6f}")
Notas sobre las comisiones
La tasa de comisión por lote no se puede leer mediante programación en todos los brókers. El procedimiento recomendado es el siguiente: abre una operación de referencia de exactamente 1,0 lote estándar en una cuenta demo, lee el valor de ACCOUNT_COMMISSION_BLOCKED desde la terminal inmediatamente después de abrir la operación y, a continuación, cierra la operación. El valor bloqueado dividido por 1,0 da como resultado la tasa por lote. Compruébalo con el extracto de cuenta. Esto debe hacerse una vez por cada relación con el bróker.
¿Por qué el p95 y no la media?
El spread medio está dominado por períodos de poca actividad: la sesión asiática, la consolidación nocturna y las condiciones de tendencia ordenada. Sin embargo, las entradas de la estrategia suelen coincidir con los momentos de mayor incertidumbre (que es cuando los modelos generan señales). Utilizar el spread del percentil 95 como entrada para min_ret tiene en cuenta el entorno de costes en condiciones típicas de entrada, en lugar de en condiciones medias de mercado.
Referencias y artículo complementario
- López de Prado, M. (2018). Advances in Financial Machine Learning, capítulo 3 (Etiquetas), págs. 44-47. Wiley.
- Implementación completa y derivación: MetaTrader 5 Machine Learning Blueprint — Parte 14: Modelo de costes de transacción, por Patrick M. Njoroge.
- La clase complementaria de Python «TransactionCostModel» y los ejemplos de uso se incluyen en el paquete de descarga del artículo.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/code/73173
Institutional Harmonic Volumetric Gravity Center
Un motor cuantitativo de densidad de volumen que utiliza la media armónica ponderada para eliminar los valores atípicos aritméticos y determinar el verdadero centro de gravedad de la liquidez institucional.
Close Profit Positions
Cerrar posiciones con beneficios
Accumulation/Distribution
El indicador Accumulation/Distribution (Acumulación/Distribución) queda determinado por los cambios que se producen en el precio y en el volumen.
Accelerator Oscillator (AC)
El indicador Acceleration/Deceleration (AC, Aceleración/Desaceleración) mide la aceleración y la desaceleración de la fuerza impulsora del mercado.