Example #1
0
 private static void UpdateContract(OptionContract contract, Tick tick)
 {
     if (tick.TickType == TickType.Trade)
     {
         contract.LastPrice = tick.Price;
     }
     else if (tick.TickType == TickType.Quote)
     {
         if (tick.AskPrice != 0m)
         {
             contract.AskPrice = tick.AskPrice;
             contract.AskSize = tick.AskSize;
         }
         if (tick.BidPrice != 0m)
         {
             contract.BidPrice = tick.BidPrice;
             contract.BidSize = tick.BidSize;
         }
     }
 }
Example #2
0
        private static bool HandleOptionData(DateTime algorithmTime, BaseData baseData, OptionChains optionChains, Security security, Lazy<Slice> sliceFuture)
        {
            var symbol = baseData.Symbol;
            
            OptionChain chain;
            var canonical = Symbol.Create(symbol.ID.Symbol, SecurityType.Option, symbol.ID.Market);
            if (!optionChains.TryGetValue(canonical, out chain))
            {
                chain = new OptionChain(canonical, algorithmTime);
                optionChains[canonical] = chain;
            }

            var universeData = baseData as OptionChainUniverseDataCollection;
            if (universeData != null)
            {
                if (universeData.Underlying != null)
                {
                    chain.Underlying = universeData.Underlying;
                }
                foreach (var contractSymbol in universeData.FilteredContracts)
                {
                    chain.FilteredContracts.Add(contractSymbol);
                }
                return false;
            }

            OptionContract contract;
            if (!chain.Contracts.TryGetValue(baseData.Symbol, out contract))
            {
                var underlyingSymbol = Symbol.Create(baseData.Symbol.ID.Symbol, SecurityType.Equity, baseData.Symbol.ID.Market);
                contract = new OptionContract(baseData.Symbol, underlyingSymbol)
                {
                    Time = baseData.EndTime,
                    LastPrice = security.Close,
                    BidPrice = security.BidPrice,
                    BidSize = security.BidSize,
                    AskPrice = security.AskPrice,
                    AskSize = security.AskSize,
                    UnderlyingLastPrice = chain.Underlying != null ? chain.Underlying.Price : 0m
                };
                chain.Contracts[baseData.Symbol] = contract;
                var option = security as Option;
                if (option != null)
                {
                    contract.SetOptionPriceModel(() => option.PriceModel.Evaluate(option, sliceFuture.Value, contract));
                }
            }

            // populate ticks and tradebars dictionaries with no aux data
            switch (baseData.DataType)
            {
                case MarketDataType.Tick:
                    var tick = (Tick)baseData;
                    chain.Ticks.Add(tick.Symbol, tick);
                    UpdateContract(contract, tick);
                    break;

                case MarketDataType.TradeBar:
                    var tradeBar = (TradeBar)baseData;
                    chain.TradeBars[symbol] = tradeBar;
                    contract.LastPrice = tradeBar.Close;
                    break;

                case MarketDataType.QuoteBar:
                    var quote = (QuoteBar)baseData;
                    chain.QuoteBars[symbol] = quote;
                    UpdateContract(contract, quote);
                    break;

                case MarketDataType.Base:
                    chain.AddAuxData(baseData);
                    break;
            }
            return true;
        }
Example #3
0
 private static void UpdateContract(OptionContract contract, QuoteBar quote)
 {
     if (quote.Ask != null && quote.Ask.Close != 0m)
     {
         contract.AskPrice = quote.Ask.Close;
         contract.AskSize = quote.LastAskSize;
     }
     if (quote.Bid != null && quote.Bid.Close != 0m)
     {
         contract.BidPrice = quote.Bid.Close;
         contract.BidSize = quote.LastBidSize;
     }
 }
 /// <summary>
 /// Creates a new <see cref="OptionPriceModelResult"/> containing the current <see cref="Security.Price"/>
 /// and a default, empty instance of <see cref="FirstOrderGreeks"/>
 /// </summary>
 /// <param name="security">The option security object</param>
 /// <param name="slice">The current data slice. This can be used to access other information
 /// available to the algorithm</param>
 /// <param name="contract">The option contract to evaluate</param>
 /// <returns>An instance of <see cref="OptionPriceModelResult"/> containing the theoretical
 /// price of the specified option contract</returns>
 public OptionPriceModelResult Evaluate(Security security, Slice slice, OptionContract contract)
 {
     return new OptionPriceModelResult(security.Price, new FirstOrderGreeks());
 }