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