Diferença de 0.5 ponto entre simulação e produção

 

Olá, pessoal!

Vi alguns posts aqui no fórum com questionamentos parecidos, mas não exatamente o mesmo. Por isso, pergunto:

Desenvolvi um EA e fiquei alguns meses testando e aprimorando o código.

Agora que fui para "produção", noto que ao comparar o resultado do dia anterior, há diferenças que não consigo explicar.

Vejam o exemplo de antes de ontem (26/3) para mini dólar:



Notem que há sempre uma diferença de 0.5 ponto entre o valor da operação na conta real e a operação na conta demo.

Isso pode deixar minhas simulações/testes bem diferentes da realidade.


Há alguma configuração ser realizada na conta demo ou real para evitar isso?

Alguma ideia/dica?


Grato!

 
Flávio Henrique:

Olá, pessoal!

Vi alguns posts aqui no fórum com questionamentos parecidos, mas não exatamente o mesmo. Por isso, pergunto:

Desenvolvi um EA e fiquei alguns meses testando e aprimorando o código.

Agora que fui para "produção", noto que ao comparar o resultado do dia anterior, há diferenças que não consigo explicar.

Vejam o exemplo de antes de ontem (26/3) para mini dólar:



Notem que há sempre uma diferença de 0.5 ponto entre o valor da operação na conta real e a operação na conta demo.

Isso pode deixar minhas simulações/testes bem diferentes da realidade.


Há alguma configuração ser realizada na conta demo ou real para evitar isso?

Alguma ideia/dica?


Grato!

Diferenças entre conta demo e conta real podem ter várias explicações (latência de rede, slippage, filas do livro de ofertas, congestionamento momentâneo do servidor, etc.)

No seu caso, como o volume negociado é unitário, não vai ocorrer slippage e acho mais provável a diferença ser devida ao atraso adicional na execução da ordem na conta real, correspondente à latência de rede no percurso ida-e-volta entre corretora e bolsa (tem também o tempo de espera na fila de execução do servidor da bolsa, mas este último deve ser bem pequeno, provavelmente insignificante, exceto em momentos muito críticos).

No teu caso, o que vc poderia fazer para reduzir a diferença e ter uma simulação mais realista na conta demo seria incluir no seu robô um atraso artificial no momento de enviar a ordem, colocando um comando Sleep(nnn) antes de enviar a ordem, onde "nnn" é o número de milissegundos de atraso. O ideal seria colocar exatamente metade da latência indicada pelo terminal qdo vc está logado na conta real. Insira o atraso somente qdo operar conta demo. Na conta real não inclua o atraso.

Mas mesmo assim não será muito realista, pois a latência varia muito no tempo (o que aparece no terminal é uma média), mas deve ficar mais próximo da realidade.

O ideal é, tão logo vc tenha certeza de que o seu robô não vai te gerar nenhuma catástrofe financeira (que vai ficar, na pior das hipóteses, próximo ao "zero-a-zero"), abandonar a conta demo e passar a testar diretamente na conta real, com volume mínimo, como vc está fazendo, e ir refinando sua estratégia na própria conta real. Nesse caso, não deixei de incluir no algoritmo do robô um mecanismo para zerar posição e suspender a negociação no caso de o prejuízo exceder algum limite, para evitar prejuízos grandes no caso de haver algum bug. 

 

Olá, Patinhas. Boa noite e obrigado pela resposta.

Esqueci de dizer que não foi só nesse dia.

É um comportamento diário e que sempre ocorre. Então, penso que não seja a latência.

Quando simulo, utilizo a latência média que tenho em produção e minhas ordens são lançadas com antecedência de alguns pontos, o que me faz acreditar que não precisaria adicionar um sleep no código.


Vi alguém comentando em outro post que poderia ser algo do tipo: na conta demo, para garantir que meu preço foi aceito, a simulação sempre aguarda o preço ser ultrapassado pelo tick mínimo do ativo para efetivar a operação. Ou seja, a simulação garante que o meu preço foi todo "consumido" e, aí sim, realiza minha operação. E isso faria que sempre houvesse uma diferença na simulação.


Isso faz sentido pra você? Já ouviu falar algo sobre isso?


Obrigado!

 
Flávio Henrique:

Olá, Patinhas. Boa noite e obrigado pela resposta.

Esqueci de dizer que não foi só nesse dia.

É um comportamento diário e que sempre ocorre. Então, penso que não seja a latência.

Quando simulo, utilizo a latência média que tenho em produção e minhas ordens são lançadas com antecedência de alguns pontos, o que me faz acreditar que não precisaria adicionar um sleep no código.


Vi alguém comentando em outro post que poderia ser algo do tipo: na conta demo, para garantir que meu preço foi aceito, a simulação sempre aguarda o preço ser ultrapassado pelo tick mínimo do ativo para efetivar a operação. Ou seja, a simulação garante que o meu preço foi todo "consumido" e, aí sim, realiza minha operação. E isso faria que sempre houvesse uma diferença na simulação.


Isso faz sentido pra você? Já ouviu falar algo sobre isso?


Obrigado!

Flavio,


A diferença de 0.5 eh minima e não vai conseguir melhor do que isso, pouco importa a causa. Se vai impactar negativamente e fortemente em sua estrategia, devera repensa-la. As observações do @Trader_Patinhas foram pontuais e não vai conseguir fugir do cenário de que conta demo e produção são diferentes. Alias, se os resultados fossem os mesmos eu ficaria desconfiado!


Em seu lugar deixaria essa avaliação de lado e passaria a avaliar o quanto a estrategia eh vencedora na conta real. Se ganhar mais do que perder, apostaria nela. 


$uce$$o!


[ ]'s

 
Flávio Henrique:

Olá, Patinhas. Boa noite e obrigado pela resposta.

Esqueci de dizer que não foi só nesse dia.

É um comportamento diário e que sempre ocorre. Então, penso que não seja a latência.

Quando simulo, utilizo a latência média que tenho em produção e minhas ordens são lançadas com antecedência de alguns pontos, o que me faz acreditar que não precisaria adicionar um sleep no código.


Vi alguém comentando em outro post que poderia ser algo do tipo: na conta demo, para garantir que meu preço foi aceito, a simulação sempre aguarda o preço ser ultrapassado pelo tick mínimo do ativo para efetivar a operação. Ou seja, a simulação garante que o meu preço foi todo "consumido" e, aí sim, realiza minha operação. E isso faria que sempre houvesse uma diferença na simulação.


Isso faz sentido pra você? Já ouviu falar algo sobre isso?


Obrigado!


>>> É um comportamento diário e que sempre ocorre. Então, penso que não seja a latência.

Por que o fato de ser um comportamento diário descarta a hipótese de latência como causa? A latência ocorrerá o tempo todo, em todas as ordens.


>>> Quando simulo, utilizo a latência média que tenho em produção e minhas ordens são lançadas com antecedência de alguns pontos, o que me faz acreditar que não precisaria adicionar um sleep no código.

Não entendi. Que tipo de simulação é essa? Eu estava entendendo que vc se referia a simulação em conta demo (não Strategy Tester ou outro tipo de simulação).

Se vc estiver falando de conta demo, o que significa "utilizo a latência média que tenho em produção" ? Dá pra ajustar a latência da conta demo?

A minha ideia de inserir o Sleep era exatamente para aumentar artificialmente a latência da conta demo para ficar próxima da latência da conta real. Vc consegue fazer isso de algum outro jeito?


>>> [...] a simulação sempre aguarda o preço ser ultrapassado pelo tick mínimo do ativo para efetivar a operação [...]
>>>
Isso faz sentido pra você? Já ouviu falar algo sobre isso?

Se "simulação" significar conta demo, pra mim faz sentido sim.

Dentre as possíveis causas que mencionei, isso aí se encaixa no item "fila do livro de ofertas". A conta demo não simula a fila no livro de ofertas que existe na conta real. Isso também pode estar contribuindo para as diferenças observadas. 

 
Joscelino Celso de Oliveira:

Flavio,

A diferença de 0.5 eh mínima [...] 

Joscelino, só uma observação: isso aí depende da frequência com que o robô negocia.

Se a estratégia do robô for seguir tendência buscando ganhos de 10, 20, 50 pontos tudo bem.

Nesse caso 0,5 ponto realmente vai ser insignificante e será mais eficaz se preocupar em aperfeiçoar a estratégia do que se preocupar com essa diferença.

Mas, por exemplo, pra quem opera em alta frequência fazendo uma média de 100 trades por dia buscando ganhar 1 ou 1,5 pontos em cada trade, uma perda de 0,5 pontos em cada trade significa 50 pontos a menos POR DIA!

