Ценовой центр НРД

Ценовой центр НРД – это автоматизированная система оценки справедливых цен облигаций и других финансовых инструментов, рассчитанных по Методике НРД

Итоги торгов через API

Агрегированная информация об итогах торгов ценными бумагами с зарубежных торговых площадок

Скачать описание Список торговых площадок

-
Скачать

{
	"title": "JSON-схема Итоги торгов",
	"description": "JSON-схема для продукта Итоги торгов",
	"type": "array",
	"items": {
		"anyOf":[
			"bonds": {
				"type": "object",
				"title": "Информация по облигациям",
				"description": "Основная информация по облигациям",
				"properties": {
					"isin": {
						"type": "string",
						"title": "ISIN",
						"description": "Код ISIN"
					},
					"name": {
						"type": "string",
						"title": "Наименование облигации",
						"description": "Наименование облигации"
					},
					"currency": {
						"type": "string",
						"title": "Код валюты",
						"description": "Валюта номинала"
					},
					"maturity": {
						"type": "string",
						"title": "Дата погашения",
						"description": "Дата погашения облигации"
					},
					"coupon": {
						"type": "number",
						"title": "Купон (в % годовых)",
						"description": "Купон (в % годовых)"
					},
					"security_type": {
						"type": "string",
						"title": "Тип купона",
						"description": "Тип купона"
					},
					"security_category": {
						"type": "string",
						"title": "Категория ценной бумаги",
						"description": "Категория ценной бумаги"
					},
					"last_trade_date": {
						"type": "string",
						"title": "Последняя доступная торговая дата",
						"description": "Последняя доступная торговая дата"
					},
					"ytm": {
						"type": "number",
						"title": "Доходность до погашения",
						"description": "Доходность до погашения"
					},
					"price_bid": {
						"type": "number",
						"title": "Цена bid",
						"description": "Цена bid"
					},
					"price_ask": {
						"type": "number",
						"title": "Цена ask",
						"description": "Цена ask"
					},
					"duration": {
						"type": "number",
						"title": "Дюрация",
						"description": "Дюрация"
					},
					"price_open": {
						"type": "number",
						"title": "Цена открытия",
						"description": "Цена открытия для торгового дня"
					},
					"price_high": {
						"type": "number",
						"title": "Максимальная цена",
						"description": "Максимальная цена для торгового дня"
					},
					"price_low": {
						"type": "number",
						"title": "Минимальная цена",
						"description": "Минимальная цена для торгового дня"
					},
					"price_close": {
						"type": "number",
						"title": "Цена закрытия",
						"description": "Цена закрытия для торгового дня"
					},
					"mic": {
						"type": "string",
						"title": "Код биржи",
						"description": "Идентификационный код биржи-провайдера ценовой информации"
					},
					"sic_name": {
						"type": "string",
						"title": "Классификация SIC",
						"description": "Стандартная отраслевая классификация (наименование)"
					},
					"issuer_name": {
						"type": "string",
						"title": "Эмитент",
						"description": "Эмитент"
					}
				},
				"required": [
					"isin",
					"name",
					"currency",
					"maturity",
					"coupon",
					"security_type",
					"security_category",
					"last_trade_date",
					"ytm",
					"price_bid",
					"price_ask",
					"duration",
					"price_open",
					"price_high",
					"price_low",
					"price_close",
					"mic",
					"sic_name",
					"issuer_name"
				]
			},
			"stocks": {
				"type": ["object", "null"],
				"title": "Информация по акциям",
				"description": "Ценовая информация по всем типам бумаг, кроме облигаций",
				"properties": {
					"isin": {
						"type": "string",
						"title": "ISIN",
						"description": "Код ISIN"
					},
					"security_type": {
						"type": "string",
						"title": "Тип ценной бумаги",
						"description": "Тип ценной бумаги"
					},
					"security_category": {
						"type": "string",
						"title": "Категория ценной бумаги",
						"description": "Категория ценной бумаги"
					},
					"last_trade_date": {
						"type": "string",
						"title": "Последняя доступная торговая дата",
						"description": "Последняя доступная торговая дата"
					},
					"price_open": {
						"type": "number",
						"title": "Цена открытия",
						"description": "Цена открытия для торгового дня"
					},
					"price_high": {
						"type": "number",
						"title": "Максимальная цена",
						"description": "Максимальная цена для торгового дня"
					},
					"price_low": {
						"type": "number",
						"title": "Минимальная цена",
						"description": "Минимальная цена для торгового дня"
					},
					"price_close": {
						"type": "number",
						"title": "Цена закрытия",
						"description": "Цена закрытия для торгового дня"
					},
					"volume_trade": {
						"type": "integer",
						"title": "Объем",
						"description": "Объем торгов ценной бумагой за день"
					},
					"price_bid": {
						"type": "number",
						"title": "Цена bid",
						"description": "Цена bid"
					},
					"price_ask": {
						"type": "number",
						"title": "Цена ask",
						"description": "Цена ask"
					},
					"currency": {
						"type": "string",
						"title": "Код валюты",
						"description": "Валюта номинала"
					},
					"mic": {
						"type": "string",
						"title": "Код биржи",
						"description": "Идентификационный код биржи-провайдера ценовой информации"
					},
					"exchange_name": {
						"type": "string",
						"title": "Наименование биржи",
						"description": "Наименование биржи-провайдера ценовой информации"
					},
					"primary_exchange_mic": {
						"type": "string",
						"title": "Код первичной биржи",
						"description": "Идентификационный код первичной биржи"
					},
					"primary_exchange_name": {
						"type": "string",
						"title": "Наименование первичной биржи",
						"description": "Наименование первичной биржи"
					},
					"sic_name": {
						"type": "string",
						"title": "Классификация SIC",
						"description": "Стандартная отраслевая классификация (наименование)"
					},
					"gics_name": {
						"type": "string",
						"title": "Классификация GICS",
						"description": "Глобальный стандарт отраслевой классификации (наименование)"
					},
					"lei": {
						"type": "string",
						"title": "Идентификатор юридического лица",
						"description": "Идентификатор юридического лица"
					},
					"issuer_name": {
						"type": "string",
						"title": "Эмитент",
						"description": "Эмитент"
					}
				},
				"required": [
					"isin",
					"security_type",
					"security_category",
					"last_trade_date",
					"price_open",
					"price_high",
					"price_low",
					"price_close",
					"volume_trade",
					"price_bid",
					"price_ask",
					"currency",
					"mic",
					"exchange_name",
					"primary_exchange_mic",
					"primary_exchange_name",
					"sic_name",
					"gics_name",
					"lei",
					"issuer_name"
				]
			}
		]
	}
}

