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

Marco Antonio Colognese  

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
Marco Antonio Colognese  

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!!!

Adailton Silva  

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
Flavio Jarabeck  
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?

Cesar Afif rezende Oaquim  

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