Тестирование стратегий (автоматических)
-
- Сообщения: 14
- Зарегистрирован: Вс ноя 11, 2012 7:48 am
Тестирование стратегий (автоматических)
Приветствую.
Решил использовать форекс-тестер для тестирования робота, написанного на С++.
Почему С++, почему форекс-тестер?
- алгоритм весьма продвинутый, ГА и все такое, без ООП реализовать не просто.
- отсутствие отладчика как в МТ4, так и в МТ5.
- запрет на использование отладчика при отладке внешних DLL в МТ4 и МТ5
В последствии свяжу FT с МТ4, либо портирую результат как внешнюю DLL для МТ4.
Теперь к делу. Предлагаю в этой теме писать предложения, касающиеся отладки таких стратегий. Начну по мелочам.
1. Не хватает конечной даты тестирования, на которой тестирование останавливается (если она задана).
2. При старте тестирования не хватает еще одного варианта "Начать повторное тестирование с начальной даты". Сейчас при перезапуске приходится каждый раз снова задавать дату. (Кстати, можно сделать указание даты с клавиатуры (напр. 01012012), а не движком и календарем? Больно уж много кликать приходится...)
3. Хотелось бы иметь скорость тестирования максимально возможную, без задержки.
4. Хотелось бы иметь режим без визуализации ценового графика. Думаю, это ускорит тестирование. Просто прогресс, либо прогресс и график профита по выбору.
5. Возможно ли разрешить запуск отладки не подключением к процессу, а стартом FT из под вижел-студио? Я не совсем понимаю деталей этих процессов, но сейчас в таком варианте срабатывает защита против отладчика (см. скриншот). Иначе приходится много действий совершать при рестарте - закрыть FT, запустить, переключиться в VS, найти в меню "присоединиться к процессу", найти в списке FT...
Решил использовать форекс-тестер для тестирования робота, написанного на С++.
Почему С++, почему форекс-тестер?
- алгоритм весьма продвинутый, ГА и все такое, без ООП реализовать не просто.
- отсутствие отладчика как в МТ4, так и в МТ5.
- запрет на использование отладчика при отладке внешних DLL в МТ4 и МТ5
В последствии свяжу FT с МТ4, либо портирую результат как внешнюю DLL для МТ4.
Теперь к делу. Предлагаю в этой теме писать предложения, касающиеся отладки таких стратегий. Начну по мелочам.
1. Не хватает конечной даты тестирования, на которой тестирование останавливается (если она задана).
2. При старте тестирования не хватает еще одного варианта "Начать повторное тестирование с начальной даты". Сейчас при перезапуске приходится каждый раз снова задавать дату. (Кстати, можно сделать указание даты с клавиатуры (напр. 01012012), а не движком и календарем? Больно уж много кликать приходится...)
3. Хотелось бы иметь скорость тестирования максимально возможную, без задержки.
4. Хотелось бы иметь режим без визуализации ценового графика. Думаю, это ускорит тестирование. Просто прогресс, либо прогресс и график профита по выбору.
5. Возможно ли разрешить запуск отладки не подключением к процессу, а стартом FT из под вижел-студио? Я не совсем понимаю деталей этих процессов, но сейчас в таком варианте срабатывает защита против отладчика (см. скриншот). Иначе приходится много действий совершать при рестарте - закрыть FT, запустить, переключиться в VS, найти в меню "присоединиться к процессу", найти в списке FT...
- Вложения
-
- .png
- (26.56 КБ) 12891 скачивание
-
- Сообщения: 14
- Зарегистрирован: Вс ноя 11, 2012 7:48 am
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
Здравствуйте,
Вы можете воспользоваться "быстрым тестом" (небольшая кнопка рядом с "Start Test"), в этом режиме ценовые графики обновляются очень редко что ускоряет скорость тестирования
Пока что комментарии можно просматривать только в меню "редактировать ордер", позже мы добавим их в таблицу истории ордеров и сделаем возможность экпорта
К сожалению не получится запускать тестер из-под студии, так уж устроена наша защита
Вы можете воспользоваться "быстрым тестом" (небольшая кнопка рядом с "Start Test"), в этом режиме ценовые графики обновляются очень редко что ускоряет скорость тестирования
Пока что комментарии можно просматривать только в меню "редактировать ордер", позже мы добавим их в таблицу истории ордеров и сделаем возможность экпорта
К сожалению не получится запускать тестер из-под студии, так уж устроена наша защита
-
- Сообщения: 14
- Зарегистрирован: Вс ноя 11, 2012 7:48 am
Быстрый тест гуд, спасибо за подсказку. Там есть и конечная дата, и даже вводится клавишами)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 - это почти четырехкратная экономия времени оптимизации.
В принципе, в моей "стратегии" это все уже сделано, только там это происходит все параллельно, то есть, много роботов и они все одновременно виртуально торгуют. Что бы не изобретать велосипед, могу скинуть исходники, где создается полный набор комбинаций значений параметров для оптимизации, с обычным шагом и множителем. Правда, они на С++.
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
-
- Сообщения: 14
- Зарегистрирован: Вс ноя 11, 2012 7:48 am
Спасибо, попробуем!FT Support писал(а):Здравствуйте,
Оптимизатор стратегий у нас тоже есть (Инструменты - Оптимизатор стратегий), правда такие вещи как множитель у нас не реализованы
Мне бы по меню полазить, а я сразу в бой и сюда писать)
Теперь у меня очередная засада - пытаюсь использовать интерфейс стратегий из нескольких потоков - падает.
Как понимаю, такой вариант не предусмотрен?
В принципе, индикаторы я переписал, при расчете мне только Close() и Time() остались нужны, наверное, придется их закэшировать... когда на MT портировать, все равно это придется сделать...
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
-
- Сообщения: 14
- Зарегистрирован: Вс ноя 11, 2012 7:48 am
Что-то с быстрым тестом у меня заморочка какая-то.
Делаю в обычном тестовом режиме - таймфрейм час, шаг час. Перерисовывает каждый бар, примерно бар в секунду.
Делаю быстрый тест. Так там каждый бар перерисовывается несколько раз, словно по тикам. Как результат - медленнее обычного.
Меня и обычный режим устроил бы, но в нем даты окончания нет (
Делаю в обычном тестовом режиме - таймфрейм час, шаг час. Перерисовывает каждый бар, примерно бар в секунду.
Делаю быстрый тест. Так там каждый бар перерисовывается несколько раз, словно по тикам. Как результат - медленнее обычного.
Меня и обычный режим устроил бы, но в нем даты окончания нет (
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
Хмм, странно, возможно дело в специфике стратегии...
Если обычный тест работает лучше чем быстрый, то можно попробовать указать время окончания теста в настройках стратегии и не заходить в "GetSingleTick" если текущее время больше чем указанное в настройках. или просто сгенерировать не все тики а только до нужной даты.
Если обычный тест работает лучше чем быстрый, то можно попробовать указать время окончания теста в настройках стратегии и не заходить в "GetSingleTick" если текущее время больше чем указанное в настройках. или просто сгенерировать не все тики а только до нужной даты.
-
- Сообщения: 14
- Зарегистрирован: Вс ноя 11, 2012 7:48 am
Насчет быстрого теста вроде бы понял.
Там, вероятно, стоит алгоритм, который перерисовывает по времени, не зависимо от того, сколько баров прошло между перерисовками. 10 прошло - будет рисовать по 10 баров. А если время перерисовки настало, но бар еще не расчитан стратегией, то рисует и по минуткам внутри бара.
Следовательно, когда GetSingleTick() выполняется очень долго, перересовок получается больше, чем в обычном режиме. Но на скорость это почти не влияет, так как основные тормоза не в этом.
Можно, конечно, обойтись целым числом или строкой...
Там, вероятно, стоит алгоритм, который перерисовывает по времени, не зависимо от того, сколько баров прошло между перерисовками. 10 прошло - будет рисовать по 10 баров. А если время перерисовки настало, но бар еще не расчитан стратегией, то рисует и по минуткам внутри бара.
Следовательно, когда GetSingleTick() выполняется очень долго, перересовок получается больше, чем в обычном режиме. Но на скорость это почти не влияет, так как основные тормоза не в этом.
Кстати, типа "дата" там нет. Или, может, просто забыли включить в заголовки?FT Support писал(а): Если обычный тест работает лучше чем быстрый, то можно попробовать указать время окончания теста в настройках стратегии и не заходить в "GetSingleTick" если текущее время больше чем указанное в настройках. или просто сгенерировать не все тики а только до нужной даты.
Можно, конечно, обойтись целым числом или строкой...
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm