| Overall Statistics |
|
Total Orders 10540 Average Win 0.06% Average Loss -0.07% Compounding Annual Return -0.047% Drawdown 7.100% Expectancy 0.000 Start Equity 100000 End Equity 99539.49 Net Profit -0.461% Sharpe Ratio -1.015 Sortino Ratio -1.008 Probabilistic Sharpe Ratio 0.008% Loss Rate 49% Win Rate 51% Profit-Loss Ratio 0.95 Alpha -0.029 Beta 0.078 Annual Standard Deviation 0.023 Annual Variance 0.001 Information Ratio -0.711 Tracking Error 0.138 Treynor Ratio -0.302 Total Fees $0.00 Estimated Strategy Capacity $34000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 96.21% |
# region imports
from AlgorithmImports import *
import random
from statsmodels.tsa.regime_switching.markov_regression import MarkovRegression
# endregion
class FearAndGreedExampleAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2015, 7, 12)
self.set_end_date(2025, 4, 1)
self.set_cash(100_000)
# Set the random seed.
random.seed(self.get_parameter('seed', 30))
# Set the flag of whether or not to use the regime filter.
self._filter = bool(self.get_parameter('filter', 0)) # True
self._probability_of_trade = 0.01 # per minute
# Add the SPY to trade.
self._equity = self.add_equity('SPY')
self._equity.set_fee_model(ConstantFeeModel(0)) # Remove fees.
self._equity.rsi = self.rsi(self._equity.symbol, 14, resolution=Resolution.DAILY)
self.warm_up_indicator(self._equity.symbol, self._equity.rsi)
# Liquidate positions at market close.
self.schedule.on(self.date_rules.every_day(self._equity.symbol), self.time_rules.before_market_close(self._equity.symbol, 1), self.liquidate)
def on_data(self, data: Slice) -> None:
if self._equity.symbol in data and self._equity.exchange.hours.is_open(self.time + timedelta(minutes=1), False):
# Check if we should trade.
trade = random.random() < self._probability_of_trade
if not trade:
return
if self._filter and self._equity.rsi.current.value < 50: # If filter is on, only trade when RSI is low
return
self.market_order(self._equity.symbol, 100 if not self.portfolio.invested else -100)