Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
# QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. # Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Algorithm.Framework") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Orders import * from QuantConnect.Algorithm import * from QuantConnect.Algorithm.Framework import * from QuantConnect.Algorithm.Framework.Alphas import * from QuantConnect.Algorithm.Framework.Portfolio import * from QuantConnect.Algorithm.Framework.Selection import * from Alphas.ConstantAlphaModel import ConstantAlphaModel from Selection.OptionUniverseSelectionModel import OptionUniverseSelectionModel from Execution.ImmediateExecutionModel import ImmediateExecutionModel from Risk.NullRiskManagementModel import NullRiskManagementModel from datetime import date, timedelta ### <summary> ### Basic template options framework algorithm uses framework components ### to define an algorithm that trades options. ### </summary> class BasicTemplateOptionsFrameworkAlgorithm(QCAlgorithm): def Initialize(self): self.UniverseSettings.Resolution = Resolution.Minute self.SetStartDate(2019, 1, 1) self.SetEndDate(2019, 1, 31) self.SetCash(100000) # set framework models self.SetUniverseSelection(EarliestExpiringWeeklyAtTheMoneyPutOptionUniverseSelectionModel(self.SelectOptionChainSymbols)) self.SetAlpha(LogAlphaModel()) self.SetPortfolioConstruction(SingleSharePortfolioConstructionModel()) self.SetExecution(ImmediateExecutionModel()) self.SetRiskManagement(NullRiskManagementModel()) def SelectOptionChainSymbols(self, utcTime): return [ Symbol.Create("SPY", SecurityType.Option, Market.USA) ] class EarliestExpiringWeeklyAtTheMoneyPutOptionUniverseSelectionModel(OptionUniverseSelectionModel): '''Creates option chain universes that select only the earliest expiry ATM weekly put contract and runs a user defined optionChainSymbolSelector every day to enable choosing different option chains''' def __init__(self, select_option_chain_symbols): super().__init__(timedelta(1), select_option_chain_symbols) def Filter(self, filter): '''Defines the option chain universe filter''' return (filter.Strikes(-1, +1) .Expiration(timedelta(0), timedelta(30)) .PutsOnly() .OnlyApplyFilterAtMarketOpen()) class LogAlphaModel(AlphaModel): def __init__(self): self.Name = '{}'.format(self.__class__.__name__) def Update(self, algorithm, data): return [] def OnSecuritiesChanged(self, algorithm, changes): '''Event fired each time the we add/remove securities from the data feed Args: algorithm: The algorithm instance that experienced the change in securities changes: The security additions and removals from the algorithm''' for added in changes.AddedSecurities: if added.Symbol.SecurityType == SecurityType.Option: algorithm.Debug("Added:{}, Underlying:{}, Strike:{}, Type: {}, Date:{}".format( added.Symbol, added.Symbol.ID.Underlying, added.Symbol.ID.StrikePrice, added.Symbol.ID.OptionRight, added.Symbol.ID.Date)) for removed in changes.RemovedSecurities: if removed.Symbol.SecurityType == SecurityType.Option: algorithm.Debug("Removed:{}, Underlying:{}, Strike:{}, Type: {}, Date:{}".format( removed.Symbol, removed.Symbol.ID.Underlying, removed.Symbol.ID.StrikePrice, removed.Symbol.ID.OptionRight, removed.Symbol.ID.Date)) class SingleSharePortfolioConstructionModel(PortfolioConstructionModel): '''Portfolio construction model that sets target quantities to 1 for up insights and -1 for down insights''' def CreateTargets(self, algorithm, insights): targets = [] for insight in insights: targets.append(PortfolioTarget(insight.Symbol, insight.Direction)) return targets