Discussão do artigo "Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVII): trabalho com ordens de negociação - posicionamento de ordens pendentes"

 

Novo artigo Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVII): trabalho com ordens de negociação - posicionamento de ordens pendentes foi publicado:

Neste artigo continuaremos a tratar do trabalho com ordens de negociação, implementaremos o posicionamento de ordens pendentes, corrigiremos erros encontrados no funcionamento da classe de negociação.

No último artigo começamos a implementar ordens de negociação pendentes e criamos a primeira ordem pendente para abrir uma posição quando na classe de negociação após o envio da solicitação ao servidor era recebido um erro. Hoje, continuaremos a desenvolver a classe de negociação, nomeadamente o trabalho com ordens pendentes, e implementaremos a criação de uma ordem pendente se houver erros ao configurar ordens pendentes.

Ao testar a classe de negociação, apareceram alguns inconvenientes relativamente ao design. Em particular, durante a inicialização de objetos, no construtor da classe, aos objetos de negociação dos símbolos eram atribuídos valores padrão hard-coded que podiam não ser suportados pela especificação do símbolo. Isto causava erros vindos do servidor ao tentar colocar ordens pendentes: o servidor gerava o erro 'tipo de expiração de ordem não suportado' e não o depurava, o que tornava impossível posicionar ordens pendentes. Ao enviar ordens de negociação com valores padrão, à ordem também eram enviados alguns dados não suportados que não eram depurados em lado nenhum. Para contornar essa situação, era necessário diretamente na ordem de negociação especificar os dados corretos, que correspondiam à especificação do símbolo, com base no qual devia ser realizada a operação de negociação.

Isso é inconveniente, pois, em vez de a própria biblioteca depurar automaticamente os valores, é preciso conhecer obrigatoriamente a especificação do símbolo e a inserção manual de valores diretamente no código do programa. Por isso, faremos pequenas correções na lógica de funcionamento da classe de negociação. Assim, no EA no manipulador OnInit(), a escolha de valores corretos fará com que os objetos de negociação dos símbolos sejam inicializados automaticamente. Por padrão, aos métodos de negociação da classe de negociação serão transferidos os valores -1, para os tipos 'preenchimento e expiração de ordens', o que indicará que os valores padrão predefinidos usados estão corretos. Se do programa ao método de negociação for transferido um valor diferente, o valor diferente em questão será usado e, se for incorreto, será depurado quando forem depurados erros na classe de negociação.

Autor: Artyom Trishkin