Overall Statistics
Total Trades
39
Average Win
15.93%
Average Loss
-3.83%
Compounding Annual Return
2.940%
Drawdown
29.700%
Expectancy
1.171
Net Profit
86.520%
Sharpe Ratio
0.291
Probabilistic Sharpe Ratio
0.014%
Loss Rate
58%
Win Rate
42%
Profit-Loss Ratio
4.16
Alpha
0.031
Beta
-0.018
Annual Standard Deviation
0.101
Annual Variance
0.01
Information Ratio
-0.218
Tracking Error
0.206
Treynor Ratio
-1.606
Total Fees
$218.78
Estimated Strategy Capacity
$2800000.00
Lowest Capacity Asset
BIL TT1EBZ21QWKL
# https://quantpedia.com/strategies/january-barometer/
#
# Invest in the equity market in each January. Stay invested in equity markets (via ETF, fund, or futures) only if January return is positive; otherwise, switch investments to T-Bills.
 
class JanuaryBarometer(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2000, 1, 1)
        self.SetCash(100000) 
        
        self.market = self.AddEquity("SPY", Resolution.Daily).Symbol
        self.t_bills = self.AddEquity("BIL", Resolution.Daily).Symbol
        
        self.startPrice = None
        self.Schedule.On(self.DateRules.MonthStart(self.market), self.TimeRules.AfterMarketOpen(self.market), self.Rebalance)
        
    def Rebalance(self):
        if self.Time.month == 1:
            self.Liquidate(self.t_bills)
            self.SetHoldings(self.market, 1)
            
            self.startPrice = self.Securities[self.market].Price
            
        if self.Time.month == 2 and self.startPrice:
            returns = (self.Securities[self.market].Price - self.startPrice) / self.startPrice
            if returns > 0:
                self.SetHoldings(self.market, 1)
            else:
                self.startPrice = None
                self.Liquidate(self.market)
                self.SetHoldings(self.t_bills, 1)