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" - página 2

 
Реter Konow:

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.

Pontos de referência bons e autossuficientes são os próprios artigos. Eles não apenas têm diretrizes, mas também estão bem explicados, caso você tenha tido preguiça de lê-los.

O esquema estará no final da criação da biblioteca. Assim como os métodos de caso de usuário para acesso rápido a todos os recursos da biblioteca.

 
Ре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.

Posso ver imediatamente que você não escreveu funções de negociação e não entende muito bem do que estamos falando.

Tentarei lhe dizer novamente (isso foi dito no último artigo): há alguns erros do servidor de negociação que exigem algum atraso antes de reenviar uma solicitação de negociação ao servidor.
Normalmente, sugere-se que esse atraso seja feito com a ajuda do Sleep(). Mas isso interrompe a execução do programa. Portanto, todo o programa aguardará a conclusão da pausa dentro do método de negociação antes de reenviar a solicitação de negociação ao servidor.
Isso é bom? No caso geral e mais simples, está tudo bem.
Mas um Expert Advisor pode ter várias moedas. E durante o tempo de espera, ele não fará nada além desse tempo de espera.
Isso é bom? Acho que não - o Expert Advisor deve continuar a monitorar o ambiente para todos os seus símbolos de trabalho. É exatamente isso que as solicitações pendentes proporcionam: quando ele recebe um erro do servidor que exige espera, ele cria uma solicitação pendente com o número necessário de tentativas e o tempo de espera necessário entre elas, e continua a trabalhar. Em seguida, a própria classe de negociação enviará a solicitação de negociação necessária ao servidor em tempo hábil. Ao mesmo tempo, ela verificará primeiro "se o tempo para a execução de todas as tentativas alocadas para a solicitação de negociação já terminou". Portanto, o Expert Advisor não enviará ordens desatualizadas para o servidor após cento e cinquenta horas.

E se você gosta tanto de se comunicar com o programa, as "solicitações de negociação pendentes" que propus permitem que o usuário defina uma condição quando uma ordem de negociação deve ser enviada. O usuário define a condição e segue com seus afazeres - assim que a condição ocorrer, a solicitação será acionada. Esse é um dos muitos métodos de criação de lógica de negociação para os Expert Advisors. E quando a biblioteca estiver disponível para construir um shell gráfico para seus programas, será fácil criar ferramentas para criar a lógica de negociação - insira os valores necessários, especifique o tipo de solicitação e quando ela precisa funcionar, e pronto....

Essa é a primeira coisa que me vem à mente para explicar e responder à sua pergunta "por que tudo isso é necessário" - tudo é feito não "aqui e agora", mas tijolo por tijolo, gradualmente.

 
Artyom Trishkin:

É imediatamente óbvio que você não escreveu funções de negociação e não sabe realmente do que está falando.

Vou tentar lhe dizer novamente (isso foi dito no último artigo): há alguns erros do servidor de negociação que exigem algum atraso antes de reenviar uma solicitação de negociação ao servidor.
Normalmente, sugere-se que esse atraso seja feito com a ajuda do Sleep(). Mas isso interrompe a execução do programa. Portanto, todo o programa aguardará a conclusão da pausa dentro do método de negociação antes de reenviar a solicitação de negociação ao servidor.
Isso é bom? No caso geral e mais simples, está tudo bem.
Mas um Expert Advisor pode ter várias moedas. E durante o tempo de espera, ele não fará nada além desse tempo de espera.
Isso é bom? Acho que não - o Expert Advisor deve continuar a monitorar o ambiente para todos os seus símbolos de trabalho. É exatamente isso que as solicitações pendentes proporcionam: quando ele recebe um erro do servidor que exige espera, ele cria uma solicitação pendente com o número necessário de tentativas e o tempo de espera necessário entre elas, e continua a trabalhar. Em seguida, a própria classe de negociação enviará a solicitação de negociação necessária ao servidor em tempo hábil. Ao mesmo tempo, ela verificará primeiro "se o tempo para a execução de todas as tentativas alocadas para a solicitação de negociação já terminou". Portanto, o Expert Advisor não enviará ordens desatualizadas para o servidor após cento e cinquenta horas.

E se você gosta tanto de se comunicar com o programa, as "solicitações de negociação pendentes" que propus permitem que o usuário defina uma condição quando uma ordem de negociação deve ser enviada. O usuário define a condição e segue com seus afazeres - assim que a condição ocorrer, a solicitação será acionada. Esse é um dos muitos métodos de criação de lógica de negociação para os Expert Advisors. E quando a biblioteca estiver disponível para construir um shell gráfico para seus programas, será fácil criar ferramentas para criar a lógica de negociação - insira os valores necessários, especifique o tipo de solicitação e quando ela precisa funcionar, e pronto....

Esta é a primeira coisa que me vem à mente para explicar e responder à sua pergunta "por que tudo isso é necessário" - tudo é feito não "aqui e agora", mas tijolo por tijolo, gradualmente.

Se a conexão com o servidor for interrompida, todos os cálculos no Expert Advisor serão interrompidos, pois o principal mecanismo de cálculo é o preço.
Sem Internet - sem ticks - não há nada para calcular em um Expert Advisor multimoeda. É preciso aguardar a conexão. Depois que a conexão for restaurada, você precisará perguntar sobre o envio das ordens que falharam e, antes disso, poderá ficar no ciclo de espera pela conexão - não há nada a fazer.
 
Реter Konow:
Se a conexão com o servidor for interrompida, todos os cálculos no Expert Advisor serão interrompidos, pois o principal mecanismo de cálculo é o preço.
Sem Internet - sem ticks - não há nada para calcular em um Expert Advisor multimoeda. Você precisa aguardar a conexão. Depois que a conexão for restaurada, você precisará perguntar sobre o envio das ordens que falharam e, antes disso, poderá ficar no ciclo de espera pela conexão - não há nada a fazer.
Pyotr, a falha de conexão não é o único erro que requer espera antes de ser repetido. Você está apenas se apegando a um erro artificialmente simulado para testar...
Não haverá Sleep-waiting na biblioteca.
 
Artyom Trishkin:
Peter, a falha de conexão não é o único erro que requer espera antes de ser repetido. Você está apenas se apegando a um erro artificialmente emulado para testar.....
Não haverá Sleep-waiting na biblioteca.

É impossível rastrear todas as chamadas do EA para o servidor.


  • Você pode rastrear as ordens de negociação enviadas ao servidor SOMENTE por meio dos métodos de sua biblioteca. E se as ordens forem enviadas por meio de suas próprias funções?
  • Como você rastreará e o que poderá fazer no caso de uma falha de conexão/conexão se o EA usar seus próprios métodos para se comunicar com o servidor?
Daí a pergunta:
  • O que mais você pode sugerir como solução para problemas de comunicação com o servidor além de reenviar ordens que falharam?


Pergunto isso porque a solução para o problema de reenvio de ordens com falha (obviamente) não requer complicações e é resolvida de forma simples.

 
Artyom Trishkin:

...

Deixe-me tentar repetir (foi dito no último artigo): há alguns erros do servidor de negociação que exigem algum atraso antes de reenviar uma solicitação de negociação ao servidor.
Normalmente, sugere-se que esse atraso seja feito usando Sleep(). Mas isso interrompe a execução do programa. Assim, todo o programa aguardará a conclusão da pausa dentro do método de negociação antes de enviar uma nova solicitação ao servidor.
...

Preciso de uma lista específica desses erros e de uma explicação - O QUE a biblioteca oferece como solução.

É necessário que os usuários façam com que apliquem as funções da biblioteca em vez de suas próprias funções.

Então, quais são esses erros e quais são suas soluções em termos gerais?

 
Реter Konow:

...

Pergunto isso porque a solução para o problema de reenvio de ordens com falha (obviamente) não requer complicações e é resolvida de forma simples.

Dei uma olhada no último artigo. Lá, trata-se apenas da falha no envio de um pedido devido à indisponibilidade do servidor. A forma da solução é muito mais complicada do que eu poderia imaginar. Porém, a essência da solução não se torna mais complicada.

Não há solução para outros tipos de solicitações repetidas.

 
Реter Konow:

Dei uma olhada no último artigo. Ele fala apenas sobre a falha no envio de um pedido devido à indisponibilidade do servidor. A forma da solução é muito mais complicada do que eu poderia ter imaginado. Mas a essência da solução não se torna mais complicada.

Não há solução para outros tipos de solicitações repetidas.

Dê uma olhada :)
Como não perceber que, para testar o processamento de consultas pendentes, emulei apenas um dos possíveis erros de propósito... No próximo artigo, simplifiquei essa emulação - há uma reação ao botão de negociação automática no terminal.
E a lista de erros está no código. Não quero explicá-la novamente para aqueles que não a leem.
 
Artyom Trishkin:
E você o testa :)
Como você pode não perceber que, para testar o processamento de solicitações pendentes, emulei especialmente apenas um dos possíveis erros.... No próximo artigo, simplifiquei essa emulação: há uma reação ao botão de negociação automática no terminal.
E a lista de erros está no código. Não quero explicá-lo novamente para aqueles que não o lerem.

Isso não é uma resposta.

Você não quer se comunicar sobre o assunto e mostrar quais solicitações pendentes a biblioteca pode atender.

Cada solicitação pendente (não pedido) precisa de sua própria solução, - sua própria magia, suas próprias propriedades, seus próprios métodos e assim por diante. E onde está isso?

 
Реter Konow:

Isso não é uma resposta.

Você não quer se comunicar sobre o assunto e mostrar quais solicitações pendentes a biblioteca pode atender.

Cada solicitação pendente (não pedido) precisa de sua própria solução - sua própria mágica, suas próprias propriedades, seus próprios métodos e assim por diante. E onde está isso?

Não sou eu que não quero falar sobre o assunto, mas você não entende a essência desse tópico.
Em três artigos, estamos testando um novo conceito de negociação - negociação com solicitações pendentes. Gradualmente, novos objetos-consultas são adicionados em cada artigo. Além disso, este é apenas um teste do conceito em umaclasse criada temporariamente. No quarto artigo deste tópico, serão criadas classes completas de tais objetos. E não há muitas delas, mas são suficientes para atender a todas as necessidades do conceito.
Para que eu não tenha que contar tudo de novo, tente entender por que você precisa dele e quais possibilidades ele pode lhe oferecer. Dei apenas alguns exemplos, o que me veio imediatamente à mente.