Discussão do artigo "Operações de negociação Estruturas das solicitações e das resposta, descrição e registro"

 

Novo artigo Operações de negociação Estruturas das solicitações e das resposta, descrição e registro foi publicado:

Neste artigo, veremos como trabalhar com as estruturas das solicitações de negociação, criar a solicitação, verificá-la antes de enviá-la ao servidor, gerar a resposta do servidor quanto a ela e usar a estrutura das transações. Além disso, criaremos funções simples e convenientes para enviar ordens para o servidor e, com base em tudo o que foi mencionado acima, criar um Expert Advisor que informe sobre as transações.

O MQL5 possui a função OrderSend() para a colocação de ordens pendentes, abertura de posições, alteração de ordens e posições. O primeiro parâmetro de entrada dessa função é a estrutura de solicitação de negociação MqlTradeRequest. No campo 'action' de tal estrutura, deve ser especificado o tipo de ação a ser executada, e os outros campos são preenchidos dependendo da ação selecionada. Por isso, quando passamos os parâmetros necessários para a solicitação de negociação na função, estamos realizando o envio de diferentes solicitações ao servidor.

Autor: Artyom Trishkin

 

Obrigado, Artyom, por concentrar todas as informações necessárias em um único artigo! Eu o adicionei aos meus favoritos.

Saudações, Vladimir.

 

Obrigado pelo artigo interessante. Mas é uma pena que tenha sido dada muito pouca atenção à função OrderCheck()

Espero que haja um artigo separado dedicado a essa função útil...

 
Alexey Viktorov #:

Obrigado pelo artigo interessante. Mas é uma pena que pouca atenção tenha sido dada à função OrderCheck()

Espero que haja um artigo separado dedicado a essa função útil...

Em algumas versões antigas do MT5, descobri que a OrderCheck() às vezes rejeitava solicitações que, na verdade, eram executadas com bastante sucesso. Eu desisti e não quero testar esses erros novamente em robôs de combate, mesmo que eles tenham sido corrigidos.

 
Alexey Viktorov #:

Obrigado pelo artigo interessante. Mas é uma pena que pouca atenção tenha sido dada à função OrderCheck()

Espero que haja um artigo separado dedicado a essa função útil...

Eu estava escrevendo uma "ajuda estendida" - muitas informações de referência. E tudo sobre o OrderCheck é lacônico e organizado. E não há excessos nele mesmo. Eu descrevi o que, o que e como os campos são preenchidos. Eles não são preenchidos em todos os casos. A resposta da função com o código é quase sempre "OK", porque estou acostumado a preencher a solicitação de negociação corretamente. Se você considerar a situação de "quase", é porque foram inseridos dados incorretos de propósito para verificar o trabalho. Ou seja, não tenho ideia do que descrever aqui, nem mesmo para um artigo.

 
Artyom Trishkin #:

Eu estava escrevendo uma "ajuda estendida", com muitas informações básicas. Mas tudo sobre o OrderCheck parece ser conciso e organizado. E não há excessos nele mesmo. Eu descrevi o que, o que e como os campos são preenchidos. Eles não são preenchidos em todos os casos. A resposta da função com o código é quase sempre "OK", porque estou acostumado a preencher a solicitação de negociação corretamente. Se você considerar a situação de "quase", é porque foram inseridos dados incorretos de propósito para verificar o trabalho. Ou seja, não tenho ideia do que descrever ali, nem mesmo para um artigo.

Pelo menos poucas pessoas leram cuidadosamente a estrutura do MqlTradeCheckResult

struct MqlTradeCheckResult
  {
   uint         retcode;             // Código de resposta
   double       balance;             // Saldo após a transação
   double       equity;              // Patrimônio líquido após a transação
   double       profit;              // Lucro flutuante
   double       margin;              // Requisitos de margem
   double       margin_free;         // Margem livre
   double       margin_level;        // Nível de margem
   string       comment;             // Comentário sobre o código de resposta (descrição do erro)
  };

E, na maioria das vezes, elas dizem que essa função se destina exclusivamente a isso, como está escrito na documentação

A função OrderCheck() verifica a suficiência de fundos para a operação de negociação necessária.

Mas vale a pena prestar atenção aos campos da estrutura "Balance after ..." e "Equity after ...". Não estou falando de "Requisitos de margem". Esses parâmetros são muito úteis. Por exemplo, se depois de fazer uma operação restarem "quarenta copeques" de patrimônio líquido na conta... É necessário fazer essa operação, mesmo que haja fundos suficientes e os outros parâmetros da ordem estejam em ordem? É claro que é possível obter esse valor por outro método, mas, em minha opinião, é muito mais favorável obter vários parâmetros úteis por meio de uma função.

E, de acordo com minha experiência de uso, o código de resposta corrige os preços incorretos de SL e/ou TP no caso de uma verificação bem-sucedida. E não apenas eles. É sobre isso que eu gostaria de obter um artigo. Sobre quais outros códigos funcionam...

Infelizmente, o OrderCheck() não informa um erro.

10018

TRADE_RETCODE_MARKET_CLOSED

O mercado está fechado.


Então, talvez os desenvolvedores finalmente prestem atenção a esse problema...

 
Alexey Viktorov #:

Pelo menos poucas pessoas leram cuidadosamente a estrutura do MqlTradeCheckResult

E, na maioria das vezes, elas dizem que essa função se destina exclusivamente, como está escrito na documentação

Mas vale a pena prestar atenção aos campos da estrutura "Balance after ..." e "Equity after ...". Não estou falando de "Requisitos de margem" de forma alguma. Esses parâmetros são muito úteis. Por exemplo, se restarem "quarenta copeques" de patrimônio líquido na conta depois de fazer uma operação... É necessário fazer essa operação, mesmo que haja fundos suficientes e outros parâmetros da ordem estejam em ordem? É claro que é possível obter esse valor por outro método, mas, em minha opinião, é muito mais favorável obter vários parâmetros úteis por meio de uma função.

