/// <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); }
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); }