Неправильные данные в тестере

 

Если во время тестирования использовать индикатор, который обращается к Bid, Ask, iTime(), то этот индикатор будет получать последние значения, пришедшие с сервера, а не по рынке в момент тестирования.

Обнаруживается такая ошибка легко.

1. Создаёте индикатор.

int start()
{
	Print("Время индикатора PERIOD_M1: ", TimeToStr(iTime(NULL, PERIOD_M1, 0)));
	Print("Время индикатора PERIOD_M5: ", TimeToStr(iTime(NULL, PERIOD_M5, 0)));
	Print("Цены Bid и Ask: ", Bid, Ask);
	return(0);
}

2. Открываете тестер с любым советником. Не важно используется ли этот индикатор из советника, либо присоединён к графику тестирования вручную, данные Bid, Ask и по PERIOD_M5 будет некорректные (а вот по PERIOD_M1 правильные).

Интересно, что думают господа разработчики?

Кто и как обходит эти проблемы?

Есть ещё несостыковки по данным в режиме тестирования? (что-то подсказывает, что есть).

 

проилюстрируйте как-то, о чём говорите... покажите журнал

 
Maxx писал(а) >>

Если во время тестирования использовать индикатор, который обращается к Bid, Ask, iTime(), то этот индикатор будет получать последние значения, пришедшие с сервера, а не по рынке в момент тестирования.

Обнаруживается такая ошибка легко.

1. Создаёте индикатор.

2. Открываете тестер с любым советником. Не важно используется ли этот индикатор из советника, либо присоединён к графику тестирования вручную, данные Bid, Ask и по PERIOD_M5 будет некорректные (а вот по PERIOD_M1 правильные).

Интересно, что думают господа разработчики?

Кто и как обходит эти проблемы?

Есть ещё несостыковки по данным в режиме тестирования? (что-то подсказывает, что есть).

Что-то Вы здесь намудрили, батенька. Подобный баг и до Вас давно бы бросился в глаза, но, никто не замечает....

Решил проверить в тестовом эксперте, только немного изменил, чтобы Bid и Ask корректно отображались:

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
Print("Время индикатора PERIOD_M1: ", TimeToStr(iTime(NULL, PERIOD_M1, 0)));
Print("Время индикатора PERIOD_M5: ", TimeToStr(iTime(NULL, PERIOD_M5, 0)));
Print("Цены Bid: ", DoubleToStr(Bid,Digits), " Ask: ", DoubleToStr(Ask,Digits));
return(0);
}

И что мы видим в журнале ?:

2009.07.06 00:10:52 2008.07.03 23:46  Test GBPUSD,H1: Время индикатора PERIOD_M1: 2008.07.03 23:46
2009.07.06 00:10:52 2008.07.03 23:46  Test GBPUSD,H1: Цены Bid: 1.98290 Ask: 1.98318
2009.07.06 00:10:52 2008.07.03 23:46  Test GBPUSD,H1: Время индикатора PERIOD_M5: 2008.07.03 23:45
2009.07.06 00:10:52 2008.07.03 23:46  Test GBPUSD,H1: Время индикатора PERIOD_M1: 2008.07.03 23:46
2009.07.06 00:10:52 2008.07.03 23:45  Test GBPUSD,H1: Цены Bid: 1.98280 Ask: 1.98308
2009.07.06 00:10:52 2008.07.03 23:45  Test GBPUSD,H1: Время индикатора PERIOD_M5: 2008.07.03 23:45
2009.07.06 00:10:52 2008.07.03 23:45  Test GBPUSD,H1: Время индикатора PERIOD_M1: 2008.07.03 23:45
2009.07.06 00:10:52 2008.07.03 23:44  Test GBPUSD,H1: Цены Bid: 1.98270 Ask: 1.98298
2009.07.06 00:10:52 2008.07.03 23:44  Test GBPUSD,H1: Время индикатора PERIOD_M5: 2008.07.03 23:40
2009.07.06 00:10:52 2008.07.03 23:44  Test GBPUSD,H1: Время индикатора PERIOD_M1: 2008.07.03 23:44
2009.07.06 00:10:52 2008.07.03 23:42  Test GBPUSD,H1: Цены Bid: 1.98280 Ask: 1.98308
2009.07.06 00:10:52 2008.07.03 23:42  Test GBPUSD,H1: Время индикатора PERIOD_M5: 2008.07.03 23:40
2009.07.06 00:10:52 2008.07.03 23:42  Test GBPUSD,H1: Время индикатора PERIOD_M1: 2008.07.03 23:42

Время на М1 меняется через минуту, на М5 синхронно через пять минут, Bid, Ask соответствуют 2008 году, а не последним котировкам сервера ( 1,63312).

То, что приаттаченный вручную индикатор в режиме визуального тестирования не совпадает с встроенным в советник, известно давно, но из советника мы всегда получаем правильные на данный момент значения.

Вот спрэд соответствует текущему с сервера, ну это и так известно ( в 5-ке обещают историю спрэдов).

