1minuto OHLC vs cada tick - resultados opostos

 

Estou obtendo resultado completamente oposto ao testar em cada tick ou 1min OHLC. os parâmetros de EA e de entrada são exatamente os mesmos, mas no caso de 1min ohlc recebo 50000 de lucro enquanto que em cada tick recebo -7000 perdas.

isto acontece em muitos testes de pares em um período de 2 anos 0811-0813

alguém teve o mesmo problema? Eu não entendo qual é o problema aqui e o que devo fazer quando negociar dinheiro real.

ambos os gráficos abaixo

1minuto OHLC

1minuto ohlc

cada carrapato

cada carrapato

 

Sem qualquer informação de como sua EA decide comprar/vender isto é difícil de responder.

Vemos no mercado muitas situações em que um bar tem um tamanho muito grande (por exemplo, em notícias importantes ).

Assim, o testador gera até 11 ticks para uma barra desse tipo. Dependendo de sua lógica, ela age de forma muito diferente (apenas nos testes).

Se você usasse seu EA com dinheiro real, eu estou bastante baralhado, será muito pior porque barras tão grandes podem ter até 200 carrapatos em um minuto.

Presumo que sua lógica age na barra atual, você deve tentar sua lógica com os valores da barra anterior.

Felicidades

Uwe

 
ugo58:

Sem qualquer informação de como sua EA decide comprar/vender isto é difícil de responder.

Vemos no mercado muitas situações em que um bar tem um tamanho muito grande (por exemplo, em notícias importantes).

Assim, o testador gera até 11 ticks para uma barra desse tipo. Dependendo de sua lógica, ela age de forma muito diferente (apenas nos testes).

Se você usasse seu EA com dinheiro real, eu estou bastante baralhado, será muito pior porque barras tão grandes podem ter até 200 carrapatos em um minuto.

Presumo que sua lógica age na barra atual, você deve tentar sua lógica com os valores da barra anterior.

Felicidades

Uwe

Envio agora um truque para "tiquetaque" apenas em um bar. Você acabou de colocar esta lógica no início do tique. Se a barra não é nova, então sai...

Em que situações você acha que este truque pode funcionar bem?

   //--- Let's first check if a new bar has come!         
   if(CopyTime(_Symbol, _Period, 0, 1, m_currentBarTime) > 0) 
     {
      if(m_previousBarTime != m_currentBarTime[0])
        {
         m_isNewBar = true;
         m_previousBarTime = m_currentBarTime[0];
        }
     }
   else
     {
      Alert("Error copying historical data, error: ", GetLastError());
      return;
     }
     
   if(!m_isNewBar) return;

O que você também recomendaria para resolver esses "ticks" extras? Há algum artigo ou algo que explique isto? Obrigado.

 
laplacianlab:

Envio agora um truque para "tiquetaque" apenas em um bar. Você acabou de colocar esta lógica no início do tique. Se a barra não é nova, então sai...

Em que situações você acha que este truque pode funcionar bem?

O que você também recomendaria para resolver esses "ticks" extras? Há algum artigo ou algo que explique isto? Obrigado.

O que você quer dizer com "para resolver esses carrapatos extras"?
 
ugo58:

Sem qualquer informação de como sua EA decide comprar/vender isto é difícil de responder.

Vemos no mercado muitas situações em que um bar tem um tamanho muito grande (por exemplo, em notícias importantes).

Assim, o testador gera até 11 ticks para uma barra desse tipo. Dependendo de sua lógica, ela age de forma muito diferente (apenas nos testes).

Se você usasse seu EA com dinheiro real, eu estou bastante baralhado, será muito pior porque barras tão grandes podem ter até 200 carrapatos em um minuto.

Presumo que sua lógica age na barra atual, você deve tentar sua lógica com os valores da barra anterior.

Felicidades

Uwe

oi,

