MT4-Tester VS MT5-Tester

 
Finalmente percebi uma idéia antiga

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

Discussão sobre "EAs prontos de MQL5 Wizard work in MetaTrader 4".

fxsaber, 2017.03.09 13:02

Sugiro levar o Tick Data Suite trial (Compatível: MT4 build 940 - 1052) para comparação.

Em MT5 tester selecione o modo "por carrapatos reais". Salve-os e alimente-os com o testador MT4 via TDS.

Então as cotações em ambos os testadores coincidirão 100%, o que permitirá compará-las não apenas em negócios, mas também em velocidade.

Seria então possível comparar a conversão/criação de EAs em ambas as direções.

MT4 build 1072, MT5 build 1596 trading server Alpari-MT5.

Configurações do testador MT4 na captura de tela

A moeda em ambos os testadores é USD. Isto permite no mesmo testador MT5 para EURUSD não puxar outro símbolo de conversão.


Agora, executamos os seguintes Expert Advisor em ambas as plataformas de teste

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


Diário de bordo MT4-tester

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


Diário de bordo MT5-tester

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

Confirmamos que os arquivos recebidos de cada testador são idênticos - os carrapatos dos testadores coincidem.


Neste ponto, a preparação de ambos os testadores para o novo serviço está pronta.

 

Consultor especializado

// MQL4&5-code

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}


Os resultados


Relatório MT4

Strategy Tester Report
Sorte
MetaQuotes-Demo (Build 1072)

SímboloEURUSD (Euro vs Dólar americano)
Período1 Minuto (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
ModeloTodos os carrapatos (método mais preciso baseado em todos os menores períodos de tempo disponíveis)
ParâmetrosShift=3; Limite=18; Lotes=0,1;
Bares na história7292Carrapatos modelados1865515Qualidade de modelagem99.00%
Erros de descasamento de cartas0
Depósito inicial100000.00EspalheVariável
Lucro líquido-10863.90Lucro total2528.70Perda total-13392.60
Rentabilidade0.19Pagamento previsto-0.49
Desembolso absoluto10864.70Máximo de drawdown10864.70 (10.86%)Drawdown relativo10.86% (10864.70)
Total de negócios21954Posições curtas (% ganho)12016 (68.60%)Posições longas (% ganho)9938 (67.03%)
Ofícios rentáveis (% de todos)14904 (67.89%)Perdas comerciais (% do total)7050 (32.11%)
A maiorcomércio lucrativo3.00transação perdida-4.40
Médianegócio lucrativo0.17perdendo comércio-1.90
Número máximoganhos contínuos (lucro)155 (46.60)Perdas contínuas (perda)115 (-210.10)
Máx.lucros contínuos (número de vitórias)46.60 (155)perda contínua (número de perdas)-210.10 (115)
Médiaprêmios contínuos5perda contínua2


Relatório MT5

Relatório de teste de estratégia
Alpari-MT5 (Build 1596)
Configurações
Conselheiro especializado:Sorte
Símbolo:EURUSD
Período:M1 (2017.04.10 - 2017.04.16)
Parâmetros:Shift=3
Limite=18
Lotes=0,1
Corretor:Alpari International Limited
Moeda:USD
Depósito inicial:100 000.00
Alavancagem:1:100
Backtest
Qualidade da história:n/d
Bares:7192Tiki:1865415Personagens:1
Lucro líquido:-10 863.90Levantamento absoluto no balanço patrimonial:10 863.90Saque absoluto de fundos:10 864.70
Lucro total:2 528.70Máximo de drawdown em balanço:10 863.90 (10.86%)Máximo levantamento de fundos:10 864.70 (10.86%)
Perda total:-13 392.60Levantamento relativo no balanço patrimonial:10.86% (10 863.90)Saque relativo de fundos:10.86% (10 864.70)
Rentabilidade:0.19Pagamento previsto:-0.49Nível de margem:863.58%
Fator de recuperação:-1.00Razão Sharpe:-0.50Z-score:-52.22 (99.74%)
AHPR:1.0000 (-0.00%)Correlação LR:-1.00Resultado do OnTester:0
GHPR:1.0000 (-0.00%)Erro Padrão da LR:149.82
Total de negócios:21954Ofícios curtos (% de vencedores):12016 (68.60%)Comércios longos (% ganha):9938 (67.03%)
Total de negócios:43908Ofícios rentáveis (% de todos os ofícios):14904 (67.89%)Perdas comerciais (% de todas as negociações)7050 (32.11%)
O maior comércio lucrativo3.00Maior perda comercial-4.40
Comércio lucrativo médio:0.17Média das perdas comerciais:-1.90
Número máximo de vitórias consecutivas (lucro):155 (46.60)Número máximo de perdas contínuas (perda):115 (-210.10)
Lucros máximos contínuos (número de vitórias):46.60 (155)Perda máxima contínua (número de perdas):-210.10 (115)
Ganhos médios contínuos:5Média de Perdas Contínuas:2


Os resultados são compatíveis!


Desempenho

Registro MT4
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)


