| Overall Statistics |
|
Total Trades 85 Average Win 1.55% Average Loss -1.03% Compounding Annual Return 9.315% Drawdown 11.200% Expectancy 0.192 Net Profit 8.756% Sharpe Ratio 0.677 Probabilistic Sharpe Ratio 37.691% Loss Rate 52% Win Rate 48% Profit-Loss Ratio 1.50 Alpha -0.095 Beta 0.744 Annual Standard Deviation 0.147 Annual Variance 0.021 Information Ratio -1.386 Tracking Error 0.117 Treynor Ratio 0.133 Total Fees $91.35 |
import operator
class MOMPAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2019, 1, 1)
self.SetEndDate(2019, 12, 10)
self.SetCash(10000)
self.mom = {}
for ticker in ["XLK", "XLF", "XLI", "XLY", "XLB", "XLP", "XLV", "XLU", "XLE"]:
symbol = self.AddEquity(ticker, Resolution.Daily).Symbol
self.mom[symbol] = self.MOMP(symbol, 5, Resolution.Daily)
self.SetWarmUp(26, Resolution.Daily)
self.SetBenchmark("SPY")
self.Schedule.On(self.DateRules.Every(DayOfWeek.Wednesday), self.TimeRules.At(12, 0), self.EveryWedAtNoon)
def EveryWedAtNoon(self):
#check if indicators are ready to go
if not all([MOMP.IsReady for symbol, MOMP in self.mom.items()]):
return
#find key with highest MOMP value
highestKey = sorted(self.mom, key = lambda k: self.mom[k].Current.Value, reverse = True)[0]
#restructure portfolio according to changes in MOMP
if self.Portfolio.Invested and not self.Portfolio[highestKey].Invested:
self.Liquidate()
self.SetHoldings(highestKey, 1)