Discussão do artigo "Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte X)" - página 4

 
Artyom Trishkin:

Não. Basta ler os artigos

Desculpe-me, mas não conheço tantas letras assim. )))

 
Alexey Viktorov:

E foi isso que aconteceu:

Enquanto eu estava executando esse código na demonstração, uma ordem de limite foi definida e excluída.

E, de repente, durante a próxima simulação, uma posição foi modificada, uma posição foi aberta e uma posição foi fechada. Mas de onde veio o registro da exclusão de uma ordem excluída há muito tempo?

Você substituiu a biblioteca pelos arquivos que lhe forneci? A biblioteca deste artigo ainda não está concluída - ela tem essa falha - quando dois eventos têm os mesmos critérios para MQL4. No décimo primeiro artigo, a portabilidade da funcionalidade atual da biblioteca para MQL4 foi concluída. E a versão desse artigo tem esse erro, e sua presença é indiretamente indicada pelas palavras finais do artigo:

O que vem a seguir

No próximo artigo, faremos o rastreamento de fechamento de posição e corrigiremos os erros que podem ocorrer na implementação atual do rastreamento de eventos para MQL4 - porque a instalação e a exclusão de pedidos são rastreadas pelo código para MQL5, e pode haver algumas nuances que precisam ser levadas em conta ao trabalhar com MQL4.
Se você substituiu os arquivos da biblioteca, mas o erro ainda ocorre, você precisa capturar a situação quando ela ocorre - a sequência de ações que levam ao erro, e eu vou corrigi-lo.
 
Artyom Trishkin:

Você substituiu a biblioteca pelos arquivos que lhe forneci? A biblioteca neste artigo ainda não está concluída - ela tem essa falha - quando dois eventos têm os mesmos critérios para MQL4. No décimo primeiro artigo, a portabilidade da funcionalidade atual da biblioteca para MQL4 foi concluída. E a versão desse artigo tem esse bug, e sua presença é indiretamente indicada pelas palavras finais do artigo:

O que vem a seguir

No próximo artigo, faremos o rastreamento de fechamento de posição e corrigiremos os erros que podem ocorrer na implementação atual do rastreamento de eventos para MQL4 - porque a instalação e a exclusão de pedidos são rastreadas pelo código para MQL5, e pode haver algumas nuances que precisam ser levadas em conta ao trabalhar com MQL4.
Se você substituiu os arquivos da biblioteca, mas o erro ainda ocorre, você precisa capturar a situação quando ela ocorre - a sequência de ações que levam ao erro, e eu vou corrigi-lo.

Sim, eu corrigi. Eu já descrevi a sequência

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.

Discussão do artigo "Biblioteca para criação fácil e rápida de programas para MetaTrader (Parte X): Compatibilidade com MQL4 - Eventos de abertura de posição e ativação de ordem pendente"

Alexey Viktorov, 2019.05.27 17:59

E aqui aconteceu uma coisa tão incompreensível:

Enquanto eu estava executando esse código na demonstração, uma ordem de limite foi definida e excluída

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

E, de repente, durante a próxima simulação, foi modificada uma posição, uma abertura e um fechamento. Mas foi daí que veio o registro da exclusão de uma ordem excluída há muito tempo?

2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=443342388, dparam=1.11835, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1024, event=TRADE_EVENT_POSITION_CLOSED, lparam=443417294, dparam=1.11933, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: - Отложенный ордер удалён: 2019.05.27 14:54:10.000 -
EURUSD Удалён 0.01 Buy Limit #443342388  по цене 1.11835
2019.05.27 18:34:11.903 00 EURUSD,H1: - Позиция закрыта: 2019.05.27 18:33:02.000 -
EURUSD Закрыт Sell #443417294  по цене 1.11912, профит -0.21 USD
2019.05.27 18:33:02.755 00 EURUSD,H1: OnChartEvent: id=1022, event=TRADE_EVENT_POSITION_OPENED, lparam=443417294, dparam=1.11912, sparam=EURUSD
2019.05.27 18:33:02.755 00 EURUSD,H1: - Позиция открыта: 2019.05.27 18:33:02.000 -
EURUSD Открыт 0.01 Sell #443417294 [0.01 Market order Sell #443417294]  по цене 1.11912
2019.05.27 18:29:21.913 00 EURUSD,H1: OnChartEvent: id=1050, event=TRADE_EVENT_MODIFY_POSITION_TAKE_PROFIT, lparam=443218277, dparam=1.12218, sparam=EURUSD
2019.05.27 18:29:21.913 00 EURUSD,H1: - Модифицирован TakeProfit позиции: 2019.05.27 18:27:45.000 -
EURUSD Buy #443218277:  модифицирован TakeProfit: [1.12240 --> 1.12218]

Às 15:01:14, excluí uma ordem de limite colocada anteriormente.

