Результаты оптимизации отличаются от одиночных тестирований по ним

 

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

Последовательность действий:
1. В оптимизаторе выбираю пару (например, AudUsd) и выставляю период 2010.08.23 - 2010.10.30. Советник в списке и таймфрейм Н1 уже выбраны - сейчас тестирую только один советник.
2. Заношу диапазоны оптимизации параметров.
3. В "Архиве котировок" двойным кликом открываю историю минуток по AudUsd. Нажимаю кнопку Загрузить. После загрузки открываю часовки и ещё раз щёлкаю Загрузить. Спрашивает "Пересчитать все таймфреймы?". Отвечаю - Да.
4. Делаю оптимизацию по 4-5 параметрам, жду несколько часов. Результаты оптимизации в файле "AudUsd_1_optim.txt" в приложенном архиве.
5. В "Результатах оптимизации" выбираю подходящую мне строку (в моём примере это номер 2183 в файле "AudUsd_1_optim.txt") и двойным кликом заношу её параметры в тестер. Больше ничего не меняю и не трогаю.
6. Запускаю одиночное тестирование. Смотрю на вкладку Отчёта и вижу совершенно другие профит и просадку (201.78/-116.28), не совпадающие с результатами оптимизации (162.36/-34.25) для этого сочетания параметров. В логах есть одна ошибка рассогласования объёмов, но в моей стратегии объёмы вообще никак не используются, поэтому считаю, что эта ошибка не критична и не может так сильно повлиять на результаты. Количество сделок и всё остальное тоже отличаются. Список ордеров от этого тестирования - в файле "AudUsd_2_Orders.txt", а лог - в "AudUsd_2.log".
7. Сильно удивляюсь. Хотя уже потихоньку начинаю привыкать...
8. Повторяю п.3
9. Опять запускаю одиночное тестирование по тем же параметрам. Теперь получаю профит и просадку, совпадающие с оптимизацией. Список ордеров от этого тестирования - в файле "AudUsd_1_Orders.txt", а лог - в "AudUsd_1.log".

И так уже больше двух месяцев (оптимизирую каждую неделю). Этот глюк периодический, чёткой закономерности не нашёл. Не зависит от времени запуска оптимизации и от пары. Бывает, что результаты оптимизации и последующих отдельных тестов по ним совпадают, бывает, что нет.
Честно говоря запарился уже. Всю ночь что-то считает, оптимизирует. А потом приходится переоптимизировать заново, потому что непонятно каким результатам верить. Да и нет уверенности, что даже при совпадении попался именно правильный, не глючный вариант работы тестера.

Сразу говорю, на форумах подобные темы искал и читал. И на форуме Альпари, и тут. И в Яндексе тоже. Пытаюсь найти инфу уже несколько недель. Но максимум, что я нашёл - это слова разработчиков о "плавающем спреде", от которого и зависят результаты тестирования. И советы тестировать стратегии на выходных (я именно так как раз и делаю - не помогает). Хотя, на мой взгляд, это выглядит не более, чем отмазка при нежелании хоть как-то решить этот вопрос. Ведь чтобы закрыть тему "плавающего спреда" достаточно добавить в параметры оптимизатора поле "Спред", заполняемое пользователями по своему усмотрению, и уже можно будет проводить адекватную оптимизацию и сравнение стратегий по параметрам. Не вижу вообще никакого смысла запоминать последний рыночный спред для оптимизации.

У меня версия Метатрейдера последняя, скачанная с сайта Альпари - 4.00.226. Точно такой же глюк наблюдается ещё на двух других компах, с той же самой версией, но установленной в разное время с разницей в несколько месяцев. Там настройки и счёт такие же, как и на первом МТ.
Тестирование и оптимизацию провожу только на одном демо-счёте в Альпари. Никакие другие счета не подключаю. В настройках стоит сервер "Alpari-Demo - Alpari NZ Limited". Его тоже не трогал ни разу. Вручную котировки не меняю и свои не подставляю. Метатрейдер постоянно в онлайн (инет на компе присутствует всегда). Оптимизацию провожу в субботу-воскресенье. Спред, по идее, в эти дни меняться не должен и глюк с "последним спредом" тут, видимо, непричём. Логи в аттаче как раз за субботу, 30 октября.
Период тестирования всегда указан явно.

Вопросы:
1. Как такое может быть? В чём причина?
2. Если это глюк тестера, то когда исправите? И что делать, чтобы всё совпадало уже сейчас, в этой версии?
3. Если это мой косяк, то что я делаю неправильно и как надо делать?

Готов предоставить полный реальный код советника (всё равно это только сильно усечённая для оптимизации версия реального) и набор параметров тестирования в личку разработчику Метатрейдера.

Файлы:
audusd.zip  116 kb
 

Вот ещё пример. Только что начал просматривать ночную оптимизацию по паре UsdJpy. Сразу после оптимизации, ничего нигде не меняя и не трогая котировки, двойным кликом подставил подобранные значения параметров из результата №2631 (прибыль 117,07 и просадка 34,86) в тестер и запустил одиночное тестирование по этим параметрам. Получил прибыль -3925 и просадку -4049,04. Заметная разница...
В отчёте пишет про 51 рассогласование графиков. В логе есть 51 запись об этом. Но все записи относятся только к объёмам, а они у меня нигде не используются, даже в индикаторах (индикаторы не используются).
Период оптимизации и тестирования тот же, что и моём первом сообщении. Последовательность действий - та же, но с добавлением контрольного прогона тестера после п.3 для проверки отсутствия ошибок рассогласования. Все остальные условия - прежние. Оптимизация проводилась в ночь с субботы на воскресенье - рынок, а следовательно и спред, должны быть заморожены.

Удивился опять. Открыл "Архив котировок", нажал Загрузить на этой паре, разрешил пересчёт всех таймфреймов.
Снова двойным кликом подставляю параметры в тестер из результатов оптимизации и запускаю тестирование. О, теперь результаты совпадают с оптимизацией. Ошибок рассогласования в отчёте и логе нет.

Добавляю вопросы (продолжаю нумерацию):
4. Откуда взялись рассогласования после оптимизации (а может быть и во время неё), если перед оптимизацией я специально сделал один прогон теста и убедился, что после загрузки этой пары в "Архиве котировок" (между п.3 и п.4 в моём предыдущем сообщении) рассогласований не было?
5. Как убедиться, что все результаты оптимизации получены на правильных котировках и что не было глюка в процессе оптимизации?
6. Каким образом рассогласования объёмов настолько критическим образом влияют на результаты тестов, которые объёмы не используют?

З.Ы. Антивирус у меня установлен и работает. Но и исполняемый файл Метатрейдера, и вся его папка со всеми подпапками и файлами находится в исключениях. На другом компе антивируса нет вообще, а такие глюки присутствуют. Значит антивирус исключаем. Одинаковый глюк на трёх разных компах. Исключаем проблемы с дисками и с железом, а так же возможность влияния окружающих программ. Что-то не так в Метатрейдере, он что-то неправильное делает с котировками.

З.З.Ы. Точно такие же глюки с оптимизацией я наблюдал и на других, принципиально разных стратегиях. Так что по сути, от советника тут мало что зависит. Просто раньше это мне было не настолько актуально и тестировал я мало. Сейчас делаю несколько десятков оптимизаций в неделю, а будет ещё больше. И речь уже идёт о реальных деньгах. Подскажите, плз, правильные действия или поправьте тестер и оптимизатор. Спасибо!

В архиве файлы:
UsdJpy_1_optim.txt - результаты оптимизации
UsdJpy_1_Orders.txt - список ордеров (результаты) одиночного прогона, совпадающего с оптимизацией
UsdJpy_1.log - лог этого теста
UsdJpy_1.htm - отчёт по нему
UsdJpy_2_Orders.txt - список ордеров (результаты) одиночного прогона с огромным лоссом (с рассогласованиями)
UsdJpy_2.log - лог этого теста
UsdJpy_2.htm - отчёт по нему

Файлы:
usdjpy.zip  179 kb
 

Теперь ещё интереснее. Это уже на третьем компьютере и на другой паре. Всё делаю по схеме из первого моего сообщения. После нескольких часов оптимизации проверяю полученные результаты. Подставляю выбранный набор параметров двойным кликом (больше ничего не трогая и не меняя) и получаю совершенно другие результаты, отличающиеся от результатов строки оптимизации с этими же параметрами. Смотрю рассогласования котировок - появились. Хотя перед оптимизацией делал загрузку и пересчёт котировок в "Архиве". Ладно, думаю, может пересчёт котировок поможет. Запускаю "Пересчёт всех таймфреймов" и тестирование ещё раз. Рассогласования исчезли. Зато посчитало уже третий вариант результатов, ни в чём не совпадающий с первыми двумя. *смайлик_с_огромными_удивлёнными_глазами*