URL


            
using System;
using System.Data;
using ClosedXML.Excel; // NuGet
using Newtonsoft.Json; // NuGet
using Newtonsoft.Json.Linq; // NuGet
using System.Collections.Generic;
using System.Net.Http;

namespace EODCSHARP
{
    public class Program
    {
        private const string ApiUrl = "https://nsddata.ru/api/get/eod";
        private const string ApiKey = "";
        private const int Limit = 100;
        private const string FileName = "eod.xlsx";

        public static void Main(string[] args)
        {
            var isins = new List()
            {
                "LU1834988278",
                "US29664W1053",
                "XS2432286974"
            };
            var dateFrom = DateTime.Now.AddDays(-30);
            var dateTo = DateTime.Now;

            var dt = GetEodDt(isins, dateFrom, dateTo);

            var dv = dt.DefaultView;
            dv.Sort = "Isin ASC, LastTradeDate DESC";
            dt = dv.ToTable();

            dt = RenameDtColumns(dt);

            var excelWorkBook = FormExcel(dt);

            excelWorkBook.SaveAs(FileName);
        }

        private static DataTable GetEodDt(List isins, DateTime dateFrom, DateTime dateTo)
        {
            var dtEod = new DataTable();

            foreach (var isin in isins)
            {
                var dtIsin = GetRequestResultForIsin(isin, dateFrom, dateTo);
                dtEod.Merge(dtIsin);
            }

            return dtEod;
        }

        private static DataTable GetRequestResultForIsin(string isin, DateTime dateFrom, DateTime dateTo)
        {
            var dateFormat = "yyyy-MM-dd";

            var apiFilter = new JObject
            {
                ["$and"] = new JArray
                {
                    new JObject
                    {
                        ["isin"] = isin
                    },
                    new JObject
                    {
                        ["last_trade_date"] = new JObject
                        {
                            ["$gte"] = dateFrom.ToString(dateFormat),
                            ["$lte"] = dateTo.ToString(dateFormat)
                        }
                    }
                }
            };

            var requestUrl = ApiUrl
                            + $"?filter={apiFilter.ToString(Formatting.None)}"
                            + $"&limit={Limit}"
                            + $"&apikey={ApiKey}";

            var httpClient = new HttpClient();
            var jsonString = httpClient.GetStringAsync(requestUrl).GetAwaiter().GetResult();

            var paperType = JArray.Parse(jsonString)[0]["security_category"].ToString();

            if (paperType == "акции")
            {
                var stocks = JsonConvert.DeserializeObject>(jsonString);
                return ListToDataTable(stocks);
            }
            else
            {
                var bonds = JsonConvert.DeserializeObject>(jsonString);
                return ListToDataTable(bonds);
            }
        }

