[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 428

 
keekkenen >>:

боюсь эта конструкция if(Time[0]>iTime(0,1440,60)) всегда будет возвращать истину, т.к. это iTime(0,1440,60) значение будет на 60 баров левее, чем Time[0]..

что показывает тест ?




Enoncé du problème : J'ai un EA et je veux l'optimiser sur les 40 dernières barres (voir le fil) dans le testeur de stratégie, par exemple.

if(Time[0]>iTime(0,1440,60))

Si le temps (simulé) est devenu plus long que le temps d'ouverture de la 60ème barre sur la barre journalière, alors exécutez la fonction : qu'est-ce qui ne va pas ? !

 
Bien, alors vous devez définir à l'avance le moment où l'EA doit commencer à tester.
puisque vous savez quand il doit se terminer, alors faites ce qui suit

disons que les tests se terminent le 2010.02.10 0:00


faire un script à partir du code ci-dessous

#property show_inputs
// время окончания тестировани						
extern string 		endTestTime 		= "2010.02.10 0:00";
// название пары
extern string		symbolTest			= "";
// период на котором ищем нужное время по номеру testBarCount бара относительно времени endTestTime
extern int 			periodTest		   = 0;
// количество баров в прошлое относительно времени endTestTime
extern int 			testBarCount 		= 60;

int init(){
	if ( symbolTest == "") symbolTest = Symbol();
	// искомое время
	Print(TimeToStr(iTime( symbolTest, periodTest,	iBarShift( symbolTest, periodTest,StrToTime( endTestTime)) + testBarCount)));
}
 

ce script vous permet de trouver le moment à partir duquel vous voulez tester l'EA...

définir quelques variables dans l'EA

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

ce script vous permet de trouver le moment à partir duquel vous voulez tester l'EA...

définir quelques variables dans l'EA

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
Dans le startTime on enregistre le temps obtenu par le script, et dans le endTime on enregistre le temps entré dans la variable endTestTime du script...
 
costy_ >>:

Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах (60 см. ветку)в тестере стратегий.

if(Time[0]>iTime(0,1440,60))

если время(моделируемое) стало больше времени открытия 60-го бара на дневке тогда выполнить функцию что не так?!

donc la barre de 60 est également modulée par rapport à la barre de 0 modulée

 

Enoncé de la tâche : J'ai un EA et je veux l'optimiser sur les 40 dernières barres dans le testeur de stratégie, par exemple, par rapport au temps actuel. Ces quarante barres peuvent être sur une échelle horaire, de 4 heures, quotidienne ou autre. Le testeur de stratégie fonctionne : l'intervalle de temps auquel il fonctionne est défini sur le panneau du testeur. Cette façon de régler le temps de fonctionnement ne répond pas à la tâche ci-dessus - tester pour 40 bars. Cela signifie que nous devons modifier l'Expert Advisor pour que ce ne soit pas le testeur qui définisse le temps de test (ses capacités ne sont pas satisfaites), mais le code lui-même.

Votre suggestion ne fonctionnera pas, car pour le testeur, l'heure qui était il y a N barres est l'heure actuelle.


T.K.

Pour l'heure actuelle, le testeur calculera l'heure d'ouverture d'une barre spécifiée (en arrière) à partir de l'heure actuelle. C'est-à-dire qu'une nouvelle fois, cela ne résoudra pas le problème. Elle devrait être de N barres en arrière de la barre (momentanée) du jour , et non de l'heure actuelle du testeur.


Est-ce que j'ai bien compris.

 
keekkenen >>:
допустим тестирование заканчивается 2010.02.10 0:00


делаем скрипт из кода ниже

Le script est bon, MAIS !!! Il donnera une valeur temporelle qui devra ensuite être "notée" dans le panneau du testeur. Ce n'est pas bon.... Mais sur un petit TF et une petite quantité de baro, il affichera une heure qui ne peut pas être "notée" dans le testeur, car dans le testeur, c'est la date et seulement la date qui est donnée. Les tests sont effectués de 00h00 de la date de début à 00h00 de la date de fin. Il est impossible de préciser l'heure, surtout en minutes !!!!.

 

La raison en est simple : le testeur vit dans son propre temps, tandis que nous et les vraies citations vivons dans un temps différent et ces espaces-temps ne se chevauchent que dans notre imagination...


c'est normal que vous ne puissiez pas définir l'heure exacte dans le testeur, mettez le début du jour actuel ou le jour précédent l'heure de début - c'est déjà un coût...


Ce morceau de code coupera le temps supplémentaire avant l'heure de début d'optimisation requise (ce que nous avons défini dans les paramètres) et après l'heure de fin d'optimisation...

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

Regardez la figure ci-dessous. L'autre jour, j'ai commencé à dessiner uniquement avec un décalage de 60 barres. Vous trouverez ci-dessous une partie du code. Avez-vous essayé l'un des produits recommandés ? Essayez-le et vous l'aurez.

int start()  {
double stoch1, stoch2;
   int pos = Bars-IndicatorCounted() ;  
//----

if(Time[0]>iTime(0,1440,60)) 
   for(int b=0; b<= pos; b++)
   {    
 
keekkenen >>:

этот кусок кода будет отсекать лишнее время до требуемого времени начала оптимизации (то что мы задаем в параметрах) и после времени окончания оптимизации..

Si je comprends bien, l'EA va chercher les données dans le script, les barres de retour doivent être définies dans le script.

И ! Je suis désolé, pourriez-vous s'il vous plaît poster le code complet du script ? À ma grande honte, je n'ai jamais écrit de script pendant mon année et demie de MQL.

Raison: