Discussão do artigo "Expert Advisor Universal: O Modelo de Evento e o Protótipo da Estratégia de Negociação (Parte 2)"

 

Novo artigo Expert Advisor Universal: O Modelo de Evento e o Protótipo da Estratégia de Negociação (Parte 2) foi publicado:

Este artigo continua a série de publicações do modelo universal de um Expert Advisor. Esta parte descreve em detalhes o modelo de eventos original, baseado no processamento de dados centralizado e considera a estrutura da classe base CStrategy.

De fato, se um Expert Advisor recebe uma notificação de um novo tick, não tem importância se a informação é recebida através do OnTick, OnTimer ou do OnBookEvent. A única coisa que importa é que existe um novo tick no símbolo determinado. Um manipulador de eventos pode ser usado para muitas estratégias. Por exemplo, se cada estratégia é representada como uma classe customizada, múltiplas instâncias destes tipos podem ser armazenadas na lista especial das estratégias. Neste caso, qualquer estratégia da lista poderá receber um novo evento gerado pelo EventProcessor. O diagrama a seguir mostra como os eventos são gerados e enviados:

Fig. 1. Diagrama de geração e envio do evento

Autor: Vasiliy Sokolov

 

Mr.Vasily,

very nice code.. and useful to me..

in the mt5 news builds (1952), we got a "message" in the compiler, 


bool CBarDetector::IsNewBar(void)

  {

   datetime time[];

   if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return false;

   if(time[0] == m_last_time)return false;

   return (m_last_time = time[0]);    //<=============HERE

  }

//+------------------------------------------------------------------+

///////////MESSAGE in THE METAEDITOR compiler///////////////
expression not boolean NewBarDetector.mqh 87 24


the correct should be this? please confirm

//+------------------------------------------------------------------+
//| Returns true if for the given symbol and timeframe there is      |
//| a new bar.                                                       |
//+------------------------------------------------------------------+
bool CBarDetector::IsNewBar(void)
  {
   datetime time[];
   if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return (false);
   if(time[0] == m_last_time)return (false);
   return (m_last_time == time[0]);
  }
//+------------------------------------------------------------------+