Discussão do artigo "Símbolos personalizados: Fundamentos práticos" - página 5

 
Mr David Frederick Roberts #:

Obrigado pela resposta. Isso é muito estranho, estou de fato usando o modo de ticks reais e não sabia que havia uma opção de spread fixo no MT5, portanto, tenho certeza de que não estou usando (estou mais familiarizado com o MT4).Não tinha percebido que os spreads eram os mesmos para cada barra; na verdade, analisando o arquivo completo, parece que eles só mudam nos limites de 1 minuto. Presumo que estou certo ao pensar que as chamadas para SymbolInfoDouble() devem retornar os preços para o tick que está sendo processado como resultado da chamada do evento OnTick() - e não algum tipo de valor M1?

Tentei imprimir o que eu esperava ser o tempo real do tick com milissegundos usando o código abaixo, mas o valor de milissegundos é sempre zero...

EDIT: Como eu disse, sou relativamente novo em MQL5 - acabei de encontrar o SymbolInfoTick(), talvez eu devesse usá-lo em vez do que estou fazendo! Vou tentar isso e ver o que acontece...


Ok, isso não fez nenhuma diferença, exatamente os mesmos resultados, mas nenhum deles está vinculado à caixa de diálogo "Symbol Ticks" no terminal. Eu estava errado ao dizer que o valor de milissegundos era sempre zero - ele é diferente de zero por exatamente um minuto, ou seja, um minuto antes da meia-noite!

Esse me parece ser um problema muito importante. Meu EA de negociação espera receber ticks com preços que correspondam aos dados de tick importados da fonte (como qualquer outra pessoa faria!).Anexei um arquivo zip com o EA de teste, uma planilha de resultados para a hora de cada lado da meia-noite e algumas capturas de tela das configurações e dos ticks.

Receio que não esteja claro como você criou seu símbolo personalizado. Os arquivos csv anexados são os mesmos (aliás, não sei por que você precisa de duas cópias com nomes diferentes), e ambos têm o formato errado: os arquivos de ticks devem ter as seguintes colunas para serem importados para o símbolo personalizado do MT5: data, hora, compra, venda, último, volume. Portanto, atualmente não é possível criar um símbolo personalizado a partir de seus ticks sem manipulações adicionais.

Seria mais simples se você postasse imagens de ticks importados na interface do usuário do MT5 e o registro do seu EA lado a lado. As imagens apresentadas acima estão incompletas e os ticks parecem diferentes entre as imagens e em comparação com os arquivos csv.

 
Stanislav Korotky #:

Receio que não esteja claro como você criou seu símbolo personalizado. Os arquivos csv anexados são os mesmos (aliás, não sei o motivo pelo qual você precisa de duas cópias com nomes diferentes) e ambos têm o formato errado: os arquivos de ticks devem ter as seguintes colunas para serem importados para o símbolo personalizado do MT5: data, hora, compra, venda, último, volume. Portanto, atualmente não é possível criar um símbolo personalizado a partir de seus ticks sem manipulações adicionais.

Seria mais simples se você postasse imagens de ticks importados na interface do usuário do MT5 e o registro do seu EA lado a lado. As imagens apresentadas acima estão incompletas e os ticks parecem diferentes entre as imagens e em comparação com os arquivos csv.

Os dados de ticks foram importados para o MT5 como um símbolo personalizado de uma exportação do meu MT4 'Tick Data Suite' usando dados da Dukascopy (arquivos CSV com cerca de 8 GB de tamanho).

Os arquivos CSV que enviei não se destinam, de forma alguma, a serem importados como dados de tick; eles são as saídas do meu EA de teste (que foi anexado), que está registrando os preços de compra e venda e a hora de cada evento OnTick recebido. Os dois são simplesmente derivados por métodos diferentes - um usando SymbolInfoDouble(...) para obter os preços de compra e venda, e o outro usando SymbolInfoTick(...). O fato de serem iguais está simplesmente provando para mim mesmo que não há diferença entre os métodos.

O quequero dizer é que os preços e horários de compra e venda nos arquivos CSV registrados pelo EA de teste não correspondem à imagem dos ticks importados na interface do usuário do MT5 (que eu também enviei). Então...

  1. Os horários dos ticks na captura de tela da interface do usuário não coincidem com os registrados pelo EA de teste - por que não?
  2. Os horários registrados pelo EA de teste têm um componente de zero milissegundo, exceto durante o minuto anterior à meia-noite - por quê?
  3. Embora os preços de compra registrados pelo EA de teste estejam próximos aos da interface do usuário do MT5, os preços de venda podem ser muito diferentes (e, portanto, o spread) - por quê?
  4. Os preços registrados pelo EA de teste fornecem um spread resultante que parece mudar apenas nos limites de um minuto - por quê?
  5. Há menos eventos OnTick sendo registrados pelo EA de teste do que há registros de ticks na interface do usuário do MT5.

Parece-me que há algo interferindo nos dados de ticks do símbolo personalizado em seu caminho entre o repositório e o evento OnTick do EA.

Abaixo, tentei combinar, o mais próximo possível, uma parte dos dados registrados pelo EA de teste (à esquerda) e pela interface do usuário do MT5 (à direita). É impossível alinhá-los com precisão porque há menos ticks registrados pelo EA do que os existentes na interface do usuário do MT5. Observe também que o valor de milissegundos registrado pelo EA de teste é zero até 23:59.

O evento destacado provavelmente é o mesmo tick, mas observe que o EA de teste registra preços diferentes da interface do usuário...

O EA registra o lance 1,16504 e o pedido 1,16513 (spread = 9)

A interface do usuário do MT5 mostra a oferta de 1,16504 e a solicitação de 1,16518 (spread = 14)

 
Mr David Frederick Roberts #:


Você tem muitos "porquês", mas é difícil dar uma resposta (sem especulações). Há um problema em seu procedimento ou código-fonte.

O que você poderia fazer é publicar uma pequena parte de 8 Gb do histórico de ticks, que é fácil de importar para um símbolo personalizado e verificar seu código.

Normalmente, o SymbolInfoTick deve receber exatamente os mesmos ticks (incluindo o tempo de milissegundos) que você vê na GUI do MT5 para o mesmo símbolo personalizado.

Alguns ticks podem ser ignorados em seu EA se for necessário muito tempo para processar o tick anterior. Esse "muito" pode ser muito curto, pois os ticks podem surgir muito rapidamente. Se quiser ter certeza de que todos os ticks estão disponíveis no histórico, você deve chamar a função CopyTicks para o período desde o tick processado anteriormente. Mas esse não é o problema que você deve resolver agora - primeiro você deve descobrir o que há de errado com a abordagem atual.

 
Mr David Frederick Roberts #:

Os dados de ticks foram importados para o MT5 como um símbolo personalizado de uma exportação do meu MT4 'Tick Data Suite' usando dados da Dukascopy (arquivos CSV com cerca de 8 GB de tamanho).

Os arquivos CSV que enviei não se destinam, de forma alguma, a serem importados como dados de tick; eles são as saídas do meu EA de teste (que foi anexado), que está registrando os preços de compra e venda e a hora de cada evento OnTick recebido. Os dois são simplesmente derivados por métodos diferentes - um usando SymbolInfoDouble(...) para obter os preços de compra e venda, e o outro usando SymbolInfoTick(...). O fato de serem iguais está simplesmente provando para mim mesmo que não há diferença entre os métodos.

O quequero dizer é que os preços e horários de compra e venda nos arquivos CSV registrados pelo EA de teste não correspondem à imagem dos ticks importados na interface do usuário do MT5 (que também enviei). Então...

  1. Os horários dos ticks na captura de tela da interface do usuário não coincidem com os registrados pelo EA de teste - por que não?
  2. Os horários registrados pelo EA de teste têm um componente de zero milissegundo, exceto durante o minuto anterior à meia-noite - por quê?
  3. Embora os preços de compra registrados pelo EA de teste estejam próximos aos da interface do usuário do MT5, os preços de venda podem ser muito diferentes (e, portanto, o spread) - por quê?
  4. Os preços registrados pelo EA de teste fornecem um spread resultante que parece mudar apenas nos limites de um minuto - por quê?
  5. Há menos eventos OnTick sendo registrados pelo EA de teste do que há registros de ticks na interface do usuário do MT5.