Registro MT5

2017.05.08 02:04:53.278 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).


O MT4-tester conseguiu 3 vezes mais rápido que o MT5-tester. Se houver qualquer dúvida de que o registro MT5 é causado pelo uso de uma biblioteca de terceiros, aqueles que desejarem podem reescrever o simples registro MT4 deste Expert Advisor na MQL5 à sua própria maneira e verificar a hipótese.


HZ o testador MT5 estava trabalhando muito mais devagar, até que limpei todas as pastas Bases à mão. Os resultados são dados com isto em mente.

 

No servidor Alpari-MT5-Demo na nova construção (a ser lançado em uma semana) com rápido acesso ao histórico do negócio, eu tive sucesso:

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.

O MT5 tem uma sobrecarga de sistema para transferir dados e a própria tarefa para um processo de agente externo, que em tarefas pequenas (segundos) introduz um grande erro em comparação.

E a complexidade e a qualidade do testador em MT5 é muito maior: simulação síncrona de múltiplos instrumentos com precisão de milissegundos, deslizamentos/desvios reais durante a rolagem das mudanças mundiais e muitas outras funções menores. Não é como se houvesse um loop for loop.


Mais lento por ordens de magnitude - você não se confunde com inicialização/sincronização e carregamento de todos os dados? Tudo está escrito em registros. Os arquivos no disco não devem ser tocados em nenhum caso.

Recomendo colocar %userdata%\MetaQuotes diretório (como C:\Users\%username%\AppData\Roaming\MetaQuotes) no passe de antivírus. É aqui que se encontram os dados e a adição do antivírus ao passe melhora drasticamente a velocidade de acesso aos dados do terminal e do testador.

Caso contrário, eles ficam tão entusiasmados quando vêem o metatester[64].exe funcionando, abrindo a porta da rede e muitos arquivos de dados grandes, escritos por terminal e tester. O testador de alguns comerciantes consegue até cair, porque o antivírus não tem tempo de verificar o arquivo metatester[64].exe mesmo em poucos segundos e o terminal não consegue acessá-lo.

 
Renat Fatkhullin:

a complexidade e qualidade do testador em MT5 é uma ordem de magnitude maior: modelagem síncrona de múltiplos instrumentos com precisão de milissegundos, deslizamentos/atrasos honestos enquanto percorre as mudanças mundiais e um monte de características menores.

O pacote MT4+TDS também tem isso. E mais algumas características que falta ao MT5... Mas é claro que não há moedas múltiplas.

Mais lento por ordens de magnitude.

No início pensei que o TDS desacelera deliberadamente o MT5, por isso limpei sua memória. Também limpei as pastas-base (estava ficando sem espaço em disco). Depois disso, o MT5 foi duas ordens de grandeza mais rápido para uma única corrida (os reinícios não ajudaram antes). A hipótese sobre os blocos TDS não pôde ser confirmada, no entanto, eu tentei. Eu não tive nenhum anti-vírus no meu computador.

O servidor Alpari-MT5 é real.


A ZZY rodou o MT4-optimizador em execução total - 14 minutos. MT5 (falta apenas um agente) - parece que serão muitas horas. Afixará o total pela manhã/tarde.

 

De onde vieram os deslizes?

Você tem algo completamente diferente em mente. Jogue com o campo de Atraso no testador MT5 e você verá que é algo totalmente diferente. Mesmo o habitual Sleep(2500) em código MQL5, quando executado no testador, dará um atraso no código quando o mundo inteiro continuar simulando. O campo de atraso de execução mostra efetivamente como as negociações serão executadas se você colocar seu ping de 100ms no servidor lá.

