MT4-Tester VS MT5-Tester - página 3

 
fxsaber:
Comprovação

Isto não é uma prova.

Você está enganado.

Minha afirmação se mantém - o referido especialista está apenas testando o acesso ao histórico da transação.
 
Renat Fatkhullin:

Isto não é uma prova.

Você está enganado.

Qual é o seu erro? Eu mesmo me verifiquei colocando BreakPoints onde quer que haja uma função de histórico e executando CTRL+F5 para depuração. Tudo funcionou de forma limpa.
Renat Fatkhullin:
Minha afirmação se mantém - o referido especialista está testando apenas o acesso ao histórico das transações.

Você chegou a conclusões precipitadas.

 

Não tenho certeza se tais comparações fazem algum sentido - a computação em nuvem nega todas as vantagens de velocidade do testador MT4.

E, além disso, neste caso, de fato, a EA está testando a velocidade de acesso aos dados puramente. Mas eu não acho que este seja um gargalo de garrafa para a maioria dos EAs.

Após a introdução das contas com posições de cobertura na MT5 - pessoalmente não vejo nenhum ponto positivo da MT4 para mim. Utilizo bibliotecas multiplataforma somente porque tenho MT4 em minhas contas reais.

A única coisa que eu pessoalmente sinto falta - ponteiros ou referências de matriz. Não preciso copiar os dados nos indicadores por algum motivo. A MQL5 tem tudo o resto.

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber:
Você chegou a conclusões precipitadas.
O que mais existe? Consulta de dados, e despejo em um arquivo. Não há outras ações - o que você acha que esta EA está testando?
 
fxsaber:

ZS Nem todas as pistas combinam perfeitamente. Portanto, um dos três é definitivamente mentiroso (MT4+TDS, MT5, MT4Orders). Teremos que procurá-lo.

Graças ao submarino, o culpado foi encontrado, isso sempre acontece quando há a possibilidade de comparação.

Consultor especializado mostrando o bug

// MQL4&5-code

#property strict

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

#define  PRINT(A) Print(#A + " = " + (string)(A));

void OnTick()
{
  static bool FirstRun = true;
  
  static const double PrevBid = Bid;
  static const double PrevAsk = Ask;
  
  if (FirstRun)
  {
    PRINT((PrevBid != Bid) || (PrevAsk != Ask))
    
    FirstRun = false;
  }
}


MT4

2017.05.08 10:57:33.056 2017.04.10 00:00:08  TDS_Test EURUSD,M1: (PrevBid!=Bid)||(PrevAsk!=Ask) = false


MT5

2017.05.08 11:01:31.266 2017.04.10 00:00:08   (PrevBid!=Bid)||(PrevAsk!=Ask) = true
 
George Merts:
O que mais existe? O pedido de dados e sua gravação em um arquivo. Não há outras operações - o que é exatamente este teste EA?
Sugiro que você leia toda a discussão, então tais questões nem sequer surgirão.
George Merts:

Após a introdução das contas com posições de cobertura na MT5, eu pessoalmente não vejo uma única vantagem da MT4.

Este fio se destaca um pouco por sua concentração de conteúdo construtivo. Assim, as preferências pessoais são melhor discutidas aqui, por exemplo.

 
fxsaber:
Onde está o erro? Eu mesmo me verifiquei, coloquei BreakPoints em todos os lugares onde há funções de histórico e fiz a depuração por CTRL+F5. Tudo funcionou de forma limpa.

Você chegou a conclusões precipitadas.

Tudo em resumo:

  1. o trabalho com a história está em pleno andamento, os negócios são fechados após a varredura da história
  2. usar MT4Orders.mqh - isto é o fim da pureza do experimento. biblioteca monstruosa com um overhead, escrito de forma nojenta e ilegível. alguém tem demonstrado severamente sua preguiça
  3. Escrever para(i=200 000; i>=0; i--) OrderSelect em cada tick não é nada mais que loucura e uma tentativa de repetir a piada sobre serras japonesas e homens russos exclusivamente
       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);
    
  4. todo o teste foi escrito exclusivamente para o bem do ciclo, a partir do ponto 3

    Aproximadamente, fazemos 1 800 000 carrapatos no teste, onde 200 000 negócios são abertos em 5 dias. Vamos simplificá-lo para 900 000 ticks, onde 100 000 pedidos são escaneados na história e recebemos 900 000 000 * 100 000 000 = 900 000 000 000 000 de chamadas OrderSelect (com transbordo da biblioteca). São exatamente 900 bilhões de chamadas OrderSelect que são testadas.

    E, entre eles, 99,99% das chamadas são absolutamente desnecessárias e foram feitas apenas para demonstrar "atrasos".


