Bibliotecas: MT4Orders - página 15

 
Aleksey Vyazmikin:

Onde posso obter a biblioteca mais recente?

A versão mais recente está sempre disponível na página da biblioteca.

Porque com a que eu tenho, o EA está ficando lento.

Com a biblioteca

2017.08.23 12:03:00.097 Core 3 Si Splice,M1: 992989 ticks, 248280 bars generated. Ambiente sincronizado em 0:00:00.078. Teste aprovado em 0:01:24.069 (incluindo o pré-processamento de ticks em 0:00:00.421).

Sem biblioteca

2017.08.23 12:06:38.022 Core 3 Si Splice,M1: 992989 ticks, 248280 bars generated. Ambiente sincronizado em 0:00:00.079. O teste foi aprovado em 0:01:09.186 (incluindo o pré-processamento de ticks em 0:00:00.421).

A única diferença está na classe, que funciona durante a desinicialização, executando ordens fechadas - ela foi escrita no MT4.

Essa classe deve funcionar em alguns milissegundos.

 
fxsaber:

A versão mais recente está sempre disponível na página da biblioteca.

Essa classe deve funcionar em alguns milissegundos.


Atualizei a biblioteca, o resultado é muito melhor

2017.08.23 14:02:22.204 Core 3 Si Splice,M1: 992989 ticks, 248280 bars generated. Ambiente sincronizado em 0:00:00.062. Teste aprovado em 0:01:10.341 (incluindo o pré-processamento de ticks em 0:00:00.437).


 
Aleksey Vyazmikin:

Atualização da biblioteca, resultado muito melhor

Leve em conta essa nuance. Muitas pessoas escrevem assim

for (int i = 0; i < OrdersHistoryTotal(); i++)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    // ...

Isso leva a chamar OrdersHistoryTotal() em cada passagem do loop. A função é otimizada e executada rapidamente, mas ainda assim verifica as alterações no histórico todas as vezes. Isso é obviamente desnecessário e consome um tempo precioso. É por isso que é correto escrevê-la dessa forma

const int Total = OrdersHistoryTotal();

for (int i = 0; i < Total; i++)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    // ...

Será mais rápido.

 
// Lista de modificações:
// 26.08.2017:
// Adição: adicionados OrderOpenTimeMsc() e OrderCloseTimeMsc() - tempo correspondente em milissegundos.
// Correção: Anteriormente, todos os tíquetes de negociação tinham o tipo int, como no MT4. Devido a casos de ultrapassagem do tipo int no MT5, o tipo de tíquetes foi alterado para long.
// Dessa forma, OrderTicket e OrderSend retornam valores longos. O modo de retorno do mesmo tipo que no MT4 (int) é ativado por meio de
// escrevendo a próxima linha antes de #include <MT4Orders.mqh>

// Obrigar o OrderSend e o OrderTicket a retornar um valor do mesmo tipo que no MT4 - int.
 
// Lista de modificações:
// 03.09.2017:
// Adicionar: adicionado OrderTicketOpen() - ticket de transação de abertura de posição MT5
// OrderOpenReason() - motivo da transação de abertura do MT5 (motivo para abrir uma posição)
// OrderCloseReason() - motivo da transação de fechamento do MT5 (motivo para fechar a posição)
[Excluído]  

// if (MT4ORDERS::OrderSendBug)
// // // {
// Alert("BUG!!!!!!");
//
// //MT4ORDERS_BENCHMARK;
// }

O que é esse alerta no código? Ele gera um "bug" se o histórico não tiver sido sincronizado por um determinado período?

Encontrei-o anteriormente nos documentos, mas a pergunta desapareceu. Portanto, não é nada crítico, ele também aparecia às vezes.

 
Maxim Dmitrievsky:

// if (MT4ORDERS::OrderSendBug)
// // // {
// Alert("BUG!!!!!!");
//
// //MT4ORDERS_BENCHMARK;
// }

O que é esse alerta no código? Ele gera um "bug" se o histórico não tiver sido sincronizado por um determinado período?

Encontrei-o anteriormente nos documentos, mas a pergunta desapareceu. Portanto, não é nada crítico, ele também aparecia às vezes.

Sim, é isso mesmo. Um bug raro dos desenvolvedores. Somente na biblioteca, há mais de um mês, ela tem essa aparência

      if (!Res || MT4ORDERS::OrderSendBug)
      {
        Alert(Res ? "OrderSend - BUG!" : "MT4ORDERS - not Sync with History!");

Recomendo enfaticamente que você atualize.

[Excluído]  
fxsaber:

Sim, é isso mesmo. Um bug raro dos desenvolvedores. Somente na biblioteca há mais de um mês, é assim que ele se parece

É altamente recomendável atualizar.

Atualizei agora mesmo, obrigado)
 
Um exemplo de alguma suscetibilidade da biblioteca às funções padrão MQL5
#include <MT4Orders.mqh>

void OnStart()
{
  if (PositionsTotal() > 1)
  {
    OrderSelect(0, SELECT_BY_POS); // MT4Orders selecionados.
    OrderPrint();                  // Imprimir uma posição como no MT4
    
    PositionGetTicket(1);          // Selecionado por MQL5
    OrderPrint();                  // Imprimir uma posição como no MT4
  }
}