Teste de retrocesso com dados de carrapatos

 

Teste de retrocesso com dados de carrapatos

Acho que encontrei uma boa maneira de fazer isto no metatrader - e consegui um caminho justo através deste método, mas tenho STUCK e procuro alguma ajuda com a etapa final.

1) Recebi dados de um símbolo (fonte comercial) de uma empresa: CL (petróleo) fontes livres, por exemplo, dukascopy etc., não têm este símbolo.
2) Utilizou o software da empresa para renderizar estes dados de tick em um formato de barra (sem qualquer perda de resolução). O formato de barra:

data, hora, aberto, alto, baixo, fechado, volume

Cada barra tem apenas 1 carrapato! Portanto, para uma determinada barra, o aberto, o alto, o baixo, o fechado são todos iguais porque apenas 1 carrapato na barra.

3) Eu obtenho estes dados de tick no metatrader testador de estratégia, indo às pastas do histórico do metatrader e apagando quaisquer arquivos relevantes presentes ali. Abro o metatrader offline e uso o centro de Histórico e a função de importação para obter os dados lá dentro. É claro que, embora sejam dados de tick - com seu formato de barra - eles são aceitos ok pelo metatrader. Ao usar o testador de estratégias (ainda offline, é claro) posso acessar esses dados.

4) MAS o problema: De acordo com o metatrader, nestes dados há várias barras com a mesma data e hora (porque o metatrader ignora os segundos; os menores considerados são os minutos). Acho que a solução para isso é MUDAR os dados para que todas as barras tenham carimbos de data e hora diferentes (com uma resolução que possa ser capturada pelo metatrader). Assim, por exemplo, se
um bar tem um carimbo de horário de 18:00:00 e o outro tem um carimbo de horário de 18:00:08 - então este segundo bar deve ser mudado para ter um carimbo de horário de 18:01:00. Para que possa ser pegado como o próximo bar pelo metatrader. Isto mudaria todos os carimbos de horário (e os carimbos de data no devido tempo), é claro, mas não acho que isto realmente importa. Minha pergunta é - COMO POSSO MUDAR TODAS AS DATAS E HORÁRIOS NESTE MODO?

É claro, os dados têm muitas entradas para o Excel. Tenha acesso ao microsoft Access.

Talvez algum roteiro que acrescentaria 1 segundo iterativamente a cada entrada funcionasse. Mas teria que mudar a hora de acordo com o tempo à medida que subíssemos e depois a data, é claro. Isto é o que me deixa preso. Não sei como fazer isso.


uma amostra dos meus dados de carrapatos baseados em barras é cortada e colada em baixo
(são dados CL - sweet crude oil future)

data, hora, aberto, alto, baixo, fechado, volume
20100831,18:00:00,71.70,71.70,71.70,71.70,2
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:00,71.70,71.70,71.70,71.70,1
20100831,18:00:01,71.73,71.73,71.73,71.73,2
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.73,71.73,71.73,71.73,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.74,71.74,71.74,71.74,1
20100831,18:00:01,71.75,71.75,71.75,71.75,7
20100831,18:00:01,71.75,71.75,71.75,71.75,1
20100831,18:00:04,71.75,71.75,71.75,71.75,1
20100831,18:00:05,71.74,71.74,71.74,71.74,1
20100831,18:00:05,71.75,71.75,71.75,71.75,1
20100831,18:00:05,71.75,71.75,71.75,71.75,3
20100831,18:00:08,71.75,71.75,71.75,71.75,7
20100831,18:00:09,71.75,71.75,71.75,71.75,1
20100831,18:00:10,71.75,71.75,71.75,71.75,1
20100831,18:00:10,71.75,71.75,71.75,71.75,1
20100831,18:00:10,71.71,71.71,71.71,71.71,1
20100831,18:00:11,71.70,71.70,71.70,71.70,1
20100831,18:00:11,71.68,71.68,71.68,71.68,1
20100831,18:00:19,71.71,71.71,71.71,71.71,1
20100831,18:00:19,71.71,71.71,71.71,71.71,1
20100831,18:00:19,71.69,71.69,71.69,71.69,1
20100831,18:00:19,71.69,71.69,71.69,71.69,1
20100831,18:00:19,71.68,71.68,71.68,71.68,2
20100831,18:00:19,71.67,71.67,71.67,71.67,1
20100831,18:00:34,71.72,71.72,71.72,71.72,1
20100831,18:00:34,71.72,71.72,71.72,71.72,1
20100831,18:00:35,71.72,71.72,71.72,71.72,1
20100831,18:00:37,71.72,71.72,71.72,71.72,1
20100831,18:00:56,71.71,71.71,71.71,71.71,1
20100831,18:00:56,71.71,71.71,71.71,71.71,1
20100831,18:00:56,71.70,71.70,71.70,71.70,1
20100831,18:01:00,71.71,71.71,71.71,71.71,1
20100831,18:01:02,71.72,71.72,71.72,71.72,1
20100831,18:01:11,71.71,71.71,71.71,71.71,1
20100831,18:01:12,71.71,71.71,71.71,71.71,1
20100831,18:01:13,71.71,71.71,71.71,71.71,1
20100831,18:01:16,71.70,71.70,71.70,71.70,1
20100831,18:01:26,71.70,71.70,71.70,71.70,3
20100831,18:01:26,71.70,71.70,71.70,71.70,5
20100831,18:01:28,71.70,71.70,71.70,71.70,1
20100831,18:01:33,71.71,71.71,71.71,71.71,1
20100831,18:01:36,71.70,71.70,71.70,71.70,4
20100831,18:01:45,71.70,71.70,71.70,71.70,1
20100831,18:01:46,71.71,71.71,71.71,71.71,2
20100831,18:01:46,71.71,71.71,71.71,71.71,4
20100831,18:01:49,71.71,71.71,71.71,71.71,1
20100831,18:02:19,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:25,71.70,71.70,71.70,71.70,1
20100831,18:02:26,71.70,71.70,71.70,71.70,1
20100831,18:02:26,71.70,71.70,71.70,71.70,1
20100831,18:02:39,71.74,71.74,71.74,71.74,1
20100831,18:03:10,71.74,71.74,71.74,71.74,1
20100831,18:03:29,71.75,71.75,71.75,71.75,1
20100831,18:03:34,71.75,71.75,71.75,71.75,1
20100831,18:03:34,71.77,71.77,71.77,71.77,1
20100831,18:03:41,71.78,71.78,71.78,71.78,1
20100831,18:03:41,71.78,71.78,71.78,71.78,5
20100831,18:03:41,71.78,71.78,71.78,71.78,5
20100831,18:03:41,71.79,71.79,71.79,71.79,1
20100831,18:03:44,71.78,71.78,71.78,71.78,1
20100831,18:03:50,71.78,71.78,71.78,71.78,1
20100831,18:03:52,71.79,71.79,71.79,71.79,1
20100831,18:04:14,71.79,71.79,71.79,71.79,1
20100831,18:04:14,71.79,71.79,71.79,71.79,1
20100831,18:04:14,71.80,71.80,71.80,71.80,1
20100831,18:04:14,71.80,71.80,71.80,71.80,2

Note que posso realmente renderizar os dados sem segundos e apenas em minutos, o que pode ajudar na solução.