Mesmo pra quem opera apenas 1 minicontratinho de WDO, isso vai significar R$ 500 a menos POR DIA, ou uns R$ 10 mil a menos no fim do mês.

Pra quem opera no DOL com volume mínimo de 5 contratos isso vai significar R$ 12.500 por dia, ou R$ 250 mil no mês.

Concordo contigo quando vc diz pro Flavio que não dá pra conseguir melhor que isso.

De fato, não tem como evitar essa perda.

A ideia aqui é apenas tentar fazer uma simulação mais realista, estimando essa diferença da forma mais precisa que for possível na simulação em conta demo, para evitar desilusões dolorosas na hora levar o robô pra conta real.

 

 

 
Trader_Patinhas:

Joscelino, só uma observação: isso aí depende da frequência com que o robô negocia.

Se a estratégia do robô for seguir tendência buscando ganhos de 10, 20, 50 pontos tudo bem.

Nesse caso 0,5 ponto realmente vai ser insignificante e será mais eficaz se preocupar em aperfeiçoar a estratégia do que se preocupar com essa diferença.

Mas, por exemplo, pra quem opera em alta frequência fazendo uma média de 100 trades por dia buscando ganhar 1 ou 1,5 pontos em cada trade, uma perda de 0,5 pontos em cada trade significa 50 pontos a menos POR DIA!

Mesmo pra quem opera apenas 1 minicontratinho de WDO, isso vai significar R$ 500 a menos POR DIA, ou uns R$ 10 mil a menos no fim do mês.

Pra quem opera no DOL com volume mínimo de 5 contratos isso vai significar R$ 12.500 por dia, ou R$ 250 mil no mês.

Concordo contigo quando vc diz pro Flavio que não dá pra conseguir melhor que isso.

De fato, não tem como evitar essa perda.

A ideia aqui é apenas tentar fazer uma simulação mais realista, estimando essa diferença da forma mais precisa que for possível na simulação em conta demo, para evitar desilusões dolorosas na hora levar o robô pra conta real.

 

 

Boa! Isso mesmo!

[ ]'s

 
Trader_Patinhas:


>>> Quando simulo, utilizo a latência média que tenho em produção e minhas ordens são lançadas com antecedência de alguns pontos, o que me faz acreditar que não precisaria adicionar um sleep no código.

Não entendi. Que tipo de simulação é essa? Eu estava entendendo que vc se referia a simulação em conta demo (não Strategy Tester ou outro tipo de simulação).




Colegas, boa noite! Desculpe-me.

Acabei falando de conta demo, mas é back testing.

Estou apenas rodando o mesmo EA para o dia anterior, utilizando a conta de produção, mas de madrugada. Apenas fazendo back testing.


Estou avaliando o que posso mudar na estratégia para evitar essas diferenças, mas tem que levar em consideração o que vocês disseram.

Era mais pra descartar alguma configuração que eu não sabia. Talvez spread ou slippage.


Obrigado!

 
Flávio Henrique:

Colegas, boa noite! Desculpe-me.

Acabei falando de conta demo, mas é back testing.

Estou apenas rodando o mesmo EA para o dia anterior, utilizando a conta de produção, mas de madrugada. Apenas fazendo back testing.

Se é backtesting, então ainda tem outras diferenças além das diferenças entre conta demo e conta real.

Nesse campo eu não sei opinar muito, pois não uso o backtesting do MT5.  

 
Flávio Henrique:

Colegas, boa noite! Desculpe-me.

Acabei falando de conta demo, mas é back testing.

Estou apenas rodando o mesmo EA para o dia anterior, utilizando a conta de produção, mas de madrugada. Apenas fazendo back testing.


Estou avaliando o que posso mudar na estratégia para evitar essas diferenças, mas tem que levar em consideração o que vocês disseram.

Era mais pra descartar alguma configuração que eu não sabia. Talvez spread ou slippage.


Obrigado!

Se eh backtesting piora a situação e o 0.5 fica ainda mais ínfimo. As limitações de backtesting são ainda maiores. Man vai pro game, se tem confiança. Seus ajustes agora devem ser feitos rodando na real (com lote minimo).

Nao vai conseguir nada melhor do que isso rodando. Nao uso backtesting.

[ ]'s

Razão: