[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 426
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.
Хотя:
Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Замечание: при тестировании последнее известное время сервера моделируется
Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?
Вы имеете ввиду задавать время торгов внутри дня?
Если так то
Вы имеете ввиду задавать время торгов внутри дня?
Если так то
Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.
Я вставил в советника такой фрагмент:
extern int History=100; //История в барах, на которой работает советникStartDateTime=TimeCurrent()-History*Period()*60;
if(TimeCurrent()<StartDateTime) // Время старта не наступило
{
Alert("Время старта не наступило. Эксперт не работает.",": ",Symb,", ",Period());
return; // Выход из start()
}
И предполагал, что советник в тестере стратегий не будет работать ранее StartDateTime. Ан нет!
Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
Фраза: при тестировании последнее известное время сервера моделируется присутствует и в TimeCurrent( ) однако не работает. Ваш вариант хорош, но надо проверить работает ли? Во-вторых при изменении ТФ надо менять кусок кода или должен распознавать в каком ТФ работает, чтоб адекватно воспринимать числа "начало" и "окончание". В-третьих все-таки задать число баро назад по-моему значительно удобней- не надо вычислять вручную это "начало". Мы же в MQL имеем дело с барами! И последнее: чем все же плох приведенный мной код? (Разве что тем, что не работает в тестере стратегий. А именно в этом мой вопрос)
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
Вроде как:
datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.
и
Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.
А если нет, то как выйти из этого положения.
Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен
вообще-то в тестере вместо TimeCurrent() лучше использовать Time[0], раньше как мне казалось TimeCurrent() в тестере работал..
а сейчас скорее всего TimeCurrent() в тестере (так и не в тестере) будет выдавать время когда пришла последняя котировка..
тогда получится
extern int History=100; //История в барах, на которой работает советник
StartDateTime=Time[History];
if(Time[0] < StartDateTime) // Время старта не наступило
{
Alert("Время старта не наступило. Эксперт не работает.",": ",Symb,", ",Period());
return; // Выход из start()
}
Вроде как:
datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.
и
Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.
А если нет, то как выйти из этого положения.
Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен
Ну так в предыдущем коменте через алерт вывел ошибку.
В справке написано "Замечание: при тестировании последнее известное время сервера моделируется." но если оно не моделируется все вопросы к редактору справки.
Вы проверили, нашли ошибку...
Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.
Не пойму только зачем столько текста
StartDateTime=TimeCurrent()-History*Period()*60;
если все делается гораздо проще?
Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.
Я согласен полностью с вашим решением в предыдущем ответе: это несовместимость форматов данных! Просьба по готовому решению сводится к решению вопроса переобразования форматов. Но очевидно таких вариантов MQL4 не имеет. И теперь я вижу решение поставленного мной вопроса в следующем (излагаю, может кому тоже сгодится): например, сегодня 43-й день года, т.е. 43-й бар на дневном ТФ от начала года. Пусть я хочу оптимизировать свой советник на 60-и барах. Это значит, что на дневном ТФ тестер должен начать работу с 365-(60-43)=348-го дня (бара) прошлого года. Т.е. надо взять TimeDayOfYear(TimeCurrent()) (это же int!) и сравнить его с 348. Очевидно надо учесть ещё и значение года (прошлого). В общем, мне кажется, я все понял. Надо только реализовать. Гораздо сложнее будет на малых ТФ, когда надо будет протестировать большое число баров, которые (например, 5-ти минутки) будут выходить за пределы предыдущего часа, а может и предыдущего дня.
вся ваша проблема в постановке задачи, сформулируйте ее так чтобы понятно другим.. я честно так и не понял с какого по какое время нужно тестировать..
если нужно начать с 60 бара так и берите время с него
int startTime = iTime(NULL,PERIOD_D1, N); // N - номер бара от текущего момента на дневном тф