Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 6

 

Boa tarde!

Atualmente estou aprendendo a escrever Expert Advisors com base no exemplo deste artigo e me deparei com o seguinte problema: ao tentar enviar uma solicitação para uma negociação, recebo o erro 10014 - volume errado. Verifiquei o volume máximo permitido para a transação SYMBOL_VOLUME_MAX e obtive 0. Mas, ao mesmo tempo, as negociações manuais são abertas normalmente.

Você pode me dizer o que estou fazendo de errado ou onde devo procurar? Eu uso o código do Expert Advisor, que está anexado no artigo.

Obrigado.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Obrigado por seu artigo.
 

Hi,

o código parece ótimo, mas quando o tento, recebo este erro

2011.11.13 23:39:58 2011.11.01 14:20:00 Alerta: A solicitação de ordem de venda não pôde ser concluída -error:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 failed instant sell 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [Invalid request]

Nenhuma negociação foi executada.

Alguém poderia ajudar a consertar?

Obrigado pela ajuda

F

[Excluído]  
Financialabs:

Hi,

o código parece ótimo, mas quando o tento, recebo este erro

2011.11.13 23:39:58 2011.11.01 14:20:00 Alerta: A solicitação de ordem de venda não pôde ser concluída -error:4756
2011.11.13 23:39:58 2011.11.01 14:20:00 failed instant sell 1.00 EURUSD at 1.36833 sl: 1.37133 tp: 1.35833 [Invalid request]

Nenhuma negociação foi executada.

Alguém poderia ajudar a consertar?

Obrigado pela ajuda

F

Fiz a mesma pergunta e ninguém respondeu.

Eu a encontrei.

É um bug. Você precisa adicionar uma linha de código

ZeroMemory(mrequest);

Essa linha deve estar antes das linhas mrequest.action=... mrequest.price=... etc.

 

Olá.

Muito obrigado pelo guia detalhado e claro.

Estou com um problema. O programa é compilado, mas na primeira tentativa de criar uma solicitação, aparece o seguinte erro: "Request to set Sell order failed - error code:4756"

Não consegui encontrar nada na documentação. Você pode me dizer o que posso fazer a respeito ou onde posso encontrar informações?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Alfff:

Estou com um problema. O programa é compilado, mas na primeira tentativa de criar uma solicitação, aparece o seguinte erro: "Request to set Sell order failed - error code:4756"

Não consegui encontrar nada na documentação. Você pode me dizer o que pode ser feito a respeito disso ou onde posso encontrar informações?

Corrigido, baixe a versão atualizada do Expert Advisor.

O problema estava na estrutura mrequest, que deve ser zerada antes usando a função ZeroMemory. Antes das linhas com "mrequest.action=TRADE_ACTION_DEAL;" (págs. 199 e 245), você deve adicionar "ZeroMemory(mrequest);".

 
senerzen:

Fiz a mesma pergunta e ninguém respondeu.

Eu a encontrei.

É um bug. Você precisa adicionar uma linha de código

ZeroMemory(mrequest);

Essa linha deve estar antes das linhas mrequest.action=... mrequest.price=... etc.

Obrigado, o erro foi corrigido.
Get in touch with developers using Service Desk!
  • www.mql5.com
We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them.
 
papaklass:
É sempre necessário fazer isso, ou seja, zerar a estrutura da solicitação antes da solicitação?
Antes de enviar uma solicitação, todos os campos da estrutura devem ser inicializados (nesse caso, isso é feito usando a função ZeroMemory, embora você possa fazer isso elemento por elemento); a inicialização deve ser feita depois que a estrutura for declarada.
 
Automated-Trading:
Antes de enviar uma solicitação, todos os campos da estrutura devem ser inicializados (nesse caso, isso é feito usando a função ZeroMemory, embora você possa fazer isso elemento por elemento), a inicialização deve ser feita depois que a estrutura for declarada.

Isso está escrito no Manual de Referência? (Não tenho a chance de verificá-lo agora).

Acontece que é suficiente declarar uma variável do tipo estrutura uma vez no nível global do programa, inicializá-la uma vez e não voltar à questão de usar a função ZeroMemory novamente?

 
Yedelkin:

O Manual diz alguma coisa sobre isso? (Não tenho a chance de verificá-lo agora)

Nenhuma variável é obrigada a ser zerada quando é declarada. É o próprio programador que precisa limpar/atribuir todas as variáveis antes de usá-las.

O uso de variáveis não inicializadas (ou incompletas) (especialmente estruturas) é um erro muito comum na programação.

Acontece que é suficiente declarar uma variável do tipo estrutura uma vez no nível global do programa, inicializá-la uma vez e não voltar à questão de usar a função ZeroMemory novamente?

É melhor inicializar as variáveis corretamente em vez de lutar (inutilmente e de forma mais perigosa) com a inicialização, trazendo-a para o nível global.

É muito fácil fazer a si mesmo a pergunta "por que eu acho que alguém inicializará variáveis e estruturas especialmente complexas para mim"?

É muito conveniente zerar estruturas sem o inconveniente ZeroMemory ao declarar isso:

   MqlTick my={0};