Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Scripts

TransactionCostCollector — Script para análise de custos do corretor - script para MetaTrader 5

Patrick Murimi Njoroge
Patrick Murimi Njoroge
I build robust trading tools for MetaTrader. Browse my free articles to learn, get the premium EAs/indicators on the Market, or hire me for custom coding.
| Portuguese English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Visualizações:
114
Avaliação:
(2)
Publicado:
Freelance MQL5 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.

Saída do Coletor de Custos de Transação

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

  1. Coloque o arquivo TransactionCostCollector.mq5 na pasta MQL5\Scripts\Downloads\ e compile-o no MetaEditor.
  2. 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.
  3. 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.
  4. 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

Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/73173

Institutional Harmonic Volumetric Gravity Center 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 Close Profit Positions

Encerrar posições com lucro

Heiken ashi as series Heiken ashi as series

Heiken Ashi com todos os buffers configurados como série

SetSLByLoss - set Stop Loss on all open positions by target loss amount SetSLByLoss - set Stop Loss on all open positions by target loss amount

Script para definir o Stop Loss em todas as posições abertas com base em um valor-alvo de perda na moeda da conta (por exemplo, US$ 50 por posição). Funciona com qualquer moeda de depósito e qualquer símbolo de câmbio. Verifica os níveis de stop e congelamento da corretora. A conversão de moeda é feita automaticamente.