Что касается нестыковок по данным в режиме тестирования на разных таймфреймах, то да, они были, и в своё время много копий на этом поломали, но, кажется, всё это уже устранено.

 
Valmars >>:

Что-то Вы здесь намудрили, батенька. Подобный баг и до Вас давно бы бросился в глаза, но, никто не замечает....

Решил проверить в тестовом эксперте, только немного изменил, чтобы Bid и Ask корректно отображались:

Читаем внимательно... "Если во время тестирования использовать индикатор, который обращается к Bid, Ask, iTime()...". Советник работает как надо, а вот индикатор, который он использует работает неверно. Вставьте свой код в новый индикатор и посмотрите, что он выдаёт в режиме тестирования.

sergeev >>:

проилюстрируйте как-то, о чём говорите... покажите журнал

Пожалуйста...

2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:23
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:22
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:21
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:20
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:19
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:18
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:17
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:16
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:15
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:14
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:13
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:12
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:11
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:10
2009.07.05 17:55:37 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:37 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:09
2009.07.05 17:55:35 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:35 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:35 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:08
2009.07.05 17:55:35 test_ind EURUSD,M1: Цены Bid и Ask: 1.3981.3982
2009.07.05 17:55:35 test_ind EURUSD,M1: Время индикатора PERIOD_M5: 2009.07.03 22:55
2009.07.05 17:55:35 test_ind EURUSD,M1: Время индикатора PERIOD_M1: 2009.06.01 00:08
2009.07.05 17:55:35 test_ind EURUSD,M1: initialized
2009.07.05 17:55:33 test_ind EURUSD,M1: loaded successfully
2009.07.05 17:55:04 Compiling 'test_ind'



 
Maxx >>:

Если во время тестирования использовать индикатор, который обращается к Bid, Ask, iTime(), то этот индикатор будет получать последние значения, пришедшие с сервера, а не по рынке в момент тестирования.

Под "тестированием" вы имеете в виду процесс использования советником данных индикатора через iCustom или присоединение индикатора к графику в режиме визуализации?

Если 1-ое - то Valmars наглядно продемонстрировал, что все там нормально и никаких багов.

Если 2-ое - то это старая песня, о которой Valmars тоже упомянул. В режиме визуализации индикатору доступно только существующее рыночное окружение. Никаких Bid и Ask там использовать нельзя. Да и такой стиль в индиткаторе - некрасиво. На то он и индикатор, чтобы использовать массивы-таймсерии, а не Bid и Ask напрямую.

 
Scriptong >>:

Под "тестированием" вы имеете в виду процесс использования советником данных индикатора через iCustom или присоединение индикатора к графику в режиме визуализации?

Если 1-ое - то Valmars наглядно продемонстрировал, что все там нормально и никаких багов.

Проверил ещё раз. Если индикатор присоединяется через iCustom (первое), то всё здорово. Если вручную цепляется на график, то "вылетают" неправильные цены

Scriptong >>:

Если 2-ое - то это старая песня, о которой Valmars тоже упомянул. В режиме визуализации индикатору доступно только существующее рыночное окружение. Никаких Bid и Ask там использовать нельзя. Да и такой стиль в индиткаторе - некрасиво. На то он и индикатор, чтобы использовать массивы-таймсерии, а не Bid и Ask напрямую.

Вот это как-то странно. Индикатор должен работать в каком-то одном окружении: либо тестера, либо реальных данных. Смешение только путает: оно нигде не описано и легко попасть впросак.

Более того, может с Bid и Ask чёрт с ними, но почему так работает iTime() при присоединении? Для PERIOD_M1 всё классно, а вот PERIOD_MXXX уже неправильные данные. Как Вы считаете?

 
Maxx писал(а) >>

Проверил ещё раз. Если индикатор присоединяется через iCustom (первое), то всё здорово. Если вручную цепляется на график, то "вылетают" неправильные цены

Вот это как-то странно. Индикатор должен работать в каком-то одном окружении: либо тестера, либо реальных данных. Смешение только путает: оно нигде не описано и легко попасть впросак.

Более того, может с Bid и Ask чёрт с ними, но почему так работает iTime() при присоединении? Для PERIOD_M1 всё классно, а вот PERIOD_MXXX уже неправильные данные. Как Вы считаете?

Собственно, тестер и создан для максимально быстрого тестирования советников и в нём расчитываются и моделируются только данные, необходимые для работы советника. Ничего тут странного нет. Мало ли чего Вы навешаете на график, работа советника от этого не зависит.

 
Valmars >>:

Собственно, тестер и создан для максимально быстрого тестирования советников и в нём расчитываются и моделируются только данные, необходимые для работы советника. Ничего тут странного нет. Мало ли чего Вы навешаете на график, работа советника от этого не зависит.

Программа должна работать правильно, а потом уже быстро. Какой смысл в программе, которая быстро и неправильно решает поставленную задачу. Окружение - переменные и серии - должны полностью принадлежать либо к тестеру, либо к реальным данным. На худой конец, это надо описать, потому что это не тривиально и быстрее набъёшь шишки, чем догадаешься, что вот такое положение дел.

Всем спасибо.

Причина обращения: