Bibliotecas: MT4Orders - página 60

 
// Lista de modificações:
// 04.05.2021
// Correção: as aberturas de ordens MT5 que não desaparecem não são mais listadas como ordens MT4.
// Correção: as ordens do tipo MT5 CloseBy não são mais listadas como ordens MT4.

Outro recurso do MT5 (uma ordem totalmente executada e a posição gerada por ela podem existir juntas) é contornado pela biblioteca.

Mais uma vez, tive que mergulhar nas profundezas do MT5 para encontrar uma solução. A atualização é de fato importante. Mesmo que não seja óbvia.


ZЫ Estou tentando encontrar uma solução de terceiros para outro recurso muito desagradável do MT5.

 
Vitaly Muzichenko:

Por que está tão triste?

Se você baixar o arquivo da KB, não haverá problema.

 
Vitaly Muzichenko:

Por que está tão triste?


Informei ao https://www.mql5.com/ru/forum/1111/page3003#comment_21981258, mas parece que ainda está lá. Mas ele afeta apenas a exibição. Se você clicar em um arquivo e baixá-lo, tudo estará bem.

 
traveller00:

Informado para https://www.mql5.com/ru/forum/1111/page3003#comment_21981258, mas parece que ainda está lá. Mas ele afeta apenas a exibição. Se você clicar em um arquivo e baixá-lo, tudo estará normal.

Obrigado! Sim, ele é exibido corretamente dessa forma.

 

Essa é uma peculiaridade interessante do estilo MT4, e é por isso que estou escrevendo aqui em vez de no tópico do perfil.


À primeira vista, esses dois códigos deveriam produzir o mesmo resultado.

while (OrdersTotal() <= 1)
  if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
  else
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    


while (OrdersTotal() <= 1)
  if (!OrdersTotal())
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
  else if (OrderSelect(0, SELECT_BY_POS))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);


De fato, não é assim. Tente entender o motivo.

Особенности языка mql4, тонкости и приёмы работы
Особенности языка mql4, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql4, примеры решения тех, или иных задач...
 
// Lista de modificações:
// 12.05.2021
// Acrescentar: a macro MT4ORDERS_BYPASS_MAXTIME corrige as sempre presentes dessincronizações do ambiente de negociação do MT5.

Atualização da biblioteca histórica! A única biblioteca do mundo capaz de compensar as constantes dessincronizações do ambiente de negociação do MT5. Modesto, mas verdadeiro.


Você só precisa escrever uma macro correspondente. Aqui está um exemplo.

// Demonstração da DECISÃO de abrir uma posição dupla no MT5.
// https://www.mql5.com/ru/forum/368178/page13#comment_22171524

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Tempo máximo (em µs) para aguardar a sincronização do ambiente de negociação
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define  MinLot SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // Rejeitar a correção do resultado MT5-OrderSend incorporado.
  
  while (!IsStopped() && OrdersTotal() <= 1)
    if (!OrdersTotal())
      OrderSend(_Symbol, OP_BUY, MinLot, Ask, 0, 0, 0);    
    else if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    
  Print(MT4ORDERS::ByPass.ToString()); // Imprimir as estatísticas de sincronização.
}


Esse script apenas abre e fecha posições alternadamente. Ele será interrompido somente em caso de inversão de posição(uma aflição comum do MT5) - falha na biblioteca. Se alguém encontrar um problema desse tipo, informe-me.


Para mim, essa atualização da biblioteca é imprescindível. Recomendado.


ZY O mecanismo de sincronização é muito rápido.

Amount = 126/247 = 51.01%, Time(mcs) = 983/9915 = 9.91%, TimeAvg = 40 mcs, MaxInterval = 2483 mcs.
O mecanismo foi invocado 247 vezes (9915 µs.), das quais 126(983 µs.) não foram sincronizadas. O tempo médio do mecanismo é de 40 µs. O máximo é 2483 µs.
 
Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

Bug encontrado:

A função OrderOpenReason() retorna (ENUM_DEAL_REASON)DEAL_REASON_TP para ordens fechadas no takeprofit.

 
fxsaber:
#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Tempo máximo (em µs) para aguardar a sincronização do ambiente de negociação

Obrigado pela atualização!

O que acontece depois de transcorrido esse segundo? Ele continuará a funcionar na ausência de sincronização?


fxsaber:
MT4ORDERS::OrderSend_MaxPause = 0; // Rejeitar a correção do resultado MT5-OrderSend incorporado.

Isso precisa ser prescrito em robôs de combate?

 
Andrey Khatimlianskii:

O que acontece depois de transcorrido esse segundo? A operação continuará na ausência de sincronização?

Ou é suficiente verificar MT4ORDERS::ByPass.Is() antes das operações de negociação (para garantir que não haja dessincronização)?