20100831,18:00,71.70,71.70,71.70,71.70,2
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.73,71.73,71.73,71.73,2
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.73,71.73,71.73,71.73,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.75,71.75,71.75,71.75,7
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.74,71.74,71.74,71.74,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,3
20100831,18:00,71.75,71.75,71.75,71.75,7
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.75,71.75,71.75,71.75,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:00,71.68,71.68,71.68,71.68,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.69,71.69,71.69,71.69,1
20100831,18:00,71.69,71.69,71.69,71.69,1
20100831,18:00,71.68,71.68,71.68,71.68,2
20100831,18:00,71.67,71.67,71.67,71.67,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.72,71.72,71.72,71.72,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.71,71.71,71.71,71.71,1
20100831,18:00,71.70,71.70,71.70,71.70,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.72,71.72,71.72,71.72,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.70,71.70,71.70,71.70,1
20100831,18:01,71.70,71.70,71.70,71.70,3
20100831,18:01,71.70,71.70,71.70,71.70,5
20100831,18:01,71.70,71.70,71.70,71.70,1
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:01,71.70,71.70,71.70,71.70,4
20100831,18:01,71.70,71.70,71.70,71.70,1
20100831,18:01,71.71,71.71,71.71,71.71,2
20100831,18:01,71.71,71.71,71.71,71.71,4
20100831,18:01,71.71,71.71,71.71,71.71,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.70,71.70,71.70,71.70,1
20100831,18:02,71.74,71.74,71.74,71.74,1
20100831,18:03,71.74,71.74,71.74,71.74,1
20100831,18:03,71.75,71.75,71.75,71.75,1
20100831,18:03,71.75,71.75,71.75,71.75,1
20100831,18:03,71.77,71.77,71.77,71.77,1
20100831,18:03,71.78,71.78,71.78,71.78,1
20100831,18:03,71.78,71.78,71.78,71.78,5
20100831,18:03,71.78,71.78,71.78,71.78,5
20100831,18:03,71.79,71.79,71.79,71.79,1
20100831,18:03,71.78,71.78,71.78,71.78,1
20100831,18:03,71.78,71.78,71.78,71.78,1
20100831,18:03,71.79,71.79,71.79,71.79,1
20100831,18:04,71.79,71.79,71.79,71.79,1
20100831,18:04,71.79,71.79,71.79,71.79,1
20100831,18:04,71.80,71.80,71.80,71.80,1
20100831,18:04,71.80,71.80,71.80,71.80,2
20100831,18:04,71.80,71.80,71.80,71.80,1
20100831,18:04,71.80,71.80,71.80,71.80,3
20100831,18:04,71.80,71.80,71.80,71.80,17
20100831,18:04,71.80,71.80,71.80,71.80,1
20100831,18:04,71.80,71.80,71.80,71.80,4
20100831,18:04,71.79,71.79,71.79,71.79,1

 
O Testador usa arquivos FXT e estes também têm segundos. Infelizmente estes arquivos FXT são sobrescritos em cada teste sucessivo e assim os usuários não podem colocar seus próprios dados (nas versões antigas do MT4 era possível -> https://www.mql5.com/en/forum/103180/page6#321081). Há uma maneira de superar este obstáculo... Veja aqui para informações detalhadas -> http://eareview.net/tick-data.
 

esse site parece ser a resposta padrão a qualquer tiquetaque.

Mas o que eu estou tentando fazer é algo diferente (eu fiz um caminho diferente porque meus dados do tick NÃO são da mesma fonte que aquele website assume - ele tem um ponto de partida diferente e, portanto, não é adequado para os arquivos/sistemas de conversão oferecidos).

De fato, com meu método NÃO há necessidade de usar uma versão antiga do metatrader. Se eu estiver correto. Eu também estou quase lá - só preciso de ajuda na última etapa final,

 

O que você acha?

1) Está em um caminho válido?

Como digo - não posso usar o caminho a la que o site (Birt EA) não é válido para o meu ponto de partida.

2) Se sim - você tem alguma idéia para superar este último ponto de colisão em que estou me metendo?

 
Ou você não entendeu o método de Birt ou eu não entendo u. O seguinte não faz sentido:


mikey:

[...]

4) MAS o problema: De acordo com o metatrader, nestes dados há várias barras com a mesma data e hora (porque o metatrader ignora os segundos; os menores que considera são minutos). Penso que a solução para isto é MUDAR os dados para que todas as barras tenham carimbos de data e hora diferentes (com uma resolução que possa ser capturada pelo metatrader). [...]

Isso não vai resolver nada, uma vez que o Testador sempre vai interpolar primeiro os Ticks para voltar atrás, independentemente do que você fizer no centro de história. A idéia principal por trás do método de Birt é substituir o arquivo de carrapatos interpolados por um arquivo contendo carrapatos reais para o Testador testar. Mesmo que você tenha sucesso em sua tentativa atual, o Testador ainda assim interpolaria os carrapatos para testar, por isso não faz sentido.


Recomendo que você leia isto -> https://www.mql5.com/en/articles/1511 e leia novamente o tutorial de Birt. Seu objetivo deve ser criar um arquivo FXT adequado com carrapatos reais para substituir o arquivo FXT gerado pelo Testador. Usando o método de Birt, você pode desativar o "recálculo" e assim fazer o Testador usar seu arquivo FXT (com seus ticks reais).

 

Tudo depende disso:

1) O metatrader interpola carrapatos apenas com barras? (Acho que sim)

2) E faz isto como guiado e limitado pelos valores dados da barra: aberto, alto, baixo, fechado?

Se [1] e [2] forem verdadeiros, acho que meu método é válido porque em meu método cada barra tem apenas 1 carrapato. Portanto, os valores aberto, alto, baixo e fechado são todos iguais em valor. Assim, quando o metatrader usa estes para interpolar carrapatos - todos os carrapatos interpolados recebem exatamente o mesmo valor/preço. Portanto, a interpolação de carrapatos novos por metatrader não é um problema - não muda nada.

