Ценовой центр НРД – это автоматизированная система оценки справедливых цен облигаций и других финансовых инструментов, рассчитанных по Методике НРД
Справедливая стоимость 2000+ финансовых инструментов, рассчитанная по НОВОЙ методике НРД
{
"type": "array",
"items": {
"$ref": "#/definitions/Valuation"
},
"definitions": {
"Valuation": {
"type": "object",
"properties": {
"acc_int": {
"title": "НКД",
"description": "НКД на дату расчета",
"type": "number"
},
"currency_code": {
"title": "Код валюты",
"description": "Код валюты инструмента",
"type": "string"
},
"isin": {
"title": "ISIN",
"description": "Код ISIN",
"type": "string"
},
"issuer": {
"title": "Эмитент",
"description": "Общепринятое наименование эмитента",
"type": "string"
},
"method_number": {
"title": "Метод",
"description": "Номер метода расчета (1-3)",
"type": "integer"
},
"name": {
"title": "Инструмент",
"description": "Наименование инструмента",
"type": "string"
},
"nominal": {
"title": "Номинал",
"description": "Текущий номинал инструмента",
"type": "number"
},
"nsd_code": {
"title": "Код НРД",
"description": "Код НРД",
"type": "string"
},
"price": {
"title": "Цена в валюте",
"description": "Чистая цена в валюте номинала",
"type": "number"
},
"rate": {
"title": "Цена в %",
"description": "Чистая цена в процентах от номинала",
"type": "number"
},
"rate_lbound": {
"title": "Нижний порог цены",
"description": "Нижний порог цены в % от номинала",
"type": "number"
},
"rate_ubound": {
"title": "Верхний порог цены",
"description": "Верхний порог цены в % от номинала",
"type": "number"
},
"reg_number": {
"title": "Код регистрации",
"description": "Код регистрации инструмента",
"type": "string"
},
"type": {
"title": "Тип инструмента",
"description": "Тип инструмента, соответствует методике оценки",
"type": "string"
},
"val_date": {
"title": "Дата оценки",
"description": "Дата оценки",
"type": "string"
},
"version": {
"title": "Версия",
"description": "Технический номер версии методики",
"type": "integer"
},
"yield": {
"title": "Доходность",
"description": "Доходность к погашению или к опциону",
"type": "number"
}
}
}
}
}
URL
using System;
using System.Data;
using System.Net;
using System.Text;
using ClosedXML.Excel; // NuGet
using Newtonsoft.Json; // NuGet
using Newtonsoft.Json.Linq; // NuGet
namespace ApiGetValuationNew
{
internal class Program
{
private const string ApiUrl = "https://nsddata.ru/api/get/valuationnew";
private const string ApiKey = "APIKEY";
private const string Isin = "RU000A0JSQ58";
private const int Limit = 10;
private const string FileName = "out.xlsx";
private static void Main()
{
var dateTo = DateTime.Now;
var dateFrom = DateTime.Now.AddDays(-30);
var apiFilter = new JObject
{
["isin"] = Isin,
["val_date"] = new JObject
{
["$gte"] = dateFrom.ToString("yyyy-MM-dd"),
["$lte"] = dateTo.ToString("yyyy-MM-dd")
},
};
var requestUrl = ApiUrl
+ $"?filter={apiFilter.ToString(Formatting.None)}"
+ $"&limit={Limit}"
+ $"&apikey={ApiKey}";
var translatedColumns = new[]
{
"НКД на дату расчета",
"Код валюты инструмента",
"Код ISIN",
"Общепринятое название эмитента",
"Номер метода расчета (1-3)",
"Наименование инструмента",
"Текущий номинал инструмента",
"Код НРД",
"Чистая цена в валюте номинала",
"Чистая цена в процентах номинала",
"Нижний порог цены в % от номинала",
"Верхний порог цены в % от номинала",
"Код регистрации инструмента",
"Тип инструмента, соответствует методике оценки",
"Дата оценки",
"Технический номер версии методики",
"Доходность к погашению или опциону"
};
Console.WriteLine("Загрузка данных...");
var webClient = new WebClient() { Encoding = Encoding.UTF8 };
var json = webClient.DownloadString(requestUrl);
var dt = (DataTable)JsonConvert.DeserializeObject(json, typeof(DataTable));
Console.WriteLine("Формирование Excel...");
dt.Columns.Remove("_p");
dt.Columns.Remove("est_date");
for (int i = 0; i < dt.Columns.Count; i++)
dt.Columns[i].ColumnName = translatedColumns[i];
dt.Columns["Дата оценки"].SetOrdinal(0);
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Справедливая стоимость");
ws.FirstCell().InsertTable(dt).Theme = XLTableTheme.TableStyleDark1;
wb.SaveAs(FileName);
Console.WriteLine("Готово.");
}
}
}
import datetime as dt
import requests
import pandas as pd
import openpyxl
import json
API_URL = 'https://nsddata.ru/api/get/valuationnew'
API_KEY = 'APIKEY'
ISIN = 'RU000A0JSQ58'
LIMIT = 10
FILE_NAME = 'out.xlsx'
def main():
date_to = dt.date.today()
date_from = dt.date.today() - dt.timedelta(days=30)
api_filter = {
'isin': f'{ISIN}',
'val_date': {
'$gte': f"{date_from}",
'$lte': f"{date_to}"
}
}
params = {
'filter': f'{json.dumps(api_filter)}',
'limit': LIMIT,
'apikey': API_KEY
}
translated_columns = [
'НКД на дату расчета',
'Код валюты инструмента',
'Код ISIN',
'Общепринятое название эмитента',
'Номер метода расчета (1-3)',
'Наименование инструмента',
'Текущий номинал инструмента',
'Код НРД',
'Чистая цена в валюте номинала',
'Чистая цена в процентах номинала',
'Нижний порог цены в % от номинала',
'Верхний порог цены в % от номинала',
'Код регистрации инструмента',
'Тип инструмента, соответствует методике оценки',
'Дата оценки',
'Технический номер версии методики',
'Доходность к погашению или опциону'
]
r = requests.get(API_URL, params=params)
df = pd.DataFrame(r.json())
df.drop(['est_date', '_p'], axis=1, inplace=True)
for i in range(len(df.columns)):
df.rename(columns={
df.columns[i]: translated_columns[i]
}, inplace=True)
df.set_index(["Дата оценки"], inplace=True)
df.to_excel(FILE_NAME)
if __name__ == '__main__':
main()