[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
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.
Хотя:
Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Замечание: при тестировании последнее известное время сервера моделируется
Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?
Voulez-vous dire pour définir l'heure de la négociation de jour ?
Si c'est le cas
Вы имеете ввиду задавать время торгов внутри дня?
Если так то
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 travailleStartDateTime=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 !
Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.
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.
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М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)
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
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()
}
Вроде как:
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 ?
Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.
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