28 ! !! paires de devises, 1 expert. Un autre graal, mais celui-là, je pense que personne ne l'a jamais montré. + COMPTE DE DÉMO - page 11

 

A propos des Trois Stooges :

http://www.libex.ru/detail/book74148.html

 
C'est vrai, la couverture est la même.
 
MetaQuotes:
Défilé de photos sans sources ni preuves...


2 Rosh

Dans votre EA, à la page 5, vous avez vérifié l'inadéquation des offres et des fermetures pour toutes les t/fs. Vous interprétez l'absence de telles discordances comme une confirmation que le testeur ne peut pas se projeter dans l'avenir. À l'époque, je trouvais encore ce lien étrange. De mon point de vue, ce n'est pas le comportement du Close qui doit être testé, mais le comportement du High et du Low du t/f supérieur. Et après le reproche injuste de MQ mentionné ci-dessus, j'ai décidé d'y consacrer un peu de temps. Mais c'était trop tard.

Voici le code de l'Expert Advisor qui génère par lui-même le haut et le bas de l'heure ou de la journée sur le graphique d'une minute. Ensuite, à chaque tick, il le compare avec le High et le Low de l'heure ou du jour, obtenus à partir du H1 ou du D1 et s'il y a une divergence, il l'envoie au journal et au fichier.

 
//+------------------------------------------------------------------+
//|                                           Simple Prospection.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2007, Yurixx"
#property link      ""
double curHi,curLo,HiH1,LoH1;
int    mm,hh,dd,curM1,curH1,curD1,kk,nn,handle;
string str,mHi,mLo,hHi,hLo;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  handle = FileOpen("FU.csv",FILE_CSV|FILE_WRITE," ");
  if(handle<1) { Print("File FU.csv not found, Error:", GetLastError());
                 return(false);   }
  if (Period()>PERIOD_M1)
  {  Print("Период тестирования не соответствует задаче");
     return(-1);
  }
  Print("Период тестирования ",Period()," минут");
  FileWrite(handle,"Date","Time","curHi","HiH1","curLo","LoH1");
  nn=D'2007.07.12 23:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:02:00';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  curHi=0.0;
  curLo=1000.0;
  curD1=-1;
  curH1=-1;
  curM1=-1;
  nn=0;//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {  
//----
  mm = TimeMinute(TimeCurrent());
  hh = TimeHour(TimeCurrent());
  dd = TimeDay(TimeCurrent());
  if (mm!=curM1)
  {  if (hh!=curH1)
     {  if (dd!=curD1)
        {  curHi=NormalizeDouble(Bid,Digits);
           curLo=NormalizeDouble(Bid,Digits);
           curD1=dd;
        }
        //curHi=NormalizeDouble(Bid,Digits);
        //curLo=NormalizeDouble(Bid,Digits);
        curH1=hh;
     }
     curM1=mm;
  }
  if (NormalizeDouble(Bid,Digits)>curHi) curHi=NormalizeDouble(Bid,Digits);
  if (NormalizeDouble(Bid,Digits)<curLo) curLo=NormalizeDouble(Bid,Digits);
  //HiH1 = iHigh(NULL,PERIOD_H1,0);
  //LoH1 =  iLow(NULL,PERIOD_H1,0);
  HiH1 = iHigh(NULL,PERIOD_D1,0);
  LoH1 =  iLow(NULL,PERIOD_D1,0);
  HiH1 = NormalizeDouble(HiH1,Digits);
  LoH1 = NormalizeDouble(LoH1,Digits);
  str = TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
  mHi = ", curHi=" + DoubleToStr(curHi,Digits);
  mLo = ", curLo=" + DoubleToStr(curLo,Digits);
  hHi = ", HiH1="  + DoubleToStr(HiH1, Digits);
  hLo = ", LoH1="  + DoubleToStr(LoH1, Digits);
  if (HiH1!=curHi||LoH1!=curLo)
  {  Print(str,mHi,hHi,mLo,hLo);
     FileWrite(handle,TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),curHi,HiH1,curLo,LoH1);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{  Print("Работа закончена");
   FileClose(handle);
//---- done
   return(0);
}

