Тестирование стратегий (автоматических)

Поделитесь своими идеями, как можно улучшить программу.
Ответить
Сообщение
Автор
hal9000
Сообщения: 14
Зарегистрирован: Вс ноя 11, 2012 7:48 am

Тестирование стратегий (автоматических)

#1 Сообщение hal9000 » Пн дек 17, 2012 7:13 pm

Приветствую.
Решил использовать форекс-тестер для тестирования робота, написанного на С++.
Почему С++, почему форекс-тестер?

- алгоритм весьма продвинутый, ГА и все такое, без ООП реализовать не просто.
- отсутствие отладчика как в МТ4, так и в МТ5.
- запрет на использование отладчика при отладке внешних DLL в МТ4 и МТ5

В последствии свяжу FT с МТ4, либо портирую результат как внешнюю DLL для МТ4.

Теперь к делу. Предлагаю в этой теме писать предложения, касающиеся отладки таких стратегий. Начну по мелочам.

1. Не хватает конечной даты тестирования, на которой тестирование останавливается (если она задана).
2. При старте тестирования не хватает еще одного варианта "Начать повторное тестирование с начальной даты". Сейчас при перезапуске приходится каждый раз снова задавать дату. (Кстати, можно сделать указание даты с клавиатуры (напр. 01012012), а не движком и календарем? Больно уж много кликать приходится...)
3. Хотелось бы иметь скорость тестирования максимально возможную, без задержки.
4. Хотелось бы иметь режим без визуализации ценового графика. Думаю, это ускорит тестирование. Просто прогресс, либо прогресс и график профита по выбору.
5. Возможно ли разрешить запуск отладки не подключением к процессу, а стартом FT из под вижел-студио? Я не совсем понимаю деталей этих процессов, но сейчас в таком варианте срабатывает защита против отладчика (см. скриншот). Иначе приходится много действий совершать при рестарте - закрыть FT, запустить, переключиться в VS, найти в меню "присоединиться к процессу", найти в списке FT...
Вложения
.png
(26.56 КБ) 12891 скачивание

hal9000
Сообщения: 14
Зарегистрирован: Вс ноя 11, 2012 7:48 am

#2 Сообщение hal9000 » Пн дек 17, 2012 11:12 pm

Еще один вопрос.
В SendInstantOrder есть параметр - комментарий. Честно пишу туда, что нужно. Но вот где его найти? Ни в истории, ни на графике, ни в экспорте истории его нет. А вообще, очень полезно было бы. Например, туда можно писать параметры робота, которые привели к открытию позиции.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#3 Сообщение FT Support » Чт дек 20, 2012 1:10 pm

Здравствуйте,

Вы можете воспользоваться "быстрым тестом" (небольшая кнопка рядом с "Start Test"), в этом режиме ценовые графики обновляются очень редко что ускоряет скорость тестирования

Пока что комментарии можно просматривать только в меню "редактировать ордер", позже мы добавим их в таблицу истории ордеров и сделаем возможность экпорта

К сожалению не получится запускать тестер из-под студии, так уж устроена наша защита

hal9000
Сообщения: 14
Зарегистрирован: Вс ноя 11, 2012 7:48 am

#4 Сообщение hal9000 » Сб дек 22, 2012 6:15 pm

FT Support писал(а):Здравствуйте,

Вы можете воспользоваться "быстрым тестом" (небольшая кнопка рядом с "Start Test")
Быстрый тест гуд, спасибо за подсказку. Там есть и конечная дата, и даже вводится клавишами)

Оптимизации еще сильно не хватает - как в МТ. Для каждого параметра стратегии начальное, конечное значения, шаг. По ним делается прогон по всем комбинациям и выводится результаты. Выбрать нужное сумеем сами.
Хотя бы просто перебор, понимаю, ГА штука не тривиальная. С точки зрения интерфейса, кнопку настройки параметров стратегии можно сделать в окошке "быстрый тест" - это было бы удобно.