Acho que faço o que é preciso e acho que posso estar no caminho para o que acredito ser uma maneira melhor de fazer as coisas. MAS eu tenho que ser corrigido. Talvez eu esteja sendo ingênuo.

 
mikey:

1) O metatrader interpola carrapatos apenas com barras? (Eu acho que sim)

2) E faz isto como guiado e limitado pelos valores dados da barra: aberto, alto, baixo, fechado?

Se [1] e [2] forem verdadeiros, acho que meu método é válido porque em meu método cada barra tem apenas 1 carrapato. Portanto, os valores aberto, alto, baixo e fechado são todos iguais em valor. Assim, quando o metatrader usa estes para interpolar carrapatos - todos os carrapatos interpolados recebem exatamente o mesmo valor/preço. Portanto, a interpolação de carrapatos novos por metatrader não é um problema - não muda nada. [...]

Eu vejo... Obrigado por esclarecer isso. Bem, se a barra tem O=C=H=L e volume=1, então de fato só deve ser formado 1 carrapato. Mas isso significaria que você está 'esticando' a escala de tempo pelo volume médio da barra. E u estão "esticando-a uniformemente", embora barras diferentes tenham volumes diferentes. Isto deveria ter severos efeitos sobre a maioria dos especialistas. Isso também significaria que as datas/horas dos relatórios de teste seriam alongadas e que a troca seria feita inúmeras vezes mais do que deveria. Isto parece extremamente pouco confiável e eu acho que simplesmente não 'funcionará' para a maioria dos especialistas.


De qualquer forma, para responder à sua pergunta de "como fazer". Basta criar um arquivo M1 HST com cada barra representando um único tick. Isto pode ser feito através de um roteiro. A estrutura do arquivo HST está documentada no manual (Terminal Help) e você pode reutilizar algum código do script csv2fxt.


p.s. Se você estiver interessado em como a interpolação é feita no Testador, há um bom artigo sobre como ela é feita no MT5 Tester... Deve ser muito semelhante (se não o mesmo) ao que está acontecendo no Testador MT4 -> https://www.mql5.com/en/articles/75.

 

Como um esclarecimento adicional ao meu último:

Cada carrapato recebe sua própria barra M1 (uma barra com um carimbo de data e hora único, com hora na resolução de minutos inteiros).

Portanto, isto significa que a hora é alterada - a barra de um carrapato pode ter uma hora muito diferente de quando esse carrapato realmente aconteceu.

Mas isto NÃO é um problema para mim. Eu não preciso saber a hora com precisão. Sei quais dados coloquei no backtest (desta data até aquela data) e saberei no final se houve lucro ou prejuízo no final deste período com este método. (a data/tempo exato no gráfico de saída não me diz respeito)

Mais uma vez - estou para ser corrigido. Isto é tudo som ou loucura? Por favor, reserve um tempo para entender o que eu disse em vez de apenas me referir ao Birts. porque se eu conseguir fazer isto passar corretamente e retransmiti-lo e se for bom - eu acho que pode ser uma maneira melhor de fazer as coisas.

 

mikey:

[...] Mas isto NÃO é um problema para mim. Eu não preciso saber o tempo com precisão. Sei quais dados coloquei no backtest (desta data até aquela data) e saberei no final se houve lucro ou prejuízo no final deste período com este método. (a data/tempo exato no gráfico de saída não me diz respeito) [...]

OK. Mas você está absolutamente certo de que isso não afetará o especialista? Por exemplo - qualquer especialista que se baseie em considerações de prazos ou indianos que se baseiem em prazos não funcionará como deveria. Você também terá que redefinir a troca para zero, pois com certeza não será calculado corretamente. Pode haver outro lado que não estou pensando agora... Parece-me muito perigoso.
 
BTW, u terá que raspar os dados de volume, uma vez que é irrelevante para a forma como são calculados em MT4 (volume = número de ticks recebidos em uma barra).
 

Sim, sua resposta acabou de chegar quando eu enviei minha última resposta.

RE: volume...- se meu EA não "ler" o volume, estou seguro? Não tem que se preocupar com isso? Eu não pensei no volume - mas então como eu digo, meu EA não o "lê" para nada. Então, só para esclarecer - eu posso ignorar o volume? Ou talvez eu deva definir o volume para 1 para todas as barras?

Razão: