| Overall Statistics |
|
Total Trades 1112 Average Win 0.73% Average Loss -0.59% Compounding Annual Return 6.808% Drawdown 50.200% Expectancy 0.186 Net Profit 43.486% Sharpe Ratio 0.317 Probabilistic Sharpe Ratio 2.604% Loss Rate 47% Win Rate 53% Profit-Loss Ratio 1.25 Alpha -0.051 Beta 1.538 Annual Standard Deviation 0.285 Annual Variance 0.081 Information Ratio -0.013 Tracking Error 0.133 Treynor Ratio 0.059 Total Fees $18760.90 Estimated Strategy Capacity $1600000000.00 Lowest Capacity Asset ES Y9CDFY0C6TXD Portfolio Turnover 5.98% |
# region imports
from AlgorithmImports import *
# endregion
class CreativeOrangeBull(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018, 1, 1)
self.SetEndDate(2023, 6, 25)
self.SetCash(10_000_000)
self.SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage, AccountType.Margin)
self.future = self.AddFuture(Futures.Indices.SP500EMini, Resolution.Hour, leverage = 1.0, extendedMarketHours = False)
self.future.SetFilter(timedelta(0), timedelta(180))
self.Settings.MinimumOrderMarginPortfolioPercentage = 0.0
benchmark = self.AddEquity("SPY")
self.SetBenchmark(benchmark.Symbol)
self.lastDay = None
def OnData(self,slice):
if (not self.IsMarketOpen(self.future.Symbol) or self.Time.hour != 10):
return
if (self.lastDay == self.Time.day):
return
self.lastDay = self.Time.day
contracts = slice.FuturesChains.get(self.future.Symbol)
if not contracts:
return
dscContracts = sorted(contracts, key = lambda x: x.OpenInterest, reverse=True)
if len(dscContracts) < 1:
return
contract = dscContracts[0]
self.SetHoldings([
PortfolioTarget(contract.Symbol, 0.1),
], liquidateExistingHoldings = True)