Overall Statistics
Total Orders
12
Average Win
0.97%
Average Loss
-1.43%
Compounding Annual Return
8.441%
Drawdown
4.500%
Expectancy
0.399
Start Equity
2000000
End Equity
2068935.06
Net Profit
3.447%
Sharpe Ratio
0.08
Sortino Ratio
0.049
Probabilistic Sharpe Ratio
52.362%
Loss Rate
17%
Win Rate
83%
Profit-Loss Ratio
0.68
Alpha
-0.05
Beta
0.293
Annual Standard Deviation
0.053
Annual Variance
0.003
Information Ratio
-2.255
Tracking Error
0.08
Treynor Ratio
0.015
Total Fees
$150.50
Estimated Strategy Capacity
$500000000.00
Lowest Capacity Asset
MSFT R735QTJ8XC9X
Portfolio Turnover
3.93%
from AlgorithmImports import *

class TrendReversalTradingAlgorithm(QCAlgorithm):
    def Initialize(self):
        self.SetStartDate(2023, 12, 20)
        self.SetEndDate(2024, 5, 20)
        
        self.SetCash(2_000_000)
        
        self.symbol = self.AddEquity("MSFT", Resolution.Daily).Symbol # S2 = MSFT (Lowest Min Autocorrelation)
        
        self.sma = self.SMA(self.symbol, 20, Resolution.Daily)
        
        self.weight = 0.50  # 50% of portfolio

    def OnData(self, data):
        if not self.sma.IsReady or self.symbol not in data or data[self.symbol] is None:  
            return 
        
        price = data[self.symbol].Close
        sma_value = self.sma.Current.Value

        if price < sma_value and not self.Portfolio[self.symbol].Invested:
            self.SetHoldings(self.symbol, self.weight) 
        elif price >= sma_value and self.Portfolio[self.symbol].Invested:
            self.Liquidate(self.symbol)