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.
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).
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
constint Total = OrdersHistoryTotal();
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
// ...
// 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)
Um exemplo de alguma suscetibilidade da biblioteca às funções padrão MQL5
#include <MT4Orders.mqh>
voidOnStart()
{
if (PositionsTotal() > 1)
{
OrderSelect(0, SELECT_BY_POS); // MT4Orders selecionados.OrderPrint(); // Imprimir uma posição como no MT4PositionGetTicket(1); // Selecionado por MQL5OrderPrint(); // Imprimir uma posição como no MT4
}
}
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.
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).
Atualização da biblioteca, resultado muito melhor
Leve em conta essa nuance. Muitas pessoas escrevem assim
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
Será mais rápido.
// 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.
// 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
Recomendo enfaticamente que você atualize.
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.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bibliotecas: TesterBenchmark
fxsaber, 2017.09.05 09:36 pm.
O atraso do MT4Orders em relação ao MQL5 puro maximamente otimizado é inferior a um por cento.