Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.
Хотя:
datetime TimeCurrent(
)
Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Замечание: при тестировании последнее известное время сервера моделируется
Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?
Вы имеете ввиду задавать время торгов внутри дня?
Если так то
//beginexternstring Торгуемый_диапазон ="В часах";externint начало=8;externint окончание=20;//B startif(Hour()>=начало&&Hour()<окончание)//если час больше или = 8, а так же если час меньше 20, торгуем{//условия}
Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 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-ми например барах.
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
Фраза: при тестировании последнее известное время сервера моделируется присутствует и в TimeCurrent( ) однако не работает. Ваш вариант хорош, но надо проверить работает ли? Во-вторых при изменении ТФ надо менять кусок кода или должен распознавать в каком ТФ работает, чтоб адекватно воспринимать числа "начало" и "окончание". В-третьих все-таки задать число баро назад по-моему значительно удобней- не надо вычислять вручную это "начало". Мы же в MQL имеем дело с барами! И последнее: чем все же плох приведенный мной код? (Разве что тем, что не работает в тестере стратегий. А именно в этом мой вопрос)
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).
Замечание: при тестировании последнее известное время сервера моделируется.
Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.
externint 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()}
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 представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.
А если нет, то как выйти из этого положения.
Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен
Ну так в предыдущем коменте через алерт вывел ошибку.
В справке написано "Замечание: при тестировании последнее известное время сервера моделируется." но если оно не моделируется все вопросы к редактору справки.
Вы проверили, нашли ошибку...
Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.
Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.
Я согласен полностью с вашим решением в предыдущем ответе: это несовместимость форматов данных! Просьба по готовому решению сводится к решению вопроса переобразования форматов. Но очевидно таких вариантов MQL4 не имеет. И теперь я вижу решение поставленного мной вопроса в следующем (излагаю, может кому тоже сгодится): например, сегодня 43-й день года, т.е. 43-й бар на дневном ТФ от начала года. Пусть я хочу оптимизировать свой советник на 60-и барах. Это значит, что на дневном ТФ тестер должен начать работу с 365-(60-43)=348-го дня (бара) прошлого года. Т.е. надо взять TimeDayOfYear(TimeCurrent()) (это же int!) и сравнить его с 348. Очевидно надо учесть ещё и значение года (прошлого). В общем, мне кажется, я все понял. Надо только реализовать. Гораздо сложнее будет на малых ТФ, когда надо будет протестировать большое число баров, которые (например, 5-ти минутки) будут выходить за пределы предыдущего часа, а может и предыдущего дня.
Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на 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 - номер бара от текущего момента на дневном тф