Discussão do artigo "Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte I). Conceito, gerenciamento de dados e primeiros resultados"

 

Novo artigo Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte I). Conceito, gerenciamento de dados e primeiros resultados foi publicado:

Ao analisar um grande número de estratégias de negociação, pedidos de desenvolvimento de aplicativos para os terminais MetaTrader 5 e MetaTrader 4 e vários sites sobre MetaTrader, eu cheguei à conclusão de que toda essa diversidade é baseada principalmente nas mesmas funções elementares, ações e valores que aparecem regularmente em diferentes programas. Isso resultou na biblioteca multi-plataforma DoEasy para o desenvolvimento fácil e rápido de aplicativos para a МetaТrader 5 e МetaТrader 4.

Agora tudo é compilado sem erros, e os dados de todas as ordens e negócios no histórico da conta de negociação são exibidos no diário do terminal.


Todas as propriedades de cada ordem/negócio, incluindo as não suportadas, são exibidas.


O fato é que nós desenvolvemos os métodos que retornam as flags para suportar as propriedades específicas por essa ordem para serem virtuais, para que sejam redefinidas nas classes derivadas. Essas classes derivadas são usadas para exibir os dados no diário. Nesse caso, todos devem ser exibidos corretamente. Se houver uma propriedade não suportada pela ordem, ela não será exibida no diário, uma vez que o método da classe COrder Print(const bool full_prop=false) tem a flag padrão para desativar a exibição das propriedades não suportadas no diário, enquanto os métodos virtuais SupportProperty() da classe simplesmente retornam 'true' para qualquer propriedade.

Qual é o próximo?

A primeira (e a menor) parte está pronta. Nós desenvolvemos um objeto básico para a coleta do histórico de ordens e negócios, bem como para a coleta de ordens e posições do mercado. Até agora não há valor prático, mas este é apenas o começo. Esse único objeto básico é tornar-se um elemento fundamental para o sistema armazenar e exibir os dados no sistema de ordens. Nosso próximo passo é desenvolver outros objetos e coleções necessárias usando os mesmos princípios. Eu também vou automatizar a coleta dos dados necessários de maneira constante.

Autor: Artyom Trishkin

 

Aparentemente ocorre um erro no seguinte trecho:

+------------------------------------------------------------------+
| Retorna a flag de fechamento da posição por StopLoss             |
+------------------------------------------------------------------+
bool COrder::OrderCloseByStopLoss(void) const
  {
#ifdef __MQL4__
   return(::StringFind(::OrderComment(),"[sl")>WRONG_VALUE);
#else
   return
     (
    this.Status()==ORDER_STATUS_HISTORY_ORDER ? this.OrderReason()==ORDER_REASON_SL :
     this.Status()==ORDER_STATUS_DEAL ? this.OrderReason()==DEAL_REASON_SL : false
     );
#endif
  }
//+------------------------------------------------------------------+
//| Retorna a flag de fechamento da posição pelo TakeProfit          |
//+------------------------------------------------------------------+
bool COrder::OrderCloseByTakeProfit(void) const
  {
#ifdef __MQL4__
   return(::StringFind(::OrderComment(),"[tp")>WRONG_VALUE);
#else
   return
     (
      this.Status()==ORDER_STATUS_HISTORY_ORDER ? this.OrderReason()==ORDER_REASON_TP :
      this.Status()==ORDER_STATUS_DEAL ? this.OrderReason()==DEAL_REASON_TP : false
     );
#endif
  }

A mensagem retornada é: 'Status' - undeclared identifier    Order.mqh  

Infelizmente não estou conseguindo resolver.

Obrigado. 

 
albertpess:

Aparentemente ocorre um erro no seguinte trecho:

+------------------------------------------------------------------+
| Retorna a flag de fechamento da posição por StopLoss             |
+------------------------------------------------------------------+
bool COrder::OrderCloseByStopLoss(void) const
  {
#ifdef __MQL4__
   return(::StringFind(::OrderComment(),"[sl")>WRONG_VALUE);
#else
   return
     (
    this.Status()==ORDER_STATUS_HISTORY_ORDER ? this.OrderReason()==ORDER_REASON_SL :
     this.Status()==ORDER_STATUS_DEAL ? this.OrderReason()==DEAL_REASON_SL : false
     );
#endif
  }
//+------------------------------------------------------------------+
//| Retorna a flag de fechamento da posição pelo TakeProfit          |
//+------------------------------------------------------------------+
bool COrder::OrderCloseByTakeProfit(void) const
  {
#ifdef __MQL4__
   return(::StringFind(::OrderComment(),"[tp")>WRONG_VALUE);
#else
   return
     (
      this.Status()==ORDER_STATUS_HISTORY_ORDER ? this.OrderReason()==ORDER_REASON_TP :
      this.Status()==ORDER_STATUS_DEAL ? this.OrderReason()==DEAL_REASON_TP : false
     );
#endif
  }

A mensagem retornada é: 'Status' - undeclared identifier    Order.mqh  

Infelizmente não estou conseguindo resolver.

Obrigado. 

MetaTrader 4 ? or MetaTrader 5 ?

 

O mesmo ocorre em:

m_long_prop[ORDER_PROP_PROFIT_PT]                           = this.ProfitInPoints();

e

m_double_prop[this.IndexProp(ORDER_PROP_PROFIT_FULL)]       = this.ProfitFull();

Ambos os trechos dentro do Construtor paramétrico Closed 

Obrigado

 
Artyom Trishkin:

MetaTrader 4 ? or MetaTrader 5 ?

MT5
 
albertpess :
MT5

I would like to know what you are doing.

Please insert the code using this button on the toolbar of the message input window

 

Estou estudando seus artigos. Meu objetivo é aprender a trabalhar com classes.

 
Artyom Trishkin:

I would like to know what you are doing.

Please insert the code using this button on the toolbar of the message input window

bool COrder::OrderCloseByStopLoss(void) const
  {
#ifdef __MQL4__
   return(::StringFind(::OrderComment(),"[sl")>WRONG_VALUE);
#else 
   return
     (
     this.Status()==ORDER_STATUS_HISTORY_ORDER ? this.OrderReason()==ORDER_REASON_SL : 
     this.Status()==ORDER_STATUS_DEAL ? this.OrderReason()==DEAL_REASON_SL : false
     );
#endif 
  }
//+------------------------------------------------------------------+
//| Retorna a flag de fechamento da posição pelo TakeProfit          |
//+------------------------------------------------------------------+
bool COrder::OrderCloseByTakeProfit(void) const
  {
#ifdef __MQL4__
   return(::StringFind(::OrderComment(),"[tp")>WRONG_VALUE);
#else 
   return
     (
      this.Status()==ORDER_STATUS_HISTORY_ORDER ? this.OrderReason()==ORDER_REASON_TP : 
      this.Status()==ORDER_STATUS_DEAL ? this.OrderReason()==DEAL_REASON_TP : false
     );
#endif 
  }
 

Спасибо.

Я не знал об этой функции.

 
albertpess :

Estou estudando seus artigos. Meu objetivo é aprender a trabalhar com classes.

Is the test program included with the article working?
What errors occur?
Please describe in more detail.

 
I take this opportunity to thank you for the excellent work. I'm finally starting to understand class creation.