E, de acordo com minha experiência de uso, o código de resposta corrige os preços incorretos de SL e/ou TP no caso de uma verificação bem-sucedida. E não apenas eles. É sobre isso que eu gostaria de obter um artigo. Sobre quais outros códigos funcionam...

Infelizmente, o OrderCheck() não informa um erro

10018

TRADE_RETCODE_MARKET_CLOSED

Mercado fechado


Então, talvez os desenvolvedores finalmente prestem atenção a esse problema....

Não entendo de que SL e TP você está falando? Eles não estão nos campos da estrutura...

E sobre o patrimônio líquido, o saldo após a transação... Bem..., sabe, eu estava pensando em dizer que é útil saber isso e que esses dados devem ser analisados antes de enviar uma ordem para o servidor. Mas eu não disse isso? Ou será que eu deveria ter deixado claro que você não deveria abrir uma posição se não tiver o suficiente para um bun mais tarde) ... . Mas, veja, eu pensei, e acho que está claro. É por isso que acabei de escrever que você pode analisar os campos preenchidos dessa estrutura. E sobre o fato de que "Market closed" não é retornado, eu não escrevi (embora quisesse) simplesmente porque esqueci). E pensei que esses eram códigos de retorno do servidor de negociação. Eles são para todos os casos da vida. Aparentemente, esse código não é para esse caso. Ele retorna normalmente no OrderSend. Embora sim, para verificar se o mercado está fechado, você precisa enviar uma ordem - uma solução fraca. Mas o que existe.

 
Artyom Trishkin #:

Não entendo de que SL e TP você está falando? Eles não estão nos campos de estrutura...

Estou falando dos códigos

10014

TRADE_RETCODE_INVALID_VOLUME

Volume incorreto na consulta

10015

TRADE_RETCODE_INVALID_PRICE

Preço incorreto na solicitação

10016

TRADE_RETCODE_INVALID_STOPS

Paradas incorretas na solicitação


Esses códigos são retornados para a estrutura MqlTradeCheckResult e são perfeitamente analisados.

Em outras palavras, se você não quiser escrever, ou se Rashid não for bem-vindo, eu não insisto.

 
Alexey Viktorov #:

Estou falando dos códigos

10014

TRADE_RETCODE_INVALID_VOLUME

Volume incorreto na solicitação

10015

TRADE_RETCODE_INVALID_PRICE

Preço incorreto na solicitação

10016

TRADE_RETCODE_INVALID_STOPS

Paradas incorretas na solicitação


Esses códigos são retornados para a estrutura MqlTradeCheckResult e são perfeitamente analisados.

Em outras palavras, se você não quiser escrever ou se Rashid não lhe der as boas-vindas, eu não insisto.

Bem, o que você pode escrever aqui, exceto "Você pode analisar códigos de resposta"? Bem, uma pessoa recebeu esse código - é claro que as paradas estão erradas. Portanto, ele deve ser processado programaticamente para que não haja paradas incorretas. A análise dos códigos de resposta também é uma análise. Assim como os campos de estrutura. Ou seja, tudo o que foi dito - analise e tire conclusões. Ou você acha que precisa descrever cada resposta do servidor e quais ações devem ser tomadas nesse caso? Bem, isso está implementado na biblioteca, que ainda não terminei de escrever, mas a negociação é feita lá há muito tempo. Com análise completa e realização de ajustes. Por que se repetir?

 
Artyom Trishkin #:

Bem, o que você pode escrever aqui, exceto "Você pode analisar os códigos de resposta".... Bem, uma pessoa recebeu esse código - está claro que as paradas não estão corretas. Portanto, ele deve ser processado programaticamente para que não haja paradas incorretas. A análise dos códigos de resposta também é uma análise. Assim como os campos de estrutura. Ou seja, tudo o que foi dito - analisar e tirar conclusões. Ou você acha que precisa descrever cada resposta do servidor e quais ações devem ser tomadas nesse caso? Bem, isso está implementado na biblioteca, que ainda não terminei de escrever, mas a negociação é feita lá há muito tempo. Com análise completa e realização de ajustes. Por que se repetir?

Para obter e analisar o código de retorno, você deve pelo menos entender o que é essa função e compreender sua utilidade. É exatamente disso que estou falando. O artigo fornecerá uma compreensão ampliada da função, não apenas uma descrição da documentação.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Discussão do artigo "Transações de negociação. Estruturas de solicitações e respostas, descrição e saída de registro".

Alexey Viktorov, 2023.08.03 13:40

Pelo menos poucas pessoas leem atentamente a estrutura do MqlTradeCheckResult

struct MqlTradeCheckResult
  {
   uint         retcode;             // Código de resposta
   double       balance;             // Saldo após a transação
   double       equity;              // Patrimônio líquido após a transação
   double       profit;              // Lucro flutuante
   double       margin;              // Requisitos de margem
   double       margin_free;         // Margem livre
   double       margin_level;        // Nível de margem
   string       comment;             // Comentário sobre o código de resposta (descrição do erro)
  };

E , na maioria das vezes, elas dizem que essa função se destina exclusivamente, como está escrito na documentação

A função OrderCheck() verifica a suficiência de fundos para aoperação de negociaçãonecessária.

É por isso que vou parar.
 
Artyom Trishkin #:
Embora sim, para verificar se o mercado está fechado, você precisa enviar uma ordem - uma solução fraca. Mas é isso.

Ainda é uma tarefa tão impossível para os criadores da linguagem de programação MQL5 - a função MarketClosed sem a dança do pandeiro?

Saudações, Vladimir.