Não pode haver uma ordem de magnitude de atraso. E por que haveria qualquer acréscimo para o MT5 quando ele funciona bem por si só?

Sobre a ultrapassagem - não há ajustes e não há limites.
 

Sobre a falta de antivírus - há muito tempo, todas as versões desde 7 têm um Windows Defender interno e discreto, que faz um bom trabalho de verificação de todos os arquivos.

Às vezes gera atrasos perceptíveis em operações de arquivos, mesmo em discos SSD.

 

Excesso (100.000 USD no início)


Deslizes em MT4 (os milissegundos na história do carrapato funcionam como deveriam) e outras guloseimas


 
Renat Fatkhullin:

Sobre a falta de antivírus - há muito tempo, todas as versões da 7 têm tido um Windows Defender interno e discreto, que escaneia todos os arquivos.

Deficiente. Já temos todos os dados para ver fortes desacelerações do MT5 na otimização. Publicarei os resultados da otimização comparativa quando o MT5 estiver concluído.
 
Eu não entendo a idéia de duplicatas

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

Bichos, insetos, perguntas

fxsaber, 2017.05.07 21:55

Servidor comercial Alpari-MT5

Por que existem carrapatos duplicados (lance e pergunte são iguais) na história do tick FOREX?

O testador está correndo EAs em duplicatas e há a metade delas. É necessário obter a queda de desempenho apropriada pela metade?

 

Você ainda não entendeu os deslizes de que estou falando. Não funciona no MT4 como uma questão de princípio.

Não em carrapatos, mas no processo do programa mcl5, quando ele pára e os carrapatos continuam e o mundo está girando. Escreva Sleep(3000) e o programa esperará 3 segundos e durante este tempo os ticks estarão fazendo ticks, o mercado estará simulando.

Se você definir o campo Atraso de execução para 200ms no testador, será simulada uma latência de rede de 200 na execução das operações, o que dará ou um deslize de mercado ou solicitações.

Este é todo um outro nível poderoso de modelagem de processos de mercado, e dentro de um sistema de múltiplas moedas. E mais importante ainda, em um processo alienado remoto. Por exemplo, um agente de 10.000 km de repente recebe um pedido dinâmico de acesso a símbolos ausentes do código ao executar uma tarefa e é capaz de solicitar esses dados ao mestre, incorporá-los no mundo do mercado e continuar a girá-los.

 
Renat Fatkhullin:

Você ainda não entendeu os deslizes de que estou falando. Não funciona no MT4 como uma questão de princípio.

Não em carrapatos, mas no processo do programa mcl5, quando ele pára e os carrapatos continuam e o mundo está girando. Escreva Sleep(3000) e o programa esperará 3 segundos e nesse tempo os ticks estarão fazendo ticks, o mercado estará simulando.

Isto não funciona agora no MT4.

Se você definir o campo Atraso de execução para 200ms no testador, ele simulará uma latência líquida de 200 na execução das operações, o que dará ou um deslize de mercado ou solicitações.

Isto funciona agora no MT4.

Este é todo um outro nível poderoso de modelagem de processos de mercado, e dentro de um sistema de múltiplas moedas. E mais importante ainda, em um processo alienado remoto. Por exemplo, um agente de 10.000 km de repente recebe um pedido dinâmico de acesso a símbolos ausentes do código ao executar uma tarefa e é capaz de solicitar esses dados ao mestre, incorporá-los no mundo do mercado e continuar a girá-los.

Eu não tenho nenhum objetivo de denegrir o MT5. Estou apenas fazendo uma comparação reprodutível. É claro que o testador MT5 é inatingível por alguns parâmetros, mas o testador MT4 agora é capaz de dar as coisas, que não estão presentes no MT5, mas que são realmente exigidas. Vimos que um teste preciso em carrapatos personalizados reais no MT4 é 100% verdadeiro. Bem, e a regulamentação de todos os tipos de configurações (comissão, travessões, regras de ativação de ordens pendentes, etc.) do testador está lá. Em geral, há coisas que ainda não estão implementadas no MT5.
Razão: