Com o que substituir a OnTradeTransaction() em mql4? - página 6

 
Vitaly Muzichenko:

Não, mas talvez estejamos falando de coisas diferentes.

Isto sempre vai funcionar.

Ainda me fez abrir o terminal e verificar... Aqui estão três corridas do mesmo roteiro e três resultados.

Há apenas uma linha no roteiro.

  Print("OrdersHistoryTotal ", OrdersHistoryTotal());
2020.01.27 18:28:51.063 Script 00 EURGBP,H4: removed
2020.01.27 18:28:51.063 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:51.063 00 EURGBP,H4: OrdersHistoryTotal 48
2020.01.27 18:28:51.063 00 EURGBP,H4: initialized
2020.01.27 18:28:51.043 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:38.203 Script 00 EURGBP,H4: removed
2020.01.27 18:28:38.193 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:38.193 00 EURGBP,H4: OrdersHistoryTotal 47
2020.01.27 18:28:38.193 00 EURGBP,H4: initialized
2020.01.27 18:28:38.183 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:16.443 Script 00 EURGBP,H4: removed
2020.01.27 18:28:16.443 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:16.443 00 EURGBP,H4: OrdersHistoryTotal 4
2020.01.27 18:28:16.443 00 EURGBP,H4: initialized
2020.01.27 18:28:16.423 Script Test\00 EURGBP,H4: loaded successfully

Quero dizer que se um EA estiver funcionando e um usuário decidir mudar o alcance da história exibindo com suas mãos travessas, o EA vai enlouquecer durante a segunda troca. Agora será menor, agora será maior, agora será diferente da memorizada. E mesmo que a linha

  if(HT!=__TotalHist)

colocado > ao invés de !=, a situação não vai mudar. Se a EA estiver funcionando quando a configuração estiver definida para "Hoje" e mudar para "Toda a história"... o que acontece?

 
Aleksandr Volotko:

Eu não sonharia em tocar em OrderHistoryTotal(), por que eu deveria?

Só para o caso: ))))

 
Alexey Viktorov:

Só para o caso: ))))

:))) OrdensTotal() é bom o suficiente para mim

Talvez para fazer dois temporizadores? um compara os valores de OrdensTotal() mesmo uma vez em 100 ms, e o segundo para segurança uma vez em um minuto (ou menos freqüentemente) em um loop - nenhum mouse pode falhar lá, se uma de duas dúzias de negócios fechar/abrir uma vez em 100500 vezes por minuto depois - eu certamente não morrerei, suponho, o depósito também.

 
Aleksandr Volotko:

:))) OrdensTotal() é suficiente para mim

Talvez eu deva fazer dois temporizadores? Um deles compara os valores de OrdensTotal() mesmo uma vez em 100 ms, e o segundo - uma vez em um minuto (ou menos freqüentemente) passa pelo loop - nem um único mouse consegue passar por lá, se uma de duas dúzias de negócios fecha/abre um minuto depois, mais de 100500 vezes - eu certamente não morrerei, e suponho que meu depósito também morrerá.

E quantos pedidos abertos ao mesmo tempo são fornecidos pelo algoritmo?

 
Alexey Viktorov:

Ainda me fez abrir o terminal e verificar... Aqui estão três séries do mesmo roteiro e três resultados.

Há apenas uma linha no roteiro

O que quero dizer é que se a EA funcionar e um usuário decidir mudar o alcance da história exibindo com suas mãos travessas, a EA vai enlouquecer durante a segunda troca. Agora será menor, agora será maior, agora será diferente da memorizada. E mesmo que a linha

A situação não mudará se colocarmos > em vez de !=. Se o Expert Advisor for executado no momento em que a configuração for "Hoje" e mudar para "Toda a história"... o que vai acontecer?

Em qualquer caso, não será igual, e o código irá mais longe. Mas se definirmosse(HT >__TotalHist), então enfrentaremos problemas.

 
Alexey Viktorov:

E quantas ordens abertas o algoritmo estipula no total?

Duas ou três dúzias, no máximo.

 
Vitaly Muzichenko:

Em qualquer caso, não será igual e o código seguirá em frente. Mas se (HT >__TotalHist)então há um problema

Vitaly, haverá problemas em qualquer caso. Qualquer que seja a forma como você olha para ela, se a EA deve reagir a mudanças na quantidade de pedidos na história, ela reagirá independentemente de como a quantidade de pedidos tenha mudado. De fato, a quantidade de pedidos na história só pode aumentar, por isso sugeri que seria menos perigoso, mas não resolve o problema. Mesmo que você o tenha escrito somente para você mesmo, não pode descartar a possibilidade de troca manual. Você nunca sabe que tipo de mensagem de texto virá à sua mente))))

 
Aleksandr Volotko:

2-3 dúzias, no máximo

Para tal número, seria mais fácil criar uma série de bilhetes ou mesmo uma série de estruturas com propriedades de pedido e verificar a mudança de tipo e o tempo de fechamento em cada tick. Isto nos permitirá rastrear a ativação de uma ordem pendente ou o fechamento de uma posição. E abrindo imediatamente após enviar OrderSend(), acrescente o tamanho da matriz e coloque tudo o que você precisa nela.

 
É isso mesmo, você pode sacudir pedidos 86400 vezes por dia, mas não queria fazê-lo.
 
Aleksandr Volotko:
É isso mesmo, você pode sacudir pedidos 86400 vezes por dia, mas não queria.

Nesse caso, seria difícil viver sem a biblioteca da Artem.