Ещё несколько попыток пересчёта котировок в "Архиве" и тестирований. Теперь все разультаты совпадают с последним, третьим вариантом. Ура, нашли правильный вариант! Но полдня работы компа над оптимизацией пропали впустую, результаты оптимизации явно некорректны. То есть, теперь мне нужно ставить оптимиацию заново наночь и успеть подняться рано утром чтобы выбрать подходящие параметры на следующую неделю. Да и то, невозможно быть уверенным в их правильности.

Заметил ещё детали. Во-первых, в отчётах тестера при разных вариантах разное количество "Баров в истории". Во-вторых, даже при одинаковом количестве баров в истории могут быть разные результаты. В-третьих, у меня советник работает по часовым свечам и открывает первые ордера в серии строго по времени, в определённый час и 00 минут, т.е. на Open свечи. Но в разных вариантах результатов эти ордера открываются по разным ценам. Это видно в тех отчётах, которые я прикрепил в первых сообщениях, так что пока больше логов не выкладываю. Если ещё что-то будет нужно - выложу.

А что, у меня одного такое творится с тестером?

 

И ещё вопросы по "Архиву котировок", раз затронута тема их пересчёта. Подскажите где почитать подробно или ответьте на мои вопросы тут.

Все действия произвожу в субботу-воскресенье, т.е. архивы котировок меняться не должны.

Открываю пару, у которой последнюю неделю не было открыто окно графика, то есть, как я понимаю, котировки за эту неделю в локальный архив не подтягивались. Нажимаю Загрузить. Монитор трафика, установленный на этом компе, показывает запросы МТ к серверу и возвращаемые с сервера блоки данных. Всё правильно. После загрузки нажимаю Загрузить опять. А вот тут могут быть два варианта: или предлагает пресчитать все таймфреймы (что логично в случае, если загрузка завершена полностью), или опять что-то загружает (и монитор трафика это подтверждает) - тут непонятно, почему не загрузилось с первого раза. Причём если нажимать несколько раз, то загрузка с сервера может быть и после пересчёта, что вообще не логично и не понятно. Если уже загрузилось, пересчитало, то что ещё загружается? Архив между загрузками не закрываю, пару не меняю.

Иногда бывает, что после открытия Архива нажатие кнопки Загрузить несколько раз подряд (5 и больше) всё равно что-то загружает с сервера и не предлагает пересчитать все таймфреймы, независимо от того, загружался архив с этой парой перед этим (в предыдущее открытие Архива) и был ли тогда пересчёт. Как будто с первого раза не всё загрузилось и теперь при каждом нажатии недостающее подтягивается по кусочкам, но не всё сразу. В мониторе видно, что это не просто запросы к серверу, а и возвращаемые им блоки данных. Почему и что не загрузилось с первого раза? Сколько на самом деле нужно нажимать Загрузку, чтобы быть уверенным, что все котировки по паре загрузились?

Но если при такой ситуации закрыть Архив и открыть заново, а потом нажать Загрузить, то с первого или второго раза уже не будет закачивать, а предложит пересчёт. То есть, как-бы восстанавливается логичная последовательность работы. А это почему происходит? И как это понимать? Может после каждой загрузки нужно закрывать Архив, открывать заново и потом делать пересчёт? Поясните, плз.

А можете сделать так, чтобы при нажатии Загрузить проверялись локальные архивы и за один раз загружалось всё, что нужно, а потом автоматом пересчитывались все таймфреймы? И можете встроить в архив кнопку "Проверить", по которой будут выявляться все провалы в истории, рассогласования и подобное? А потом по подтверждению пользователя всё автоматом подтягивалось с сервера и чинилось. Причём именно в версии МТ4, так как переход на 5-ку идти будет ещё долго, а 4-ка очень популярна и восстребованна. Да и деньги зарабатывать нужно сейчас, на 4-ке.

Ещё раз уточняю, МТ подключён к демо-серверам Альпари с момента установки и они ни разу не менялись. В папке history программы есть только две папки: Alpari-Demo и downloads. Настройки количества баров в истории и в окне графика не меняются и остаются дефолтными также с момента установки МТ на комп. А результаты нажатия кнопки Загрузить - неожиданно разные. Что на самом деле происходит в Архиве и почему так непредсказуемо?

 
Сочувствую, что-то страшное у тебя там творится
 

Параллельное обсуждение данной темы ведётся на форуме Альпари http://forum.alpari.ru/thread58122.html

Неужели тут ни у кого нет ни ответов, ни даже вопросов? И у разработчиков тоже?

 