Et voici un morceau du journal, qui a été obtenu en exécutant cet EA sur EURUSD, M1 de 2007.07.10 à 2007.07.14. Comme vous pouvez le voir dans le texte de l'EA, la comparaison était avec les données quotidiennes. Toutefois, si l'on compare avec les données horaires, la situation n'est pas meilleure. Je voulais obtenir une confirmation de la possibilité de regarder dans le futur ou m'assurer qu'il n'y a pas une telle possibilité. Cependant, il s'est avéré être quelque chose de complètement différent.

Comme vous pouvez le voir sur l'image, le temps imprimé dans le journal par le testeur et le temps affiché par le conseiller expert diffèrent parfois l'un de l'autre. À cela s'ajoutent des contretemps incompréhensibles. Le temps 2007.07.13 00:58, 2007.07.12 00:58, 2007.07.13 00:02, 2007.07.13 00:04, 2007.07.13 00:06 et 2007.07.13 00:07. Et à chaque fois, le conseiller expert sort 2007.07.12 23:58:59.

Peut-être que l'écart entre les données hautes et basses à ces moments-là a été causé exactement par ces erreurs de synchronisation.

De plus, je conseille de prêter attention au test print to file, qui se trouve dans la fonction init(). Cette impression montre que les secondes ne fonctionnent pas dans le testeur. Par conséquent, la fonction TimeToStr() en mode secondes et la fonction TimeSeconds() ne fonctionnent pas. Peut-être que c'était prévu ainsi, mais alors pourquoi le testeur et le conseiller expert impriment-ils tous deux des données avec des secondes ?

Je ne soulève même pas la question de la divergence entre les données High et Low, car on ne sait absolument pas d'où proviennent ces données à cette époque obscure.

Une dernière chose. Lors des tests effectués de 2007.07.09 à 2007.07.14 et non de 2007.07.10 à 2007.07.14, j'ai obtenu des résultats étranges - les données des payeurs élevés et faibles ne sont pas reçues du tout, c'est-à-dire que les variables HiH1 et LoH1 ont toujours des valeurs nulles.

Peut-être ai-je fait une erreur quelque part ?

 
Bonjour Yurixx.
J'ai exécuté votre conseiller expert sans rien changer au code. Voici toutes les données du fichier qu'il produit :
Date Heure curHi HiH1 curLo LoH1<br/ translate="no"> 2007.07.12 23:58:00 0 58 23 12
2007.07.13 00:58:00 0 58 0 13
2007.07.13 00:02:00 0 2 0 13
Voici le journal :
2007.08.13 09:54:51 2007.07.13 22:59 Simple Prospection EURUSD,M1 : Travail terminé
2007.08.13 09:54:48 2007.07.10 00:00 Simple Prospection EURUSD,M1 : Période de test 1 min
2007.08.13 09:54:48 Simple Prospection démarrée pour le test
2007.08.13 09:54:45 Simple Prospection : chargé avec succès
Pas une seule erreur dans le test de 2007.07.10 à 2007. 07.14. C'est vrai, puis je me suis souvenu que j'avais un test spécial construit la semaine dernière. La version 208 habituelle du 01 août (maintenant mise à jour d'un terme par LibeUpdate) n'a pas d'erreur non plus :
.
2007.08.13 10:13:04 2007.07.13 22:59 Simple Prospection EURUSD,M1 : Travail terminé
2007.08.13 10:13:04 2007.07.10 00:00 Simple Prospection EURUSD,M1 : Période de test de 1 minute
2007.08.13 10:13:04 Simple Prospection démarrée pour le test
Le problème est qu'avant le test, j'ai téléchargé les données manquantes à partir du Centre d'histoire (je n'ai pas lancé ce terminal depuis quelques mois) et j'ai ensuite recalculé toutes les périodes - j'ai appuyé sur "Télécharger" dans le Centre d'histoire pour la deuxième fois, dans ce cas, il propose de recalculer toutes les t/f automatiquement et le convertisseur de période n'est pas nécessaire (au cas où les gens ne connaissent pas cette fonctionnalité).


Mais avant cela, il y avait des sorties d'erreur dans le journal :
.