Até as 18:29, eu estava fazendo meu próprio trabalho. O Expert Advisor estava no gráfico.

Às 18:29:21, modifiquei a posição definida anteriormente.

Às 18:33:02, coloquei Sell

Às 18:34:11, fechei essa venda.

E, nesse momento, recebi o segundo registro de que o limite que foi excluído às 15:01:14 foi removido.

 
Alexey Viktorov:

Sim, eu disse. Eu já descrevi a sequência, não foi?

Você descreveu:

E foi isso que aconteceu:

Enquanto eu estava executando esse código na demonstração, uma ordem de limite foi definida e excluída.

E, de repente, durante a próxima simulação, uma posição foi modificada, uma posição foi aberta e uma posição foi fechada. Mas de onde veio o registro da exclusão de uma ordem excluída há muito tempo?

E qual é a sequência dessas ações?

  1. definir uma ordem de limite
  2. excluiu uma ordem de limite
  3. posição modificada (quando foi aberta?)
  4. a posição é aberta
  5. a mesma posição é fechada
Em que momento o evento incorreto foi exibido?
 
Artyom Trishkin:

Você escreveu:

Qual é a sequência dessas ações?

  1. definir uma ordem de limite
  2. excluí uma ordem de limite
  3. posição modificada (quando foi aberta?)
  4. a posição é aberta
  5. a mesma posição foi fechada
Em que momento o evento incorreto foi exibido?

Eu completei a mensagem anterior.

 
Alexey Viktorov:

Sim, eu disse. Eu já descrevi a sequência, não foi?


Não consigo obter esse erro em nenhuma sequência.

Por favor, descreva a sequência que levou a ele.

É melhor não no log - há muitos registros de depuração lá agora, que interferem na percepção rápida, mas aqui mesmo em uma lista numerada.

 
Alexey Viktorov:

Completei a mensagem anterior.

Às 15:01:14, excluí a ordem de limite colocada anteriormente.

Até as 18:29, eu estava fazendo minhas próprias coisas. O Expert Advisor estava no gráfico.

Às 18:29:21, modifiquei a posição definida anteriormente.

Às 18:33:02, coloquei Sell

Às 18:34:11, fechei essa venda.

E, nesse momento, recebi um segundo registro de que o limite que foi excluído às 15:01:14 foi excluído.

Ou seja, você precisa:

  1. abrir uma posição, esperar por algum tempo,
  2. colocar uma ordem de limite, esperar um certo tempo,
  3. excluir a ordem de limite,
  4. modificar a posição,
  5. abrir a posição e fechar a posição
Certo?
 
Artyom Trishkin:

Às 15:01:14, excluí a ordem de limite colocada anteriormente.

Até as 18:29, eu estava fazendo minhas próprias coisas. O Expert Advisor estava no gráfico.

Às 18:29:21, modifiquei a posição definida anteriormente.

Às 18:33:02, coloquei Sell

Às 18:34:11, fechei essa venda.

E, nesse momento, recebi o segundo registro de que o limite que foi excluído às 15:01:14 foi removido.

Ou seja, eu preciso:

  1. abrir uma posição, esperar por algum tempo,
  2. colocar uma ordem de limite, esperar um certo tempo,
  3. remover a ordem de limite,
  4. modificar a posição,
  5. abrir a posição e fechar a posição
Certo?

Não, cuidado com suas mãos.

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Limite definido em 14:54:10 e removido em 15:01:14.

Em seguida, uma longa pausa na transmissão. Tudo fica em silêncio.

Em seguida, vários movimentos seguidos, às 18:. listando apenas os minutos 29, 33 e 34. No 34, esse evento que aconteceu há três horas e meia é transmitido.

Aqui está a lista de posições.

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
Todas elas estão abertas pela manhã e na hora do almoço. Aos 18 minutos, apenas Sell estava aberta e quase imediatamente fechada.
 
Alexey Viktorov:

Não, bem, cuidado com suas mãos

Limite definido às 14:54:10 e excluído às 15:01:14.

Em seguida, uma longa pausa na transmissão. Tudo fica em silêncio.

Em seguida, vários movimentos seguidos, às 18:. listando apenas os minutos 29, 33 e 34. Agora, no 34, esse evento que aconteceu há três horas e meia.

Aqui está uma lista de posições.

Todas elas estão abertas pela manhã e na hora do almoço. Aos 18 minutos, apenas Sell estava aberta e quase imediatamente fechada.

Bem, aqui está:

Às 15:01:14, apaguei uma ordem de limite colocada anteriormente.

Até as 18:29, eu estava fazendo meu próprio negócio. O Expert Advisor estava no gráfico.

Às 18:29:21, modifiquei a posição definida anteriormente.

Às 18:33:02, coloquei Sell

