Testando um EA com a opção "every tick based on real ticks" ocorrem as seguintes mensagens:
Comparando os resultados desse teste com outro usando "every tick" (ticks simulados) observa-se que em ambos os casos as ordens executadas são as mesmas, mas algumas têm resultados diferentes.
O fato de que algumas ordens produzem resultados diferentes (um stop sendo atingido antes de um target, ou vice-versa) parece sugerir que são diferentes as sequências de ticks usadas em cada caso, como de fato deveriam ser. No entanto, no caso "every tick based on real ticks" duas coisas chamam a atenção:
1) As mensagens acima, que parecem indicar que os ticks reais estão sendo ignorados;
2) O histórico de ordens mostra o target ou o stop sendo atingido instantaneamente para TODAS as ordens, o que parece improvável tendo em vista que (a) target = 150 e stop = 50 e (b) o histórico de ordens usando a opção "every tick" mostra as transações durando de 2 segundos a 6 minutos, o que parece mais realista.
Afinal, "every tick based on real ticks" gera ou não os ticks reais?
"..based On Real Ticks" SÃO os ticks reais vindos da corretora. Isso não quer dizer que sejam bons (qualidade).
Execute um teste de 2 dias no modo visual para você atestar que as operações estão sendo feitas corretamente.
"..based On Real Ticks" SÃO os ticks reais vindos da corretora. Isso não quer dizer que sejam bons (qualidade).
Execute um teste de 2 dias no modo visual para você atestar que as operações estão sendo feitas corretamente.
As mensagens de descarte dos ticks reais ocorrem independentemente do dia. Foram testados diversos dias, dando sempre o mesmo problema.
Extraindo os ticks para um arquivo csv usando um script, observa-se o seguinte:
time;bid;ask;last;vol;t_msc;flags;vol_real 2022.02.01 08:55:00;118000;112280;0;0;1643705700135;6;0 2022.02.01 08:55:00;118000;111565;0;0;1643705700520;4;0 2022.02.01 08:55:23;118000;108000;0;0;1643705723357;4;0 2022.02.01 08:55:44;118315;108000;0;0;1643705744641;2;0 ... 2022.02.01 08:56:00;123795;101415;0;0;1643705760293;2;0 2022.02.01 08:56:02;123875;101415;0;0;1643705762315;2;0 2022.02.01 08:56:03;123935;101415;0;0;1643705763704;2;0 2022.02.01 08:56:45;123935;101415;0;0;1643705805982;4;0 2022.02.01 08:57:00;123935;101415;0;0;1643705820849;2;0 2022.02.01 08:57:46;123935;101415;0;0;1643705866052;4;0 2022.02.01 08:58:00;123935;101415;0;0;1643705880151;2;0 2022.02.01 08:58:47;123935;101415;0;0;1643705927271;4;0 2022.02.01 08:59:00;123935;101415;0;0;1643705940192;2;0 2022.02.01 08:59:47;123935;101415;0;0;1643705987840;4;0 2022.02.01 09:00:00;123935;101415;0;0;1643706000561;2;0 2022.02.01 09:00:48;123935;101415;0;0;1643706048435;4;0 2022.02.01 09:00:58;123935;101415;112540;87;1643706058127;312;87 2022.02.01 09:00:58;123935;101415;112540;4920;1643706058129;312;4920 2022.02.01 09:00:58;123935;101415;112535;10;1643706058149;312;10 2022.02.01 09:00:58;123935;101415;112535;3;1643706058150;312;3 ... 2022.02.01 18:24:59;113700;113730;113730;9;1643739899530;4;9 2022.02.01 18:24:59;113700;113730;113730;45;1643739899811;312;45 2022.02.01 18:24:59;113700;113730;113735;5;1643739899811;312;5 2022.02.01 18:24:59;113700;113730;113700;10;1643739899968;344;10 2022.02.01 18:25:00;113700;113715;113700;10;1643739900084;6;10 2022.02.01 18:25:00;115705;111695;113700;10;1643739900516;6;10 ... 2022.02.01 18:28:03;120000;109000;113700;10;1643740083026;6;10 2022.02.01 18:29:01;120000;109000;113700;10;1643740141782;2;10 2022.02.01 18:29:08;120000;109000;113700;10;1643740148735;4;10 2022.02.01 18:30:01;120000;109000;113700;10;1643740201267;2;10 2022.02.01 18:30:06;120000;108000;113700;10;1643740206006;4;10 2022.02.01 18:31:02;120000;108000;113700;10;1643740262983;2;10 2022.02.01 18:31:10;120000;108000;113700;10;1643740270439;4;10 2022.02.01 18:31:24;120000;108000;113745;242;1643740284848;312;242 2022.02.01 18:31:24;113740;113745;113745;242;1643740284852;6;242 2022.02.01 18:31:24;113740;113745;113745;11118;1643740284852;312;11118 2022.02.01 19:30:00;0;0;113745;11118;1643743800025;6;11118
O começo do arquivo apresenta alguns ticks antes da abertura do pregão (8:55, 8:56...) e o fim do arquivo apresenta alguns após o encerramento (18:30, 19:30).
Fica a dúvida de se não seriam esses ticks de antes das 9:00 e depois da 18:25 que fariam o Tester detectar uma discrepância entre o histórico de ticks e o histórico de candles M1.
Uma forma de testar essa hipótese seria poder restringir o teste a um intervalo de tempo específico, por exemplo 9:00-18:25. Infelizmente não identifiquei no Tester nenhuma opção desse tipo. O único filtro disponível parece ser por data, sendo que a data implicitamente é a data cheia. Não sei se estou deixando de ver alguma coisa...
As mensagens de descarte dos ticks reais ocorrem independentemente do dia. Foram testados diversos dias, dando sempre o mesmo problema.
Extraindo os ticks para um arquivo csv usando um script, observa-se o seguinte:
O começo do arquivo apresenta alguns ticks antes da abertura do pregão (8:55, 8:56...) e o fim do arquivo apresenta alguns após o encerramento (18:30, 19:30).
Fica a dúvida de se não seriam esses ticks de antes das 9:00 e depois da 18:25 que fariam o Tester detectar uma discrepância entre o histórico de ticks e o histórico de candles M1.
Uma forma de testar essa hipótese seria poder restringir o teste a um intervalo de tempo específico, por exemplo 9:00-18:25. Infelizmente não identifiquei no Tester nenhuma opção desse tipo. O único filtro disponível parece ser por data, sendo que a data implicitamente é a data cheia. Não sei se estou deixando de ver alguma coisa...
Ticks antes do começo do pregão são de Leilão, mas duvido que sejam confiáveis. Os de pós fechamento são do after market.
O mínimo que um EA deve ter é restrição de horário para operar. implemente isso.
Ticks antes do começo do pregão são de Leilão, mas duvido que sejam confiáveis. Os de pós fechamento são do after market.
O mínimo que um EA deve ter é restrição de horário para operar. implemente isso.
Bom Dia Flávio,
Obrigado pela ajuda. Mas observe o seguinte: isso está implementado. Inclusive, quando me surgiram dúvidas sobre isso, restringi o horário de operação do robot de 10h às 15h e não faz diferença. Não faz diferença porque é o Tester que pega os ticks da corretora, faz alguma validação em cima deles e decide descartá-los. ANTES de o robot ser acionado ou ter qualquer oportunidade de decidir sobre isso.
Enfim... Ausente algum recurso no Tester para permitir filtrar os ticks durante o processo de load e validação (antes do acionamento do robot) parecem restar duas opções:
1) Repetir o procedimento em outra corretora (atualmente estou usando a Clear) ;
2) Desenvolver um script de simulação que não dependa do Tester.
Mas, mais uma vez, obrigado pela ajuda.
Bom Dia Flávio,
Obrigado pela ajuda. Mas observe o seguinte: isso está implementado. Inclusive, quando me surgiram dúvidas sobre isso, restringi o horário de operação do robot de 10h às 15h e não faz diferença. Não faz diferença porque é o Tester que pega os ticks da corretora, faz alguma validação em cima deles e decide descartá-los. ANTES de o robot ser acionado ou ter qualquer oportunidade de decidir sobre isso.
Enfim... Ausente algum recurso no Tester para permitir filtrar os ticks durante o processo de load e validação (antes do acionamento do robot) parecem restar duas opções:
1) Repetir o procedimento em outra corretora (atualmente estou usando a Clear) ;
2) Desenvolver um script de simulação que não dependa do Tester.
Mas, mais uma vez, obrigado pela ajuda.
Eu suspeito de qualidade de histórico. Experimente com outra corretora.
De novo, use o backteste visual para corroborar se as suas operacoes estao sendo feitas nos locais e momentos corretos.
Testando um EA com a opção "every tick based on real ticks" ocorrem as seguintes mensagens:
Comparando os resultados desse teste com outro usando "every tick" (ticks simulados) observa-se que em ambos os casos as ordens executadas são as mesmas, mas algumas têm resultados diferentes.
O fato de que algumas ordens produzem resultados diferentes (um stop sendo atingido antes de um target, ou vice-versa) parece sugerir que são diferentes as sequências de ticks usadas em cada caso, como de fato deveriam ser. No entanto, no caso "every tick based on real ticks" duas coisas chamam a atenção:
1) As mensagens acima, que parecem indicar que os ticks reais estão sendo ignorados;
2) O histórico de ordens mostra o target ou o stop sendo atingido instantaneamente para TODAS as ordens, o que parece improvável tendo em vista que (a) target = 150 e stop = 50 e (b) o histórico de ordens usando a opção "every tick" mostra as transações durando de 2 segundos a 6 minutos, o que parece mais realista.
Afinal, "every tick based on real ticks" gera ou não os ticks reais?
São sim mas você terá de baixar eles antes, exportar, e importar para um símbolo personalizado que você crie...
Na janela de ativos você consegue fazer tudo citado acima.....Expliquei com mais detalhes aqui também https://www.mql5.com/pt/forum/388772/page2#comment_27844101
- 2022.02.13
- www.mql5.com
São sim mas você terá de baixar eles antes, exportar, e importar para um símbolo personalizado que você crie...
Na janela de ativos você consegue fazer tudo citado acima.....Expliquei com mais detalhes aqui também https://www.mql5.com/pt/forum/388772/page2#comment_27844101
Oi Adailton.
Obrigado pelas dicas!! Importantes de fato.
No interim, já tinha percebido a necessidade de baixar os ticks e usar Custom Symbols. Como pretendo usar candles atemporais (por número de ticks ou volume) que infelizmente não estão disponíveis no MetaTrader, acabei criando um pequeno simulador e estou terminando de desenvolver um visualizador.
E baixo todos os dias os ticks do WIN e WDO, o que também é simples de fazer com um programa. Obviamente, o histórico não é longo, mas pelo menos temos a certeza de que são dados confiáveis.
Agora é recomeçar os testes e focar na estratégia.
Oi Adailton.
Obrigado pelas dicas!! Importantes de fato.
No interim, já tinha percebido a necessidade de baixar os ticks e usar Custom Symbols. Como pretendo usar candles atemporais (por número de ticks ou volume) que infelizmente não estão disponíveis no MetaTrader, acabei criando um pequeno simulador e estou terminando de desenvolver um visualizador.
E baixo todos os dias os ticks do WIN e WDO, o que também é simples de fazer com um programa. Obviamente, o histórico não é longo, mas pelo menos temos a certeza de que são dados confiáveis.
Agora é recomeçar os testes e focar na estratégia.
De fato, o problema é que o histórico estará retido ao período do contrato, ainda não estudei se há possibilidade de juntar períodos de contratos diferentes em um único arquivo *.csv (que é o que ele baixa) e obter mais tempo para realizar os testes.
Caso alguém leia e saiba como fazer, serei grato desde já.
No mais é como você mesmo disse Filipe, recomeçar e focar na estratégia.
Lhe desejo sucesso por aí.
De fato, o problema é que o histórico estará retido ao período do contrato, ainda não estudei se há possibilidade de juntar períodos de contratos diferentes em um único arquivo *.csv (que é o que ele baixa) e obter mais tempo para realizar os testes.
Caso alguém leia e saiba como fazer, serei grato desde já.
No mais é como você mesmo disse Filipe, recomeçar e focar na estratégia.
Lhe desejo sucesso por aí.
Observe que os ticks em si são "anônimos", no sentido em que neles não existe qualquer identificação do ativo (WING22, WINJ22...). Então, sim, vc sempre poderia concatenar os arquivos o que, dependendo da extensão do período que se pertenda processar, pode ficar meio inconveniente.
Uma solução que me parece mais prática, e a que estou usando, é manter os arquivos separados (um arquivo por dia) e usar uma lógica que os leia e gere um fluxo contínuo de ticks.
No exemplo em anexo, a parte importante é a função nextLine, onde os arquivos são abertos e lidos sequencialmente, dependendo de um padrão de pesquisa que suporta wildcards conforme disponibilizado pela função da API FileFindFirst.
A lógica dentro do while loop em OnStart é apenas para efeitos de teste, gerando um log com as quebras de hora cheia. Num simulador, é aqui que entraria a lógica de agregação de candles seguida da lógica de trading.
Forte Abraço.
Observe que os ticks em si são "anônimos", no sentido em que neles não existe qualquer identificação do ativo (WING22, WINJ22...). Então, sim, vc sempre poderia concatenar os arquivos o que, dependendo da extensão do período que se pertenda processar, pode ficar meio inconveniente.
Uma solução que me parece mais prática, e a que estou usando, é manter os arquivos separados (um arquivo por dia) e usar uma lógica que os leia e gere um fluxo contínuo de ticks.
No exemplo em anexo, a parte importante é a função nextLine, onde os arquivos são abertos e lidos sequencialmente, dependendo de um padrão de pesquisa que suporta wildcards conforme disponibilizado pela função da API FileFindFirst.
A lógica dentro do while loop em OnStart é apenas para efeitos de teste, gerando um log com as quebras de hora cheia. Num simulador, é aqui que entraria a lógica de agregação de candles seguida da lógica de trading.
Forte Abraço.
Nossa nobre, obrigada por disponibilizar o arquivo, vou estudar ele e sua idéia para realizar um teste assim que possível.
No momento estou com os dados em arquivos imensos de 2gb para mais a depender do contrato.
Preciso terminar o desenvolvimento de algumas lógicas para começar a estudar essa questão....mais uma vez, muito obrigada pelo empurrãozinho.
Olha, se quiser conversar mais, manda um pm.
Abraço, até mais.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Testando um EA com a opção "every tick based on real ticks" ocorrem as seguintes mensagens:
Comparando os resultados desse teste com outro usando "every tick" (ticks simulados) observa-se que em ambos os casos as ordens executadas são as mesmas, mas algumas têm resultados diferentes.
O fato de que algumas ordens produzem resultados diferentes (um stop sendo atingido antes de um target, ou vice-versa) parece sugerir que são diferentes as sequências de ticks usadas em cada caso, como de fato deveriam ser. No entanto, no caso "every tick based on real ticks" duas coisas chamam a atenção:
1) As mensagens acima, que parecem indicar que os ticks reais estão sendo ignorados;
2) O histórico de ordens mostra o target ou o stop sendo atingido instantaneamente para TODAS as ordens, o que parece improvável tendo em vista que (a) target = 150 e stop = 50 e (b) o histórico de ordens usando a opção "every tick" mostra as transações durando de 2 segundos a 6 minutos, o que parece mais realista.
Afinal, "every tick based on real ticks" gera ou não os ticks reais?