| Overall Statistics |
|
Total Trades 11 Average Win 0% Average Loss 0% Compounding Annual Return 34.630% Drawdown 6.700% Expectancy 0 Net Profit 31.701% Sharpe Ratio 2.232 Probabilistic Sharpe Ratio 83.977% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.291 Beta -0.027 Annual Standard Deviation 0.128 Annual Variance 0.016 Information Ratio 0.266 Tracking Error 0.347 Treynor Ratio -10.583 Total Fees $11.00 |
from datetime import datetime
from collections import *
### <summary>
### All Weather Strategy (Dalio)
### #https://www.iwillteachyoutoberich.com/blog/all-weather-portfolio/
### </summary>>
class AllWeatherStrategy(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2020, 1, 1)
self.SetWarmup(1)
self.SetCash(100000)
self.monthCounter = 0
# Country index ETFs according to https://seekingalpha.com/etfs-and-funds/etf-tables/countries
self.etfs = [
(self.AddEquity('MSFT', Resolution.Daily).Symbol,0.05),
(self.AddEquity('MA', Resolution.Daily).Symbol,0.05),
(self.AddEquity('BABA', Resolution.Daily).Symbol,0.05),
(self.AddEquity('FB', Resolution.Daily).Symbol,0.05),
(self.AddEquity('AMZN', Resolution.Daily).Symbol,0.05),
(self.AddEquity('SE', Resolution.Daily).Symbol,0.05),
(self.AddEquity('GOOG', Resolution.Daily).Symbol,0.05),
(self.AddEquity('CRM', Resolution.Daily).Symbol,0.05),
(self.AddEquity('SHOP', Resolution.Daily).Symbol,0.05),
(self.AddEquity('ADBE', Resolution.Daily).Symbol,0.05),
(self.AddEquity('SPY', Resolution.Daily).Symbol,-0.5)
]
self.Schedule.On(self.DateRules.MonthStart(self.etfs[0][0]), self.TimeRules.AfterMarketOpen(self.etfs[0][0]), self.Rebalance)
self.leverage = 1
self.monthCounter = 0
def OnData(self, data):
if self.IsWarmingUp:
return
def Rebalance(self):
if self.monthCounter is 0:
self.SetHoldings([PortfolioTarget(etf,target*self.leverage) for etf,target in self.etfs])
self.monthCounter = self.monthCounter+1
else:
self.monthCounter = self.monthCounter+1