Да, если надумаете это реализовать - предлагаю сразу сделать шаг-множитель, в МТ4 его сильно не хватает. Поясню. Допустим, начальное значение 5, конечное 3000. Если задавать шаг 5 - очень много вариантов получается, около 600. Если параметр подбирается не один, это критично. К тому же шаг 5 у верхнего предела (ближе к 3000) слишком мелкий. А если задать шаг 50 - то в конце это нормально, а в начале будет 5, 55, 105 - пропуски слишком велики. Тут поможет шаг в виде множителя и точность округления, например шаг 1.05, точность 0 (0 - это целые числа, как для NormalizeDouble). получается ряд 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30 ... 47, 50, 52, 55, 57, 60 и и.д. Тут видно, что до 20 шаг 1, в районе 50 - уже 2-3, а в районе 1000 - 50, а в районе верхней границы (3000) шаг составляет около 150. А всего значений около 160 - это почти четырехкратная экономия времени оптимизации.
В принципе, в моей "стратегии" это все уже сделано, только там это происходит все параллельно, то есть, много роботов и они все одновременно виртуально торгуют. Что бы не изобретать велосипед, могу скинуть исходники, где создается полный набор комбинаций значений параметров для оптимизации, с обычным шагом и множителем. Правда, они на С++.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#5 Сообщение FT Support » Пн дек 24, 2012 12:50 pm

Здравствуйте,

Оптимизатор стратегий у нас тоже есть (Инструменты - Оптимизатор стратегий), правда такие вещи как множитель у нас не реализованы

hal9000
Сообщения: 14
Зарегистрирован: Вс ноя 11, 2012 7:48 am

#6 Сообщение hal9000 » Ср дек 26, 2012 12:09 am

FT Support писал(а):Здравствуйте,

Оптимизатор стратегий у нас тоже есть (Инструменты - Оптимизатор стратегий), правда такие вещи как множитель у нас не реализованы
Спасибо, попробуем!
Мне бы по меню полазить, а я сразу в бой и сюда писать)

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

В принципе, индикаторы я переписал, при расчете мне только Close() и Time() остались нужны, наверное, придется их закэшировать... когда на MT портировать, все равно это придется сделать...

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#7 Сообщение FT Support » Ср дек 26, 2012 7:24 am

всё верно, работа с несколькими потоками не тестировалась поэтому вполне могут возникать проблемы, кэширование должно сработать

hal9000
Сообщения: 14
Зарегистрирован: Вс ноя 11, 2012 7:48 am

#8 Сообщение hal9000 » Ср янв 09, 2013 1:18 pm

Что-то с быстрым тестом у меня заморочка какая-то.

Делаю в обычном тестовом режиме - таймфрейм час, шаг час. Перерисовывает каждый бар, примерно бар в секунду.

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

Меня и обычный режим устроил бы, но в нем даты окончания нет (

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#9 Сообщение FT Support » Ср янв 09, 2013 1:49 pm

Хмм, странно, возможно дело в специфике стратегии...

Если обычный тест работает лучше чем быстрый, то можно попробовать указать время окончания теста в настройках стратегии и не заходить в "GetSingleTick" если текущее время больше чем указанное в настройках. или просто сгенерировать не все тики а только до нужной даты.

hal9000
Сообщения: 14
Зарегистрирован: Вс ноя 11, 2012 7:48 am

#10 Сообщение hal9000 » Пт янв 11, 2013 10:41 pm

Насчет быстрого теста вроде бы понял.
Там, вероятно, стоит алгоритм, который перерисовывает по времени, не зависимо от того, сколько баров прошло между перерисовками. 10 прошло - будет рисовать по 10 баров. А если время перерисовки настало, но бар еще не расчитан стратегией, то рисует и по минуткам внутри бара.
Следовательно, когда GetSingleTick() выполняется очень долго, перересовок получается больше, чем в обычном режиме. Но на скорость это почти не влияет, так как основные тормоза не в этом.
FT Support писал(а): Если обычный тест работает лучше чем быстрый, то можно попробовать указать время окончания теста в настройках стратегии и не заходить в "GetSingleTick" если текущее время больше чем указанное в настройках. или просто сгенерировать не все тики а только до нужной даты.
Кстати, типа "дата" там нет. Или, может, просто забыли включить в заголовки?
Можно, конечно, обойтись целым числом или строкой...

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#11 Сообщение FT Support » Сб янв 12, 2013 4:09 pm

Да, типа "дата" пока что нет, добавим в следующих версиях

Ответить