/* * 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. */ using System; using QuantConnect.Orders; using System.Collections.Generic; namespace QuantConnect.Securities.Option { /// /// Option strategy specification class. Describes option strategy and its parameters for trading. /// public class OptionStrategy { /// /// Option strategy name /// public string Name { get; set; } /// /// The canonical Option symbol of the strategy /// public Symbol CanonicalOption { get; set; } /// /// Underlying symbol of the strategy /// public Symbol Underlying { get; set; } /// /// Option strategy legs /// public List OptionLegs { get; set; } = new List(); /// /// Option strategy underlying legs (usually 0 or 1 legs) /// public List UnderlyingLegs { get; set; } = new List(); /// /// Defines common properties between and /// public abstract class LegData : Leg { /// /// Invokes the correct handler based on the runtime type. /// public abstract void Invoke(Action underlyingHandler, Action optionHandler); } /// /// This class is a POCO containing basic data for the option legs of the strategy /// public class OptionLegData : LegData { /// /// Option right (type) of the option leg /// public OptionRight Right { get; set; } /// /// Expiration date of the leg /// public DateTime Expiration { get; set; } /// /// Strike price of the leg /// public decimal Strike { get; set; } /// /// Creates a new instance of from the specified parameters /// public static OptionLegData Create(int quantity, Symbol symbol, decimal? orderPrice = null) { return new OptionLegData { Symbol = symbol, Quantity = quantity, Expiration = symbol.ID.Date, OrderPrice = orderPrice, Right = symbol.ID.OptionRight, Strike = symbol.ID.StrikePrice }; } /// /// Invokes the /// public override void Invoke(Action underlyingHandler, Action optionHandler) { optionHandler(this); } } /// /// This class is a POCO containing basic data for the underlying leg of the strategy /// public class UnderlyingLegData : LegData { /// /// Creates a new instance of for the specified of underlying shares. /// public static UnderlyingLegData Create(int quantity, Symbol symbol, decimal? orderPrice = null) { var data = Create(quantity, orderPrice); data.Symbol = symbol; return data; } /// /// Creates a new instance of for the specified of underlying shares. /// public static UnderlyingLegData Create(int quantity, decimal? orderPrice = null) { return new UnderlyingLegData { Quantity = quantity, OrderPrice = orderPrice }; } /// /// Invokes the /// public override void Invoke(Action underlyingHandler, Action optionHandler) { underlyingHandler(this); } } } }