Блог им. XXM
Программ для тестирования много. Как-то начал считать, дошел до цифры 33 (https://smart-lab.ru/blog/236254.php).
Но, сколько бы их ни было, все равно чего-то не хватает: то танцы с бубном со входными данными, то отсутствие какого-нибудь функционала, то проблемы с установкой самой программы ТА, «то полы кривые» и т.д.
Поэтому создал свой тестер, на c#, назвал Xtest.
Вкратце напишу про то, как он работает на примере индекса Московской биржи (ранее — индекс ММВБ).
Стратегия простая:
Покупаем, когда начался рост. Продаем либо по стопу, либо по тэйк-профиту.
Для шорта — зеркально.
Для входа в позицию выбрал простой индикатор, рассказывать про него не буду, поверьте, он банальный. Одна переменная, назвал Param1.
Выходы: будем подбирать stopLoss, takeProfit и SLforTP (stopLoss для takeProfit), они в блоке «Strategy Parameters» на вкладке Parameters.
Загрузка данных с сайта Финам: идем на вкладку «DownLoad», выбираем даты «с» и «по», нажимаем «загрузить». Для 15-минуток диапазон — 01.01.2010-31.12.2013 (больше может не пройти).
Недостающие данные добавляем до сегодняшней даты на втором этапе.
Тестирование проведем в два шага:
1. Тестирование на периоде 01.01.2010 — 31.12.2016, с фильтром Profit > 2000 и Recovery Factor > 3.
На выходе: 4311 вариантов.
Количество прогонов в данном случае 63840, комиссию принимаем за 0.2 (включены биржевые и брокерские, плюс проскальзывание)
Форвардный анализ добавляет к традиционной процедуре оптимизации очень важный шаг. Он тестирует
эффективность переменных модели на данных, которые не были включены в оптимизационные данные. Это
также называется тестированием на данных, не вошедших в выборку или форвардным тестированием.
Р. Пардо «Разработка, тестирование и оптимизация торговых систем»
2. К полученному набору параметров применяем форвардное тестирование на периоде 01.01.2017 — 10.12.2017, с фильтром Profit > 500 и Recovery Factor > 1.0.
Получаем 746 вариантов.
Эти наборы параметров протестируем на всех имеющихся сейчас барах с 01.01.2010 — 10.12.2017 и из них отберем вручную 5 самых лучших вариантов, следя за тем, чтобы не было корреляции между ними. Процесс творческий, поддающийся автоматизации, но это сейчас несущественно.
Главное — есть у нас 5 вариантов стратегий:
которые можно исследовать как поврозь, так и все вместе.
Посмотрим на характеристики одного теста:
Количество сделок Long и Short примерно одинаковы, но Profit по лонгам выше, ведь стратегия «Buy and Hold» = 737.23, значит показатели скорее верны, чем не верны.
Значение комиссии 933.2 — в пунктах, поэтому, теоретически, при количестве сделок 2333*2 = 4666 в рублях комиссия составляет более 9 тысяч.
Для построения графика Equity портфеля стратегий сначала выделяем их, затем нажимаем кнопку «Testsel»
и на соответствующей вкладке увидим график:
До полного расчета результатов вкладки «Performanse» для выбранных стратегий запала не хватило.
На примере тестирования на индексе Московской биржи показал свой подход к поиску стратегий для алготорговли.
Примечательно, что стратегий, которые прошли через сито форвардного тестирования, очень и очень много (746 в данном случае).
Выделить из них десяток-другой некоррелируемых стратегий будет несложно, но зато на выходе — слаженный ансамбль, который в общем (теоретически, на индексе Мосбиржи!) может выдавать плюсовой результат с плавным графиком equity.
сделка 207,215, 217 и тд и тп… время 10.30 — торгует на открытии рынка… что унреал
т.е у тя идет торговля внутри гэпов
ves2010, по 215:
тут проверка для шорта только на цену Open свечи: если открылись выше, то срабатывает по Open (как бы высокой она не была), если нет — по рассчитанному стопу.решение о сделке (вход в позицию short) принято на свече «20100617,183000», но, во избежание ошибки заглядывания вперед (Look-Ahead Bias), в позицию «вхожу» на открытии следующей свечи.
account_entryPrice = source.BarPrices[i + 1].open;
Ее цену, как и дату и время, на свече «20100617,183000» программа как бы пока не знает. И сделка свершается по цене открытия свечи «20100618,103000» Open=1360.28.
----
Со стопами так:
Как написано ниже, проскальзывание 1.11.
Для фьючерса на индекс Мосбиржи от 0.3 до 0.6, судя по стакану.
Но торговли внутри гэпов тут нет:
стоп по цене 1341.94, она внутри свечи.
Short 1336.59, StopShort 1341.94, Profit = 1336.59 — 1341.94 = -5.35, но в расчет пошел -5.75, это дань погрешностям исполнения. Посчитал, что достаточно. Хотя именно на этих цифрах упорствовать не намерен, поиграюсь. Про первую свечу дня интересно, продумаю для тестера. Но в реальных роботах включаю опцию:
это уже из практики.
Насчет четырех косяков, о которых написали ниже: намекните в личку, плиз, я заинтригован ;)
1 у тя стоимость актива меняется на интервале тестирования вдвое-втрое… и как ты тестишь?
2 форвардное тестирование — зло… т.к. самую ценность представляют как раз последние данные...
3 ты просто тыкаешь пальцем в небо отбирая случайые варианты… может это выпадающие экстремумы… т.е. надо проверять область около этих вариантов
4 как только уберешь первую и последнюю свечу из расчетов у тя все ухудшится вдвое-втрое
5 делаешь комиссы=0, проскальзывание = 0… затем делаешь оптимизацию на максимальный убыток… наверняка будет торговать так же хорошо
1. параметры оптимизации выражены в процентах, а не в абсолютных цифрах. И, важно: тут комиссия считается в абсолютных цифрах. При переводе на проценты (как сейчас на фьючерсе на индекс в соответствии с www.moex.com/a90) ситуация сильно улучшается. Подумал, так хорошо в реале не бывает. Картинку приведу, чуть позже.
2. Не зациклен на форвардном тестировании, но со «злом» не соглашусь, как-то категорично. Хотя актуальность последних данных очевидна: поведение рынка меняется, и применять параметры, которые «хорошо работали в 2011 году» в 2016, не совсем верно.
Но, тем не менее, никто не гарантирует, что в 2017 поведение рынка поменяется так, что параметры для 2011 подойдут лучше, чем параметры 2016 года.
Выходом будет применение портфеля стратегий, ниже поясню.
3. С экстремумами гляну. На первый взгляд, их влияние несущественное (рис).
4. Насчет первой свечи — внесу поправки, на нее в тестах как-то не акцентировал внимание.
Но последнюю трогать не буду. Она хорошая ;)
Особенность торговой системы в том, что она трендовая: на движении вверх входит в лонг и сопровождает.
Одни стратегии активируют скольжение на 4.2%, другие 0.8%.
Стопы тоже отличаются, но они не более 1.4%.
Составление портфеля стратегий — единственно верный путь для прибыльной торговли (если вы не инсайдер ;))
там помимо этого… еще четыре косяка… мне просто лень писать про очевидные вещи...
Спасибо, гляну.
Хотя на каждую «сделку» проскальзывание предусмотрено 1.11, но замечание справедливое.
ну как бы иногда приходится делать узко заточенные вещи...
с которыми стандартные проги не справляюся либо считают крайне долго...
ну к примеру, минутки за 12 лет и хотябы тысяча сделок в день сделок в день… и все… комп висит… а если тики...
некоторые считают на видяхах…
кстати… счас появился амиброкер… там у него специально сделано так, что оптимизация и расчеты идут через процессорный кэш без обращения к памяти компа… т.е. скорость максимальная...
вообще… если есть 4-5 параметров оптимизации, то комп начинает считать месяцами… сам попробуй… я как то не верил… а потом запустил оптимизацию на 5ти скользящих средних… мне выдал срок окончания расчетов — 1 месяц
Резвился на WLD 4. Но, пару раз наткнулся на то, что результаты 2-х суточных тестов пропадали из-за «недостаточности памяти», и эту тему закрыл навсегда. Перешел на WLD 6. С памятью траблов уже нет, но там много всего такого, что не всегда нужно, и, самое главное, в тестировании идентичных стратегий я на своей программе получил выигрыш на целый порядок!
Там, где WLD6 будет считать 10 часов, Xtest выдаст его за 1 час.
Такая экономия стоит трудов.
----
Хотя, как пишет ves2010, есть «процессорный кэш без обращения к памяти компа». Это уже ускорение на 3 порядка, наверное, не меньше ;)
----
>>«Там, где WLD6 будет считать 10 часов, Xtest выдаст его за 1 час. » — за счет чего такая разница достигается?
Как именно WLD6 выходит из ситуаций с огромной базой входных данных я не в курсе, но работать с ними он не отказывается.
Было бы любопытно, какие цифры для стопа и тэйк-профита на индексе МБ выявит ваш тестер. Вход можно установить по пересечению SMA3 и SMA5 на 15 мин.
у меня на это есть два решения:
1. Если нужно быстро сделать оптимизацию на минутках на большом количиестве баров, то я сделал многопоточный оптимизатор, который херачит с огромной скоростью в отличии от стандарного WLD6(включая тот многопоточник, который гуляет по сети). Плюс там сразу отфильтровываются варианты статистики, которые меня заведомо уже не удовлетворяют: количество сделок слишком большое или там количество последовательных убытков. Что угодно короче.
2. Для более тяжелых тестов у меня есть в распоряжении кластер на базе hadoop на over 300 ядер(не мой). Сделал себе фреймворк на Apache Spark. Стратегию можно написать за пару часов. Ставлю на выходные и вперед.
Какой информацией Вы хотели поделиться с читателями?
Чтобы Вы не подумали, что я просто придраться решил, объясняю:
Для тестирования своих стратегий, мне тоже пришлось написать свой тестер, но это отдельная программа, которая может тестировать разные стратегии, подключаемые в виде DLL-ок. Писать отдельный тестер под каждую стратегию — не самый оптимальный вариант на мой взгляд.