Всем привет!
В советнике создаю функцию. В теле функции пишу вот что:
for (k=10000; k>=10; k--)
{
Print("k1="+k,"");
Print("iTime="+TimeToString(iTime(NULL,PERIOD_H1,k)),"");
}
то есть, он должен перебрать 9990 баров назад и записать их время.
вот что я вижу в журнале тестера:
На 1003 итерации iTime начинает равняться "1970.01.01 00:00" и так до конца цикла.
ПОЧЕМУ?
При первоначальном запуске в тестере доступно максимум 1000 баров
Спасибо за ответ!
Как-то можно увеличить этот параметр?Мне нужно перебирать 100 тыс баров примерно
Спасибо за ответ!
Как-то можно увеличить этот параметр?Мне нужно перебирать 100 тыс баров примерно
Дождаться в тестере нужного количества баров и обработать их
Прошу прощения, не понял, что значит дождаться?
Суть: Перед совершением сделки тестер должен прогнать на 100 тыс баров назад и посмотреть выоплняется ли определенное условие на этих 100 тыс баров. А он видит только 1000 баров. В истории котировок данные есть, более того, если этот же цикл запустить в теле скрипта, то все нормально. Косячит только при использовании в советнике. Если я правильно понял, это особенность тестера и ее ен обойти?
Прошу прощения, не понял, что значит дождаться?
Суть: Перед совершением сделки тестер должен прогнать на 100 тыс баров назад и посмотреть выоплняется ли определенное условие на этих 100 тыс баров. А он видит только 1000 баров. В истории котировок данные есть, более того, если этот же цикл запустить в теле скрипта, то все нормально. Косячит только при использовании в советнике. Если я правильно понял, это особенность тестера и ее ен обойти?
Эксперт должен проверять количество доступных баров для анализа. Пока количество недостаточно - ничего не делать.
Если количество баров устраивает - провести анализ, выдать результат
Эксперт должен проверять количество доступных баров для анализа. Пока количество недостаточно - ничего не делать.
Если количество баров устраивает - провести анализ, выдать результат
Я не совсем понимаю, когда я нажимаю кнопку "старт" в тестере происходит загрузка баров в память? И я должен дождаться, пока он загрузит условные 100 тыс баров?
Не сочтите за хамство, можете привести пример кода на MQL? И в какую процедуру его вставить?
Я не совсем понимаю, когда я нажимаю кнопку "старт" в тестере происходит загрузка баров в память? И я должен дождаться, пока он загрузит условные 100 тыс баров?
Не сочтите за хамство, можете привести пример кода на MQL? И в какую процедуру его вставить?
в тестере указывается дата старта, в момент старта советника от этой даты тестер в глубь истории может "показать" только 1000 баров (вроде так), поэтому чтобы получить Х баров начиная с заданной даты, тебе нужно в тестере дату старта выставить ранее на столько сколько по времени составляют твои X баров, а в советнике поставить счетчик, что пока не пройдет Х баров ничего не делать, чтобы просто промоталось X баров и чтобы это число баров стало доступным для необходимого анализа..
extern int countBar = 100000; void OnTick(){ static int count = 0; if (count < countBar) { count++; return; } //прочий код }
в тестере указывается дата старта, в момент старта советника от этой даты тестер в глубь истории может "показать" только 1000 баров (вроде так), поэтому чтобы получить Х баров начиная с заданной даты, тебе нужно в тестере дату старта выставить ранее на столько сколько по времени составляют твои X баров, а в советнике поставить счетчик, что пока не пройдет Х баров ничего не делать, чтобы просто промоталось X баров и чтобы это число баров стало доступным для необходимого анализа..
extern int countBar = 100000; void OnTick(){ static int count = 0; if (count < countBar) { count++; return; } //прочий код }
Так тики считать будет.
if(countBar>Bars) return;
вот как надо, наверное.
Решение, и довольно хорошее Вам подсказали. Дело за Вами.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
В советнике создаю функцию. В теле функции пишу вот что:
for (k=10000; k>=10; k--)
{
Print("k1="+k,"");
Print("iTime="+TimeToString(iTime(NULL,PERIOD_H1,k)),"");
}
то есть, он должен перебрать 9990 баров назад и записать их время.
вот что я вижу в журнале тестера:
На 1003 итерации iTime начинает равняться "1970.01.01 00:00" и так до конца цикла.
ПОЧЕМУ?
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1009
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1008
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1007
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1006
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1005
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1004
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1003
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=1970.01.01 00:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1002
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=2011.09.14 07:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1001
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=2011.09.14 08:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=1000
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=2011.09.14 09:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=999
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: iTime=2011.09.14 10:00
0 11:40:57 2011.11.11 02:00 temp EURUSD,H1: k1=998