* pep8 conversion * more * Minor fix * Fix related regression algorithm --------- Co-authored-by: Martin Molinero <martin.molinero1@gmail.com>
This commit is contained in:
@@ -23,57 +23,57 @@ from AlgorithmImports import *
|
||||
### <meta name="tag" content="futures" />
|
||||
class BasicTemplateFuturesAlgorithm(QCAlgorithm):
|
||||
|
||||
def Initialize(self):
|
||||
self.SetStartDate(2013, 10, 8)
|
||||
self.SetEndDate(2013, 10, 10)
|
||||
self.SetCash(1000000)
|
||||
def initialize(self):
|
||||
self.set_start_date(2013, 10, 8)
|
||||
self.set_end_date(2013, 10, 10)
|
||||
self.set_cash(1000000)
|
||||
|
||||
self.contractSymbol = None
|
||||
self.contract_symbol = None
|
||||
|
||||
# Subscribe and set our expiry filter for the futures chain
|
||||
futureSP500 = self.AddFuture(Futures.Indices.SP500EMini)
|
||||
futureGold = self.AddFuture(Futures.Metals.Gold)
|
||||
futureSP500 = self.add_future(Futures.Indices.SP_500_E_MINI)
|
||||
future_gold = self.add_future(Futures.Metals.GOLD)
|
||||
|
||||
# set our expiry filter for this futures chain
|
||||
# SetFilter method accepts timedelta objects or integer for days.
|
||||
# The following statements yield the same filtering criteria
|
||||
futureSP500.SetFilter(timedelta(0), timedelta(182))
|
||||
futureGold.SetFilter(0, 182)
|
||||
futureSP500.set_filter(timedelta(0), timedelta(182))
|
||||
future_gold.set_filter(0, 182)
|
||||
|
||||
benchmark = self.AddEquity("SPY")
|
||||
self.SetBenchmark(benchmark.Symbol)
|
||||
benchmark = self.add_equity("SPY")
|
||||
self.set_benchmark(benchmark.symbol)
|
||||
|
||||
seeder = FuncSecuritySeeder(self.GetLastKnownPrices)
|
||||
self.SetSecurityInitializer(lambda security: seeder.SeedSecurity(security))
|
||||
seeder = FuncSecuritySeeder(self.get_last_known_prices)
|
||||
self.set_security_initializer(lambda security: seeder.seed_security(security))
|
||||
|
||||
def OnData(self,slice):
|
||||
if not self.Portfolio.Invested:
|
||||
for chain in slice.FutureChains:
|
||||
def on_data(self,slice):
|
||||
if not self.portfolio.invested:
|
||||
for chain in slice.future_chains:
|
||||
# Get contracts expiring no earlier than in 90 days
|
||||
contracts = list(filter(lambda x: x.Expiry > self.Time + timedelta(90), chain.Value))
|
||||
contracts = list(filter(lambda x: x.expiry > self.time + timedelta(90), chain.value))
|
||||
|
||||
# if there is any contract, trade the front contract
|
||||
if len(contracts) == 0: continue
|
||||
front = sorted(contracts, key = lambda x: x.Expiry, reverse=True)[0]
|
||||
front = sorted(contracts, key = lambda x: x.expiry, reverse=True)[0]
|
||||
|
||||
self.contractSymbol = front.Symbol
|
||||
self.MarketOrder(front.Symbol , 1)
|
||||
self.contract_symbol = front.symbol
|
||||
self.market_order(front.symbol , 1)
|
||||
else:
|
||||
self.Liquidate()
|
||||
self.liquidate()
|
||||
|
||||
def OnEndOfAlgorithm(self):
|
||||
def on_end_of_algorithm(self):
|
||||
# Get the margin requirements
|
||||
buyingPowerModel = self.Securities[self.contractSymbol].BuyingPowerModel
|
||||
name = type(buyingPowerModel).__name__
|
||||
buying_power_model = self.securities[self.contract_symbol].buying_power_model
|
||||
name = type(buying_power_model).__name__
|
||||
if name != 'FutureMarginModel':
|
||||
raise Exception(f"Invalid buying power model. Found: {name}. Expected: FutureMarginModel")
|
||||
|
||||
initialOvernight = buyingPowerModel.InitialOvernightMarginRequirement
|
||||
maintenanceOvernight = buyingPowerModel.MaintenanceOvernightMarginRequirement
|
||||
initialIntraday = buyingPowerModel.InitialIntradayMarginRequirement
|
||||
maintenanceIntraday = buyingPowerModel.MaintenanceIntradayMarginRequirement
|
||||
initial_overnight = buying_power_model.initial_overnight_margin_requirement
|
||||
maintenance_overnight = buying_power_model.maintenance_overnight_margin_requirement
|
||||
initial_intraday = buying_power_model.initial_intraday_margin_requirement
|
||||
maintenance_intraday = buying_power_model.maintenance_intraday_margin_requirement
|
||||
|
||||
def OnSecuritiesChanged(self, changes):
|
||||
for addedSecurity in changes.AddedSecurities:
|
||||
if addedSecurity.Symbol.SecurityType == SecurityType.Future and not addedSecurity.Symbol.IsCanonical() and not addedSecurity.HasData:
|
||||
raise Exception(f"Future contracts did not work up as expected: {addedSecurity.Symbol}")
|
||||
def on_securities_changed(self, changes):
|
||||
for added_security in changes.added_securities:
|
||||
if added_security.symbol.security_type == SecurityType.FUTURE and not added_security.symbol.is_canonical() and not added_security.has_data:
|
||||
raise Exception(f"Future contracts did not work up as expected: {added_security.symbol}")
|
||||
|
||||
Reference in New Issue
Block a user