import matplotlib.pyplot as plt
import numpy as np
import pyfolio as pf
import pandas as pd
from datetime import datetime
# Allocate equal weights to momentum and mean-reversion strategy.
weights = (0.5, 0.5)
start_value = 100000
backtest_names = {
'momentum' : '5b54db6068812144283cb9d0',
'mean_reversion' : '5b54d542b9c76642a5e62cb6'
}
backtests = {}
for b in backtest_names:
print b
backtests[b] = get_backtest(backtest_names[b])
backtests[b].cumulative_performance.ending_portfolio_value.plot(label=b)
plt.legend(loc='best')
returns = {}
for b in backtest_names:
bt = backtests[b]
returns[b] = bt.daily_performance.returns
print ('%s CAGR: %f' % (b, pf.timeseries.annual_return(returns[b])))
print
df = pd.DataFrame(returns)
print "Correlations"
print df.corr() # correlation coefficient
df2 = df + 1
total_return = df2.dot(weights) - 1
def print_some_stats(daily_return):
print "Annual return {0:.2f}%".format(pf.timeseries.annual_return(daily_return)*100)
print "Annual volatility {0:.2f}%".format(pf.timeseries.annual_volatility(daily_return)*100)
print "Sharpe ratio %f" % pf.timeseries.sharpe_ratio(daily_return)
print "Sortino ratio %f" % pf.timeseries.sortino_ratio(daily_return)
print "Max drawdown {0:.2f}%".format(pf.timeseries.max_drawdown(daily_return)*100)
print "Annual returns"
print pf.timeseries.aggregate_returns(daily_return, 'yearly')
print "Before rebalancing"
total_return.name = 'Before rebalancing'
print_some_stats(total_return)
print total_return.cumulative_performance.ending_portfolio_value.plot(label=b)
pf.create_returns_tear_sheet(total_return)
pf.create_full_tear_sheet(total_return)