o que você quer dizer com usar os valores da barra anterior? usar maVal[1] (onde maVal contém valores médios móveis e a matriz é definida como série) em vez de maVal[0]?

ou verificar se a condição foi verificada durante a última barra e assim entrar na abertura desta barra?

abaixo de parte do código do meu EA muito simples

 triggerLong=maVal[1]-diff;
 triggerShort=maVal[1]+diff; 

......
.......

Buy_Condition_1=(now_ask<triggerLong);
Sell_Condition_1=(now_bid>triggerShort);

Exit_long_Condition=(closeAtCross? now_ask>=maVal[1]:false) || Sell_Condition_1;
Exit_short_Condition=(closeAtCross? now_bid<=maVal[1]:false) || Buy_Condition_1;

quer eu use maVal[1] ou maVal[0] a situação não muda muito, o ohcl ainda é lucrativo enquanto cada carrapato não é.

obrigado

 
ugo58:

Sem qualquer informação de como sua EA decide comprar/vender isto é difícil de responder.

Vemos no mercado muitas situações em que um bar tem um tamanho muito grande (por exemplo, em notícias importantes).

Assim, o testador gera até 11 ticks para uma barra desse tipo. Dependendo de sua lógica, ela age de forma muito diferente (apenas nos testes).

Se você usasse seu EA com dinheiro real, eu estou bastante baralhado, será muito pior porque barras tão grandes podem ter até 200 carrapatos em um minuto.

Presumo que sua lógica age na barra atual, você deve tentar sua lógica com os valores da barra anterior.

Felicidades

Uwe

Isto não é verdade, o testador pode gerar muito mais do que 11 ticks. Veja este post.
 
angevoyageur:
O que você quer dizer com "para resolver esses carrapatos extras"?

Concordo plenamente com a ugo58. As barras grandes podem acionar o evento OnTick muitas vezes, enquanto as barras pequenas acionarão muito menos.

Isto pode ter um impacto em sua estratégia comercial automatizada, portanto, nós desenvolvedores temos que procurar soluções que atenuem o fato de que seu evento OnTick pode ser executado muitas vezes por barra.

Acho que o que enviei antes é apenas uma solução. ugo50 propôs outra solução: executar sua lógica OnTick na barra passada mais recente. De qualquer forma, se você quiser executar sua lógica OnTick na barra atual, talvez você possa usar algo semelhante ao que eu enviei antes.

Estamos tentando implementar algo como um evento OnBar.

O que você pensa sobre isso?

 
michelino:

oi,

o que você quer dizer com usar os valores da barra anterior? usar maVal[1] (onde maVal contém valores médios móveis e a matriz é definida como série) em vez de maVal[0]?

ou verificar se a condição foi verificada durante a última barra e assim entrar na abertura desta barra?

abaixo de parte do código do meu EA muito simples

quer eu use maVal[1] ou maVal[0] a situação não muda muito, o ohcl ainda é lucrativo enquanto cada carrapato não é.

obrigado

Há obviamente uma grande diferença se seu código usar maVal[1] ou maVal[0], ou em geral se você estiver trabalhando somente em Barra Fechada ou em Barra Aberta ou dentro de uma barra.

No último caso, você precisa usar Every tick mode, todos os outros mode não são apropriados.

 
angevoyageur:
Isto não é verdade, o testador pode gerar muito mais do que 11 ticks. Veja este post.

Thx. Ah, bem. Uma das coisas que eu tive que reaprender ;)


Como eu disse, depende de sua lógica.

São muitas maneiras de resolver esses problemas, maVal[1] é uma das soluções mais fáceis, pois as médias móveis podem não mudar tão rápido em cada barra (dependendo da duração do período e do método de suavização).

Isso pode ser diferente se, por exemplo, você depender de uma gama alta e baixa de barras.

 
Graças a compartilhar... Nice
 
Talvez este link também seja útil,https://www.mql5.com/en/articles/159
"New Bar" Event Handler
"New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.