XXM
XXM личный блог
12 декабря 2017, 17:16

Тестирование стратегий. На примере индекса Московской биржи.

цены на мед

Программ для тестирования много. Как-то начал считать, дошел до цифры 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 вариантов.

Количество стратегий- 746. И все в плюс!!!   8-O

Эти наборы параметров протестируем на всех имеющихся сейчас барах с 01.01.2010 — 10.12.2017 и из них отберем вручную 5 самых лучших вариантов, следя за тем, чтобы не было корреляции между ними. Процесс творческий, поддающийся автоматизации, но это сейчас несущественно.
Главное — есть у нас 5 вариантов стратегий:

Выберем количество стратегий, равное количеству пальцев на правой руке ;)

которые можно исследовать как поврозь, так и все вместе.
Посмотрим на характеристики одного теста:
Performance, почти по WLD.


Количество сделок Long и Short примерно одинаковы, но Profit по лонгам выше, ведь стратегия «Buy and Hold» = 737.23, значит показатели скорее верны, чем не верны.
Значение комиссии 933.2 — в пунктах, поэтому, теоретически, при количестве сделок 2333*2 = 4666 в рублях комиссия составляет более 9 тысяч.

сделки:
Вкладка Сделки

equity:
Красиво, конечно.

Для построения графика Equity портфеля стратегий сначала выделяем их, затем нажимаем кнопку «Testsel»
Портфель стратегий


и на соответствующей вкладке увидим график:
Красиво, тоже.

До полного расчета результатов вкладки «Performanse» для выбранных стратегий запала не хватило.

На примере тестирования на индексе Московской биржи показал свой подход к поиску стратегий для алготорговли.
Примечательно, что стратегий, которые прошли через сито форвардного тестирования, очень и очень много (746 в данном случае).
Выделить из них десяток-другой некоррелируемых стратегий будет несложно, но зато на выходе — слаженный ансамбль, который в общем (теоретически, на индексе Мосбиржи!) может выдавать плюсовой результат с плавным графиком equity.

26 Комментариев
  • ves2010
    12 декабря 2017, 17:27

    сделка 207,215, 217 и тд и тп… время 10.30 — торгует на открытии рынка… что унреал

    т.е у тя идет торговля внутри гэпов
      • ves2010
        12 декабря 2017, 22:06
        XXM, далек ты от практики… ох далек… выкидывай первую свечу из расчетов… не спорь
    • Ну как бы
      12 декабря 2017, 19:55
      ves2010, так вроде бы речь идёт о самом индексе, а не о фьючерсе. На индексе ведь гэпы отрисовываются именно как гэпы, а не как полная свеча. То есть открытие позы на тесте происходит по худшей цене, а не внутри гэпа. 
        • ves2010
          12 декабря 2017, 22:04
          XXM, выкинь первую свечку из расчетов — сам все увидишь насколько все станет плохо
            • ves2010
              13 декабря 2017, 07:14
              XXM, 
              1 у тя стоимость актива меняется на интервале тестирования вдвое-втрое… и как ты тестишь?
              2 форвардное тестирование — зло… т.к. самую ценность представляют как раз последние данные...
              3 ты просто тыкаешь пальцем в небо отбирая случайые варианты… может это выпадающие экстремумы… т.е. надо проверять область около этих вариантов
              4 как только уберешь первую и последнюю свечу из расчетов у тя все ухудшится вдвое-втрое
              5 делаешь комиссы=0, проскальзывание = 0… затем делаешь оптимизацию на максимальный убыток… наверняка будет торговать так же хорошо 
      • ves2010
        12 декабря 2017, 22:00
        Ну как бы, 
        там помимо этого… еще четыре косяка… мне просто лень писать про очевидные вещи... 

  • Redline
    12 декабря 2017, 20:58
    WLD переизобретаете…
    • ves2010
      12 декабря 2017, 22:09
      Redline, 
      ну как бы иногда приходится делать узко заточенные вещи...
      с которыми стандартные проги не справляюся либо считают крайне долго...

      ну к примеру, минутки за 12 лет и хотябы тысяча сделок в день сделок в день… и все… комп висит… а если тики...

      • Replikant_mih
        12 декабря 2017, 22:22
        ves2010, А как это сделать быстро?)
        • ves2010
          12 декабря 2017, 22:27
          Replikant_mih, нужен си… с++, с# питоны и прочая тормознутая хрень для недопрограмистов идут лесом... 
          некоторые считают на видяхах…

          кстати… счас появился амиброкер… там у него специально сделано так, что оптимизация  и расчеты идут через процессорный кэш без обращения к памяти компа… т.е. скорость максимальная...

          вообще… если есть 4-5 параметров оптимизации, то комп начинает считать месяцами… сам попробуй… я как то не верил… а потом запустил оптимизацию на 5ти скользящих средних… мне выдал срок окончания расчетов — 1 месяц
          • Replikant_mih
            12 декабря 2017, 23:36
            ves2010, Блин, я надеялся, что «секреты» лежат за пределами выбора быстрого языка)). Ожидал что-то типа: в стандартных прогах много лишнего, поэтому они медленные, а если делать без лишнего — будет быстро))
              • Replikant_mih
                13 декабря 2017, 13:23
                XXM, 
                >>«Там, где WLD6 будет считать 10 часов, Xtest выдаст его за 1 час. » — за счет чего такая разница достигается?
              • Сергей Фролов
                13 декабря 2017, 17:43
                XXM, в влд генетический оптимизатор есть, за пол часа со всем справляется, если глубину поставить побольше, то час. Про полный перебор уже почти год как забыл:) 
          • ch5oh
            14 декабря 2017, 18:51
            ves2010, генетика решает.
            • ves2010
              15 декабря 2017, 16:36
              ch5oh, генетика для нубов… только полный перебор на 2ух параметрах, чтоб видеть все резалты в виде плоскости… и тогда все ясно...

          • Redline
            15 декабря 2017, 17:53
            ves2010, 
            у меня на это есть два решения:
             1. Если нужно быстро сделать оптимизацию на минутках на большом количиестве баров, то я сделал многопоточный оптимизатор, который херачит с огромной скоростью в отличии от стандарного WLD6(включая тот многопоточник, который гуляет по сети). Плюс там сразу отфильтровываются варианты статистики, которые меня заведомо уже не удовлетворяют: количество сделок слишком большое или там количество последовательных убытков. Что угодно короче.
            2. Для более тяжелых тестов у меня есть в распоряжении кластер на базе hadoop на over 300 ядер(не мой). Сделал себе фреймворк на Apache Spark. Стратегию можно написать за пару часов. Ставлю на выходные и вперед. 
            • ves2010
              15 декабря 2017, 20:14
              Redline, круто... 
  • Prophetic
    13 декабря 2017, 10:37
    Странный пост. Начали с программ для тестирования, а закончили результатами бэктеста одной стратегии.
    Какой информацией Вы хотели поделиться с читателями?
    Чтобы Вы не подумали, что я просто придраться решил, объясняю:
    Для тестирования своих стратегий, мне тоже пришлось написать свой тестер, но это отдельная программа, которая может тестировать разные стратегии, подключаемые в виде DLL-ок. Писать отдельный тестер под каждую стратегию — не самый оптимальный вариант на мой взгляд.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн