Beispiel #1
0
        /// <summary>
        /// Get option chain for an optionable Symbol
        /// https://developer.tdameritrade.com/option-chains/apis/get/marketdata/chains
        /// </summary>
        public async Task <string> GetOptionsChainJson(TDOptionChainRequest request)
        {
            if (!HasConsumerKey)
            {
                throw new Exception("Consumer key is required");
            }

            NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(string.Empty);

            if (!IsSignedIn)
            {
                queryString.Add("apikey", AuthResult.consumer_key);
            }
            queryString.Add("symbol", request.symbol);
            queryString.Add("contractType", request.contractType.ToString());
            queryString.Add("strikeCount", request.strikeCount.ToString());
            queryString.Add("includeQuotes", request.includeQuotes ? "FALSE" : "TRUE");
            queryString.Add("strategy", request.strategy.ToString());
            queryString.Add("interval", request.interval.ToString());
            if (request.strike.HasValue)
            {
                queryString.Add("strike", request.strike.Value.ToString());
            }
            queryString.Add("fromDate", request.fromDate.ToString("yyyy-MM-dd"));
            queryString.Add("toDate", request.toDate.ToString("yyyy-MM-dd"));
            queryString.Add("expMonth", request.expMonth);
            queryString.Add("optionType", request.optionType.ToString());

            if (request.strategy == TDOptionChainStrategy.ANALYTICAL)
            {
                queryString.Add("volatility", request.volatility.ToString());
                queryString.Add("underlyingPrice", request.underlyingPrice.ToString());
                queryString.Add("interestRate", request.interestRate.ToString());
                queryString.Add("daysToExpiration", request.daysToExpiration.ToString());
            }

            var q = queryString.ToString();

            var path = $"https://api.tdameritrade.com/v1/marketdata/chains{q}";

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AuthResult.access_token);
                var res = await client.GetAsync(path);

                switch (res.StatusCode)
                {
                case HttpStatusCode.OK:
                    return(await res.Content.ReadAsStringAsync());

                default:
                    Console.WriteLine("Error: " + res.ReasonPhrase);
                    return(null);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Get option chain for an optionable Symbol
        /// https://developer.tdameritrade.com/option-chains/apis/get/marketdata/chains
        /// </summary>
        public async Task <OptionChain> GetOptionsChain(TDOptionChainRequest request)
        {
            var json = await GetOptionsChainJson(request);

            if (!string.IsNullOrEmpty(json))
            {
                return(JsonSerializer.Deserialize <OptionChain>(json));
            }
            return(null);
        }
        /// <summary>
        /// Get option chain for an optionable Symbol
        /// https://developer.tdameritrade.com/option-chains/apis/get/marketdata/chains
        /// </summary>
        public async Task <TDOptionChain> GetOptionsChain(TDOptionChainRequest request)
        {
            var json = await GetOptionsChainJson(request);

            if (!IsNullOrEmpty(json))
            {
                return(JsonConvert.DeserializeObject <TDOptionChain>(json, new TDOptionChainConverter()));
            }
            return(null);
        }