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