Discussão do artigo "Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte VIII): Eventos de modificação de ordens e posições" - página 3
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
Quando um tique é recebido, no qual uma ordem pendente é definida e simultaneamente ativada (acionada) (testei com Buy Stop), seu mecanismo não registra todos os eventos...
O evento TRADE_EVENT_PENDING_ORDER_PLASED é recebido, mas não o TRADE_EVENT_PENDING_ORDER_ACTIVATED.
Meu código é mais ou menos assim:
Primeiro localizo o índice do evento antigo (processado) no loop e, a partir dele, percorro todos os novos até o final. Assim, em uma situação em que, em um tick, uma ordem de limite é definida e o striggeren recebe um evento sobre a definição... Por favor, comente.
Eu chamo ProcessTradeEvents() em OnTick() depois de engine.OnTick(rates_data).A ordem foi colocada por seu mecanismo. Talvez eu ainda o tenha chamado quando não havia ativação ainda..... Vou verificar isso com uma ordem manual agora.
O pedido foi feito por seu próprio mecanismo. Talvez eu ainda o tenha chamado quando não havia ativação ainda..... Vou verificar com um pedido manual agora.
Sim, acho que são minhas mãos que estão tortas....
Sim, acho que minhas mãos estão tortas...
Olá.
Encontrei este problema ao testar o TestDoEasyPart08.mq5 - o StopLoss e o TakeProfit não funcionam. Embora estejam definidos, as linhas correspondentes aparecem no gráfico e são enviadas mensagens para o diário. Se você ativar o TrailStop, o TakeProfit é acionado, mas o StopLoss ainda não. Qual pode ser o motivo?
P.S. Executei o mesmo código em outro computador (laptop) e ele funciona bem. Embora o mesmo metatrader esteja instalado lá.
Olá.
Encontrei este problema ao testar o TestDoEasyPart08.mq5 - o StopLoss e o TakeProfit não funcionam. Embora estejam definidos, as linhas correspondentes aparecem no gráfico e são enviadas mensagens para o diário. Se você ativar o TrailStop, o TakeProfit é acionado, mas o StopLoss ainda não. Qual pode ser o motivo?
P.S. Executei o mesmo código em outro computador (laptop) e ele funciona bem. Embora o mesmo metatrader esteja instalado lá.
Boa noite! Antes de mais nada, mostre pelo menos as mensagens que aparecem no registro.
Atenciosamente, Vladimir.
Olá.
Encontrei este problema ao testar o TestDoEasyPart08.mq5 - o StopLoss e o TakeProfit não funcionam. Embora estejam definidos, as linhas correspondentes aparecem no gráfico e são enviadas mensagens para o diário. Se você ativar o TrailStop, o TakeProfit é acionado, mas o StopLoss ainda não. Qual pode ser o motivo?
P.S. Executei o mesmo código em outro computador (laptop) e ele funciona bem. Embora o mesmo metatrader esteja instalado lá.
Se forem colocadas ordens stop (limite), seu acionamento não dependerá do programa, mas da corretora. A ordem para definir ordens stop (limite) é enviada ao servidor pelo programa, e seu acionamento depende da corretora. Como elas são colocadas (suas linhas são exibidas no gráfico), não há erros por parte do programa. O mais provável é que o preço não atinja as ordens stop (limite).
Boa noite, pelo menos mostre as mensagens que são registradas.
Saudações, Vladimir.
MrBrooklin, Artem.
Fiz isso no testador de estratégia (pelo que entendi, o corretor não tem nada a ver com isso).
As mensagens são as seguintes:
2022.07.03 11:16:39.380 2022.01.03 07:00:00 instant buy 0.1 @Si at 81011 sl: 80960 tp: 81060 (81010 / 81011 / 81010)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 deal #2 buy 0.1 @Si at 81011 done (based on order #2)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 deal performed [#2 buy 0.1 @Si at 81011]
2022.07.03 11:16:39.380 2022.01.03 07:00:00 order performed buy 0.1 at 81011 [#2 buy 0.1 @Si at 81011]
Mas em outro computador (laptop), no qual o StopLoss e o TakeProfit funcionam corretamente, as mensagens são as seguintes:
2022.07.03 11:23:18.383 2022.01.03 07:00:12 instant buy 0.1 @Si at 81047 sl: 80996 tp: 81096 (81046 / 81047 / 81046)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal #2 buy 0.1 @Si at 81047 done (based on order #2)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal performed [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.383 2022.01.03 07:00:12 ordem executada buy 0.1 at 81047 [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.514 2022.01.03 07:00:12 - Posição aberta: 2022.01.03 07.03 07:00:12.490 -
2022.07.03 11:23:18.514 2022.01.03 07:00:12 @Si Opened 0.10 Buy #2 [0.10 Market order Buy #2] at 81047, sl 80996, tp 81096, magik 123
De fato, mais duas linhas...
Para simplificar um pouco as coisas, escrevi um Expert Advisor com esse código simples:
A questão é que, quando você pressiona (ou melhor, quando solta) a tecla "Z", ele abre a opção Buy, e quando você pressiona a tecla "A", ele abre a opção Sell.
Eu o executei no testador. O resultado é o mesmo: em um PC desktop, StopLoss e TakeProfit não funcionam, mas em um laptop, sim, ou seja, tudo funciona corretamente.
Também tentei executar o código vinculado no final deste artigo no testador em um PC e em um laptop, e aconteceu a mesma coisa - não funciona em um PC, mas em um laptop funciona.
Portanto, a conclusão é que ou há alguma configuração no testador que permite acionar sl e tp (que eu desconheço) ou o testador em si não está funcionando corretamente....
MrBrooklin, Artem.
Fiz isso no testador de estratégia (pelo que entendi, o corretor não tem nada a ver com isso).
As mensagens são as seguintes:
2022.07.03 11:16:39.380 2022.01.03 07:00:00 instant buy 0.1 @Si at 81011 sl: 80960 tp: 81060 (81010 / 81011 / 81010)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 deal #2 buy 0.1 @Si at 81011 done (based on order #2)
2022.07.03 11:16:39.380 2022.01.03 07:00:00 negócio realizado [#2 buy 0.1 @Si at 81011]
2022.07.03 11:16:39.380 2022.01.03 07:00:00 ordem realizada buy 0.1 at 81011 [#2 buy 0.1 @Si at 81011]
Mas em outro computador (laptop), no qual o StopLoss e o TakeProfit funcionam corretamente, as mensagens são as seguintes:
2022.07.03 11:23:18.383 2022.01.03 07:00:12 instant buy 0.1 @Si at 81047 sl: 80996 tp: 81096 (81046 / 81047 / 81046)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal #2 buy 0.1 @Si at 81047 done (based on order #2)
2022.07.03 11:23:18.383 2022.01.03 07:00:12 deal performed [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.383 2022.01.03 07:00:12 ordem executada buy 0.1 at 81047 [#2 buy 0.1 @Si at 81047]
2022.07.03 11:23:18.514 2022.01.03 07:00:12 - Posição aberta: 2022.01.03 07:00:12.490 -
2022.07.03 11:23:18.514 2022.01.03 07:00:12 @Si Open 0.10 Buy #2 [0.10 Market order Buy #2] at 81047, sl 80996, tp 81096, magik 123
De fato, mais duas linhas...
Para simplificar um pouco as coisas, escrevi um Expert Advisor com este código simples:
A questão é que, quando você pressiona (ou melhor, quando solta) a tecla "Z", ela abre a opção de compra e, quando você pressiona a tecla "A", ela abre a opção de venda.
Eu o executei no testador. O resultado é o mesmo: em um PC de mesa, StopLoss e TakeProfit não funcionam, mas em um laptop, sim, ou seja, tudo funciona corretamente.
Também tentei executar o código vinculado no final deste artigo no testador, tanto no PC quanto no laptop, e aconteceu a mesma coisa - no PC não funciona, mas no laptop funciona.
Portanto, a conclusão é que há alguma configuração no testador que permite acionar sl e tp (que eu não conheço) ou o próprio testador funciona incorretamente....
O spread no testador é de 1. Tanto no PC quanto no laptop. Símbolo @Si.
Há alguma maneira de afetar isso?
Pensei que talvez a derrapagem (slippage) afetasse de alguma forma e tentei alterá-la. Mas isso não funciona.
O spread no testador é de 1. Tanto no PC quanto no laptop. Símbolo @Si.
Isso pode ter algum efeito?
Pensei que talvez o deslizamento (slippage) estivesse afetando-o de alguma forma e tentei alterá-lo. Mas isso não funciona.
Em um dos casos, o preço não atinge o nível de parada.