| Overall Statistics |
|
Total Trades 12 Average Win 9.06% Average Loss -4.59% Compounding Annual Return 203.019% Drawdown 8.600% Expectancy 1.377 Net Profit 59.660% Sharpe Ratio 5.073 Probabilistic Sharpe Ratio 94.582% Loss Rate 20% Win Rate 80% Profit-Loss Ratio 1.97 Alpha 1.4 Beta -0.465 Annual Standard Deviation 0.282 Annual Variance 0.079 Information Ratio 3.731 Tracking Error 0.4 Treynor Ratio -3.075 Total Fees $401.45 |
from math import floor
class FuturesHarryBrownStyle(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 4, 20)
self.SetEndDate(2010, 9, 20)
self.SetCash(1000000)
self.Settings.FreePortfolioValuePercentage = 0.3
self.gold = self.AddSecurity(SecurityType.Future, "GC", Resolution.Minute)
self.gold.SetFilter(0, 90)
# self.gold.SetFilter(lambda x: x.FrontMonth())
self.spEmini = self.AddFuture(Futures.Indices.SP500EMini)
self.spEmini.SetFilter(0, 90)
self.bonds = self.AddFuture(Futures.Financials.Y30TreasuryBond)
self.bonds.SetFilter(0, 90)
#self.Schedule.On(self.DateRules.MonthEnd("SPY"), \
# self.TimeRules.AfterMarketOpen("SPY"), \
# self.RebalancingCode)
def OnMarginCallWarning(self):
self.Error("You received a margin call warning..")
def OnData(self, slice):
# Each asset we subscribe to will return a 'chain'.
# Each chain will have the different expiry contracts for that asset.
# We access the chain with chain.Value
for chain in slice.FutureChains:
self.popularContracts = [contract for contract in chain.Value if contract.OpenInterest > 1000]
if len(self.popularContracts) == 0:
continue
sortedByOIContracts = sorted(self.popularContracts, key=lambda k : k.OpenInterest, reverse=True)
self.liquidContract = sortedByOIContracts[0]
self.Debug(f"The contract with the greatest open interest is: {self.liquidContract} with an expiry: {self.liquidContract.Expiry}")
# Check if the "asset" is in our portfolio.
# A Futures asset can have multiple contracts...
# The problem arises where I already have a May ES contract and the algo goes and buys a June ES contract too
# We need to check if ANY of those contracts are in our portfolio
if not self.Portfolio[self.liquidContract.Symbol].Invested:
self.Debug(f"The contract with the greatest open interest is: {self.liquidContract} with an expiry: {self.liquidContract.Expiry}")
future = self.Securities[self.liquidContract.Symbol]
self.notionalValue = self.liquidContract.AskPrice * future.SymbolProperties.ContractMultiplier
self.Debug(f"The value of one {self.liquidContract.Symbol} contract is: {str(self.notionalValue)}")
self.SetHoldings(self.liquidContract.Symbol, 0.08)
# def RebalancingCode(self):
# for asset in self.Portfolio.Invested:
# self.SetHoldings(asset.Symbol, 0.08)from Selection.FutureUniverseSelectionModel import FutureUniverseSelectionModel
from datetime import date, timedelta
class FrontMonthUniverseSelectionModel(FutureUniverseSelectionModel):
def __init__(self, select_future_chain_symbols):
super().__init__(timedelta(1), select_future_chain_symbols)
def Filter(self, filter):
return (filter.FrontMonth())