Parece-me que há algo interferindo nos dados de tick do símbolo personalizado em seu caminho entre o repositório e o evento OnTick do EA.

Abaixo, tentei combinar, o mais próximo possível, uma parte dos dados registrados pelo EA de teste (à esquerda) e pela interface do usuário do MT5 (à direita). É impossível alinhá-los com precisão porque há menos ticks registrados pelo EA do que os existentes na interface do usuário do MT5. Observe também que o valor de milissegundos registrado pelo EA de teste é zero até 23:59.

O evento destacado provavelmente é o mesmo tick, mas observe que o EA de teste registra preços diferentes da interface do usuário...

O EA registra o lance 1,16504 e o pedido 1,16513 (spread = 9)

A interface do usuário do MT5 mostra a oferta 1,16504 e a solicitação 1,16518 (spread = 14)

Os ticks que o seu EA está coletando parecem ser ticks simulados e não ticks reais. Verifique os registros do Strategy Tester.
 
Alain Verleyen #:
Os ticks que seu EA está coletando parecem ser ticks simulados e não ticks reais. Verifique os registros do Strategy Tester.

Obrigado, Alain, concordo plenamente. Os dados de ticks estão na interface do usuário, mas, quando chegam ao EA, parece que ele pega o primeiro par Bid/Ask que encontra e aplica esse spread durante o próximo minuto - ou algo assim.

De qualquer forma, dei uma olhada no log (em anexo), mas não tenho muita certeza do que espero ver, portanto, ficaria grato se você pudesse dar uma olhada e ver se consegue identificar o que está acontecendo de errado.

Muito obrigado, David.

Arquivos anexados:
 
Mr David Frederick Roberts #:

Obrigado, Alain, concordo plenamente. Os dados de ticks estão lá na interface do usuário, mas quando chegam ao EA, parece que ele pega o primeiro par Bid/Ask que encontra e aplica esse spread durante o próximo minuto - ou algo assim.

De qualquer forma, dei uma olhada no log (em anexo), mas não tenho muita certeza do que espero ver, portanto, ficaria grato se você pudesse dar uma olhada e ver se consegue identificar o que está acontecendo de errado.

Muito obrigado, David.

Seu registro diz "every tick generating", o que significa ticks artificiais. Deveria ser "gerando com base em ticks reais". Consulte a documentação do testador.

Novamente, se quiser que outra pessoa teste seu símbolo personalizado, forneça um arquivo CSV compatível, não em seu próprio formato.

Strategy Testing - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
Strategy Testing - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
  • www.metatrader5.com
The Strategy Tester allows you to test and optimize trading strategies ( Expert Advisors ) before using them for live trading. During testing, an...
 
Stanislav Korotky #:

Seu registro diz "every tick generating", o que significa ticks artificiais. Deveria ser "generating based on real ticks" (gerando com base em ticks reais). Consulte a documentação do testador.

Novamente, se quiser que outra pessoa teste seu símbolo personalizado, forneça um arquivo CSV compatível, não em seu próprio formato.

Obrigado, Stanislav, agradeço a ajuda de todos, mas não estou chegando a lugar algum.

Verifiquei a documentação e não encontrei nada que me dissesse por que o testador geraria ticks artificiais quando ele tem um conjunto completo de dados de ticks disponíveis! Na verdade, ele afirma...

O teste e a otimização em ticks reais são os mais próximos possíveis das condições reais. Em vez de ticks gerados com base em dados de minutos, é possível usar ticks reais acumulados por um corretor. Esses são ticks de bolsas e provedores de liquidez.

Repito que os arquivos CSV são a saída do meu EA de teste, que está simplesmente escrevendo os preços dos ticks que recebe e não tem nada a ver com os dados de ticks que importei para o símbolo personalizado - portanto, seu formato é completamente irrelevante.

