Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 6
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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:47562011.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
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:47562011.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?
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);".
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.
É 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.
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?
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: