Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
15.469%
Drawdown
35.100%
Expectancy
0
Net Profit
15.499%
Sharpe Ratio
0.655
Probabilistic Sharpe Ratio
34.311%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.027
Beta
1.023
Annual Standard Deviation
0.342
Annual Variance
0.117
Information Ratio
-0.958
Tracking Error
0.022
Treynor Ratio
0.219
Total Fees
$16.77
from math import floor

class BasicTemplateAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Cash)
        self.SetStartDate(2020, 1, 1)
        self.SetEndDate(2020, 12, 31)
        self.SetCash(1000000)
        self.SetBenchmark("SPY")
        self.cashRatio = 1
        self.taxDividends = 1 # 0.30
        
        self.ticker = 'VOO'
        self.AddEquity(self.ticker, Resolution.Minute)
        
        self.raw_handling = True
        if self.raw_handling:
            self.Securities[self.ticker].SetDataNormalizationMode(DataNormalizationMode.Raw)
        else:
            self.Securities[self.ticker].SetDataNormalizationMode(DataNormalizationMode.TotalReturn)
        
    
    def OnMarginCallWarning(self):
        self.Error("You received a margin call warning..")

    def OnMarginCall(self, requests):
        self.Error("YOU MESSED UP, MARGIN CALLED.")
        
    def OnData(self, data):
        if not self.Portfolio.Invested:
            self.SetHoldings(self.ticker, self.cashRatio)
            
        for kvp in data.Dividends:
            div_ticker = kvp.Key
            div_distribution = kvp.Value.Distribution
            div_total_value = div_distribution * self.Portfolio[self.ticker].Quantity
            self.Portfolio.SetCash(self.Portfolio.Cash - (self.taxDividends*div_total_value)) 
            self.SetHoldings(self.ticker, self.cashRatio)
            self.Log("{0} >> DIVIDEND >> {1} - ${2} - ${3}".format(self.Time, div_ticker, div_distribution, div_total_value))

        #self.Log("{0} >> SUMMARY >> {1} | Port Cash: {2} | Port Value: {3} | Holdings: {4} | Price {5}".format(self.Time, 
        #    self.ticker, self.Portfolio.Cash, self.Portfolio.TotalPortfolioValue, self.Portfolio[self.ticker].Quantity, self.Portfolio[self.ticker].Price))