Exemple #1
0
        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);
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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));
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);