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
...
Se vc não definiu nada é false, observe o construtor da classe
Se vc não definiu nada é false, observe o construtor da classe
Opa,
Aqui nos meus rôbos eu costumo adicionar um limitar de tempo entre ordens pra evitar esse tipo de problema, é sempre bom adicionar uma função pra checar se já existe ordem aberta.
Eu costumo fazer uma verificação não somente da aceitação da ordem mas também da execução da mesma.
Não uso o CTrade mas o princípio é o mesmo. Você ao executar recebe um status, mas este status é o de recebimento da ordem pela corretora, em alguns casos existe um delay entre esta aceitação e de fato a execução para que o PositionsTotal receba uma informação.
Recomendo que faça a verificação da execução da ordem para ter certeza se algo de fato ocorreu.
Eu faço robôs para trade de ações no mercado a vista da B3, então pode ser que algumas características não sejam iguais dependendo do mercado que opera, mas eu somente permito que siga para demais processamentos dentro do meu código se eu recebi um sinal informando que algo foi rejeitado, cancelado ou executado com sucesso. Se você colocar ordem no book para execução e depender dessa informação de conclusão para novos processamentos, recomendo que coloque algum ponto de trava até que a sua posição seja tomada.
Vou colar abaixo o código do método que utilizo para buscar essa informação, você pode fazer as adaptações necessárias:
Para informação pTicketNumber é a propriedade order do resultado MqlTradeResult da sua execução. Faço esta verificação abaixo somente quando ocorre o retorno positivo da aceitação da ordem pela corretora.
Eu costumo fazer uma verificação não somente da aceitação da ordem mas também da execução da mesma.
Não uso o CTrade mas o princípio é o mesmo. Você ao executar recebe um status, mas este status é o de recebimento da ordem pela corretora, em alguns casos existe um delay entre esta aceitação e de fato a execução para que o PositionsTotal receba uma informação.
Recomendo que faça a verificação da execução da ordem para ter certeza se algo de fato ocorreu.
Eu faço robôs para trade de ações no mercado a vista da B3, então pode ser que algumas características não sejam iguais dependendo do mercado que opera, mas eu somente permito que siga para demais processamentos dentro do meu código se eu recebi um sinal informando que algo foi rejeitado, cancelado ou executado com sucesso. Se você colocar ordem no book para execução e depender dessa informação de conclusão para novos processamentos, recomendo que coloque algum ponto de trava até que a sua posição seja tomada.
Vou colar abaixo o código do método que utilizo para buscar essa informação, você pode fazer as adaptações necessárias:
Para informação pTicketNumber é a propriedade order do resultado MqlTradeResult da sua execução. Faço esta verificação abaixo somente quando ocorre o retorno positivo da aceitação da ordem pela corretora.
Fernando, achei muito badana seu código. Já estou copiando aqui para minha biblioteca particular de códigos.
Obrigado pela contribuição :)
Pessoal, estive dando uma estudada aqui. Não seria o caso de usar a função CheckResultRetCode() para obter o sucesso ou fracasso do negócio?
PS.: Código excelente Fernando estarei entendendo ele e aplicando no meu EA com toda certeza! Obrigado amigo.
EDIT: Acabei de ver a sugestão na do Jonathan usando exatamente a função que eu acabei de mencionar rs