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

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

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

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

Для установки на Anaconda3 мне потребовалось в Anaconda3 Promt выполнить команду: conda install -c conda-forge bt

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

Котировки можно загрузить командой bt.get('идентификатор', start, end). По умолчанию загружается скорректированная цена закрытия(adjusted close). Далее пишем дату начала и конца периода для загрузки в формате гггг-мм-чч.
bt_example_1.py
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()
В итоге все вместе у нас будет выглядеть так.
bt_example_2.py
# -*- 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()
Теперь попробуем модифицировать стратегию.