[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 426

 
ikatsko >>:

Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.


Хотя:

datetime TimeCurrent( )

Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.

Замечание: при тестировании последнее известное время сервера моделируется


Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?

Voulez-vous dire pour définir l'heure de la négociation de jour ?

Si c'est le cas

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=8;
extern int        окончание=20;


//B start

if(Hour()>= начало&&Hour()< окончание)//если час больше или = 8, а так же если час меньше 20, торгуем
{
//условия
}
 
costy_ >>:

Вы имеете ввиду задавать время торгов внутри дня?

Если так то


J'aimerais optimiser les paramètres d'un EA sur des échelles de temps courtes, sur une petite période de temps proche de l'heure actuelle. Le testeur de stratégie, quant à lui, vous permet de définir la date à laquelle le processus d'optimisation commence et se termine. Lorsque le TF est de 15 minutes (par exemple), alors dans une journée (et c'est le minimum qui permet au testeur de se régler) il y aura 96 barres. Et je pense que c'est beaucoup. Je voudrais que cette TF soit optimisée sur les 2 dernières heures, c'est à dire sur 8 barres par exemple.


J'ai inséré un tel fragment dans l'EA :

extern int History=100 ; //Historique en barres, sur lequel l'Expert Advisor travaille
StartDateTime=TimeCurrent()-History*Period()*60 ;
if(TimeCurrent()<StartDateTime) // L'heure de départ n'est pas arrivée
{
Alert("L'heure de début n'est pas arrivée. EA n'a pas fonctionné."," : ",Symb,", ",Period()) ;
return ; // Quitter start()

}

Je m'attendais à ce que l'EA dans le testeur de stratégie ne fonctionne pas avant StartDateTime. Mais non !

 
ikatsko >>:

Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=22;
extern int        окончание=0;


//B start

if(Hour()>= начало&&Hour()< окончание)//на интервале  меж 22:00 - 00:00
{
//условия
}

int Hour( )
Renvoie l'heure courante (0,1,2,...23) de la dernière heure serveur connue au démarrage du programme (cette valeur ne change pas pendant l'exécution du programme).

Remarque : lors des tests, la dernière heure connue du serveur est simulée.


Le testeur supporte le M1 TF, ne le lie pas aux barres, mais au temps, peut-être en avez-vous besoin aussi.

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

La phrase : lors du test, la dernière heure connue du serveur est simulée est présente et dans TimeCurrent( ) cependant elle ne fonctionne pas. Votre variante est bonne, mais nous devons vérifier si elle fonctionne ? Deuxièmement, lors d'un changement de TF, il est nécessaire de modifier un morceau de code ou de reconnaître dans quelle TF il fonctionne, pour percevoir de manière adéquate les nombres "début" et "fin". Troisièmement, je pense qu'il est beaucoup plus pratique de régler le numéro de baro en arrière - il n'est pas nécessaire de calculer le "début" manuellement. Dans MQL, nous avons affaire à des barres ! Et la dernière chose : quel est l'inconvénient de ce code ? (Sauf que cela ne fonctionne pas dans le testeur de stratégie. Et c'est là ma question)

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

extern int History=100; //История в барах, на которой работает советник
StartDateTime=TimeCurrent()- History*Period()*60;//...=datetime - int*int*int (допустим 1265996665 - 100 * 15 * 60 это не есть интересующее время)

Alert("TimeCurrent()    "+TimeCurrent()+" < StartDateTime    "+ StartDateTime);//...проверим соотношение datetime 

if(TimeCurrent()< StartDateTime) // Время старта не наступило...
{
Alert("Время старта не наступило. Эксперт не работает.",": ", Symb,", ",Period());
return; // Выход из start()

} 
 
costy_ >>:

Un peu comme :

datetime est la date et l'heure, un nombre entier non signé contenant le nombre de secondes écoulées depuis le 1er janvier 1970 à 0 heure.

и

Les données de type couleur et date sont représentées par des entiers. Les types entiers, ainsi que les types à virgule flottante, sont appelés types arithmétiques (numériques).

Si non, comment s'en sortir.

Merci pour l'astuce concernant le format des chiffres, cependant. Il y a une direction de recherche. S'il existe une solution toute prête, je vous en serai reconnaissant.

 

En fait, il est préférable d'utiliser Time[0] au lieu de TimeCurrent() dans le testeur, il me semblait que TimeCurrent() fonctionnait dans le testeur avant...

et maintenant il est plus probable que TimeCurrent() dans le testeur (ou pas dans le testeur) donnera l'heure à laquelle la dernière citation est arrivée...


dans ce cas, ça marchera

extern int History=100 ; // Historique en barres, sur lequel le conseiller expert travaille
StartDateTime=Time[History] ;
if(Time[0] < StartDateTime) // L'heure de départ n'est pas arrivée
{
Alert("L'heure de départ n'est pas arrivée. EA ne fonctionne pas."," : ",Symb,", ",Period()) ;
return ; // Quitter start()
}

 
ikatsko >>:

Вроде как:

datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.

и

Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.

А если нет, то как выйти из этого положения.

Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен

Dans le commentaire précédent, l'erreur était affichée via l'alerte.

L'aide dit "Note : lors des tests, la dernière heure connue du serveur est simulée", mais si elle n'est pas simulée, toutes les questions sont adressées à l'éditeur de l'aide.

Vous avez vérifié, vous avez trouvé l'erreur...

Vous seul connaissez la solution, car nous ne connaissons pas la suite de la logique.

Je ne comprends pas pourquoi il y a tant de texte...

StartDateTime=TimeCurrent()-History*Period()*60 ;

alors que tout peut être fait de manière beaucoup plus simple ?

 
costy_ >>:

Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.

Je suis tout à fait d'accord avec votre solution dans la réponse précédente : il s'agit d'une incompatibilité de format de données ! La demande d'une solution prête à l'emploi revient à résoudre le problème de la conversion des formats. Mais évidemment, MQL4 ne dispose pas de telles options. Par exemple, aujourd'hui est le 43e jour de l'année, c'est-à-dire la 43e barre de l'échelle de temps quotidienne depuis le début de l'année. Supposons que je veuille optimiser mon conseiller expert sur 60 barres. Cela signifie que le testeur doit commencer à travailler avec 365-(60-43)=348ème jour (barre) de l'année précédente. C'est à dire que nous devrions prendre TimeDayOfYear(TimeCurrent()) (c'est un int !) et le comparer à 348. Il est évident que nous devons également tenir compte de la valeur de l'année (l'année dernière). Dans l'ensemble, je pense que je l'ai. Nous devons simplement le mettre en œuvre. Ce sera beaucoup plus difficile sur les petites TF, lorsque l'on doit tester un grand nombre de barres, qui (par exemple, 5-minutes) iront au-delà de l'heure précédente, ou peut-être du jour précédent.

 

Tout votre problème est dans l'énoncé du problème, rendez-le clair pour les autres... Honnêtement, je n'ai pas compris à partir de quelle heure vous devez tester...

Si vous devez commencer par une barre de 60, commencez par une barre de 60.

int startTime = iTime(NULL,PERIOD_D1, N) ; // N - numéro de la barre à partir du moment actuel sur l'échelle de temps quotidienne

Raison: