コード例 #1
0
        public TVCHistoryResponse GetHistoricalPrices(string symbol, BarFrequency frequency, DateTime from, DateTime to)
        {
            string             freq    = ConvertBarFrequencyToTVCResolution(frequency);
            string             result  = TVCHttpGet(string.Format(TVC_URL_HISTORY, symbol, freq, from.ToUnixDateTime(), to.ToUnixDateTime()));
            TVCHistoryResponse history = JsonConvert.DeserializeObject <TVCHistoryResponse>(result);

            return(history);
        }
コード例 #2
0
        public override TimeSeriesDataOutput GetTimeSeriesData(TimeSeriesDataInput input)
        {
            if (input == null || string.IsNullOrEmpty(input.Symbol))
            {
                return(null);
            }

            DateTime fromDate = new DateTime(1970, 1, 1);
            DateTime toDate   = DateTime.Now;

            if (input.OutputCount >= 0)
            {
                switch (input.Frequency)
                {
                case BarFrequency.Day1:
                    fromDate = toDate.AddDays(-input.OutputCount * 5);
                    break;

                case BarFrequency.Week1:
                    fromDate = toDate.AddDays(-input.OutputCount * 8);
                    break;

                case BarFrequency.Month1:
                    fromDate = toDate.AddDays(-input.OutputCount * 31);
                    break;

                case BarFrequency.Hour1:
                    fromDate = toDate.AddDays(-(input.OutputCount / 6.5) * 5);
                    break;

                case BarFrequency.Hour4:
                    fromDate = toDate.AddDays(-(input.OutputCount / (6.5 / 4) * 5));
                    break;

                case BarFrequency.Minute1:
                    fromDate = toDate.AddDays(-(input.OutputCount / 390 >= 1.0 ? input.OutputCount / 390 : 1) * 5);
                    break;

                case BarFrequency.Minute15:
                    fromDate = toDate.AddDays(-(input.OutputCount / (390 / 15) > 1.0 ? input.OutputCount / (390 / 15) : 1) * 5);
                    break;

                case BarFrequency.Minute30:
                    fromDate = toDate.AddDays(-(input.OutputCount / (390 / 30) > 1.0 ? input.OutputCount / (390 / 30) : 1) * 5);
                    break;

                case BarFrequency.Minute5:
                    fromDate = toDate.AddDays(-(input.OutputCount / (390 / 5) > 1.0 ? input.OutputCount / (390 / 5) : 1) * 5);
                    break;
                }
            }

            TVCHistoryResponse tvchistory = GetHistoricalPrices(input.Symbol, input.Frequency, fromDate, toDate);

            if (tvchistory != null && tvchistory.s == "ok")
            {
                TimeSeriesDataOutput output = new TimeSeriesDataOutput();
                output.Symbol   = input.Symbol;
                output.TimeZone = "UTC";
                List <StockBar> stockBars = new List <StockBar>();
                if (tvchistory.t != null && tvchistory.t.Length > 0)
                {
                    for (int i = 0; i < tvchistory.t.Length; i++)
                    {
                        StockBar bar = new StockBar();
                        bar.AsOfDate         = new DateTime(1970, 1, 1).AddSeconds(tvchistory.t[i]);
                        bar.Close            = tvchistory.c[i];
                        bar.High             = tvchistory.h[i];
                        bar.Low              = tvchistory.l[i];
                        bar.Open             = tvchistory.o[i];
                        bar.SplitCoefficient = 1.0;
                        bar.Volume           = Convert.ToDecimal(tvchistory.v[i]);
                        bar.TS = DateTime.UtcNow;
                        stockBars.Add(bar);
                    }
                }

                if (stockBars.Count > 0)
                {
                    if (input.OutputCount >= 0 && stockBars.Count > input.OutputCount)
                    {
                        output.Data = stockBars.Skip(stockBars.Count - (int)input.OutputCount).ToArray();
                    }
                    else
                    {
                        output.Data = stockBars.ToArray();
                    }
                }

                return(output);
            }

            return(null);
        }