Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration - page 47

 
traveller00:

Construire 2280. Bourse, marché à terme. Tout l'historique est chargé, mais les tests sont effectués hors ligne. iBarShift fonctionne étrangement dans les indicateurs. Et le même code fonctionne bien dans le script. Est-ce un bug ou est-ce que je rate quelque chose ?

Il existe un tel code. Il parcourt essentiellement tous les symboles de la revue de marché et arrache l'iBarShift. Le même code fonctionne bien dans le script. L'indicateur produit -1 pour tous les symboles, sauf pour le symbole actuel (sur le graphique sur lequel il fonctionne) avec l'erreur qu'il n'y a pas d'historique. En même temps, à la deuxième exécution, il charge l'historique et l'affiche normalement.

La disponibilité des données dans l'indicateur n'est pas garantie, vous devez donc vérifier le succès de leur récupération. S'il échoue, il faut réessayer dansOnCalculate. Faire référence aux données dans OnInit n'est pas une bonne idée.


#property indicator_separate_window

void OnInit()
{
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

Le nom du serveur n'est pas toujours affiché dans les enregistrements du cache.


 
Dans le format tst, les heures des transactions/ordres sont uniquement en secondes (date). Il n'y a pas de millisecondes.
 
Est-il exact que le fichier tst n'est pas généré pour un tel EA ?
input int i = 0;

void OnInit() {}


Quelle condition doit être remplie pour créer un cache à passage unique ?

 
fxsaber:
Est-il exact que le fichier tst n'est pas généré pour un tel EA ?


Quelle condition doit être remplie pour créer un cache à passage unique ?

Oui, c'est ça.

S'il n'y a pas de transactions, le fichier tst n'est pas sauvegardé.

 
Slava:

Oui, c'est vrai.

S'il n'y a pas de transactions, le fichier tst n'est pas sauvegardé.

Merci.

 
Je vais répéter ma question (elle s'est apparemment perdue) :

Développeurs, une question pour vous. Est-il possible de personnaliser les paramètresde l'algorithme génétique? Par exemple pour définir les critères d'arrêt et de mutation ?

Je rencontre souvent des problèmes pour m'arrêter avant d'atteindre les extrémités.

Une question aussi. Avez-vous l'intention de mettre en œuvre d'autres méthodes, par exemple le recuit simulé ?

 
Bonjour à tous, je suis passé de mt4 à mt5 et je ne comprends pas comment sauvegarder les fichiers set dans le testeur ici. Pouvez-vous me conseiller ? J'ai seulement trouvé comment sauvegarder l'ini et l'opt.
 

Je fais tourner le robot dans le testeur. Je fais du commerce sur un certain symbole. J'entre par OnTimer et je prends le prix à partir de SymbolInfoTick.

Si j'utilise des symboles différents (lorsque je négocie sur le même symbole), pour une raison quelconque, mes résultats sont très différents. Peut-être que quelqu'un a rencontré ce problème ? Je suis actuellement en train d'étudier ce comportement plus en détail.

PS. Chaque coche est basée sur une coche réelle et une exécution parfaite sans aucun retard.
 

J'ai compris. Si cela vous intéresse, pour économiser les ressources du CPU, je vérifie TimeCurrent dans OnTimer et s'il n'a pas changé depuis la dernière mise à jour, rien ne doit être fait. S'il n'y a pas de devis, le statut est le même. Si vous suivez les sessions de trading, c'est une opération très consommatrice.

Tout fonctionne bien pour les symboles multiples. Mais quand il n'y en a que deux, tout dépend des cotations, qui viennent et partent en décalant l'heure d'ouverture des positions et d'autres choses. Par conséquent, les résultats dans letesteur de stratégie sont différents.

PS. En général, je vérifie l'état des symboles individuellement viaSymbolInfoTick.