Страница 1 из 1

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

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

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

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

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

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

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

Добавлено: Чт дек 20, 2012 1:10 pm
FT Support
Здравствуйте,

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

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

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

Добавлено: Сб дек 22, 2012 6:15 pm
hal9000
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 - это почти четырехкратная экономия времени оптимизации.
В принципе, в моей "стратегии" это все уже сделано, только там это происходит все параллельно, то есть, много роботов и они все одновременно виртуально торгуют. Что бы не изобретать велосипед, могу скинуть исходники, где создается полный набор комбинаций значений параметров для оптимизации, с обычным шагом и множителем. Правда, они на С++.

Добавлено: Пн дек 24, 2012 12:50 pm
FT Support
Здравствуйте,

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

Добавлено: Ср дек 26, 2012 12:09 am
hal9000
FT Support писал(а):Здравствуйте,

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

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

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

Добавлено: Ср дек 26, 2012 7:24 am
FT Support
всё верно, работа с несколькими потоками не тестировалась поэтому вполне могут возникать проблемы, кэширование должно сработать

Добавлено: Ср янв 09, 2013 1:18 pm
hal9000
Что-то с быстрым тестом у меня заморочка какая-то.

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

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

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

Добавлено: Ср янв 09, 2013 1:49 pm
FT Support
Хмм, странно, возможно дело в специфике стратегии...

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

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

Добавлено: Сб янв 12, 2013 4:09 pm
FT Support
Да, типа "дата" пока что нет, добавим в следующих версиях