Se você quiser fazer um teste limpo, escreva dois exemplos limpos idênticos sem bibliotecas. Isto garantirá a limpeza e nenhuma sobrecarga embutida por uma questão de compatibilidade.

Nós otimizamos o acesso ao histórico e anulamos completamente esta demonstração. Foi escrito dessa forma de propósito.

 
Renat Fatkhullin:

Tudo em resumo:

  1. O trabalho de história está em pleno andamento, os negócios são fechados após o exame da história
Onde?
  1. usar o MT4Orders.mqh - é pôr um fim à pureza do experimento. Trata-se de uma biblioteca horrível, com uma sobrecarga escrita de uma maneira nojenta e ilegível.
Esse era eu.
  1. Escrever para(i=200 000; i>=0; i--) OrderSelect em cada tick não é nada mais que loucura e uma tentativa de repetir a piada sobre serras japonesas e homens russos exclusivamente
Você esqueceu completamente a MQL4. Não há aqui nenhuma referência à história.
  1. todo o teste foi escrito somente para o bem do laço a partir do ponto 3

    99,99% dos desafios são completamente desnecessários e foram feitos puramente para demonstrar os "freios".
O exemplo não foi inventado, há um link para o original na fonte. Este é um dos escalpadores mais conhecidos e antigos.

Se você quiser fazer um teste limpo, escreva dois exemplos limpos idênticos sem bibliotecas. Desta forma, haverá uma garantia de limpeza e nenhuma sobrecarga incorporada em nome da compatibilidade.

Quero ser capaz de comparar os dois testadores. Veja os prós e os contras de cada um. A comparação também é uma das formas mais eficazes de identificar bugs.

A linha começa com a demonstração da identidade dos dados brutos de ambos os testadores. Esta é a base sem a qual não podemos fazer nada. Então todos podem escolher um consultor especializado para o teste.

Nós otimizamos o acesso à história e negamos completamente esta demonstração. Foi escrito dessa forma de propósito.

Graças à aplicação de outra pessoa, o SDassim o fez. A crítica construtiva é uma coisa boa.
 

Trabalhar com o histórico é OrderSelect e comandos similares OrderXXXX. Não finja que você não entendeu isto. Especialmente se você tiver escrito a biblioteca.

Eu não esqueci da MQL4 e ela também funciona com a história lá.

Escreva um scanner de histórico para 200.000 negócios no fundo de cada tick e esqueça a condição de uma saída razoável do loop? Isto é chamado - para fazer de propósito os homens russos.

E não se refira a alguns escalpadores. O laço foi escrito de forma tão estúpida de propósito. E mesmo dentro de 5 dias após o teste não havia nada além de centenas de bilhões de funções de OrderXXX sendo testadas, das quais 99,99% não precisavam ser chamadas.


O problema é que você começou a discutir com a afirmação absolutamente precisa "Todo o exemplo do Expert Advisor é escrito para que ele faça apenas uma coisa - escaneia toda a história das negociações em cada tick", embora você soubesse muito bem porque você escreveu o teste tão intencionalmente. Afinal, você poderia remover 99,99% do estúpido exame com um movimento da mão, mas então o teste falharia.
 
Renat Fatkhullin:

Trabalhar com a história é OrderSelect e comandos similares OrderXXXX. Não finja que não o entendeu. Especialmente se você tiver escrito a biblioteca.

Eu não esqueci da MQL4 e ela também funciona com a história lá.

Escreva um scanner de histórico para 200.000 negócios no fundo de cada tick e esqueça a condição de uma saída razoável do loop? Isto é chamado - para fazer de propósito os homens russos.

E não faça referência a alguns escalpadores. O laço foi escrito de propósito. E mesmo dentro de 5 dias após o teste, não testou nada além de centenas de bilhões de funções do OrderXXXXX, 99,99% dos quais não precisavam ser chamados.

Não vou discutir. Peço aos usuários do fórum que estão familiarizados com a MQL4 que revisem este pequeno código fonte e expliquem o que Renat significa.

Fórum sobre Comércio, Sistemas Automatizados de Comércio e Testes de Estratégia

MT4-Tester VS MT5-Tester

fxsaber, 2017.05.08 01:11

EA

// 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); 
}

Devo estar enganado, mas não consigo ver para onde a história está indo na MT4. Por favor, ajude.

Razão: