Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 255

 
Alexey Viktorov:
L'heure actuelle de 17:08 indique 33. Ainsi, le numéro de barre avec une heure de 01:00 sera 32.
datetime t=StringToTime("01:00");

Ce n'est pas la bonne solution. Si vous commencez le test à 00:00, cette variante donne 0 barre, et il devrait y avoir 46 barres M30 avant l'heure la plus proche de 01:00.

 
Nauris Zukas:

Mauvaise décision. Si vous commencez le test à 00.00, cette variante produit 0 barre, et il devrait y avoir 46 barres M30 avant les 01.00 heures les plus proches.

Je vous ai donné une façon de penser, et vous devriez savoir comment faire la barre de 01:00 la plus proche à 00:59 sur les minutes. Il n'y a rien de difficile.

 
Alexey Viktorov:

Je vous ai donné une piste de réflexion, et c'est à vous de voir comment faire pour que la barre de 01:00 la plus proche se trouve à 00:59 sur les minutes. Il n'y a rien de difficile.

Dans tous les cas, vous devrez utiliser la boucle et chercher l'heure la plus proche, je ne vois pas d'autre moyen.

 
Alexey Viktorov:
Le seul problème est que je ne remplis jamais ma cellule de mémoire avec des choses inutiles comme ce que la valeur obtenue sera égale, étant donné une barre avec un temps spécifié ou moins de 1. Je vérifie juste à chaque fois.


Je n'ai aucune idée de la façon de trouver le temps spécifié le plus proche pour les barres sans cycle. S'il n'y a rien de compliqué, pouvez-vous me montrer la fonction ?

 

Chers experts, pourriez-vous nous indiquer comment extraire les résultats d'un test vers un fichier dans mt-4 ?

pour un traitement ultérieur tel que décrit ici https://www.mql5.com/ru/articles/1467 ?

Автоматическая оптимизация торгового робота в процессе реальной торговли
Автоматическая оптимизация торгового робота в процессе реальной торговли
  • 2007.04.16
  • Igor Malcev
  • www.mql5.com
В статье описана и представлена библиотека функций, позволяющая проводить оптимизацию входных параметров советника, запуская оптимизацию непосредственно из советника.
 
Nauris Zukas:


Je n'ai aucune idée de la façon de trouver le temps spécifié le plus proche pour les barres sans cycle. S'il n'y a rien de compliqué, pouvez-vous me montrer la fonction ?

..... juste pas de mots....

Est-il difficile de deviner que si l'heure est inférieure à l'heure que vous cherchez, vous devez soustraire l'heure que vous cherchez de 24 heures ?

 string st = "1:00";// можно и так писать "01:00"
 datetime t = StringToTime(st);

 if(TimeCurrent() < t)
  {
   MqlDateTime mqlDateTime; 
   TimeToStruct(t, mqlDateTime);
   mqlDateTime.day -= 1;
   t = StructToTime(mqlDateTime);
  }
 int b = Bars(_Symbol, PERIOD_M30, t, TimeCurrent());

Réalisé sans tenir compte des sorties et des contrôles des éventuelles erreurs d'exécution. D'autres exécutions sont possibles, c'est pourquoi j'essaie de ne pas écrire de codes d'exemple. Aujourd'hui, j'ai décidé de procéder de cette manière, demain je trouverai peut-être une autre variante plus pratique.

 
Alexey Viktorov:

Est-il difficile de deviner que si l'heure est inférieure à l'heure que vous cherchez, vous devez soustraire l'heure que vous cherchez de 24 heures ?

Il est difficile de le deviner pour cette raison :

Alexey Viktorov:

Réalisé sans tenir compte des week-ends et des contrôles d'éventuelles erreurs d'exécution.

Combien plus difficile doit être le code pour obtenir un résultat souhaitable sans erreurs à la fin ! Il y a des week-ends et des jours fériés, le code ouvre à d'autres moments. Merci pour les conseils et les exemples, j'ai appris quelque chose de nouveau, cela me sera utile quelque part, mais jusqu'à présent je pense que ma version est la plus facile et la plus fiable.

 
Nauris Zukas:

C'est difficile à deviner à cause de ça :

Combien plus compliqué doit être le code pour obtenir le résultat que vous voulez sans erreurs à la fin ! Il y a des week-ends et des jours fériés où le marché ouvre à une heure différente. Merci pour les conseils et les exemples, j'ai appris quelque chose de nouveau, ce sera certainement utile, mais jusqu'à présent je vois que ma version est la plus facile et la plus fiable.

Pourquoi pas ? Et cette option a le droit à la vie. Et ça m'a même intéressé. Avec quelques corrections, nous avons obtenu la fonction qui renvoie le numéro de barre d'un temps et d'une période spécifiés.

int findBar(string strTime, ENUM_TIMEFRAMES period = PERIOD_CURRENT)
 {
  MqlDateTime mqlTime, mqlFindTime;
  TimeToStruct(StringToTime(strTime), mqlFindTime);
  datetime arrTime[];
  int copy = PeriodSeconds(PERIOD_D1)/PeriodSeconds(period);
  CopyTime(_Symbol, period, 0, copy, arrTime);
  ArraySetAsSeries(arrTime, true);
   for(int i = 0; i < copy; i++)
    {
     TimeToStruct(arrTime[i], mqlTime);
      if(mqlTime.hour == mqlFindTime.hour && mqlTime.min <= mqlFindTime.min)
      return(i);
    }
  return(-1);
}/********************************************************************/

.

 
Alexey Viktorov:

Pourquoi pas ? Et cette option a le droit à la vie. Et ça m'a même intéressé. Avec quelques corrections, la fonction renvoie le numéro de barre de l'heure et de la période spécifiées.

.

Merci beaucoup !
Vous avez mentionné "cellule de mémoire", mes connaissances sur ce sujet sont pour l'instant limitées. D'après ce que j'ai compris, cela affecte la vitesse des tests de l'Expert Advisor ? Est-il mesuré d'une manière ou d'une autre ou est-il simplement déterminé par la vitesse des tests ?

 
Nauris Zukas:

Merci beaucoup !
Vous avez mentionné "cellule de mémoire", mes connaissances sont limitées pour le moment. D'après ce que j'ai compris, cela affecte-t-il la vitesse des tests d'Expert Advisor ? Est-il mesuré d'une manière ou d'une autre ou est-il simplement déterminé par la vitesse des tests ?

Je parlais de ma propre puce mémoire. :)))

Il s'agit de ne pas se souvenir de ce genre de choses, qui peuvent être facilement vérifiées, clarifiées, effectuées si nécessaire et oubliées à nouveau lors de l'écriture du code.