1. Надо убрать ошибки разсогласования графиков. Удалить всю историю котировок, закачать по новой.
2. Если у брокера плавающий спред, то надо оптимизировать и тестить на одном спреде. Желательно на типичном.
3. Запустить на ночь или на сутки на демо счете эксперта и сравнить результаты демо и в тестере. если ордера примерно совпадают, и количество ордеров несильно отличается, то тестеру можно верить. Если торговля не соответсвует тестеру, то соответсвенно надо не оптимизировать в тестере.

Неплохо бы увидеть хотя бы отчет тестера.

 

Для dimeon:

1. Тестил на трёх разных компах, в трёх разных экземплярах МТ4. Симптомы одинаковы. После загрузки котировок в "Архиве" проверяю прогоном тестера - рассогласований за нужный мне период нет. Потом запускаю по этому же периоду оптимизацию. А потом - тесты по результатам оптимизации. Вот тут уже и могут появиться рассогласования. То есть, они появляются уже после того, как вся история закачана и пересчитана "Архивом", после (или во время) оптимизации. Вряд ли тут удаление истории что-то даст.

2. В Альпари спред плавающий. Согласен с Вами, тестить нужно на одинаковых условиях рынка. Но как тестить на выбранном спреде, где его указать? В МТ4 я такого не нашёл.

3. Это идея хорошая. Наверное я её попробую. Только придётся брать хотя бы несколько суток. Но она всё равно не решает главного вопроса: откуда такие глюки с котировками?

Отчёты тестера есть в архивах в моих сообщениях выше. Даже по двум разным парам в разные дни. В тех же сообщениях есть описание файлов из архивов. Посмотрите.

 

Закачайте историю, пересчитайте таймфремы. Отключитесь от интернета и тестируйте.

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

Похожий результат можно получить еще таким образом:

Компьютер подключен к интернету достаточно длительное время, график открыт на Н1.

Выключаем интернет, начинаем тестить. Советник нам пишет, что закачивает историю М5, М1 и, это при отключенном интернете. Так что подводных камней здесь много. Также, известно, какую он закачивает историю при подключенном интернете.

 
Спасибо, Mislaid. Я именно так и попробую делать при следующих оптимизациях. На форуме Альпари мне сегодня тоже о таком алгоритме сказали. Буду пробовать... Хотя, честно говоря, либо это я что-то не понимаю в логике программы, либо это какое-то странное отношение разработчиков к важнейшей части оптимизатора - архиву котировок. Так что всё равно очень хочется услышать пояснения разработчиков по этой теме и ответы на вопросы. А какую историю МТ закачивает из инета? Мне об этом ничего "такого" не известно. Поясните, плз, или дайте ссылки где почитать.
 
ReasonMan:
Спасибо, Mislaid. Я именно так и попробую делать при следующих оптимизациях. На форуме Альпари мне сегодня тоже о таком алгоритме сказали. Буду пробовать... Хотя, честно говоря, либо это я что-то не понимаю в логике программы, либо это какое-то странное отношение разработчиков к важнейшей части оптимизатора - архиву котировок. Так что всё равно очень хочется услышать пояснения разработчиков по этой теме и ответы на вопросы. А какую историю МТ закачивает из инета? Мне об этом ничего "такого" не известно. Поясните, плз, или дайте ссылки где почитать.

Всего не знаю, выводы из личного опыта.

Я вижу, что Вы уже поставили достаточно экспериментов, чтобы можно было сформулировать гипотезы.

Вы закачали архив котировок на минутах. Он качается с сервера MQ. Если Вы заметили, то в нем не хватает нескольких последних дней, или даже недель. Гипотеза: архив последних котировок на сервере MQ может быть еще не сформирован. Оставшуюся часть истории Вы закачиваете через "Обновить" с сервера ДЦ.

Другой эксперимент. Убиваете историю. Пытаетесь закачать минутки (пятиминутки) через "Обновить". Закачивается небольшая часть истории с сервера ДЦ. Гипотеза: на сервере ДЦ хранится лишь ограниченная часть последней истории.

Гипотеза: тестер качает М5, М1 из архива на компьютере и докачивает с сервера MQ. Если архив на сервере еще не сформирован, то эти данные эмулируются. То же, если нет подключения к интернету. Эмулированные данные не сохраняются?

Раз в неделю я, через "Обновить", закачиваю историю на минутках на 27 валютных парах. На некоторых парах закачивается свыше 10000 баров, хотя новых баров за неделю порядка 7000. Гипотеза: история изменилась.

По этим причинам результаты тестирования на последних данных могут не совпадать.

Результаты тестирования и результаты торговли на демо (микро, реале) могут не совпадать по ряду иных причин.