Ordens canceladas

 

Olá,

Possuo um EA que realiza negociações no mercado futuro imediatamente após a abertura, isto é, às 09:00.


Utilizo um objeto do tipo CSymbolInfo para requisitar a cotação do ativo, como segue o exemplo de um "esqueleto" de EA:


#include  <Trade/SymbolInfo.mqh>


CSymbolInfo myStock;


int OnInit()

  {

//---

   if (!myStock.Name(_Symbol))

   {

      return INIT_FAILED;

   }   

//---

   return(INIT_SUCCEEDED);

  }


void OnTick()

  {

//---

   if (!myStock.RefreshRates())

   {

      return;

   }

// ========== Lógica de compra ==========

    double price = myStock.Ask();    

// ======================================

    

// ========== Lógica de venda ===========

    double price = myStock.Bid();    

// ======================================  

  }


Ao iniciar o pregão, me parece que o objeto myStock do tipo CSymbolInfo utiliza informações de preço incorretas e, muitas vezes, minas ordens de compra/venda são canceladas.


Alguém poderia me indicar uma solução para evitar que meu EA obtenha informações incorretas de preço?


Grato desde já.

 

Utilize o recurso de código para postar os seus códigos :

Por acaso você sabe da existência do leilão antes da abertura?

 
Lucas Tavares:

Utilize o recurso de código para postar os seus códigos :

Por acaso você sabe da existência do leilão antes da abertura?

Desculpe!

Sei, sim. Meu código funciona logo após o leilão, imediatamente após a abertura.

#include  <Trade/SymbolInfo.mqh>



CSymbolInfo myStock;



int OnInit()

  {

//---

   if (!myStock.Name(_Symbol))

   {

      return INIT_FAILED;

   }   

//---

   return(INIT_SUCCEEDED);

  }



void OnTick()

  {

//---

   if (!myStock.RefreshRates())

   {

      return;

   }

// ========== Lógica de compra ==========

    double price = myStock.Ask();    

// ======================================

    

// ========== Lógica de venda ===========

    double price = myStock.Bid();    

// ======================================  

  }
Razão: