Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVIII): ordens pendentes de negociação - fechamento, exclusão, modificações"

 

Novo artigo Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVIII): ordens pendentes de negociação - fechamento, exclusão, modificações foi publicado:

Este é o terceiro artigo sobre o conceito de ordens pendentes. Nele, concluiremos o teste de ordens pendentes de negociação, criaremos métodos para fechar posições, excluir ordens pendentes e modificar os parâmetros de posições e de ordens pendentes.

Este é o terceiro artigo por trás do conceito de ordens pendentes. Nele, concluiremos o teste de ordens pendentes de negociação, após criar métodos para fechar posições, excluir ordens pendentes e alterar os stop de posições e os parâmetros modificáveis de ordens pendentes.

Também complementaremos um pouco a classe da ordem abstrata, uma vez que, por algum motivo que desconheço, esqueci-me do retorno de valores das duas propriedades das ordens e posições, nomeadamente esqueci o tipo de preenchimento de ordem e do seu tipo de expiração. Eis que os adicionaremos. Como o código de todos os métodos do objeto básico de negociação multiplataforma foi ligeiramente otimizado, não vamos descrevê-lo em detalhes, em vez disso, tomaremos apenas um exemplo de algum dos métodos alterados.

Autor: Artyom Trishkin

 

Olá, Artyom, há algum motivo específico para você alocar memória dinâmica em um ponteiro para executar o trabalho abaixo?

int CTrading::GetIndexPendingRequestByOrder(const ulong ticket)
  {
   CPendingReq *req=new CPendingReq();
   if(req==NULL)
      return WRONG_VALUE;
   req.SetOrder(ticket);
   this.m_list_request.Sort(SORT_BY_PEND_REQ_TICKET);
   int index=this.m_list_request.Search(req);
   delete req;
   return index;
  }

Na minha humilde opinião, acho que o uso de uma variável local simples tornaria o método mais simples e eliminaria o código supérfluo de manipulação de ponteiro acima.

int CTrading::GetIndexPendingRequestByOrder(const ulong ticket)
  {
   CPendingReq req;
   req.SetOrder(ticket);
   this.m_list_request.Sort(SORT_BY_PEND_REQ_TICKET);
   int index=this.m_list_request.Search(req);
   return index;
  }

Estou curioso para entender seu raciocínio para escolher a primeira abordagem... talvez eu esteja perdendo alguma prática recomendada?

/dima

 
ddiall :

Olá, Artyom, há algum motivo específico para você alocar memória dinâmica em um ponteiro para realizar o trabalho abaixo?

Na minha humilde opinião, acho que o uso de uma variável local simples tornaria o método mais simples e eliminaria o código supérfluo de manipulação de ponteiro acima.

Estou curioso para entender seu raciocínio para escolher a primeira abordagem... talvez eu esteja perdendo alguma prática recomendada?

/dima

O método Search() funciona com um ponteiro para um objeto:

 int Search(
   CObject*  element       // amostra 
   ) const 
 
Artyom Trishkin:

O método Search() funciona com um ponteiro para um objeto:

Ah, certo... mas você não poderia invocar o método e passar o ponteiro da variável local em vez disso?

int index=this.m_list_request.Search(GetPointer(req));
 
ddiall :

Ah, certo... mas você não poderia invocar o método e, em vez disso, passar o ponteiro da variável local?

Você pode fazer isso de várias maneiras... Eu já fiz isso... :)

 
Artyom Trishkin:

Você pode fazer isso de várias maneiras... Eu já fiz isso ... :)

Legal, obrigado - foi apenas para confirmar meu entendimento, pois ainda estou lendo os artigos e estudando o código ;-)
 
ddiall:
Legal, obrigado - foi apenas para confirmar meu entendimento, pois ainda estou lendo os artigos e estudando o código ;-)
OK. Não tem de quê :)
 
   CEventsCollection*GetObject(void)                                                                     { return &this;