Backtesting. Работа с библиотекой BT.

Общие вопросы

Официальный сайт библиотеки BT
  1. Рекомендации по установке
  2. Загрузка котировок
  3. Простейшая стратегия

Рекомендации по установке

Для установки пакета bt в системе должен быть установлен компилятор с С++. Объяснение на английском для разных версий питона. (http://stackoverflow.com/questions/29909330/microsoft-visual-c-compiler-for-python-3-4)
Для установки на Anaconda2 под Windows7 мне потребовалось скачать и установить пакет Microsoft Visual C++ Compiler for Python 2.7 .
А для установки на Anaconda3 мне потребовалось сначала произвести апргрейд утилиты setuptools минимальная версия 24.0 pip install --upgrade setuptools потом скачиваем и устанавливаем пакет Visual CPP Build Tools . При установке ставил галочку только для Windows 8.1 SDK.

Загрузка котировок

Котировки можно загрузить командой bt.get('идентификатор', start, end). По умолчанию загружается скорректированная цена закрытия(adjusted close). Далее пишем дату начала и конца периода для загрузки в формате гггг-мм-чч.
import bt
data = bt.get('RUB=X', start='2016-01-01', end='2016-08-01')
print(data.head())
Для наших дальнейших экспериментов вместо рубля возьмем котировки акций Газпрома(OGZPY) и Сбербанка(SBRCY). Создадим простейшую стратегию. Для этого создадим экземпляр класса Strategy и в нем зададим нужную комбинацию алгоритмов.
s1 = bt.Strategy('s1', [bt.algos.RunMonthly(),  # Выполняем ежемесячно;
                bt.algos.SelectAll(),    # выбираем все бумаги;
                bt.algos.WeighEqually(), # в равной пропорции;
                bt.algos.Rebalance()])   # выполняем ребалансировку согласно выбранной пропорции
Теперь можем протестировать нашу стратегию. Напишем код.
# тестируем нашу стратегию
test = bt.Backtest(s, data)
res = bt.run(test)
Можем вывести график результата и статистические параметры работы стратегии.
# выводим график средств
res.plot()
# выводим статистические коэффициенты
res.display()
В итоге все вместе у нас будет выглядеть так.
# -*- coding: utf-8 -*-
import bt
data = bt.get('OGZPY, SBRCY', start='2016-01-01', end='2016-08-01')
print(data.tail())
s = bt.Strategy('s1', [bt.algos.RunMonthly(),
                       bt.algos.SelectAll(),
                       bt.algos.WeighEqually(),
                       bt.algos.Rebalance()])
# тестируем нашу стратегию
test = bt.Backtest(s, data)
#print(test)
res = bt.run(test)
# выводим график средств
print(res)
res.plot()
# выводим статистические коэффициенты
res.display()
# выводим гистограмму прибылей и убытков
res.plot_histogram()
# выводим график весов акций в портфеле
res.plot_security_weights()
Теперь попробуем модифицировать стратегию.