Esempio n. 1
0
        /// <summary>
        ///  Request Options chain for specific UNL, the request applies for several months ahead!
        /// </summary>
        /// <param name="optionToLoadParameters"></param>
        public async void RequestOptionChain(OptionToLoadParameters optionToLoadParameters)
        {
            Logger.Info($"{nameof(RequestOptionChain)} was called, loading {optionToLoadParameters}");

            //First: Load pivot option
            OptionContract optionContract = optionToLoadParameters.OptionContractPivotToLoad;

            var requestId  = GenerateRequestId();
            var ibContract = optionContract.ToIbContract();
            var task       = _handler.WaitForContractDetails(requestId);

            _clientSocket.reqContractDetails(requestId, ibContract);
            var contractDetailsList = await task;

            contractDetailsList.Where(c =>
                                      optionToLoadParameters.IsOptionWithinLoadBoundaries((OptionContract)c.Summary.ToContract())
                                      ).ForEach(RequestMarketData);
        }
Esempio n. 2
0
        public override bool HandleMessage(IMessage message)
        {
            bool result = base.HandleMessage(message);

            if ((RequestOptionChainDone == false) && (message.APIDataType == EapiDataTypes.SecurityData))
            {
                //Request detail contract only on the first time:
                if ((MainSecurityData != null) && !RequestOptionChainDone)
                {
                    RequestOptionChainDone  = true;
                    _optionToLoadParameters = new OptionToLoadParameters(MainSecurityData);
                    APIWrapper.RequestOptionChain(_optionToLoadParameters);
                }
            }
            if (result)
            {
                return(true);
            }
            //Handle only OptionData
            if (message.APIDataType != EapiDataTypes.OptionData)
            {
                return(false);
            }

            var optionData = (OptionData)message;

            if (Symbol == "AMZN")
            {
            }                        //for testing
            //if (Symbol == "AMZN")
            //{
            //    double vega = -1111;
            //    vega = optionData.Vega;
            //}
            if (OptionDataDic.ContainsKey(optionData.GetOptionKey()) == false)
            {
                OptionDataDic.Add(optionData.GetOptionKey(), optionData);
                Logger.InfoFormat(
                    $"OptionManager({Symbol}), add OptionData: {optionData}). OptionDataDic.Contains {OptionDataDic.Count} members.");
            }
            else
            {
                OptionDataDic[optionData.GetOptionKey()] = optionData;
            }


            if ((OptionDataDic.Count > _lastoptionCount) &&
                (OptionDataDic.Count == _optionToLoadParameters.RequestOptionMarketDataCount))
            {
                LogEvent();
            }
            Logger.Debug($"++++++ Option count = {OptionDataDic.Count} for {Symbol}");
            //switch (Symbol) //For test
            //{
            //    case "AAPL":
            //        break;
            //    case "AMZN":
            //        break;
            //    case "FB":
            //        break;
            //    case "MCD":
            //        break;
            //}
            return(true);
        }