EA baseado no volume não faz backteste mas funciona na conta real. É possível resolver?

 

Boa noite! Estou com um problema.

Criei um EA que faz suas análises baseadas no volume de cada tick, e durante o mercado ele funciona normalmente, porém no backteste ou na otimização ele não faz nenhuma operação? Testei com a modelagem "Cada tick" e "Cada tick é baseado em um tick real", e tanto com "tick.volume", quanto "tick.volume_real", e o resultado é o mesmo.

Alguém saberia me ajudar? Estou fazendo algo de errado?


MqlTick  tick;

...

   if(tick.flags == 56) //56 = BUY

     {agressao= agressao + tick.volume_real;}

   if(tick.flags == 88) //88 = SELL

     {agressao= agressao - tick.volume_real;}

...

Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estruturas de Dados / Estrutura para Preços Correntes
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estruturas de Dados / Estrutura para Preços Correntes
  • www.mql5.com
Estrutura para Preços Correntes - Estruturas de Dados - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
CopyTicksInd
CopyTicksInd
  • www.mql5.com
O indicador demonstra a operação de obtenção dos ticks utilizando a função "CopyTicks", e permite comparar os três modos de obtenção dos ticks.
 

Boa tarde Rogério.

Inicialmente, obrigado pela ajudar, mas dei uma olhada no código que me enviou, porém não consegui achar uma forma na qual ele me ajudasse a resolver a questão de não conseguir fazer backtest analisando o volume do tick.

Meu conhecimento não é muito avançado, então se você puder me explicar um pouco melhor.

Obrigado!!!

 

Olá, 

bom, já tentou fazer backteste com ticks reais?

 

Tenta recuperar o tipo da flag dessa maneira

enum eTipoDeFlag
{
	negocioDireto,
	compra,
	venda,
}

int _TipoDeFlag(int pFlags)
{
    int retorno = -1;
    if(( (pFlags & TICK_FLAG_BUY)  == TICK_FLAG_BUY)
            && ( (pFlags & TICK_FLAG_SELL)  == TICK_FLAG_SELL) )
    {
        retorno = negocioDireto;
    }
    else if((pFlags & TICK_FLAG_BUY)  == TICK_FLAG_BUY)
    {
        retorno = compra;
    }
    else if((pFlags & TICK_FLAG_SELL)  == TICK_FLAG_SELL)
    {
        retorno = venda;
    }
    return retorno;
};

Os valores devem ser testados bit a bit

Vê se é somente este o seu problema

Ah....e claro, como não colocou no seu código de exemplo, não esquece de copiar os ticks para dentro do array

CopyTicks(_Symbol, ticks, COPY_TICKS_TRADE, 0, 1 );
//No exemplo acima só copiei uma negociação, se deixar o valor do último parâmetro 0 ele vai copiar tudo que foi negociado naquele instante em que leu os dados
 
Marco Antonio Colognese:

MqlTick  tick;

...

   if(tick.flags == 56) //56 = BUY

     {agressao= agressao + tick.volume_real;}

   if(tick.flags == 88) //88 = SELL

     {agressao= agressao - tick.volume_real;}

...

Onde exatamente este código está enfiado?

 

Bom, eu prefiro não saber em que lugar obscuro ele está enfiado... Desculpe, não resisti.


Olha, presumindo que vc usa o MT5, é bem fácil resolver. Põe uma marca de depuração com F9 nessa parte do codigo, ou em uma linha antes, e quando ele parar ali visualize o conteúdo da variável usando a guia "depurar" da caixa de ferramentas. Provavelmente essas variáveis estão vindo com valores diferentes no backtest