| Overall Statistics |
|
Total Trades 41 Average Win 0% Average Loss 0% Compounding Annual Return 13.273% Drawdown 33.800% Expectancy 0 Net Profit 248.172% Sharpe Ratio 0.868 Probabilistic Sharpe Ratio 27.793% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.006 Beta 0.999 Annual Standard Deviation 0.172 Annual Variance 0.03 Information Ratio -2.408 Tracking Error 0.003 Treynor Ratio 0.149 Total Fees $80.83 |
from math import floor
class BasicTemplateAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Cash)
self.SetStartDate(2010, 12, 3)
self.SetEndDate(2020, 12, 3)
self.SetCash(1000000)
self.SetBenchmark("SPY")
self.cashRatio = 1
self.taxDividends = 0.25
self.ticker = 'SPY'
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: # update this to Dividends dictionary
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))