Андрей Коган
Андрей Коган личный блог
26 июля 2013, 12:43

Wealth-Lab: Оптимизируем параметры сами в С#

 Пытаясь подобрать оптимальные параметры для статегии, я обнаружил, что шестой Wealth-Lab при бэктестинге использует лишь одно ядро процессора. Таким образом, при оптимизации параметров четырех-ядерный процессор загружается лишь на 25%.
 
Это навело меня на мысль, что хорошо бы написать свою программку, которая делает то же самое, что оптимизация в Wealth-Lab, но быстрее. Был использован C# 4.5 в Visual Studio 2012.
 
Я поставил перед собой три задачи:
  1. Программа должна работать быстро.
  2. Программа должны выдавать на выходе параметры стратегии, при которых в Wealth-Lab в точности воспроизводятся все трейды и результаты полностью совпадают.
  3. Программа должна уметь последовательно просчитывать несколько разных стратегий в пакетном режиме.
 
В сущности, данное консольное приложение делает следующее:
1)      Считывает данные из текстовых файлов (формат Wealth-Lab).
2)      Считывает исходные параметры из файла input.txt.
3)      Вычисляет DataSeries, так как стратегия предполагает их использование.

4)      Запускается перебор значений параметров (как в оптимизаторе Wealth-Lab).
5)      Результаты оптимизации записываются в файл output.txt.
 
Все три задачи были реализованы.
  1. Для ускорения вычислений используется Parallel.For, так что процессор задействован на 100%.  Скорость вычисления оптимальных параметров превосходит Wealth-Lab в десятки раз.
  2. Параметры на выходе моей программы позволяют запустить стратегию в Wealth-Lab и получить в точности такие же результаты.
  3. Пакетный режим позволяет запустить программу на ночь, параметры различных стратегий будут рассчитаны последовательно.
 
В процессе отладки было выявлено несколько интересных моментов.

 Первое (и самое важное): тип double совершенно не подходит для параметров стратегии, потому что погрешность этого типа может сыграть злую шутку: при запуске одного и того же кода, результаты вычислений будут различными. Для параметров приходится использовать integer.
 
  Далее. Для повышения производительности необходимо было оптимизировать код приложения.
  1. Избавился от «лишних» вычислений.
  2. При переборе элементов for будет работать несколько быстрее, чем foreach.
  3. По возможности избегал создания объектов, так как это действие занимает машинное время.
  4. Так как данные загружаются единожды, но используются множество раз, то целесообразно использовать массив, а не List.
 
Кстати, нашёл два интересных бага в Wealth-Lab:
 
  1. При условном размере депозита в 5000, Wealth-Lab вычисляет количество инструментов для трейда не по цене открытия, а по цене закрытия свечи. Хотя покупает по цене открытия.
  2. При закрытия позиции на последнем баре комиссионные не учитываются.
 
Вот такие результаты даёт текущая стратегия после оптимизации параметров:
 
 Wealth-Lab: Оптимизируем  параметры сами в С#
 
В завершение хочу отметить, что Wealth-Lab превосходная программа. Настоятельно рекомендую.
7 Комментариев
  • vfreeman
    26 июля 2013, 12:50
    на истории можно подобрать оптимальные параметры для любых торговых систем. а как поведет себя система на реальной торговле?
  • xp-trade
    26 июля 2013, 12:52
    «Так как данные загружаются единожды, но используются множество раз, то целесообразно использовать массив, а не List.» Не очень понятен постулат. А чем Лист плох в этом случае?
  • ves2010
    26 июля 2013, 15:49
    тут уже пробегало на сайте…
    напомню…
    есть интервал оптимизации… например 2 года…
    есть прараметры оптимизации например их 1… тогда после оптимизации можно гарантировать что бот будет работать 12месяцев… параметров 2 — будет раотать 6мес… 3 параметра дадут 3мес… 4ре это 1.5 месяца… т.е каждый параметр сокращае время работы бота вдвое…
  • Skaarj
    17 марта 2015, 20:06
    А софтинкой не поделитесь? :)
  • Привет, Андрей.
    Получила ли развитие ваша разработка?
    Где еще можно посмотреть о вашей разработке?
    Хотелось бы увидеть подробные результаты работы приложения?
    Или идея оказалась не работоспособной?

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

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