Por que a Metaquotes empurra o MT5 em vez do MT4? - página 3

 
Stanislav Korotky:

E quais funções MT4Orders são utilizadas - assíncronas (OrderSendAsync, OrderCloseAsync) ou não? Este é provavelmente o problema.

Não investiguei, apenas conectei, verifiquei a velocidade, comparei com o código original no mql5, excluí o original e deixei apenas a biblioteca com o código mql4

 
Vitaly Muzichenko:

Não o entendi, apenas o liguei, verifiquei a velocidade, comparei com o código original no mql5, excluí o original e deixei apenas a biblioteca com o código mql4

Não estou perguntando sobre os detalhes da biblioteca, mas como ela tem sido usada, para entender o problema. Em geral, eu dei uma dica.

 
Stanislav Korotky:

Eu não estava perguntando sobre o interior da biblioteca, estava perguntando como ela era usada, para ver o que estava causando o problema. De qualquer forma, eu dei uma dica.


O problema não é como usar a biblioteca.

O problema é que não temos uma posição complexa no MT4, temos ordens. E o resultado do fechamento de uma dúzia de pedidos será o mesmo que o mostrado acima.

A propósito, não há tal efeito no testador. E não temos isso na demonstração. Mas nós o temos na conta real.

Neste caso, a migração de código de mql4 para mql5 e de volta "1 para 1" é impossível.

O trabalho com pedidos em mql4 deve ser organizado adequadamente às possibilidades do mql4.

Não há como dizer aqui:

Vitaly Muzichenko:

O único grande inconveniente do MT4 ...

É que o mql4 tem algumas características e o mql5 tem outras características. Neste caso particular, o mql5 tem a vantagem. Mas o problema pode ser resolvido normalmente com mql4.

 
Andrey F. Zelinsky:

O problema não é como usar a biblioteca.

O problema é que no MT4 não há posição agregada, há ordens. E o fechamento de uma dúzia de pedidos terá o efeito mostrado.

A propósito, não há tal efeito no testador. E não temos isso na demonstração. Mas nós o temos na conta real.

Neste caso, a migração de código de mql4 para mql5 e de volta "1 para 1" é impossível.

O trabalho com pedidos em mql4 deve ser organizado adequadamente às possibilidades do mql4.

Não há como dizer aqui:

É que o mql4 tem algumas características e o mql5 tem outras características. Neste caso particular, o mql5 tem a vantagem. Mas este problema pode ser resolvido normalmente em mql4.

O que pode ser acelerado no MT4?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }
 
Andrey F. Zelinsky:

O problema não é como usar a biblioteca.

O problema é que no MT4 não há posição agregada, há ordens. E fechar uma dúzia de pedidos tem o efeito mostrado.

É apenas razoável comparar a MT4 com uma conta de cobertura da MT5 (neste caso é apenas um sistema de negociação deste tipo). E o que isso tem a ver com a posição agregada? Em MT5 haverá exatamente a mesma pilha de posições = equivalentes a quad ordens. De qualquer forma, você está tirando a conversa do problema novamente.

 
Vitaly Muzichenko:

O que pode ser acelerado no MT4?

Eu sugeri acima a substituição por funções XXXAsync. Não tenho certeza se vai ajudar, mas por que não tentar?

 
Stanislav Korotky:

Eu sugeri acima a substituição por funções XXXAsync. Não tenho certeza se vai ajudar, mas por que não tentar?

Provavelmente está um pouco fora de moda. Não tenho nenhum problema em MT5 com este código, e usando <MT4Orders>, tudo se fecha instantaneamente.

Há um problema no MT4, mas lá por razões óbvias e não é necessário <MT4Orders>, há o mais simples código quádruplo. Tenho mais de cem deles, tenho screenshots. Às vezes, ele desliza a meu favor, e com bastante freqüência, se um fechamento começou e o preço seguiu em frente. Não sei com o que está relacionado, mas provavelmente se deve à seqüência de envio de pedidos.

 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Por que a Metaquotes escorrega o MT5 em vez do MT4?

Vitaly Muzichenko, 2017.09.23 20:50

O que pode ser acelerado no MT4?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }

No mínimo:

  • A eliminação de etiquetas acelerará o código.
  • A normalização de preços nem sempre é necessária. Mesmo que o preço Ask ou Bid imprima mais casas decimais, isso não significa que a normalização dará qualquer resultado positivo.

A normalização do valor do preço só é necessária quando são realizadas operações matemáticas sobre o mesmo. Quando um valor é adicionado ou subtraído do preço.

 
Vitaly Muzichenko:

Provavelmente, um pouco fora de moda. Não tenho nenhum problema em MT5 com este código, e usando <MT4Orders>, tudo se fecha instantaneamente.

Há um problema no MT4, mas lá por razões óbvias e não é necessário <MT4Ordens>, há o mais simples código quádruplo. Tenho mais de cem deles, tenho screenshots. Às vezes, ele desliza a meu favor, e com bastante freqüência, se um fechamento começou e o preço seguiu em frente. Não sei com o que está relacionado, mas provavelmente é a seqüência de envio do pedido.

Sim, a culpa é minha - eu sou burro.

A variante da solução é a seguinte: em vez de fechar vários pedidos, eu coloco um volume total do contador, e então chamo OrderCloseBy várias vezes até a destruição mútua.

 
Stanislav Korotky:

A solução é a seguinte: em vez de fechar várias ordens, colocar um volume total de contra-processos e depois chamar OrderCloseBy várias vezes até a destruição mútua.

Esta variante funciona, infelizmente, apenas para um símbolo.


É estranho que ninguém tenha acrescentado funções de ordem assíncrona ao MT4 kodobase ao longo dos anos.

Razão: