Overall Statistics
Total Orders
161
Average Win
14.80%
Average Loss
-2.76%
Compounding Annual Return
16.094%
Drawdown
34.600%
Expectancy
1.228
Start Equity
100000
End Equity
939326.63
Net Profit
839.327%
Sharpe Ratio
0.61
Sortino Ratio
0.614
Probabilistic Sharpe Ratio
5.955%
Loss Rate
65%
Win Rate
35%
Profit-Loss Ratio
5.36
Alpha
0.057
Beta
0.603
Annual Standard Deviation
0.179
Annual Variance
0.032
Information Ratio
0.133
Tracking Error
0.167
Treynor Ratio
0.181
Total Fees
$6996.20
Estimated Strategy Capacity
$390000000.00
Lowest Capacity Asset
AAPL R735QTJ8XC9X
Portfolio Turnover
2.93%
Drawdown Recovery
910
# QSL Foundation I — Blueprint 4.1
# AAPL SMA-100 Crossover Strategy
# Buy AAPL when price > 100-day SMA, sell to cash when price < 100-day SMA
# Backtest period: 2010-01-01 to 2024-12-31

from AlgorithmImports import *

class AAPL_SMA100(QCAlgorithm):

    def initialize(self):
        self.set_start_date(2010, 1, 1)
        self.set_end_date(2024, 12, 31)
        self.set_cash(100000)
        self.set_benchmark("SPY")

        self.aapl = self.add_equity("AAPL", Resolution.DAILY).symbol
        self.sma = self.SMA("AAPL", 100, Resolution.DAILY)

        self.set_warm_up(100)

    def on_data(self, data):
        if self.is_warming_up:
            return
        if not self.sma.is_ready:
            return
        if "AAPL" not in data or data["AAPL"] is None:
            return

        price = self.securities["AAPL"].price
        sma_value = self.sma.current.value

        if price > sma_value:
            if not self.portfolio["AAPL"].invested:
                self.set_holdings("AAPL", 1.0)
        else:
            if self.portfolio["AAPL"].invested:
                self.liquidate("AAPL")