Testeur MT4 VS Testeur MT5 - page 3

 
fxsaber:
Preuve

Ce n'est pas une preuve.

Vous vous trompez.

Je maintiens mon affirmation - ledit expert ne fait que tester l'accès à l'historique des transactions.
 
Renat Fatkhullin:

Ce n'est pas une preuve.

Vous vous trompez.

Quelle est votre erreur ? J'ai même vérifié moi-même en mettant des BreakPoints partout où il y a une fonction historique et en exécutant CTRL+F5 pour le débogage. Tout s'est déroulé proprement.
Renat Fatkhullin:
Je maintiens mon affirmation - ledit expert ne teste que l'accès à l'historique des transactions.

Vous avez tiré des conclusions hâtives.

 

Je ne suis pas sûr que de telles comparaisons aient un sens - le cloud computing annule tous les avantages de vitesse du testeur MT4.

Et d'ailleurs, dans ce cas, effectivement, l'EA teste uniquement la vitesse d'accès aux données. Mais je ne pense pas que ce soit un goulot d'étranglement pour la plupart des EA.

Après l'introduction de comptes avec des positions de couverture dans MT5 - je ne vois personnellement aucun avantage de MT4 pour moi. J'utilise des bibliothèques multiplateformes uniquement parce que j'ai MT4 sur mes comptes réels.

La seule chose qui me manque personnellement - les pointeurs ou les références à des tableaux. Pour une raison quelconque, je n'ai pas besoin de copier les données dans les indicateurs. Le MQL5 a tout le reste.

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber:
Vous avez tiré des conclusions hâtives.
Qu'y a-t-il d'autre ? Interroger des données, et les transférer dans un fichier. Il n'y a pas d'autres actions - que pensez-vous que cet EA teste ?
 
fxsaber:

ZS Toutes les courses ne correspondent pas parfaitement. Donc l'un des trois ment certainement (MT4+TDS, MT5, MT4Orders). Nous devrons le chercher.

Grâce au sous-marin, le coupable a été trouvé, cela arrive toujours quand on a l'occasion de comparer.

Le conseiller expert montre le 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:
Qu'y a-t-il d'autre ? la demande de données et l'enregistrer dans un fichier. Aucune autre opération n'est effectuée - que pensez-vous que cette EA teste ?
Je vous suggère de lire l'intégralité de la discussion, de telles questions ne se poseront même pas.
George Merts:

Après l'introduction des comptes avec positions de couverture dans MT5, je ne vois personnellement pas un seul avantage de MT4.

Ce fil de discussion se distingue quelque peu par sa concentration de contenu constructif. Il est donc préférable de discuter des préférences personnelles ici, par exemple.

 
fxsaber:
Où se trouve l'erreur ? J'ai même vérifié moi-même, j'ai mis des points d'arrêt partout où il y a des fonctions d'historique, et j'ai lancé le débogage par CTRL+F5. Tout s'est déroulé proprement.

Vous avez tiré des conclusions hâtives.

Dans l'ensemble :

  1. le travail avec l'histoire bat son plein, les métiers sont fermés après le balayage de l'histoire
  2. utiliser MT4Orders.mqh - c'est la fin de la pureté de l'expérience. bibliothèque monstrueuse avec une surcharge, écrite de façon dégoûtante et illisible. quelqu'un a sévèrement démontré sa paresse
  3. écrire for(i=200 000 ; i>=0 ; i--) OrderSelect à chaque tic n'est rien d'autre que de la folie et une tentative de répéter la blague sur la scie japonaise et les hommes russes exclusivement.
       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. l'ensemble du test a été écrit uniquement pour le cycle du point 3.

    En gros, nous prenons 1 800 000 ticks dans le test, où 200 000 transactions sont ouvertes en 5 jours. Simplifions cela à 900 000 ticks, où 100 000 ordres sont scannés dans l'historique et nous obtenons 900 000 000 * 100 000 = 900 000 000 000 000 d'appels OrderSelect (avec le débordement de la bibliothèque). Ce sont exactement 900 milliards d'appels OrderSelect qui sont testés.

    Et parmi eux, 99,99% des appels sont absolument inutiles et n'ont été effectués que pour démontrer les "décalages".


Si vous voulez faire un test propre, écrivez deux exemples propres identiques sans bibliothèques. Cela garantira la propreté et l'absence de frais généraux intégrés pour des raisons de compatibilité.

Nous avons optimisé l'accès à l'historique et annulé complètement cette démonstration. C'était écrit comme ça exprès.

 
Renat Fatkhullin:

Dans l'ensemble :

  1. Les travaux d'histoire battent leur plein, les commerces sont fermés après l'analyse de l'histoire.
Où ?
  1. utiliser MT4Orders.mqh - c'est mettre fin à la pureté de l'expérience. Il s'agit d'une bibliothèque horrible avec des surcharges écrites de manière dégoûtante et illisible.
C'était moi.
  1. écrire for(i=200 000 ; i>=0 ; i--) OrderSelect à chaque tic n'est rien d'autre que de la folie et une tentative de répéter la blague sur la scie japonaise et les hommes russes exclusivement.
Vous avez complètement oublié le MQL4. Il n'y a aucune référence à l'histoire ici.
  1. le test entier a été écrit uniquement pour la boucle du point 3.

    99,99% des défis sont complètement inutiles et ont été créés uniquement pour démontrer les "freins".
L'exemple n'a pas été inventé, il y a un lien vers l'original dans la source. C'est l'un des scalpeurs les plus connus et les plus anciens.

Si vous voulez faire un test propre, écrivez deux exemples propres identiques sans bibliothèques. Ainsi, la propreté sera garantie et aucune surcharge ne sera intégrée par souci de compatibilité.

Je veux pouvoir comparer les deux testeurs. Voyez les avantages et les inconvénients de chacun. La comparaison est également l'un des moyens les plus efficaces d'identifier les bogues.

Le fil conducteur commence par la démonstration de l'identité des données brutes des deux testeurs. C'est la base, sans laquelle nous ne pouvons rien faire. Ensuite, chacun peut choisir un conseiller expert pour le test.

Nous avons optimisé l'accès à l'histoire et annulé complètement cette manifestation. C'était écrit comme ça exprès.

Grâce à l'application de quelqu'un d'autre, le SD l'a fait. La critique constructive est une bonne chose.
 

Travailler avec l'historique est une commande OrderSelect et des commandes similaires OrderXXXX. Ne prétendez pas que vous ne comprenez pas cela. Surtout si vous avez écrit la bibliothèque.

Je n'ai pas oublié MQL4 et cela fonctionne avec l'histoire là aussi.

Écrire un scanner d'historique pour 200 000 transactions en profondeur dans chaque tick et oublier la condition d'une sortie raisonnable de la boucle ? Cela s'appelle - jouer délibérément les hommes russes.

Et ne vous référez pas à certains scalpeurs. La boucle a été écrite si stupidement à dessein. Et même dans les cinq jours qui ont suivi le test, il n'y avait rien d'autre que des centaines de milliards de fonctions OrderXXX testées, dont 99,99 % n'avaient pas besoin d'être appelées.


Le problème est que vous avez commencé à argumenter avec l'affirmation absolument exacte "L'exemple entier du conseiller expert est écrit de manière à ce qu'il ne fasse qu'une seule chose - analyser l'historique complet des transactions à chaque tick", bien que vous sachiez très bien pourquoi vous avez écrit le test si intentionnellement. Après tout, vous pourriez supprimer 99,99 % de ce scan stupide d'un seul geste de la main, mais le test échouerait alors.
 
Renat Fatkhullin:

Travailler avec l'historique est une commande OrderSelect et des commandes similaires OrderXXXX. Ne prétendez pas que vous ne le comprenez pas. Surtout si vous avez écrit la bibliothèque.

Je n'ai pas oublié MQL4 et cela fonctionne avec l'histoire là aussi.

Écrire un scanner d'historique pour 200 000 transactions en profondeur dans chaque tick et oublier la condition d'une sortie raisonnable de la boucle ? Cela s'appelle - jouer délibérément les hommes russes.

Et ne faites pas référence à certains scalpeurs. La boucle a été écrite exprès. Et même après 5 jours de tests, il n'y avait rien d'autre que des centaines de milliards de fonctions OrderXXXXX, dont 99,99 % n'avaient pas besoin d'être appelées.

Je ne discuterai pas. Je demande aux utilisateurs du forum qui sont familiers avec MQL4 de revoir ce court code source et d'expliquer ce que signifie Renat.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie

Testeur MT4 VS Testeur MT5

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

Je dois me tromper, mais je ne vois pas où va le travail sur l'historique dans MT4. Aidez-moi, s'il vous plaît.

Raison: