Skip to content

Instantly share code, notes, and snippets.

@scubamut
Created June 24, 2019 13:17
Show Gist options
  • Save scubamut/940422151f9a61fd096b8e5d2cc7e60d to your computer and use it in GitHub Desktop.
Save scubamut/940422151f9a61fd096b8e5d2cc7e60d to your computer and use it in GitHub Desktop.
import pandas_datareader.data as pdr
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime, timezone
import pytz
import talib
import itable
import ffn
from fintools import get_DataArray,compute_weights_RS_DM,compute_weights_PMA,\
Parameters, show_return_table, show_annual_returns, \
endpoints, backtest
start = datetime(2000, 1, 1, 0, 0, 0, 0, pytz.utc)
end = datetime.today().replace(tzinfo=timezone.utc)
# CHOOSE ONLY ONE
# ETFs
# strategies = {
# 'RS0001': { 'assets': ['CWB','HYG','MBB','IEF','HYD'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 2, 'frequency': 'M',
# 'cash_proxy': 'CASHX', 'risk_free': 0},
# 'RS0002': {'assets': ['HYD','QLTB','MBB'],
# 'start':start, 'end':end,
# 'rs_lookback': 3, 'risk_lookback': 2, 'n_top': 1, 'frequency': 'M',
# 'cash_proxy': 'CASHX', 'risk_free': 0},
# 'RS0003': {'assets': ['HYD','MBB','SHY'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 1, 'frequency': 'Q',
# 'cash_proxy': 'CASHX', 'risk_free': 0},
# 'DM0001': {'assets': ['CWB','VYM','HYG','VHT','TLT','MBB','HYD','IEF'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 3, 'frequency': 'M',
# 'cash_proxy': 'CASHX', 'risk_free': 'SHY'},
# 'DM0002': {'assets': ['CWB','TLT','HYG','VHT','VNQ'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 5, 'frequency': 'M',
# 'cash_proxy': 'MBB', 'risk_free': 'SHY'},
# 'PMA001': {'assets': ['CWB','MBB'],
# 'start':start, 'end':end,
# 'risk_lookback': 3, 'frequency': 'M', 'allocations': [0.6, 0.4],
# 'cash_proxy': 'TLT'},
# 'PMA002': {'assets': ['CWB','VYM','HYG'],
# 'start':start, 'end':end,
# 'risk_lookback': 3, 'frequency': 'M', 'allocations': [0.6, 0.2, 0.2],
# 'cash_proxy': 'TLT'},
# 'PMA003': {'assets': ['VCVSX', 'FAGIX', 'VGHCX'],
# 'start':start, 'end':end,
# 'risk_lookback': 2, 'frequency': 'M', 'allocations': [1./3., 1./3., 1./3.],
# 'cash_proxy': 'VUSTX'}
# }
# FUNDS
strategies = {
'RS0001': { 'assets': ['VCVSX','VWEHX','VFIIX','FGOVX','VWAHX'],
'start':start, 'end':end,
'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 2, 'frequency': 'M',
'cash_proxy': 'CASHX', 'risk_free': 0},
# 'RS0002': {'assets': ['MMHYX','FAGIX','VFIIX'],
# 'start':start, 'end':end,
# 'rs_lookback': 3, 'risk_lookback': 2, 'n_top': 1, 'frequency': 'M',
# 'cash_proxy': 'CASHX', 'risk_free': 0},
# 'RS0003': {'assets': ['MMHYX','FAGIX','VFIIX'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 1, 'frequency': 'Q',
# 'cash_proxy': 'CASHX', 'risk_free': 0},
# 'DM0001': {'assets': ['VCVSX','VWINX','VWEHX','VGHCX','VUSTX','VFIIX','VWAHX','FGOVX','FFXSX'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 3, 'frequency': 'M',
# 'cash_proxy': 'CASHX', 'risk_free': 'FFXSX'},
# 'DM0002': {'assets': ['VCVSX','VUSTX','VWEHX','VFIIX','VGHCX','FRESX'],
# 'start':start, 'end':end,
# 'rs_lookback': 1, 'risk_lookback': 1, 'n_top': 5, 'frequency': 'M',
# 'cash_proxy': 'VFIIX', 'risk_free': 'FFXSX'},
# 'PMA001': {'assets': ['VCVSX', 'VFIIX'],
# 'start':start, 'end':end,
# 'risk_lookback': 3, 'frequency': 'M', 'allocations': [0.6, 0.4],
# 'cash_proxy': 'VUSTX'},
# 'PMA002': {'assets': ['VCVSX', 'VWINX', 'VWEHX'],
# 'start':start, 'end':end,
# 'risk_lookback': 3, 'frequency': 'M', 'allocations': [0.6, 0.2, 0.2],
# 'cash_proxy': 'VUSTX'},
# 'PMA003': {'assets': ['VCVSX', 'FAGIX', 'VGHCX'],
# 'start':start, 'end':end,
# 'risk_lookback': 2, 'frequency': 'M', 'allocations': [1./3., 1./3., 1./3.],
# 'cash_proxy': 'VUSTX'}
}
if len(strategies) == 1:
name = [k for k in strategies.keys()][0]
if 'PMA' in name:
p_value, p_holdings, p_weights, prices = compute_weights_PMA(name, strategies[name])
else:
p_value, p_holdings, p_weights, prices = compute_weights_RS_DM(name, strategies[name])
p_value.plot(figsize=(15, 10), grid=True)
else:
print('***** ERROR : ', 'ONLY ONE STRATEGY ALLOWED')
ffn.calc_perf_stats(p_value).display()
# show_return_table(p_value)
# show_annual_returns(p_value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment