| Overall Statistics |
|
Total Orders 54 Average Win 8.68% Average Loss -4.82% Compounding Annual Return 85.943% Drawdown 31.800% Expectancy 0.615 Start Equity 10000 End Equity 18583.82 Net Profit 85.838% Sharpe Ratio 1.44 Sortino Ratio 2.164 Probabilistic Sharpe Ratio 58.526% Loss Rate 42% Win Rate 58% Profit-Loss Ratio 1.80 Alpha 0.257 Beta 3.079 Annual Standard Deviation 0.453 Annual Variance 0.206 Information Ratio 1.378 Tracking Error 0.38 Treynor Ratio 0.212 Total Fees $409.42 Estimated Strategy Capacity $1900000.00 Lowest Capacity Asset UVXY V0H08FY38ZFP Portfolio Turnover 13.42% |
from AlgorithmImports import *
class BasicTemplateAlgorithm(QCAlgorithm):
'''Basic template algorithm simply initializes the date range and cash'''
def GetRsi(self, symbol, days):
trades = self.history[TradeBar](symbol, days, Resolution.DAILY, data_normalization_mode=DataNormalizationMode.SPLIT_ADJUSTED)
rsi = RelativeStrengthIndex(symbol, days, MovingAverageType.WILDERS)
self.Debug("calculating rsi for {}".format(symbol))
for trade in trades:
self.Debug("{}:{}".format(trade.time.strftime("%Y-%m-%d %H:%M:%S %Z%z"), trade.close))
rsi.update(trade.time, trade.close)
rsi.update(self.Time, self.securities[symbol].price)
self.Debug("{}:{}".format(self.Time.strftime("%Y-%m-%d %H:%M:%S %Z%z"), self.securities[symbol].price))
return rsi.current.value
def TradeBeforeMarketClose(self):
if self.IsWarmingUp:
return
rsi = self.GetRsi("TQQQ", 10)
self.plot("RelativeStrengthIndex", "rsi", rsi)
if rsi > 79:
self.SetHoldings("UVXY", 1, True)
else:
self.SetHoldings("TQQQ", 1, True)
def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
self.SetStartDate(2023, 1, 3) #Set Start Date
self.SetEndDate(2024, 1, 2) #Set End Date
self.SetCash(10000) #Set Strategy Cash
self.set_time_zone(TimeZones.NEW_YORK)
self.add_equity("UVXY", Resolution.MINUTE, data_normalization_mode=DataNormalizationMode.RAW)
self.add_equity("TQQQ", Resolution.MINUTE, data_normalization_mode=DataNormalizationMode.RAW)
self.Debug("Initilize is complete")
self.Schedule.On(
self.DateRules.EveryDay("TQQQ"),
self.TimeRules.BeforeMarketClose("TQQQ", 5),
self.TradeBeforeMarketClose)
def OnData(self, data):
return