Às 18:34:11, fechei essa venda.

Antes - é ANTES de definir a ordem de limite? Ou depois? Quando ela foi aberta? "Antes" não é específico. Provavelmente há um significado no momento de todas as ações - afinal, tudo é salvo na lista. Em algum lugar, há condições iguais, já que a remoção da ordem de limite antiga é determinada novamente no momento do fechamento da posição - a posição foi fechada, verificamos as condições (isso é descrito diretamente no código) e determinamos o tipo de evento com base nessas condições. E, em seguida, a lista é classificada pelo tipo de uma determinada ordem no evento e o evento é enviado para o programa - portanto, há uma sobreposição de condições em MQL4 que acabam sendo iguais para a biblioteca. Embora isso seja o que eu removi no 11º artigo, que ainda está sendo testado.

 
Artyom Trishkin:

Bem, aqui está você escrevendo:

Às 15:01:14, excluí uma ordem de limite colocada anteriormente.

Até as 18:29, fiz minhas próprias coisas. O Expert Advisor permaneceu no gráfico.

Às 18:29:21, modifiquei a posição definida anteriormente.

Às 18:33:02, coloquei Sell

Às 18:34:11, fechei essa Sell.

Anteriormente - isso é ANTES de a ordem de limite ter sido definida? Ou depois? Quando ela foi aberta? "Anteriormente" não é específico. Provavelmente há um significado no momento de todas as ações - afinal, tudo é salvo na lista. Em algum lugar, há condições iguais, já que a remoção da ordem de limite antiga é determinada novamente no momento do fechamento da posição - a posição foi fechada, verificamos as condições (isso é descrito diretamente no código) e determinamos o tipo de evento com base nessas condições. E, em seguida, a lista é classificada pelo tipo de uma determinada ordem no evento e o evento é enviado ao programa - portanto, há uma sobreposição de condições em MQL4 que acabam sendo iguais para a biblioteca. Embora isso seja o que eu removi no 11º artigo, que ainda está sendo testado.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Discussão do artigo "Biblioteca para criação fácil e rápida de programas para o MetaTrader (Parte X): Compatibilidade com MQL4 - Eventos de abertura de posição e ativação de ordens pendentes"

Alexey Viktorov, 2019.05.27 18:50

Não, bem, cuidado com suas mãos

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Limitador colocado às 14:54:10 e excluído às 15:01:14

Em seguida, uma longa pausa na transmissão. Tudo fica em silêncio.

Em seguida, vários movimentos seguidos, aos 18:. listando apenas os minutos 29, 33 e 34. Agora, no 34, esse evento que aconteceu há três horas e meia.

Aqui está a lista de posições.

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
Todas elas estão abertas pela manhã e na hora do almoço. Aos 18 minutos, apenas uma estava aberta, Sell, e quase imediatamente fechada.

Modificou apenas uma, a posição destacada. Não há dúvida quanto a isso. Ela foi colocada pela manhã. Modifiquei-a várias vezes. Não me importava qual delas eu modificava. Eu já havia definido um takeout para essa posição. Era isso que eu estava tentando fazer.

Aqui estão todos os limitadores e a última venda.

443340041 2019.05.27 14:46:32 buy limit 0.01 eurusd 1.11815 0.00000 0.00000 2019.05.27 14:46:55 1.11974 cancelled 
443340283 2019.05.27 14:47:15 buy limit 0.01 eurusd 1.11796 0.00000 0.00000 2019.05.27 14:47:27 1.11974 cancelled 
443340764 2019.05.27 14:48:42 buy limit 0.01 eurusd 1.11830 0.00000 0.00000 2019.05.27 14:52:51 1.11962 cancelled 
443340819 2019.05.27 14:48:54 buy limit 0.01 eurusd 1.11761 0.00000 0.00000 2019.05.27 14:50:22 1.11977 cancelled 
443340874 2019.05.27 14:49:06 buy limit 0.01 eurusd 1.11694 0.00000 0.00000 2019.05.27 14:52:37 1.11963 cancelled 
443341012 2019.05.27 14:49:32 buy limit 0.01 eurusd 1.11657 0.00000 0.00000 2019.05.27 14:51:22 1.11973 cancelled 
443342301 2019.05.27 14:53:55 sell stop 0.01 eurusd 1.11764 0.00000 0.00000 2019.05.27 15:01:03 1.11956 cancelled 
443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 
443417294 2019.05.27 18:33:02 sell 0.01 eurusd 1.11912 0.00000 0.00000 2019.05.27 18:34:11 1.11933 0.00 0.00 0.00 -0.21 

Os limitadores excluídos e a venda estão destacados. O evento de exclusão deve ter sido deixado em algum lugar. Mas por que ele "acordou" não com a abertura dessa venda, mas somente com o fechamento da venda?