Ok, o que eu fiz...

  1. Exportei os dados de ticks do EURUSD do meu MT4 "Tick Data Suite" para o formato MT5 ( Tick Data Suite (eareview.net)), o que gera um enorme arquivo CSV (captura de tela abaixo).
  2. Importei esse arquivo para um símbolo personalizado no MT5, que chamei de EURUSD_TDS.
  3. Tirei uma captura de tela de uma parte dos ticks resultantes, conforme visto na interface do usuário do MT5.
  4. Escrevi um EA de teste que simplesmente grava o preço de compra e venda e o horário em cada chamada OnTick() em um arquivo CSV (eu deveria tê-lo chamado de arquivo TXT!).
  5. Executei o EA de teste no EURUSD_TDSusando as configurações mostradas na captura de tela que forneci no arquivo ZIP.
  6. Comparei os resultados no arquivo com os ticks na interface do usuário do MT5 para as mesmas datas - eles não coincidem.
  7. Procurei ajuda para saber por que eles não correspondem.
  8. Descobri que, aparentemente, o testador está gerando ticks artificiais - mas não estou mais à frente.



Tick Data Suite
  • eareview.net
Everything you need to make your Metatrader 4 backtests accurate, get 99% modeling quality and to immediately spot which expert advisor is worth your time. From download to backtest, everything has been streamlined in an easy-to-use format. Updated often and offering premium-level support, the Tick Data Suite also has an associated recurring...
 
Mr David Frederick Roberts #: Verifiquei a documentação e não encontrei nada que me dissesse por que o testador geraria ticks artificiais quando ele tem um conjunto completo de dados de ticks disponíveis! Na verdade, ele afirma...

Porque você não selecionou"Every tick based on real ticks " nas configurações do testador:


 
Andrey Khatimlianskii #:

Também me deparei com "HistoryCache: erro de leitura do cabeçalho do contêiner [0]" seguido de "HistoryBase: contêiner inválido (1970.01.01) encontrado".

Isso remove o histórico de janeiro de 2022 do histórico da ferramenta personalizada, obtendo uma lacuna de 31 de dezembro até hoje.

Isso ocorre apenas em dois computadores, os recursos são suficientes.

@Slava, quais detalhes você precisa para reproduzir?

Aconteceu novamente. Parece que foi durante a meia-noite:

FK      3       23:59:27.790    HistoryCache    'BTCUSDT.bnf' container header read error [0]
PR      3       23:59:27.790    HistoryBase     'BTCUSDT.bnf' invalid container (1970.01.01) found (off: 3144282240, size: 86589, file: 1925419658)
HQ      3       23:59:28.071    HistoryCache    'LUNAUSDT.bnf' container header read error [0]
HD      3       23:59:28.071    HistoryBase     'LUNAUSDT.bnf' invalid container (1970.01.01) found (off: 3144242580, size: 86589, file: 1925434658)
RK      3       23:59:28.344    HistoryCache    'MANAUSDT.bnf' container header read error [0]
EJ      3       23:59:28.344    HistoryBase     'MANAUSDT.bnf' invalid container (1970.01.01) found (off: 3144247980, size: 86589, file: 1925447087)
CD      3       23:59:28.633    HistoryCache    'ATOMUSDT.bnf' container header read error [0]
KQ      3       23:59:28.633    HistoryBase     'ATOMUSDT.bnf' invalid container (1970.01.01) found (off: 3144177171, size: 86589, file: 1925399738)
HN      0       00:14:15.224    Terminal        MetaTrader 5 x64 build 3210 started for MetaQuotes Software Corp.
NS      0       00:14:15.225    Terminal        Windows 10 build 17763, 20 x Intel Xeon  E5-2650 v3 @ 2.30 GHz, 12 / 15 Gb memory, 53 / 111 Gb disk, admin, GMT+3

Para que lado cavar?

 
Fernando Carreiro #:

Porque você não selecionou"Every tick based on real ticks " nas configurações do testador:


Aa, finalmente :-)

Como eu disse, estou muito mais familiarizado com o MT4 (cerca de 8 anos) e não tinha percebido que havia duas opções "£Every Tick" no MT5. Eu simplesmente o iniciei, vi que estava definido como "Every Tick" e presumi que, se houvesse ticks reais, ele os usaria.

Tinha que ser algo simples e agradeço novamente por tê-lo detectado.

David.