Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXIV): classe básica de negociação, correção automática de parâmetros errados"

 

Novo artigo Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXIV): classe básica de negociação, correção automática de parâmetros errados foi publicado:

No artigo, analisaremos um manipulador de parâmetros errôneos de uma ordem de negociação, finalizaremos a classe básica de negociação e também corrigiremos o funcionamento da classe de eventos de negociação - agora todos os eventos de negociação serão detectados corretamente nos programas.

Em geral, o EA deve ser capaz de agir de acordo com as circunstâncias e com a lógica predefinida pelo usuário para o tratamento de erros nas ordens de negociação. Assim, nas configurações é possível fornecer ao EA uma indicação de como agir quando encontrados erros nas ordens de negociação:

  1. Se na ordem de negociação for detectado um erro, simplesmente saímos do método de negociação, permitindo que o usuário crie por conta própria um manipulador de parâmetros incorretos para uma ordem incorreta.
  2. Após determinar se possível corrigir um valor incorreto numa ordem de negociação, corrigimos imediatamente os valores e enviamos a ordem de negociação correta.
  3. Ou, se precisarmos saber o que aconteceu em essência com o erro recebido, repetimos a ordem após uma pausa ou simplesmente fazemos novamente a ordem com os mesmos parâmetros.

Ao processar um erro nos parâmetros de uma ordem de negociação, são prováveis vários resultados:

  • Não se pode continuar negociando com o EA até que o usuário corrija a causa dos erros.
  • Não se pode enviar uma ordem de negociação - saída do método de negociação.
  • São corrigidos valores incorretos e enviada uma ordem de negociação corrigida.
  • É enviada imediatamente uma ordem de negociação com os parâmetros iniciais (supondo que as condições de negociação melhoraram).
  • Após uma espera, são atualizados os dados de cotação e é enviada uma ordem de negociação com os parâmetros iniciais.

Hoje, nas ordens de negociação criaremos um manipulador de erros que corresponderá à funcionalidade listada, ou seja, o erro e sua causa serão verificados e será retornado o método de tratamento do erro:

  • proibição de realizar operações de negociação,
  • interrupção de operação de negociação,
  • correção de parâmetros errôneos,
  • solicitação de negociação com parâmetros iniciais,
  • solicitação de negociação após espera (solução temporária),
  • criação de uma solicitação de negociação pendente (nos próximos artigos)

Autor: Artyom Trishkin

 
Você pode me dizer como obter informações sobre uma ordem perdida? Por exemplo, o valor da perda, o número da ordem, a quantidade da ordem, o horário de abertura, etc. Obrigado!
 
hsyhsy863 :
Você pode me dizer como obter informações sobre uma ordem perdida? Por exemplo, o valor da perda, o número da ordem, a quantidade da ordem, o horário de abertura, etc. Obrigado!
Aqui você pode fazer suas perguntas.
 
Artyom Trishkin:
Aqui você pode fazer suas perguntas.
Minha pergunta é: ao criar um programa de negociação automatizado usando seu programa, preciso fechar uma ordem perdida. Como posso obter o número da ordem perdida?
 
hsyhsy863 :
Minha pergunta é: ao projetar um programa de negociação automatizado usando seu programa, preciso fechar uma ordem perdida, como obtenho o número da ordem perdida?

No consultor.

//--- Obter uma lista de todas as posições em aberto
   CArrayObj* list=engine.GetListMarketPosition();
//--- Classifique a lista por lucro, levando em conta a comissão e o swap
   list.Sort(SORT_BY_ORDER_PROFIT_FULL);
//--- Obter o índice da posição com o menor lucro (maior perda)
   int index=CSelect::FindOrderMin(list,ORDER_PROP_PROFIT_FULL);
   if(index>WRONG_VALUE)
     {
      //--- Obtenha o objeto de posição com a maior perda e feche a posição por ticket
      COrder* position=list.At(index);
      if(position!=NULL)
         engine.ClosePosition(position.Ticket());
     }

A biblioteca deve ser conectada de acordo com o exemplo de especialista anexado a este artigo.

 
Artyom Trishkin:

No consultor.

A biblioteca deve ser conectada de acordo com o exemplo de especialista anexado a este artigo.

A biblioteca deve ser conectada de acordo com o exemplo de especialista anexado a este artigo!
 
Olá, quando eu estava projetando a negociação automática, descobri que quando OP_BUYSTOP e OP_SELLSTOP são colocados ao mesmo tempo, apenas OP_SELLSTOP é colocado, mas não OP_BUYSTOP. A declaração atende totalmente às condições da ordem pendente, mas não pode estar pendente.
 
hsyhsy863 :
Olá, quando eu estava projetando a negociação automática, descobri que quando OP_BUYSTOP e OP_SELLSTOP são colocados ao mesmo tempo, apenas OP_SELLSTOP é colocado, mas não OP_BUYSTOP. A instrução atende totalmente às condições para ordens pendentes, mas as ordens não podem estar pendentes.
Forneça um exemplo para reproduzir esse erro.
 
Artyom Trishkin:
Forneça um exemplo para reproduzir esse erro.
if(datetimeN5!=iTime(NULL,0,0))
if(datetimeN5!=iTime(NULL,0,0))
if(ASWER(Close Position, "Upper Pending Bid")==0) { if(datetimeN5!=iTime(NULL,0,0))
{
Compra pendente(0,382,Fechada); {
datetimeN5 = iTime(NULL, 0, 0);
}}
if(datetimeN6!=iTime(NULL,0,0))
{
if(ASWER(Close Position, "Down Pending Sell Count") == 0)
{
Venda pendente (0,382, Posição de fechamento);
datetimeN6 = iTime(NULL, 0, 0);

}}

Este é o código-fonte de minha compra e venda pendentes. Logicamente, deveria haver duas ordens pendentes ao mesmo tempo, mas, na realidade, há apenas a ordem de venda pendente.

 
Desculpe, problema resolvido, erro meu!!!!
 
hsyhsy863:
Desculpe, problema resolvido, erro meu!!!!
OK