| Overall Statistics |
|
Total Trades 10 Average Win 0% Average Loss 0% Compounding Annual Return 90.491% Drawdown 28.100% Expectancy 0 Net Profit 81.623% Sharpe Ratio 2.186 Probabilistic Sharpe Ratio 73.192% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.87 Beta -0.267 Annual Standard Deviation 0.374 Annual Variance 0.14 Information Ratio 1.157 Tracking Error 0.539 Treynor Ratio -3.069 Total Fees $10.24 |
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.1),
(self.AddEquity('MA', Resolution.Daily).Symbol,0.1),
(self.AddEquity('BABA', Resolution.Daily).Symbol,0.1),
(self.AddEquity('FB', Resolution.Daily).Symbol,0.1),
(self.AddEquity('AMZN', Resolution.Daily).Symbol,0.1),
(self.AddEquity('SE', Resolution.Daily).Symbol,0.1),
(self.AddEquity('GOOG', Resolution.Daily).Symbol,0.1),
(self.AddEquity('CRM', Resolution.Daily).Symbol,0.1),
(self.AddEquity('SHOP', Resolution.Daily).Symbol,0.1),
(self.AddEquity('ADBE', Resolution.Daily).Symbol,0.1),
]
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