2007.08.13 10:08:19 1999.05.26 02:01 Prospection simple GBPUSD,M1 : Travail terminé
2007.08.13 10:08:18 1999.01.04 09:31 Prospection simple GBPUSD,M1 : 1999.01. 04 09:31:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:30 Prospection simple GBPUSD, M1 : 1999.01. 04 09:30:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:29 Prospection simple GBPUSD, M1 : 1999.01. 04 09:29:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:28 Prospection simple GBPUSD, M1 : 1999.01. 04 09:28:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:27 Prospection simple GBPUSD, M1 : 1999.01. 04 09:27:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:26 Prospection simple GBPUSD, M1 : 1999.01. 04 09:26:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:25 Prospection simple GBPUSD, M1 : 1999.01. 04 09:25:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:24 Prospection simple GBPUSD, M1 : 1999.01. 04 09:24:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:23 Prospection simple GBPUSD, M1 : 1999.01. 04 09:23:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:22 Prospection simple GBPUSD, M1 : 1999.01. 04 09:22:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:21 Prospection simple GBPUSD, M1 : 1999.01. 04 09:21:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:20 Prospection simple GBPUSD, M1 : 1999.01. 04 09:20:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:19 Prospection simple GBPUSD, M1 : 1999.01. 04 09:19:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:18 Prospection simple GBPUSD, M1 : 1999.01. 04 09:18:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:17 Prospection simple GBPUSD, M1 : 1999.01. 04 09:17:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:16 Prospection simple GBPUSD, M1 : 1999.01. 04 09:16:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:15 Prospection simple GBPUSD, M1 : 1999.01. 04 09:15:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1. 6684
2007.08.13 10:08:18 1999.01.04 09:14 Prospection simple GBPUSD, M1 : 1999.01. 04 09:14:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1. 6686
2007.08.13 10:08:18 1999.01.04 09:13 Prospection simple GBPUSD, M1 : 1999.01. 04 09:13:00, curHi=1.6682, HiH1=1.6697, curLo=1.6682, LoH1=1. 6597
2007.08.13 10:08:15 1999.01.04 09:13 Prospection simple GBPUSD,M1 : Période de test 1 minute
2007.08.13 10:08:15 Prospection simple démarrée pour le test

J'ai téléchargé ces données pour EURUSD, mais j'ai commencé à tester pour GBPUSD, qui n'a pas été pompé et recalculé. C'est la raison de ces incohérences.
Essayez de faire de même - chargez les données et synchronisez-les automatiquement ou utilisez le script de conversion de période.

Nous allons examiner la question des secondes, merci.
 

Bonjour Rosh !

Merci pour votre réponse. Si je vous comprends bien, vous pensez que le décalage entre les données High et Low de différents entonnoirs est dû à la qualité du flux de cotation. Ainsi, les chandeliers sont formés différemment sur les différentes fonctions et peuvent donc être différents de 1-2-3 pips. C'est tout à fait possible.

J'ai effectué des tests en utilisant les données du serveur de démonstration MQ. Et je ne les écris pas en temps réel, mais je télécharge toutes les données une fois par semaine, le week-end. En fait, je pensais que les chandeliers sont dessinés sur tous les TF, au moins sur le serveur, par le logiciel du serveur, de manière synchrone pour tous les TF, sur la base du même flux de cotation et donc que de telles différences sont impossibles. Si ce n'est pas le cas, c'est dommage, nous devrons en tenir compte d'une manière ou d'une autre ... Combiner les données, la synchronisation, etc. pour que tout soit beau n'est pas la bonne méthode à mon avis. Votre serveur et ceux des courtiers livrent les données au fur et à mesure. Et vous devez négocier sur ces données et non sur ce qu'elles deviennent après un certain temps. Pour le processus de test, c'est particulièrement important. Tout le monde connaît le problème des grails - un espace dans le testeur et une perte dans le robot de trading réel. D'où vient-il ? MQ insiste sur le fait qu'il est impossible de se projeter dans l'avenir et que la modélisation des tics est tout à fait appropriée au processus. On doit supposer que c'est le cas. Donc, effectivement, le problème est celui des données ? MQ ne peut pas résoudre ce problème, les données n'en dépendent pas. Ensuite, nous devons faire en sorte que le testeur fonctionne correctement sur toutes les données, et pas seulement sur celles qui ont été soigneusement peignées.

