예제 #1
0
        /// <summary>
        /// Fetch candlestick data for an instrument.
        /// </summary>
        /// <param name="pairs">The instrument pair value</param>
        /// <param name="queryNVC"></param>
        /// <returns></returns>
        public async Task <CandlestickResponse> GetInstrumentCandles(
            InstrumentName instrument,
            DateTime from,
            DateTime to,
            CandlestickGranularity granularity = null,
            int count = 500,
            WeeklyAlignment weeklyAlignment = null,
            string price             = "M",
            bool smooth              = false,
            bool includeFirst        = true,
            int dailyAlignment       = 17,
            string alignmentTimezone = "America/New_York"
            )
        {
            #region QueryNVC
            NameValueCollection queryNVC = new NameValueCollection()
            {
                { "count", count.ToString() },
                { "price", price },
                { "smooth", smooth.ToString() },
                { "includeFirst", includeFirst.ToString() },
                { "dailyAlignment", dailyAlignment.ToString() },
                { "alignmentTimeZone", alignmentTimezone }
            };
            if (from != null)
            {
                queryNVC.Add("from", from.ToUniversalTime().ToString());
            }
            if (to != null)
            {
                queryNVC.Add("to", to.ToUniversalTime().ToString());
            }
            if (granularity != null)
            {
                queryNVC.Add("granularity", granularity.ToString());
            }
            if (weeklyAlignment != null)
            {
                queryNVC.Add("weeklyAlignment", weeklyAlignment.ToString());
            }
            #endregion

            string path  = string.Format("instruments/{0}/candles", instrument);
            string query = QueryFromNVC(queryNVC);

            using (HttpResponseMessage response = await RequestAsync(EHostAPIType.REST, HttpMethod.Get, path, query))
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new HttpRequestException(JObject.Parse(await response.Content.ReadAsStringAsync())["errorMessage"].ToString());
                }

                using (Stream stream = await response.Content.ReadAsStreamAsync())
                {
                    string jsonString = await new StreamReader(stream).ReadToEndAsync();
                    return(JsonConvert.DeserializeObject <CandlestickResponse>(jsonString, ErrorHandlingSetting));
                }
            }
        }
예제 #2
0
        public Task <CandlesResponse> GetCandles(
            CancellationToken cancellationToken,
            string instrument,
            DateTime from,
            DateTime?to,
            CandlestickGranularity granularity)
        {
            var apiUrl = $"{OandaUrls.Instruments}/{instrument}/candles";

            var queryParams = new Dictionary <string, string>();

            queryParams.Add("from", FormatDateTimeToQuery(from));

            if (to.HasValue)
            {
                queryParams.Add("to", FormatDateTimeToQuery(to.Value));
            }

            queryParams.Add("granularity", granularity.ToString());

            var queryString = string.Join("&", queryParams.Select(x => $"{x.Key}={x.Value}"));

            return(ApiClient.MakeGetRequestAsync <CandlesResponse>($"{apiUrl}?{queryString}", cancellationToken));
        }