        public static DataTable ListToDataTable(List items)
        {
            var dataTable = new DataTable();

            var properties = typeof(T).GetProperties();

            foreach (var property in properties)
                dataTable.Columns.Add(property.Name, property.PropertyType);

            foreach (var item in items)
            {
                var values = new object[properties.Length];

                for (int i = 0; i < properties.Length; i++)
                    values[i] = properties[i].GetValue(item, null);

                dataTable.Rows.Add(values);
            }

            return dataTable;
        }

        private static DataTable RenameDtColumns(DataTable dt)
        {
            var columnNamesDict = new Dictionary()
            {
                ["Isin"] = "Код ISIN",
                ["Name"] = "Наименование облигации",
                ["IssuerName"] = "Наименование эмитента",
                ["Currency"] = "Код валюты",
                ["Maturity"] = "Дата погашения",
                ["Coupon"] = "Купон (в % годовых)",
                ["SecurityType"] = "Тип инструмента",
                ["SecurityCategory"] = "Категория ценной бумаги",
                ["LastTradeDate"] = "Последняя доступная торговая дата",
                ["Ytm"] = "Доходность до погашения",
                ["PriceBid"] = "Цена bid",
                ["PriceAsk"] = "Цена ask",
                ["Duration"] = "Дюрация",
                ["PriceOpen"] = "Цена открытия",
                ["PriceHigh"] = "Максимальная цена",
                ["PriceLow"] = "Минимальная цена",
                ["PriceClose"] = "Цена закрытия",
                ["Mic"] = "Код биржи",
                ["SicName"] = "Классификация SIC",
                ["VolumeTrade"] = "Объем",
                ["ExchangeName"] = "Наименование биржи",
                ["PrimaryExchangeMic"] = "Код первичной биржи",
                ["PrimaryExchangeName"] = "Наименование первичной биржи",
                ["GicsName"] = "Классификация GICS",
                ["Lei"] = "Идентификатор юридического лица",
            };

            foreach (DataColumn column in dt.Columns)
            {
                if (!columnNamesDict.TryGetValue(column.ColumnName, out var translatedColumnName))
                    throw new Exception($"Неизвестный столбец, {column.ColumnName}");

                column.ColumnName = translatedColumnName;
            }

            return dt;
        }

        private static XLWorkbook FormExcel(DataTable dt)
        {
            var workBook = new XLWorkbook();

            var workSheet = workBook.Worksheets.Add("Eod");
            workSheet.FirstCell().InsertTable(dt);

            return workBook;
        }
    }

    public class Bond
    {
        [JsonProperty("isin")]
        public string Isin { get; set; }
        [JsonProperty("name")]
        public string Name { get; set; }
        [JsonProperty("security_category")]
        public string SecurityCategory { get; set; }
        [JsonProperty("security_type")]
        public string SecurityType { get; set; }
        [JsonProperty("currency")]
        public string Currency { get; set; }
        [JsonProperty("last_trade_date")]
        public DateTime LastTradeDate { get; set; }
        [JsonProperty("price_open")]
        public double PriceOpen { get; set; }
        [JsonProperty("price_high")]
        public double PriceHigh { get; set; }
        [JsonProperty("price_low")]
        public double PriceLow { get; set; }
        [JsonProperty("price_close")]
        public double PriceClose { get; set; }
        [JsonProperty("price_ask")]
        public double PriceAsk { get; set; }
        [JsonProperty("price_bid")]
        public double PriceBid { get; set; }
        [JsonProperty("mic")]
        public string Mic { get; set; }
        [JsonProperty("maturity")]
        public DateTime Maturity { get; set; }
        [JsonProperty("coupon")]
        public double Coupon { get; set; }
        [JsonProperty("sic_name")]
        public string SicName { get; set; }
        [JsonProperty("ytm")]
        public double Ytm { get; set; }
        [JsonProperty("duration")]
        public double Duration { get; set; }
        [JsonProperty("issuer_name")]
        public string IssuerName { get; set; }
    }
    public class Stock
    {
        [JsonProperty("isin")]
        public string Isin { get; set; }
        [JsonProperty("security_category")]
        public string SecurityCategory { get; set; }
        [JsonProperty("security_type")]
        public string SecurityType { get; set; }
        [JsonProperty("Currency")]
        public string Currency { get; set; }
        [JsonProperty("Mic")]
        public string Mic { get; set; }
        [JsonProperty("last_trade_date")]
        public DateTime LastTradeDate { get; set; }
        [JsonProperty("price_open")]
        public double PriceOpen { get; set; }
        [JsonProperty("price_high")]
        public double PriceHigh { get; set; }
        [JsonProperty("price_low")]
        public double PriceLow { get; set; }
        [JsonProperty("price_close")]
        public double PriceClose { get; set; }
        [JsonProperty("volume_trade")]
        public int VolumeTrade { get; set; }
        [JsonProperty("price_bid")]
        public double PriceBid { get; set; }
        [JsonProperty("price_ask")]
        public double PriceAsk { get; set; }
        [JsonProperty("sic_name")]
        public string SicName { get; set; }
        [JsonProperty("exchange_name")]
        public string ExchangeName { get; set; }
        [JsonProperty("primary_exchange_mic")]
        public string PrimaryExchangeMic { get; set; }
        [JsonProperty("primary_exchange_name")]
        public string PrimaryExchangeName { get; set; }
        [JsonProperty("gics_name")]
        public string GicsName { get; set; }
        [JsonProperty("lei")]
        public string Lei { get; set; }
        [JsonProperty("issuer_name")]
        public string IssuerName { get; set; }
    }
}
            
        
            
import requests
import json
from datetime import date, timedelta
import pandas as pd
import openpyxl

REQUEST_URL = 'https://nsddata.ru/api/get/eod'
API_KEY = ''
LIMIT = 100
FILE_NAME = 'eod.xlsx'


def main():
    isins = [
        'LU1834988278',
        'US29664W1053',
        'XS2432286974'
    ]
    date_to = date.today()
    date_from = date_to - timedelta(days=30)

    df = get_eod_df(date_from, date_to, isins)
    df = df.sort_values(by=['isin', 'last_trade_date'], ascending=[True, False])
    df = rename_df_columns(df)
    df.to_excel(FILE_NAME, index=False)


def get_eod_df(date_from, date_to, isins):
    df_eod = pd.DataFrame()
    for isin in isins:
        df_isin = get_request_result_for_isin(isin, date_from, date_to)
        df_eod = pd.concat([df_eod, df_isin])
    return df_eod


def get_request_result_for_isin(isin, date_from, date_to):
    api_filter = {
        '$and': [
            {
                'isin': isin
            },
            {
                'last_trade_date':
                    {
                        '$gte': f'{date_from}',
                        '$lte': f'{date_to}'
                    }
            }
        ]
    }

    params = {
        'filter': f'{json.dumps(api_filter)}',
        'limit': LIMIT,
        'apikey': API_KEY,
    }

    r = requests.get(REQUEST_URL, params=params)
    df_response = pd.DataFrame(r.json())
    return df_response


def rename_df_columns(df):
    column_names_dict = {
        'isin': 'Код ISIN',
        'name': 'Наименование облигации',
        'issuer_name': 'Наименование эмитента',
        'currency': 'Код валюты',
        'maturity': 'Дата погашения',
        'coupon': 'Купон (в % годовых)',
        'security_type': 'Тип инструмента',
        'security_category': 'Категория ценной бумаги',
        'last_trade_date': 'Последняя доступная торговая дата',
        'ytm': 'Доходность до погашения',
        'price_bid': 'Цена bid',
        'price_ask': 'Цена ask',
        'duration': 'Дюрация',
        'price_open': 'Цена открытия',
        'price_high': 'Максимальная цена',
        'price_low': 'Минимальная цена',
        'price_close': 'Цена закрытия',
        'mic': 'Код биржи',
        'sic_name': 'Классификация SIC',
        'volume_trade': 'Объем',
        'exchange_name': 'Наименование биржи',
        'primary_exchange_mic': 'Код первичной биржи',
        'primary_exchange_name': 'Наименование первичной биржи',
        'gics_name': 'Классификация GICS',
        'lei': 'Идентификатор юридического лица'
    }
    return df.rename(columns=column_names_dict)


if __name__ == '__main__':
    main()