| 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))