Mais mon message ne portait pas sur les divergences entre les données de différents t/f, mais sur la confusion dans le temps. Et le fait que vous ayez posté n'enlève rien au problème. Au contraire, en rapport avec votre post, je voudrais poser la question suivante.

Dans mon journal, les données de temps du testeur et de l'EA contiennent des secondes. Dans le vôtre, les données du testeur ne contiennent pas du tout de secondes, et les données de votre EA ne contiennent que zéro seconde. Cela soulève la question suivante : quel mode utilisiez-vous pour vos tests ? Je veux être clair - cet EA est uniquement destiné à être testé en mode "tous les ticks". Et l'erreur que j'ai rencontrée ne peut être reproduite qu'à partir de ce mode. Par conséquent, si vous avez testé dans un autre mode, veuillez répéter le test, cela ne prendra que quelques secondes.

En principe, cela ne fait absolument aucune différence de savoir sur quelle paire et dans quelle fourchette de dates effectuer le test. Et sur les TF autres que M1, le conseiller expert ne fonctionnera pas. Cependant, afin de pouvoir comparer nos résultats, je vous demande de faire un test sur EURUSD, dans la fourchette entre 2007.07.10 et 2007.07.14, et, dans un test séparé, dans la fourchette entre 2007.07.09 et 2007.07.14.

Je vous remercie d'avance.

 
Yurixx:

Bonjour Rosh !

Dans mon journal, les données de temps du testeur et de l'EA contiennent toutes deux des secondes. Dans le vôtre, les données du testeur ne contiennent aucune seconde et les données de l'EA ne contiennent que zéro seconde. Ce qui amène à la question suivante : quel mode avez-vous utilisé pour les tests ? Je veux être clair - cet EA est uniquement destiné à être testé en mode "tous les ticks". Et l'erreur que j'ai rencontrée ne peut être reproduite qu'à partir de ce mode. Par conséquent, si vous avez testé dans un autre mode, veuillez répéter le test, cela ne prendra que quelques secondes.

En principe, il n'est pas du tout important de savoir sur quelle paire et dans quelle fourchette de dates effectuer le test. Et sur les TF autres que M1, le conseiller expert ne fonctionnera pas. Cependant, afin de pouvoir comparer nos résultats, je vous demande de faire un test sur EURUSD, dans la fourchette entre 2007.07.10 et 2007.07.14, et, dans un test séparé, dans la fourchette entre 2007.07.09 et 2007.07.14.

Merci d'avance.


En effet, j'ai vérifié maintenant et j'ai vu que je n'avais pas de secondes. Je pense que cela est dû au fait que je n'avais pas de données pour GBPUSD chargées automatiquement pour 1 heure et 1 jour lors du premier test (je n'avais pas de graphiques ouverts dans le terminal) mais j'ai essayé de le vérifier maintenant pour la deuxième fois et il n'y avait pas d'erreur - j'ai chargé les données nécessaires lors du premier test.

C'est-à-dire que la première fois, il n'y avait pas de données pour les périodes H1 et D1 pour GBPUSD et donc des erreurs dans la modélisation.
 
J'ai fait un test "sur EURUSD dans la plage 2007.07.10 à 2007.07.14, et, dans un test séparé, dans la plage 2007.07.09 à 2007.07.14" comme vous le demandez, aucune différence.
 
Rosh:

Nous allons examiner la question des secondes, merci.


L'erreur avec les secondes a été corrigée (dans le compilateur). La version corrigée sera bientôt disponible.
 
Rosh:
Le bogue avec les secondes a été corrigé (dans le compilateur). La version corrigée sera bientôt disponible.
Peut-on espérer que dans la version corrigée, le testeur grail77 ne fonctionnera plus ?
 
granit77:
Rosh:
Le bogue avec les secondes a été corrigé (dans le compilateur). La version corrigée sera bientôt disponible.
Peut-on espérer que dans le build corrigé le testeur grail77 ne fonctionnera plus ?

Je le vérifierai demain.