原理:尋找兩個相關係數為負,且會隨時間增值的商品
%matplotlib inline
import ffn
prices = ffn.get("spy,tlt", )
prices.plot()
prices.rebase().mean(axis=1).plot()
仔細看這兩個指數確實有呈現一點負相關,特別是 SPY 下跌的時候,TLT會些微的上漲
雖然直接投資sp500獲利更好,但相對風險是高的,究竟有沒有辦法判斷這樣的組合是否是最好的呢?
策略 配置1 配置2 配置3 … 配置10 配置11
SPY 0 0.1 0.2 … 0.9 1.0
TLT 1.0 0.9 0.8 … 0.1 0
把這幾種配置回測看看
import numpy as np
import pandas as pd
strategies = {}
for i in np.arange(0, 1.1, 0.1):
#title = "spy: %.1f | tlt: %.1f" % (i, 1-i)
title = 'spy: {:.1f} | tlt: {:.1f}'.format(i, 1-i)
strategies[title] = (prices.rebase() * [i, 1-i]).mean(axis=1).rebase()
strategies = pd.DataFrame(strategies)
strategies.plot()
可以發現TLT比重越高,則報酬率比較低,SPY比重越低,則報酬率比較高
除了報酬率以外,還有哪些指標可以來衡量這些策略的績效?
使用 ffn 提供的 calc_stats ( )函式來列出上圖報表
stats = strategies.calc_stats()
stats = pd.DataFrame(
{
name:pd.Series({key:getattr(pf, key) for key in dir(pf) if isinstance(getattr(pf, key), float)}, name=name)
for name,pf in stats.items()
}).transpose()
stats.head()
使用 stats.columns 查看上圖的策略績效指標有哪些欄位
stats.columns
使用 .plot 將不同的績效比較給畫出來,藍色的是「報酬/ 風險」 的比例,紅色的是「每月報酬」的波動程度
stats['daily_sharpe'].plot(rot=10, color='blue')
stats['monthly_vol'].plot(rot=10, color='red', secondary_y=True)
假如你是投資長線的話,其實不用太計較每天的 sharpe,應該要看的是每個月,甚至是每年的
stats['yearly_sharpe'].plot()
stats['monthly_sharpe'].plot()
stats['daily_sharpe'].plot()