Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
TransactionCostCollector — Script para análise de custos do corretor - script para MetaTrader 5
- Visualizações:
- 32
- Publicado:
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Os fluxos de trabalho de rotulagem com barreira tripla costumam utilizar uma constante arbitrária (0,5–1,0%) ou uma suposição de spread herdada do passado como limite min_ret. Um limite definido abaixo do custo real de transação de ida e volta faz com que o fluxo de trabalho rotule ruídos causados por custos como sinais negociáveis. O conjunto de dados rotulado, então, superestima sistematicamente a vantagem, e qualquer modelo treinado com base nessas rotulagens sofre sobreajuste a um artefato do esquema de rotulagem, em vez de se ajustar à estrutura genuína do mercado.
O TransactionCostCollector.mq5 é um script independente que resolve a etapa de coleta de dados desse problema. Ele amostra a distribuição histórica do spread, lê as taxas de swap e os diagnósticos de comissão da corretora para o símbolo do gráfico anexado e exporta tudo para um arquivo CSV estruturado. O arquivo CSV é processado pela classe Python associada, TransactionCostModel, que converte todos os custos em retornos fracionários e calcula o limiar min_ret específico do instrumento para sua chamada de rotulagem.

Ilustração em três painéis da saída do TransactionCostCollector: detalhamento dos custos intradiários por sessão (a), distribuição completa dos custos (b) e curva de percentis para seleção de min_ret (c)
O que o script coleta
O script coleta três componentes de custo para um único símbolo em uma única execução:
- Spread — distribuição histórica da função CopySpread() ao longo do número de barras solicitado. Relatado como média, desvio padrão e percentis (p25, p50, p75, p90, p95, p99), todos em pips. Também calculado por hora UTC do dia para expor os efeitos da sessão.
- Swap — taxas de swap overnight de posições compradas e vendidas lidas diretamente de SYMBOL_SWAP_LONG / SYMBOL_SWAP_SHORT, incluindo o modo de swap (pontos, moeda, juros) e o dia da semana em que o swap triplo é cobrado.
- Comissão — apenas para diagnóstico. O MQL5 não expõe a comissão por lote como uma chamada direta de API em todas as corretoras. O script registra ACCOUNT_COMMISSION_BLOCKED e uma nota explicando como derivar a taxa por lote a partir de uma única operação de referência.
Parâmetros de entrada
| Parâmetro | Padrão | Descrição |
|---|---|---|
| InpBars | 50.000 | Número de barras do histórico de spread a ser amostrado. Um valor maior produz uma distribuição mais representativa e captura mais variação da sessão. 50.000 barras no H1 cobrem aproximadamente 5,7 anos; no M15, cobrem aproximadamente 1,4 anos. Reduza se o terminal tiver histórico limitado para o símbolo. |
| InpOutputFile | (em branco) | Substitui o nome do arquivo de saída. Quando em branco (padrão), o arquivo é nomeado <SYMBOL>_costs.csv — por exemplo, EURUSD_costs.csv para o EURUSD. O arquivo é gravado em MQL5\Files\ na pasta de dados do terminal (modoFILE_WRITE | FILE_CSV ). |
Formato de saída CSV
O CSV utiliza uma estrutura de quatro colunas: seção, chave, valor, unidade. As seções são:
- symbol_properties — tamanho do ponto, fator de pip, valor do tick, tamanho do contrato, identificadores de moeda.
- swap — taxas de posição longa/curta, modo de swap, dia da semana com swap triplo.
- commission — valor de diagnóstico e nota de derivação.
- spread_summary — média, desvio padrão e percentis em todas as barras amostradas.
- spread_by_hour — spread médio (pips) para cada hora do dia, uma linha por hora (UTC, horário da corretora).
Como executar
- Coloque o arquivo TransactionCostCollector.mq5 na pasta MQL5\Scripts\Downloads\ e compile-o no MetaEditor.
- Abra um gráfico do símbolo alvo em qualquer período de tempo. O período de tempo determina de qual tipo de barra a distribuição do spread será amostrada — recomenda-se H1 como um equilíbrio razoável entre granularidade e comprimento do histórico.
- Arraste o script para o gráfico. A caixa de diálogo de entrada será exibida (controlada pela propriedade #property script_show_inputs). Defina InpBars com o número de amostras desejado e clique em OK.
- Recupere o arquivo CSV de saída na pasta MQL5\Files\ da pasta de dados do terminal (Arquivo → Abrir pasta de dados no MetaTrader 5).
Integração com Python
A classe complementar em Python, TransactionCostModel, carrega o CSV e calcula o min_ret para a classificação de barreira tripla:
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, # da transação de referência 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,5x ponto de equilíbrio ) print(f"min_ret = {min_ret:.6f}")
Observações sobre comissões
A taxa de comissão por lote não pode ser lida programaticamente em todas as corretoras. O procedimento recomendado é: abra uma operação de referência de exatamente 1,0 lote padrão em uma conta demo, leia ACCOUNT_COMMISSION_BLOCKED do terminal imediatamente após a abertura da operação e, em seguida, feche a operação. O valor bloqueado dividido por 1,0 fornece a taxa por lote. Confirme com o extrato da conta. Isso precisa ser feito uma vez por corretora.
Por que p95, e não a média
O spread médio é dominado por períodos de baixa volatilidade: sessão asiática, consolidação durante a madrugada e condições de tendência ordenada. As entradas da estratégia, no entanto, costumam coincidir com os momentos de maior incerteza (que é quando os modelos geram sinais). Usar o spread do 95º percentil como entrada para min_ret leva em conta o ambiente de custos em condições típicas de entrada, em vez de condições médias de mercado.
Referências e artigo complementar
- López de Prado, M. (2018). Advances in Financial Machine Learning, Capítulo 3 (Labels), p. 44–47. Wiley.
- Implementação completa e derivação: MetaTrader 5 Machine Learning Blueprint — Parte 14: Modelo de Custo de Transação, por Patrick M. Njoroge.
- A classe complementar em Python ` TransactionCostModel ` e exemplos de uso estão incluídos no pacote de download do artigo.
Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/73173
Institutional Harmonic Volumetric Gravity Center
Um mecanismo quantitativo de densidade de volume que utiliza a matemática da média harmônica ponderada para eliminar valores atípicos aritméticos e mapear o verdadeiro centro de gravidade da liquidez institucional.
Close Profit Positions
Encerrar posições com lucro
Accumulation/Distribution
O Indicador Accumulation/Distribution (Acumulação/Distribuição ou A/D) é determinado pelas mudanças de preço e volume.
Accelerator Oscillator (AC)
O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.