public static Instrument ContractDetailsToInstrument(ContractDetails contract) { var instrument = new Instrument { Symbol = contract.Summary.LocalSymbol, UnderlyingSymbol = contract.Summary.Symbol, Name = contract.LongName, OptionType = RightTypeToOptionType(contract.Summary.Right), Type = InstrumentTypeConverter(contract.Summary.SecurityType), Multiplier = contract.Summary.Multiplier == null ? 1 : int.Parse(contract.Summary.Multiplier), Expiration = string.IsNullOrEmpty(contract.Summary.Expiry) ? (DateTime?)null : DateTime.ParseExact(contract.Summary.Expiry, "yyyyMMdd", CultureInfo.InvariantCulture), Strike = (decimal)contract.Summary.Strike, Currency = contract.Summary.Currency, MinTick = (decimal)contract.MinTick, Industry = contract.Industry, Category = contract.Category, Subcategory = contract.Subcategory, IsContinuousFuture = false, ValidExchanges = contract.ValidExchanges }; if (!string.IsNullOrEmpty(contract.Summary.PrimaryExchange)) instrument.PrimaryExchange = new Exchange { Name = contract.Summary.PrimaryExchange }; return instrument; }
private IB.ContractDetails GetContractDetails(IB.Contract contract) { IB.ContractDetails details = null; var requestID = GetNextRequestID(); var manualResetEvent = new ManualResetEvent(false); // define our event handlers EventHandler <IB.ContractDetailsEventArgs> clientOnContractDetails = (sender, args) => { // ignore other requests if (args.RequestId != requestID) { return; } details = args.ContractDetails; _contractDetails.TryAdd(contract.Symbol, details); manualResetEvent.Set(); }; _client.ContractDetails += clientOnContractDetails; // make the request for data _client.RequestContractDetails(requestID, contract); // we'll wait a second, but it may not exist so just pass through manualResetEvent.WaitOne(1000); // be sure to remove our event handlers _client.ContractDetails -= clientOnContractDetails; return(details); }
/// <summary> /// Full Constructor /// </summary> /// <param name="requestId">The ticker ID of the request to which this row is responding.</param> /// <param name="rank">The ranking within the response of this bar.</param> /// <param name="contractDetails">This structure contains a full description of the contract that was executed.</param> /// <param name="distance">Meaning varies based on query.</param> /// <param name="benchmark">Meaning varies based on query.</param> /// <param name="projection">Meaning varies based on query.</param> /// <param name="legsStr">Describes combo legs when scan is returning EFP.</param> public ScannerDataEventArgs(int requestId, int rank, ContractDetails contractDetails, string distance, string benchmark, string projection, string legsStr) { this.requestId = requestId; this.legsStr = legsStr; this.projection = projection; this.benchmark = benchmark; this.distance = distance; this.contractDetails = contractDetails; this.rank = rank; }
/// <summary> /// Full Constructor /// </summary> /// <param name="requestId">Request Id</param> /// <param name="contractDetails">This structure contains a full description of the contract being looked up.</param> public ContractDetailsEventArgs(int requestId, ContractDetails contractDetails) { this.requestId = requestId; this.contractDetails = contractDetails; }
/// <summary> /// Full Constructor /// </summary> /// <param name="requestId">Request Id</param> /// <param name="contractDetails">This structure contains a full description of the bond contract being looked up.</param> public BondContractDetailsEventArgs(int requestId, ContractDetails contractDetails) { this.RequestId = requestId; this.ContractDetails = contractDetails; }