Pessoal,
Estou tentando obter o nº do ticket de uma ordem logo após o seu envio através da função RequestOrder() da biblioteca padrão CTrade. A ideia é salvar o nº do ticket numa variável para facilitar o acompanhamento, modificação e/ou exclusão dessa ordem. Conforme código abaixo.
A ordem é enviada com sucesso, mas o RequestOrder() sempre retorna zero. Alguém tem alguma ideia do que pode estar acontecendo?
Pelo que entendi da documentação o MT5 deveria numerar automaticamente essas ordens, certo?
Caso eu não consiga, pensei em usar o MqlTradeResult para a mesma finalidade. Alguém usa o MqlTradeResult para esse fim?
Att.
Otávio
Galera,
Consegui buscar o ticket com a função OrderGetTicket().
Agora estou tentando verificar o status da ordem (se ela foi cumprida total, parcial ou se está pendente).
Estou usando o seguinte código:
string estadodaordem = EnumToString(ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE))); Print("O estado da ordem é: ",estadodaordem,". O número do ticker é: ",nticket);
Infelizmente não importa a situação real da ordem, o sistema sempre retorna a mesma situação:
"O estado da ordem é: ORDER_STATE_PLACED. O número do ticker é: 2"
Alguém tem alguma ideia do que pode estar acontecendo?
Att.
Otávio
Resolvido. Não é possível fazer um OrderSelect() de uma ordem já preenchida.
Olá otaviokc,
Acho que tem algum engano aí ... é possível sim obter todas as informações de todas as ordens já preenchidas...
Por favor dê uma olhada aqui:
1) https://www.mql5.com/pt/docs/trading/historyorderselect
2) https://www.mql5.com/pt/docs/trading/historyorderstotal
3) https://www.mql5.com/pt/docs/trading/historyordergetticket
4) https://www.mql5.com/pt/docs/trading/historyordergetdouble
5) https://www.mql5.com/pt/docs/trading/historyordergetinteger
6) https://www.mql5.com/pt/docs/trading/historyordergetstring
Abraços,
Malacarne
![Documentação sobre MQL5: Funções de Negociação (Trade) / HistoryOrderSelect Documentação sobre MQL5: Funções de Negociação (Trade) / HistoryOrderSelect](/i/community/logo_mql5_small.png)
- www.mql5.com
Olá otaviokc,
Acho que tem algum engano aí ... é possível sim obter todas as informações de todas as ordens já preenchidas...
Por favor dê uma olhada aqui:
1) https://www.mql5.com/pt/docs/trading/historyorderselect
2) https://www.mql5.com/pt/docs/trading/historyorderstotal
3) https://www.mql5.com/pt/docs/trading/historyordergetticket
4) https://www.mql5.com/pt/docs/trading/historyordergetdouble
5) https://www.mql5.com/pt/docs/trading/historyordergetinteger
6) https://www.mql5.com/pt/docs/trading/historyordergetstring
Abraços,
Malacarne
Malacarne,
Minha afirmação foi: "Resolvido. Não é possível fazer um OrderSelect() de uma ordem já preenchida." E não que não era possível obter as informações de ordens já preenchida.
Pelos meus testes o OrderSelect() retorna false para uma ordem já preenchida, olhando o GetLastError() ele retorna algo como "ordem não localizada". Apesar de já ter contornado a questão a vários dias, peço por gentileza que esclareça por que você entende que há um engano.
Abs,
Otávio
Malacarne,
Minha afirmação foi: "Resolvido. Não é possível fazer um OrderSelect() de uma ordem já preenchida." E não que não era possível obter as informações de ordens já preenchida.
Pelos meus testes o OrderSelect() retorna false para uma ordem já preenchida, olhando o GetLastError() ele retorna algo como "ordem não localizada". Apesar de já ter contornado a questão a vários dias, peço por gentileza que esclareça por que você entende que há um engano.
Abs,
Otávio
Olá otaviokc,
Se me permite, posso tentar descrever onde há o engano.
Correto, você só pode fazer OrderSelect() em ordens pendentes como afirmou antes.
Mas note que você também afirmou, e antes de tudo, que "... estou tentando verificar o status da ordem (se ela foi cumprida total, parcial ou se está pendente).".
Se também está tentando obter a informação cumprida total ou parcial, então considero a observação do Malacarne pertinente, pois você deverá obrigatoriamente utilizar a HistoryOrderSelect() para selecionar ordens do histórico para isso.
Acredito que foi essa mensagem que ele tentou te passar (por favor me corrijam se eu estiver errado).
Melhores cumprimentos,
Rogério Figurelli
Olá otaviokc,
Se me permite, posso tentar descrever onde há o engano.
Correto, você só pode fazer OrderSelect() em ordens pendentes como afirmou antes.
Mas note que você também afirmou, e antes de tudo, que "... estou tentando verificar o status da ordem (se ela foi cumprida total, parcial ou se está pendente).".
Se também está tentando obter a informação cumprida total ou parcial, então considero a observação do Malacarne pertinente, pois você deverá obrigatoriamente utilizar a HistoryOrderSelect() para selecionar ordens do histórico para isso.
Acredito que foi essa mensagem que ele tentou te passar (por favor me corrijam se eu estiver errado).
Melhores cumprimentos,
Rogério Figurelli
Olá Rogerio Figurelli,
Perfeitamente...
Faço minhas as suas palavras.
Forte abraço!
Malacarne
P.S.: vc andava meio sumido do fórum!!! Bom te ver novamente por aqui!! :-)
Olá Rogerio Figurelli,
Perfeitamente...
Faço minhas as suas palavras.
Forte abraço!
Malacarne
P.S.: vc andava meio sumido do fórum!!! Bom te ver novamente por aqui!! :-)
Olá Rogerio Figurelli,
Perfeitamente...
Faço minhas as suas palavras.
Forte abraço!
Malacarne
P.S.: vc andava meio sumido do fórum!!! Bom te ver novamente por aqui!! :-)
Fala Rodrigo Malacarne, realmente tenho trabalhado bastante e com pouco tempo para o Fórum, mas se vejo muita mensagem aguardando resposta procuro contribuir, na medida do possível e quase sempre de madrugada, como agora ;-)
Abraço!
Rsss.... que confusão. Deixa eu tentar esclarecer.
Legal Otávio, tenho acompanhado teu esforço aqui, parabéns pela participação e ótimas contribuições.
Abraço!
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Pessoal,
Estou tentando obter o nº do ticket de uma ordem logo após o seu envio através da função RequestOrder() da biblioteca padrão CTrade. A ideia é salvar o nº do ticket numa variável para facilitar o acompanhamento, modificação e/ou exclusão dessa ordem. Conforme código abaixo.
A ordem é enviada com sucesso, mas o RequestOrder() sempre retorna zero. Alguém tem alguma ideia do que pode estar acontecendo?
Pelo que entendi da documentação o MT5 deveria numerar automaticamente essas ordens, certo?
Caso eu não consiga, pensei em usar o MqlTradeResult para a mesma finalidade. Alguém usa o MqlTradeResult para esse fim?
Att.
Otávio