| Overall Statistics |
|
Total Trades 88 Average Win 2.78% Average Loss -1.43% Compounding Annual Return 3.644% Drawdown 20.100% Expectancy 0.192 Net Profit 11.336% Sharpe Ratio 0.323 Loss Rate 60% Win Rate 40% Profit-Loss Ratio 1.94 Alpha 0.048 Beta 0.166 Annual Standard Deviation 0.137 Annual Variance 0.019 Information Ratio 0.249 Tracking Error 0.277 Treynor Ratio 0.266 Total Fees $88.00 |
class MomentumBasedTacticalAllocation(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2007, 8, 1)
self.SetEndDate(2010, 8, 1)
self.SetCash(3000)
self.spy = self.AddEquity("SPY", Resolution.Daily)
self.bnd = self.AddEquity("BND", Resolution.Daily)
self.spyMomentum = self.MOMP("SPY", 50, Resolution.Daily)
self.bondMomentum = self.MOMP("BND", 50, Resolution.Daily)
self.SetBenchmark("SPY")
self.SetWarmUp(50)
def OnData(self, data):
# Don't place trades until our indicators are warmed up:
if self.IsWarmingUp:
return
#1. If SPY has more upward momentum than BND, then we liquidate our holdings in BND and allocate 100% of our equity to SPY
if self.spyMomentum.Current.Value > self.bondMomentum.Current.Value:
self.Liquidate("BND")
self.SetHoldings("SPY", 1)
#2. Otherwise we liquidate our holdings in SPY and allocate 100% to BND
else:
self.Liquidate("SPY")
self.SetHoldings("BND", 1)