Overall Statistics
Total Trades
57
Average Win
3.08%
Average Loss
-1.87%
Compounding Annual Return
6.695%
Drawdown
9.400%
Expectancy
0.226
Net Profit
13.858%
Sharpe Ratio
0.375
Probabilistic Sharpe Ratio
15.049%
Loss Rate
54%
Win Rate
46%
Profit-Loss Ratio
1.64
Alpha
0.074
Beta
-0.127
Annual Standard Deviation
0.137
Annual Variance
0.019
Information Ratio
-0.466
Tracking Error
0.273
Treynor Ratio
-0.402
Total Fees
$88.95
Estimated Strategy Capacity
$1000000000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
Portfolio Turnover
7.78%
# region imports
from AlgorithmImports import *
# endregion

class MeasuredGreenSheep(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 1, 1)
        self.SetEndDate(2022,1,1)
        self.SetCash(100000)
        self.spy=self.AddEquity('SPY', Resolution.Daily).Symbol
        
        #include incidcator
        self.sma=self.SMA(self.spy,30,Resolution.Daily)
        closing_prices = self.History(self.spy,30,Resolution.Daily)['close']
        for time, price in closing_prices.loc[self.spy].items():
            self.sma.Update(time, price)

    def OnData(self, data: Slice):
        if not self.sma.IsReady:
            return
        hist = self.History(self.spy, timedelta(365),Resolution.Daily)
        low = min(hist['low'])
        high = max(hist['high'])

        price = self.Securities[self.spy].Price

        if price * 1.05 >=high and self.sma.Current.Value < price:
            if not self.Portfolio[self.spy].IsLong:
                self.SetHoldings(self.spy,1)

        elif price * 0.95 <= low and self.sma.Current.Value > price:
            if not self.Portfolio[self.spy].IsShort:
                self.SetHoldings(self.spy,-1)

        else:
            self.Liquidate()

        self.Plot("Benchmark","52w-High",high)
        self.Plot("Benchmark","52w-Low",low)
        self.Plot("Benchmark","SMA",self.sma.Current.Value)


        pass