private bool SetTickerMetadata(long tickerId, ITimeSeriesMetadata metadata, SqlConnection conn)
        {
            bool result = false;

            SqlCommand cmd = new SqlCommand();

            //first checking if TS exists
            string spName = "[SP_Set_Ticker_Metadata]";

            cmd.CommandText = schema + "." + spName;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection  = conn;

            var paramTickerSymbol = new SqlParameter("@IN_Ticker_Id", SqlDbType.Int, 0, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Current, tickerId);

            cmd.Parameters.Add(paramTickerSymbol);

            var paramTickerMeta = new SqlParameter("@IN_Ticker_Metadata", SqlDbType.Structured);

            paramTickerMeta.Value     = ConvertToTickerMetadata(metadata);
            paramTickerMeta.TypeName  = "TYPE_Ticker_Metadata";
            paramTickerMeta.Direction = ParameterDirection.Input;
            cmd.Parameters.Add(paramTickerMeta);

            cmd.ExecuteNonQuery();

            result = true;

            return(result);
        }
        private DataTable ConvertToTickerMetadata(ITimeSeriesMetadata data)
        {
            DataTable dtFilingData = DataAccessTypes.CreateTickerMetadataTable();

            foreach (var k in data.Values.Keys)
            {
                DataRow rowFilingData = dtFilingData.NewRow();

                rowFilingData["Key"]   = k;
                rowFilingData["Value"] = data.Values[k];

                dtFilingData.Rows.Add(rowFilingData);
            }

            return(dtFilingData);
        }
예제 #3
0
        public IQuotesSourceGetQuotesResult GetQuotes(IQuotesSourceGetQuotesParams getQuotesParams)
        {
            List <string> tickers = new List <string>(getQuotesParams.Tickers);

            // if no tickers were provided - importing al available
            if (tickers.Count == 0)
            {
                tickers.AddRange(_tickers.Keys);
            }

            DMFX.BLS.Api.BLSApi blsApi = new DMFX.BLS.Api.BLSApi();

            IQuotesSourceGetQuotesResult result = new BLSSourceGetQuotesResult();

            foreach (var t in tickers)
            {
                IQuotesSourceCanImportParams canImportParams = CreateCanImportParams();
                canImportParams.Tickers.Add(t);
                IQuotesSourceCanImportResult canImportRes = CanImport(canImportParams);
                if (canImportRes.Success)
                {
                    try
                    {
                        var response = blsApi.Download(_tickers[t].Bls_Code, getQuotesParams.PeriodStart, getQuotesParams.PeriodEnd);

                        IQuotesData qd = new BaseQuotesData();
                        qd.Country    = getQuotesParams.Country;
                        qd.Ticker     = _tickers[t].Ticker_Symbol;
                        qd.Name       = _tickers[t].Ticker_Name;
                        qd.TimeFrame  = GetTimeFrame(response.Timeframe);
                        qd.AgencyCode = s_agencyCode;
                        qd.Unit       = EUnit.Value;
                        qd.Type       = ETimeSeriesType.Indicator;

                        // adding value records
                        foreach (var q in response.Quotes)
                        {
                            ITimeSeriesRecord tsr = new CustomTimeseriesRecord(qd.Ticker, q.PeriodEnd, q.Value);
                            qd.AddRecord(tsr);
                        }

                        // adding metadata
                        if (_tickers[t].Metadata != null && _tickers[t].Metadata.Count > 0)
                        {
                            ITimeSeriesMetadata metadata = qd.CreateQuotesMetadata();
                            metadata.Values = _tickers[t].Metadata;
                            qd.Metadata     = metadata;
                        }

                        result.QuotesData.Add(qd);
                    }
                    catch (Exception ex)
                    {
                        result.Success = false;
                        result.AddError(EErrorCodes.QuotesSourceFail, EErrorType.Error, ex.Message);
                    }
                }
            }

            result.Success = result.QuotesData.Count > 0;
            if (result.Success && result.QuotesData.Count <= getQuotesParams.Tickers.Count)
            {
                result.AddError(EErrorCodes.QuotesNotFound, EErrorType.Warning, "Not all quotes were found");
            }
            else if (!result.Success)
            {
                result.AddError(EErrorCodes.QuotesNotFound, EErrorType.Error, "Requested tickers are not supported or quotes for them not found");
            }

            return(result);
        }