public TimeSeriesDataOutput GetTimeSeriesData(TimeSeriesDataInput input, string datasource) { if (input == null || string.IsNullOrEmpty(input.Symbol)) { return(null); } TimeSeriesDataOutput output = null; try { if (string.IsNullOrEmpty(datasource)) { datasource = DATASOURCE_DEFAULT; } output = _dataGrabber[datasource.Trim().ToLower()].GetTimeSeriesData(input); } catch (Exception ex) { _Logger.Error(ex); throw ex; } return(output); }
public string GetTimeSeriesData(string symbol, string market, string frequency, string outputcount, string isadjustedvalue, string datasource) { try { TimeSeriesDataInput input = new TimeSeriesDataInput(); if (!string.IsNullOrEmpty(market)) { CryptoTimeSeriesDataInput inputCrypto = new CryptoTimeSeriesDataInput(); inputCrypto.Market = market; input = inputCrypto; } input.Symbol = symbol; input.Frequency = RestfulHelper.ConvertStringToBarFrequency(frequency); input.IsAdjustedValue = Convert.ToBoolean(isadjustedvalue); input.OutputCount = Convert.ToInt64(outputcount); TimeSeriesDataOutput output = new MarketDataService().GetTimeSeriesData(input, datasource); return(RestfulHelper.ConvertBarToCSV(output.Data)); } catch (Exception ex) { _Logger.Error(ex); throw ex; } }
public TimeSeriesDataOutput RetrieveStockTimeSeriesPrices(string symbol, BarFrequency period, bool isAjustedValue, long outputCount) { BasicHttpBinding binding = Utility.BuildBasicHttpBinding(); EndpointAddress endpoint = BuildMarketDataSkywolfHttpEndpointAddress(); using (SkywolfClient <IMarketDataService> skywolf = new SkywolfClient <IMarketDataService>(binding, endpoint)) { TimeSeriesDataInput input = new TimeSeriesDataInput(); input.Frequency = period; input.IsAdjustedValue = isAjustedValue; input.Symbol = symbol; input.OutputCount = outputCount; return(skywolf.Instance.GetTimeSeriesData(input, DATASOURCE)); } }
public override TimeSeriesDataOutput GetTimeSeriesData(TimeSeriesDataInput input) { if (input == null || string.IsNullOrEmpty(input.Symbol)) { return(null); } string timeSeriesData = GetTimeSeriesDataDirect(input); if (!string.IsNullOrEmpty(timeSeriesData)) { DataTable dtTimeSeries = TextUtility.ConvertCSVToTable(timeSeriesData, input.Symbol); return(ConvertDataToTimeSeriesDataOutput(input, dtTimeSeries)); } return(null); }
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); }
protected TimeSeriesDataOutput ConvertDataToTimeSeriesDataOutput(TimeSeriesDataInput input, DataTable dtTimeSeries) { if (input == null || string.IsNullOrEmpty(input.Symbol) || dtTimeSeries == null || dtTimeSeries.Rows.Count == 0) { return(null); } if (dtTimeSeries != null && dtTimeSeries.Columns.Count > 0) { foreach (DataColumn col in dtTimeSeries.Columns) { if (col.ColumnName.Trim().Contains(" ")) { col.ColumnName = col.ColumnName.Trim().Replace(" ", "_"); } } } TimeSeriesDataOutput result = null; if (input is CryptoTimeSeriesDataInput) { CryptoTimeSeriesDataInput cryptoInput = input as CryptoTimeSeriesDataInput; CryptoTimeSeriesDataOutput output = new CryptoTimeSeriesDataOutput(); output.Symbol = cryptoInput.Symbol; output.Market = cryptoInput.Market; output.TimeZone = "UTC"; List <CryptoBar> cryptoBars = new List <CryptoBar>(); List <string> fieldList = new List <string>(); foreach (DataColumn col in dtTimeSeries.Columns) { if (col.ColumnName.Contains(output.Market)) { fieldList.Add(col.ColumnName); } else if (AV_FIELD_LIST.Contains(col.ColumnName)) { fieldList.Add(col.ColumnName); } } foreach (DataRow row in dtTimeSeries.AsEnumerable()) { CryptoBar cryptoBar = new CryptoBar(); foreach (string field in fieldList) { if (field == AV_FIELD_TIMESTAMP) { cryptoBar.AsOfDate = Convert.ToDateTime(row[field]); } else if (field == AV_FIELD_VOLUME) { cryptoBar.Volume = row[field].ToDecimal(); } else if (field.StartsWith(AV_FIELD_MARKET_CAP)) { cryptoBar.MarketCap = row[field].ToDecimal(); } else if (field.StartsWith(AV_FIELD_OPEN)) { cryptoBar.Open = row[field].ToDouble(); } else if (field.StartsWith(AV_FIELD_HIGH)) { cryptoBar.High = row[field].ToDouble(); } else if (field.StartsWith(AV_FIELD_LOW)) { cryptoBar.Low = row[field].ToDouble(); } else if (field.StartsWith(AV_FIELD_CLOSE) || field.StartsWith(AV_FIELD_PRICE)) { cryptoBar.Close = row[field].ToDouble(); } } cryptoBars.Add(cryptoBar); } output.Data = cryptoBars.ToArray(); result = output; } else { TimeSeriesDataOutput output = new TimeSeriesDataOutput(); output.Symbol = input.Symbol; output.TimeZone = "US/Eastern"; List <StockBar> stockBars = new List <StockBar>(); List <string> fields = new List <string>(); foreach (string field in AV_FIELD_LIST) { if (dtTimeSeries.Columns.Contains(field)) { fields.Add(field); } } foreach (DataRow row in dtTimeSeries.AsEnumerable()) { StockBar bar = new StockBar(); foreach (string field in fields) { switch (field) { case AV_FIELD_TIMESTAMP: bar.AsOfDate = DateTime.Parse(row.Field <string>(field)); break; case AV_FIELD_OPEN: bar.Open = row[AV_FIELD_OPEN].ToDouble(); break; case AV_FIELD_HIGH: bar.High = row[AV_FIELD_HIGH].ToDouble(); break; case AV_FIELD_LOW: bar.Low = row[AV_FIELD_LOW].ToDouble(); break; case AV_FIELD_PRICE: case AV_FIELD_CLOSE: bar.Close = row[AV_FIELD_CLOSE].ToDouble(); break; case AV_FIELD_VOLUME: bar.Volume = row[AV_FIELD_VOLUME].ToDecimal(); break; case AV_FIELD_SPLIT_COEFFICIENT: bar.SplitCoefficient = row[AV_FIELD_SPLIT_COEFFICIENT].ToDouble(); break; case AV_FIELD_DIVIDEND_AMOUNT: bar.DividendAmount = row[AV_FIELD_DIVIDEND_AMOUNT].ToDouble(); break; case AV_FIELD_ADJUSTED_CLOSE: bar.AdjClose = row[AV_FIELD_ADJUSTED_CLOSE].ToDouble(); break; } } stockBars.Add(bar); } output.Data = stockBars.ToArray(); result = output; } return(result); }
public string GetTimeSeriesDataDirect(TimeSeriesDataInput input) { if (input == null || string.IsNullOrEmpty(input.Symbol)) { return(null); } string outputsize = "compact"; if (input.OutputCount < 0) { outputsize = "full"; } string output = string.Empty; if (input is CryptoTimeSeriesDataInput) { CryptoTimeSeriesDataInput cryptoInput = input as CryptoTimeSeriesDataInput; string market = "CNY"; if (cryptoInput.Market != "USD") { market = cryptoInput.Market; } switch (input.Frequency) { case BarFrequency.Minute5: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_CRYPTO_DIGITAL_CURRENCY_INTRADAY, key, cryptoInput.Symbol, market))); break; case BarFrequency.Day1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_CRYPTO_DIGITAL_CURRENCY_DAILY, key, cryptoInput.Symbol, market))); break; case BarFrequency.Week1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_CRYPTO_DIGITAL_CURRENCY_WEEKLY, key, cryptoInput.Symbol, market))); break; case BarFrequency.Month1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_CRYPTO_DIGITAL_CURRENCY_MONTHLY, key, cryptoInput.Symbol, market))); break; } } else { if (input.Frequency < BarFrequency.Day1) { switch (input.Frequency) { case BarFrequency.Minute1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_INTERVAL_FORMAT, key, input.Symbol, "1min", outputsize))); break; case BarFrequency.Minute5: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_INTERVAL_FORMAT, key, input.Symbol, "5min", outputsize))); break; case BarFrequency.Minute15: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_INTERVAL_FORMAT, key, input.Symbol, "15min", outputsize))); break; case BarFrequency.Minute30: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_INTERVAL_FORMAT, key, input.Symbol, "30min", outputsize))); break; case BarFrequency.Hour1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_INTERVAL_FORMAT, key, input.Symbol, "60min", outputsize))); break; } } else { if (input.IsAdjustedValue) { switch (input.Frequency) { case BarFrequency.Day1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_DAILY_ADJUSTED_FORMAT, key, input.Symbol, outputsize))); break; case BarFrequency.Week1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_WEEKLY_ADJUSTED_FORMAT, key, input.Symbol))); break; case BarFrequency.Month1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_MONTHLY_ADJUSTED_FORMAT, key, input.Symbol))); break; } } else { switch (input.Frequency) { case BarFrequency.Day1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_DAILY_FORMAT, key, input.Symbol, outputsize))); break; case BarFrequency.Week1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_WEEKLY_FORMAT, key, input.Symbol))); break; case BarFrequency.Month1: output = _keyManager.Call <string>(key => AVHttpGet(string.Format(AV_STOCK_TIME_SERIES_MONTHLY_FORMAT, key, input.Symbol))); break; } } } } return(output); }
public abstract TimeSeriesDataOutput GetTimeSeriesData(TimeSeriesDataInput input);