Overall Statistics
Total Trades
36
Average Win
4.06%
Average Loss
-1.75%
Compounding Annual Return
7.664%
Drawdown
16.700%
Expectancy
0.761
Net Profit
24.799%
Sharpe Ratio
0.525
Probabilistic Sharpe Ratio
15.413%
Loss Rate
47%
Win Rate
53%
Profit-Loss Ratio
2.33
Alpha
0.062
Beta
0.157
Annual Standard Deviation
0.112
Annual Variance
0.013
Information Ratio
0.339
Tracking Error
0.233
Treynor Ratio
0.375
Total Fees
$36.00
Estimated Strategy Capacity
$4400000.00
Lowest Capacity Asset
BND TRO5ZARLX6JP
from AlgorithmImports import *
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(self.spy.Symbol)  
        self.SetWarmUp(50) 
  
    def OnData(self, data):
        
        if self.IsWarmingUp:
            return
        
        #1. Limit trading to happen once per week
        if self.Time.weekday() == 1:
            if self.spyMomentum.Current.Value > self.bondMomentum.Current.Value:
                self.Liquidate("BND")
                self.SetHoldings("SPY", 1)
                
            else:
                self.Liquidate("SPY")
                self.SetHoldings("BND", 1)