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
Olá a todos.
Estou desenvolvendo uma função para agredir o preço BID com as ordens pendentes de venda, e me deparei com algumas dúvidas, pois na conta demo, é quase tudo uma maravilha.
Está descrito abaixo o funcionamento da função, porém vou dar um resumo básico:
- a função, primeiramente, guarda o valor de BID em uma variável local para garantir o preço de agressão sempre igual.
- coleta a ordem de venda com o maior preço; modifica o preço para o valor guardado na variável local (valor BID naquele momento) e envia a ordem; se sobrou saldo de cotas, a ordem é alterada para o preço original, que também está guardado numa variável local;
- se a ordem de venda foi totalmente executada, será coletada uma nova ordem de venda com maior preço, repetindo os passos descritos acima;
OBS.: Estou em posição comprada, logo a função executa operações de venda, me "retirando" do mercado. Em Fundos Imobiliários, não é possível posicionar vendido.
Acredito que estou fazendo alguma confusão com a forma como as ordens são executadas, como coletar dados para averiguação. A função descrita abaixo pode não estar semanticamente correta.
Este trecho de código é executado após o envio da ordem de venda, com o preço modificado para o valor BID (agressão de venda), pois preciso saber se a ordem tem saldo de cotas. Se houver saldo, preciso modificar novamente a ordem de venda para o seu preço original, que está guardado na variável ' current_order_price'.
Procurando aqui na comunidade, encontrei um tópico (https://www.mql5.com/pt/forum/87308) que me ajudou a clarear um pouco as coisas. Já entendi que uma ordem executada em sua totalidade não pode ser selecionada por ' OrderSelect()', então vem a primeira dúvida:
- na lógica da função que desenvolvi, se a ordem foi totalmente executada, será coletada uma nova ordem de venda, para agredir BID. Então ...
... se o 'OrderSelect()' retornar 'false', significa que a ordem foi totalmente executada.
E a dúvida está justamente nessa forma de verificação, que não parece ser a mais adequada, apesar de ter lógica.
A outra questão está no loop que optei usar (do-while).
Optei por usar um do-while para garantir que, a cada iteração, sempre vou pegar o valor atual de 'OrdersTotal()' para pesquisar por uma nova ordem de venda. Pelo que entendi, através de outros questionamentos, como há o "risco" de uma execução total de uma ordem, ' OrdersTotal()' vai ser alterado. Lógico que mesmo tendo esse cuidado, e se eu não estiver errado, um evento de trade pode acontecer durante a execução da função descrita abaixo.
A outra dúvida é se esse do-while faz sentido neste caso, ou se tem uma outra forma de abordagem.
Abraço a todos.