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

 

Quase 4 megabytes de código, e o esquema da biblioteca e os métodos personalizados não são fornecidos... Você está escrevendo para si mesmo?

Olhe pelos olhos dos seus usuários. Como é para eles entender tudo isso sem pontos de referência.

 
Outra pergunta: até que ponto é "razoável" definir uma ordem pendente após uma interrupção da Internet, sem entrevistar novamente o usuário? Se o usuário levar uma hora para voltar a ter acesso à Internet e a situação mudar drasticamente, vale a pena definir a ordem automaticamente? Não seria melhor deixar uma mensagem dizendo que a ordem não foi definida devido à falta de Internet e que o usuário decidirá se ela deve ser definida novamente?
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Реter Konow:
Outra pergunta: até que ponto é "razoável" definir uma ordem pendente após uma interrupção da Internet, sem entrevistar novamente o usuário? Se o usuário levar uma hora para voltar a ter acesso à Internet e a situação tiver mudado drasticamente, vale a pena definir a ordem automaticamente? Não é melhor deixar uma mensagem dizendo que o pedido não foi definido devido à falta de Internet e que o usuário decidirá se ele deve ser definido novamente ou não?
O artigo não descreve o princípio e o motivo pelo qual esse é o caso?
 
Artyom Trishkin:
O artigo não descreve o princípio, e por que exatamente?

Especificamente nesse artigo, não há nenhuma palavra sobre o motivo pelo qual se decide enviar uma ordem pendente imediatamente após a conexão com a Internet, sem repetidas sondagens do usuário.

Há um aviso de que as solicitações pendentes apresentadas no artigo não podem ser usadas em negociações reais. Ou seja, trata-se de um teste de conceito e nada mais.

Não há explicação para a definição de uma ordem depois de reconectar a Internet sem sondar o usuário.

E você realmente precisa de vários artigos para testar um mecanismo simples de uma solicitação de negociação pendente? Além disso, é mais fácil e mais correto sondar o usuário novamente e isso é tudo.

 
Реter Konow:

Especificamente neste artigo, não há nenhuma palavra sobre o motivo pelo qual se decide enviar uma ordem pendente imediatamente após a conexão com a Internet, sem questionar novamente o usuário.

Há um aviso de que as solicitações pendentes apresentadas no artigo não podem ser usadas em negociações reais. Ou seja, trata-se de um teste de conceito e nada mais.

Não há explicação para a definição de uma ordem após a reconexão à Internet sem consultar o usuário.

E você realmente precisa de vários artigos para testar um mecanismo simples de uma solicitação de negociação pendente? Além disso, é mais fácil e mais correto sondar o usuário novamente e isso é tudo.

Não se esqueça de que este é apenas um artigo escrito para aqueles que querem entender algo. É apenas uma pequena parte da lição de programação, não um Expert Advisor pronto. O artigo descreve e mostra no código como e o que fazer para alcançar o resultado desejado. Se precisar fazer uma enquete com o usuário em seu Expert Advisor, ninguém o proíbe de fazer isso.

 
Реter Konow:

Especificamente neste artigo, não há nenhuma palavra sobre o motivo pelo qual se decide enviar uma ordem pendente imediatamente após a conexão com a Internet, sem questionar novamente o usuário.

Há um aviso de que as solicitações pendentes apresentadas no artigo não podem ser usadas em negociações reais. Ou seja, trata-se de um teste de conceito e nada mais.

Não há explicação para a definição de uma ordem após a reconexão à Internet sem consultar o usuário.

E você realmente precisa de vários artigos para testar um mecanismo simples de uma solicitação de negociação pendente? Além disso, é mais fácil e mais correto consultar o usuário novamente, e isso é tudo.

Leia o artigo anterior - há uma explicação de por que isso é necessário. Dica:
1. a função Sleep() interrompe a execução do Expert Advisor. De forma alguma.
2. Expert Advisor de várias moedas.
Você não entende bem esse conceito. Por isso, essas perguntas.
Para a pesquisa com usuários, tudo será. Por meio da biblioteca. Mas não dentro dos métodos de negociação - eles não devem e não farão isso.
 
Alexey Viktorov:

Não se esqueça de que este é apenas um artigo escrito para aqueles que querem entender alguma coisa. É apenas uma pequena parte da lição de programação, não um Expert Advisor pronto. O artigo descreve e mostra no código como e o que fazer para alcançar o resultado desejado. Se precisar fazer uma enquete com o usuário em seu Expert Advisor, ninguém o proíbe de fazer isso.

1. Cuidando daqueles que querem entender, seria bom fazer um esquema de biblioteca para facilitar a orientação sobre o material.

2. Cada alteração feita pelo autor nas funções de negociação não é motivo para imprimi-las em todos os artigos. O material está inchado. As mesmas funções de negociação são trocadas de artigo para artigo com pequenas alterações. Agora haverá códigos de solicitações pendentes? Isso não esclarece, mas confunde o leitor.

3. Haverá 30 artigos em breve, e o autor adverte contra o uso da biblioteca. Para que ela serve então? Para ensinar como escrever uma biblioteca cujo uso é indesejável?

 
Реter Konow:

1. Para aqueles que querem entender, seria bom fazer um diagrama da biblioteca para facilitar a navegação pelo material.

2. Cada alteração feita pelo autor nas funções de negociação não é motivo para imprimi-las em todos os artigos. O material está inchado. As mesmas funções de negociação são trocadas de artigo para artigo com pequenas alterações. Agora haverá códigos de solicitações pendentes? Isso não esclarece, mas confunde o leitor.

3. Haverá 30 artigos em breve, e o autor adverte contra o uso da biblioteca. Para que serve então? Para ensinar como escrever uma biblioteca cujo uso é indesejável?

Você come carne moída crua? Aqui, para que você não a coma, e o aviso é dado - neste e no último artigo, há a preparação do material e a depuração do conceito.
E, sim, se necessário, os métodos serão alterados e as alterações serão explicadas.
Não apoio o trolling em perguntas - gosto de conversas substantivas.
 
Artyom Trishkin:
Você come carne moída crua? Aqui, para que você não a coma, e um aviso é dado - neste e no último artigo, estamos preparando o material e depurando o conceito.
E, sim, se necessário, os métodos serão alterados e as alterações serão explicadas.
Não apoio o trolling em perguntas - gosto de conversas substantivas.

Achei que os artigos deveriam ter soluções completas. E o que há para depurar?

Se a comunicação com o servidor foi interrompida, registre os dados do pedido e defina o sinalizador para verificar novamente a comunicação com o servidor. Verificamos novamente em um loop até que a conexão seja estabelecida. Após o restabelecimento da comunicação, perguntamos ao usuário se ele deseja definir o pedido que falhou. Em caso afirmativo, enviamos a ordem de volta, removemos o sinalizador e excluímos os dados da ordem da lista de ordens com falha. Em geral, todo o conceito.

 
Parece bastante substantivo.