- Добавлен yfinance в requirements.txt - Расширен .gitignore для исключения служебных файлов Python - Исправлен импорт в currency.py для корректной работы с модулями
2270 lines
103 KiB
Plaintext
2270 lines
103 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from classes.exchange import ForexDataHandler\n",
|
||
"\n",
|
||
"forex_handler = ForexDataHandler()\n",
|
||
"currency_pairs = [\n",
|
||
" ('CNY', 'RUB'), # Китайский юань\n",
|
||
" ('USD', 'RUB'), # Доллар США\n",
|
||
" ('EUR', 'RUB'), # Евро\n",
|
||
" ('GBP', 'RUB'), # Фунт стерлингов\n",
|
||
" ('JPY', 'RUB'), # Японская йена\n",
|
||
" ('KZT', 'RUB'), # Казахстанский тенге\n",
|
||
" ('UAH', 'RUB'), # Украинская гривна\n",
|
||
" ('BYN', 'RUB'), # Белорусский рубль\n",
|
||
"]\n",
|
||
"\n",
|
||
"try:\n",
|
||
" print(\"\\nТекущие курсы валют:\")\n",
|
||
" for base_currency, quote_currency in currency_pairs:\n",
|
||
" try:\n",
|
||
" rate = forex_handler.get_forex_rate(base_currency, quote_currency)\n",
|
||
" print(f\"\\nКурс {base_currency}/{quote_currency}:\")\n",
|
||
" print(f\"Текущий: {rate['close']:.4f}\") \n",
|
||
" print(f\"Дата: {rate['timestamp']}\")\n",
|
||
" except Exception as pair_error:\n",
|
||
" print(f\"Ошибка при получении курса {base_currency}/{quote_currency}: {pair_error}\")\n",
|
||
" \n",
|
||
"except Exception as e:\n",
|
||
" print(f\"Произошла ошибка: {e}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from classes.moex_class import RussianMarketData\n",
|
||
"\n",
|
||
"market_data = RussianMarketData()\n",
|
||
"\n",
|
||
"# Получение исторических данных для сектора нефти и газа\n",
|
||
"oil_gas_index = market_data.get_historical_data('oil_gas')\n",
|
||
"print(\"\\nИндекс нефти и газа Мосбиржи:\")\n",
|
||
"print(oil_gas_index.head())\n",
|
||
"print(f\"\\nВсего записей: {len(oil_gas_index)}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Список индексов Мосбиржи:\n",
|
||
"2xEQT: iNAV 2xEQT\n",
|
||
"2xOFZ: iNAV 2xOFZ\n",
|
||
"AKAIA: iNAV Альфа Антиинфляционный\n",
|
||
"AKCBI: iАльфа-Капитал Облигации\n",
|
||
"AKCHA: iNAV Альфа Китайские акции\n",
|
||
"AKEBA: iNAV Альфа Управляемые евробонды\n",
|
||
"AKEUA: iNAV Альфа-Капитал ЕВРОПА 600\n",
|
||
"AKEUBI: AKEUBI\n",
|
||
"AKFBA: iNAV Альфа Облигации ПК\n",
|
||
"AKGDA: iNAV Альфа Золото\n",
|
||
"AKHTA: iNAV Альфа ИТ Лидеры\n",
|
||
"AKIEA: iNAV Альфа Акции с выпл. дохода\n",
|
||
"AKMBA: iNAV Альфа Управляемые облигации\n",
|
||
"AKMDA: iNAV Альфа Медицина\n",
|
||
"AKMEI: iNAV Альфа Управляемые акции\n",
|
||
"AKMMA: iNAV Альфа Денежный рынок\n",
|
||
"AKNXA: iNAV Технологии 100\n",
|
||
"AKQUA: iNAV Альфа Квант\n",
|
||
"AKQUB: iNAV Альфа Квант\n",
|
||
"AKREI: Альфа Капитал Российские Акции\n",
|
||
"AKREPI: Альфа Капитал РосАкции Ценовой\n",
|
||
"AKSCA: iNAV Альфа Космос\n",
|
||
"AKSCB: iNAV Альфа Космос\n",
|
||
"AKSFA: iNAV Альфа Стратегия Будущего\n",
|
||
"AKSFPI: AKSFPI\n",
|
||
"AKSPA: iNAV Альфа - Капитал Эс энд Пи 500\n",
|
||
"AKSPRU: Индекс Альфа Капитал Космос\n",
|
||
"AKSPSP: Индекс Альфа Капитал Космос\n",
|
||
"AKUPA: iNAV Альфа Умный портфель\n",
|
||
"AKVGA: iNAV Альфа Видеоигры\n",
|
||
"AKVGB: iNAV Альфа Видеоигры\n",
|
||
"AKVGRU: Альфа-Капитал Видеоигры\n",
|
||
"AKVGSP: Альфа-Капитал Видеоигры\n",
|
||
"AMCCA: iNAV АТОН – Облачные технологии\n",
|
||
"AMDGA: iNAV АТОН – Дивиденды США\n",
|
||
"AMEMA: iNAV АТОН – Рынки возможностей\n",
|
||
"AMGFA: iNAV АТОН – Ставка на рост\n",
|
||
"AMGMA: iNAV АТОН – Золотодобытчики\n",
|
||
"AMGRA: iNAV АТОН–Генетическая революция\n",
|
||
"AMHCA: iNAV АТОН –Медицина и биотех США\n",
|
||
"AMHYA: iNAV АТОН-Доходные облиг-ии Мира\n",
|
||
"AMIGA: iNAV АТОН–Надежные облигации\n",
|
||
"AMINA: iNAV АТОН – Инновации\n",
|
||
"AMLVA: iNAV АТОН – Тихая гавань\n",
|
||
"AMMFA: iNAV АТОН – Лидеры роста США\n",
|
||
"AMNRA: iNAV АТОН - Накопительный RUB\n",
|
||
"AMNYA: iNAV АТОН - Накопительный CNY\n",
|
||
"AMNYB: iNAV АТОН-Накопительный CNY rub\n",
|
||
"AMRBA: iNAV АТОН–Российские облигации +\n",
|
||
"AMREA: iNAV АТОН – Российские акции +\n",
|
||
"AMRHA: iNAV АТОН-Высокодоходные бонды\n",
|
||
"AMSCA: iNAV АТОН – Цифровое будущее\n",
|
||
"AMSLA: iNAV АТОН – Серебро\n",
|
||
"AMVFA: iNAV АТОН–Недооцен-ые комп-ии US\n",
|
||
"ARHYB: ARHYB\n",
|
||
"BCSBA: БКС Облигации дох-ти МСП\n",
|
||
"BCSDA: iNAV БКС Денежный рынок\n",
|
||
"BCSHF: iNAV БКС Фавориты мировых фондов\n",
|
||
"BCSRA: iNAV БКС Индекс Рос. рынка\n",
|
||
"BCSYG: iNAV БКС Доходные облигации\n",
|
||
"BEMRAIF: Райффайзен - Еврооблигации\n",
|
||
"BONDA: iNAV DOHOD Cbonds RUS bonds\n",
|
||
"BPSI: Субиндекс облигаций\n",
|
||
"BPSIG: Субиндекс облигаций ОФЗ\n",
|
||
"BRFOB: BRFOB\n",
|
||
"CASHA: iNAV ААА УК - Ежедневный процент\n",
|
||
"CNYMM: iNAV CNYM ETF\n",
|
||
"CREI: CREI\n",
|
||
"CREITR: CREITR\n",
|
||
"CRFOB: CRFOB\n",
|
||
"DIVDA: iNAV ДОХОДЪ Дивидендные акции РФ\n",
|
||
"DOMMBSCP: DOMMBSCP\n",
|
||
"DOMMBSTR: DOMMBSTR\n",
|
||
"EPSI: Субиндекс акций\n",
|
||
"EPSITR: Субиндекс акций полной доходности\n",
|
||
"EPSITRR: Индекс МосБиржи EPSITRR\n",
|
||
"EQMXE: iNAV EQMX ETF\n",
|
||
"ESGEG: iNAV ESGE ETF\n",
|
||
"ESGRA: iNAV RSHB-MOEX-RSPP ESG VecTR\n",
|
||
"FDIVAR: Финам. Див. аристократы\n",
|
||
"FDIVARTR: Финам. Див. аристократы TR\n",
|
||
"FINCA: iNAV ФИНСТАР - Денежный рынок +\n",
|
||
"FIXAFKS: Фиксинг МосБиржи AFKS\n",
|
||
"FIXAFLT: Фиксинг МосБиржи AFLT\n",
|
||
"FIXAGRO: Фиксинг МосБиржи AGRO\n",
|
||
"FIXALRS: Фиксинг МосБиржи ALRS\n",
|
||
"FIXASTR: Фиксинг МосБиржи ASTR\n",
|
||
"FIXBSPB: Фиксинг МосБиржи BSPB\n",
|
||
"FIXCBOM: Фиксинг МосБиржи CBOM\n",
|
||
"FIXCHMF: Фиксинг МосБиржи CHMF\n",
|
||
"FIXENPG: Фиксинг МосБиржи ENPG\n",
|
||
"FIXFEES: Фиксинг МосБиржи FEES\n",
|
||
"FIXFIVE: Фиксинг МосБиржи FIVE\n",
|
||
"FIXFIXP: Фиксинг МосБиржи FIXP\n",
|
||
"FIXFLOT: Фиксинг МосБиржи FLOT\n",
|
||
"FIXGAZP: Фиксинг МосБиржи GAZP\n",
|
||
"FIXGLTR: Фиксинг МосБиржи GLTR\n",
|
||
"FIXGMKN: Фиксинг МосБиржи GMKN\n",
|
||
"FIXHYDR: Фиксинг МосБиржи HYDR\n",
|
||
"FIXIRAO: Фиксинг МосБиржи IRAO\n",
|
||
"FIXLEAS: Фиксинг МосБиржи LEAS\n",
|
||
"FIXLKOH: Фиксинг МосБиржи LKOH\n",
|
||
"FIXMAGN: Фиксинг МосБиржи MAGN\n",
|
||
"FIXMGNT: Фиксинг МосБиржи MGNT\n",
|
||
"FIXMOEX: Фиксинг МосБиржи MOEX\n",
|
||
"FIXMSNG: Фиксинг МосБиржи MSNG\n",
|
||
"FIXMTLR: Фиксинг МосБиржи MTLR\n",
|
||
"FIXMTLRP: Фиксинг МосБиржи MTLRP\n",
|
||
"FIXMTSS: Фиксинг МосБиржи MTSS\n",
|
||
"FIXNLMK: Фиксинг МосБиржи NLMK\n",
|
||
"FIXNVTK: Фиксинг МосБиржи NVTK\n",
|
||
"FIXOZON: Фиксинг МосБиржи OZON\n",
|
||
"FIXPHOR: Фиксинг МосБиржи PHOR\n",
|
||
"FIXPIKK: Фиксинг МосБиржи PIKK\n",
|
||
"FIXPLZL: Фиксинг МосБиржи PLZL\n",
|
||
"FIXPOLY: Фиксинг МосБиржи POLY\n",
|
||
"FIXPOSI: Фиксинг МосБиржи POSI\n",
|
||
"FIXQIWI: Фиксинг МосБиржи QIWI\n",
|
||
"FIXROSN: Фиксинг МосБиржи ROSN\n",
|
||
"FIXRTKM: Фиксинг МосБиржи RTKM\n",
|
||
"FIXRUAL: Фиксинг МосБиржи RUAL\n",
|
||
"FIXSBER: Фиксинг МосБиржи SBER\n",
|
||
"FIXSBERP: Фиксинг МосБиржи SBERP\n",
|
||
"FIXSELG: Фиксинг МосБиржи SELG\n",
|
||
"FIXSGZH: Фиксинг МосБиржи SGZH\n",
|
||
"FIXSMLT: Фиксинг МосБиржи SMLT\n",
|
||
"FIXSNGS: Фиксинг МосБиржи SNGS\n",
|
||
"FIXSNGSP: Фиксинг МосБиржи SNGSP\n",
|
||
"FIXT: Фиксинг МосБиржи T\n",
|
||
"FIXTATN: Фиксинг МосБиржи TATN\n",
|
||
"FIXTATNP: Фиксинг МосБиржи TATNP\n",
|
||
"FIXTCSG: Фиксинг МосБиржи TCSG\n",
|
||
"FIXTRNFP: Фиксинг МосБиржи TRNFP\n",
|
||
"FIXUPRO: Фиксинг МосБиржи UPRO\n",
|
||
"FIXVKCO: Фиксинг МосБиржи VKCO\n",
|
||
"FIXVTBR: Фиксинг МосБиржи VTBR\n",
|
||
"FIXYDEX: Фиксинг МосБиржи YDEX\n",
|
||
"FIXYNDX: Фиксинг МосБиржи YNDX\n",
|
||
"FMMMA: iNAV Финам - Денежный рынок\n",
|
||
"FMRUA: iNAV Дивидендные Аристократы РФ\n",
|
||
"FMUSA: iNAV Дивидендные аристократы США\n",
|
||
"GLVDA: iNAV DOHOD Low Volatility\n",
|
||
"GOLDO: iNAV GOLD ETF\n",
|
||
"GOODA: iNAV DOHOD Денежный рынок\n",
|
||
"GPBCA: iNAV Газпромбанк кит. акции\n",
|
||
"GPBCBI2Y: Индикатор GPBCBI2Y\n",
|
||
"GPBCBI4Y: Индикатор GPBCBI4Y\n",
|
||
"GPBMA: iNAV ГПБ - Корп. облигации 4г\n",
|
||
"GPBRA: iNAV Газпромбанк руб облигации\n",
|
||
"GPBSA: iNAV ГПБ - Корп. облигации 2г\n",
|
||
"GPBWA: iNAV Газпромбанк глоб. активы\n",
|
||
"GQGDA: iNAV DOHOD Growth & Quality\n",
|
||
"GRODA: iNAV ДОХОДЪ Акции роста РФ\n",
|
||
"GSCDA: iNAV DOHOD Global Small Cap\n",
|
||
"HCAP: HCAP\n",
|
||
"HCAPTR: HCAPTR\n",
|
||
"IMOEX: Индекс МосБиржи\n",
|
||
"IMOEX2: Индекс МосБиржи (все сессии)\n",
|
||
"IMOEXCNY: Индекс МосБиржи в юанях\n",
|
||
"IMOEXDIV: Индекс дивидендов МосБиржи\n",
|
||
"IMOEXDIVN: Индекс див МосБиржи нетто-рез\n",
|
||
"IMOEXW: IMOEXW\n",
|
||
"INEMA: iNAV Ингосстрах облигации EM\n",
|
||
"INFLA: iNAV Ингосстрах Инфляционный\n",
|
||
"INFLTR: INFLTR\n",
|
||
"INGOA: iNAV Ингосстрах Корп. облигации\n",
|
||
"INRUA: iNAV Ингосстрах Россия\n",
|
||
"IRDIV: ДОХОДЪ Дивидендные акции РФ\n",
|
||
"IRDIVTR: ДОХОДЪ Дивидендные акции РФ TR\n",
|
||
"IRGLV: ДОХОДЪ низкой вол-ти\n",
|
||
"IRGQG: ДОХОДЪ акции роста\n",
|
||
"IRGRO: ДОХОДЪ Акции роста РФ\n",
|
||
"IRGROTR: ДОХОДЪ Акции роста РФ TR\n",
|
||
"IRGSC: ДОХОДЪ малой кап-ции\n",
|
||
"KOSRUB: «Коган – Уверенный»\n",
|
||
"LQDTM: iNAV LQDT ETF\n",
|
||
"MBEQA: iNAV METIB - EQ Market leaders\n",
|
||
"MBGBA: iNAV METIB - Government bonds\n",
|
||
"MCF2TR: Индекс МосБиржи полной доходност\n",
|
||
"MCF2TRN: Индекс МосБиржи TR 2 нетто-иност\n",
|
||
"MCF2TRR: Индекс МосБиржи TR 2 нетто-росс\n",
|
||
"MCFCNYTR: Индекс МосБиржи в юанях ПД\n",
|
||
"MCFCNYTRN: Индекс МосБиржи в юанях ПД нерез\n",
|
||
"MCFCNYTRR: Индекс МосБиржи в юанях ПД рез\n",
|
||
"MCFTR: MOEX Russia Total Return\n",
|
||
"MCFTRN: MOEX Russia Net-TR-NR\n",
|
||
"MCFTRR: MOEX Russia Net-TR-Res\n",
|
||
"MCFWTR: MCFWTR\n",
|
||
"MCFWTRN: MCFWTRN\n",
|
||
"MCFWTRR: MCFWTRR\n",
|
||
"MCXSM: Индекс МосБиржи SMID\n",
|
||
"MDIAMD: MDIAMD\n",
|
||
"MDIAMD2: MDIAMD2\n",
|
||
"MDIAMR: MDIAMR\n",
|
||
"MDIAMR2: MDIAMR2\n",
|
||
"MDIV: MDIV\n",
|
||
"MDIVTR: MDIVTR\n",
|
||
"MEBCTR: MOEX Blue Chip Total Return\n",
|
||
"MEBCTRN: MOEX Blue Chip Net-TR-NR\n",
|
||
"MEBCTRR: MOEX Blue Chip Net-TR-Res\n",
|
||
"MECHTR: MOEX Chemicals Total Return\n",
|
||
"MECHTRN: MOEX Chemicals Net TR-NR\n",
|
||
"MECHTRR: MOEX Chemicals Net TR-Res\n",
|
||
"MECNTR: MOEX Consumer Total Return\n",
|
||
"MECNTRN: MOEX Consumer Net TR-NR\n",
|
||
"MECNTRR: MOEX Consumer Net TR-Res\n",
|
||
"MEEUTR: MOEX El.Utilities Total Return\n",
|
||
"MEEUTRN: MOEX El. Utilities Net TR-NR\n",
|
||
"MEEUTRR: MOEX El. Utilities Net TR-Res\n",
|
||
"MEFNTR: MOEX Financials Total Return\n",
|
||
"MEFNTRN: MOEX Financials Net TR-NR\n",
|
||
"MEFNTRR: MOEX Financials Net TR-Res\n",
|
||
"MEITTR: MOEX IT TR Index\n",
|
||
"MEITTRN: MOEX IT Net TR-NR\n",
|
||
"MEITTRR: MOEX IT Net TR-Res\n",
|
||
"MEMMTR: MOEX Metals & Min Total Return\n",
|
||
"MEMMTRN: MOEX Metals & Mining Net TR-NR\n",
|
||
"MEMMTRR: MOEX Metals & Min Net TR-Res\n",
|
||
"MEOGTR: MOEX Oil & Gas Total Return\n",
|
||
"MEOGTRN: MOEX Oil & Gas Net TR-NR\n",
|
||
"MEOGTRR: MOEX Oil & Gas Net TR-Res\n",
|
||
"MERETR: MOEX RE Total Return\n",
|
||
"MERETRN: MOEX RE Net TR-NR\n",
|
||
"MERETRR: MOEX RE Net TR-RES\n",
|
||
"MESG: Индекс МосБиржи-RAEX ESG\n",
|
||
"MESGTR: Индекс МосБиржи-RAEX ESG TR\n",
|
||
"MESMTR: MOEX SMID Total Return\n",
|
||
"MESMTRN: MOEX SMID Net TR-NR\n",
|
||
"MESMTRR: MOEX SMID Net TR-Res\n",
|
||
"METLTR: MOEX Telecom Total Return\n",
|
||
"METLTRN: MOEX Telecom Net TR-NR\n",
|
||
"METLTRR: MOEX Telecom Net TR-Res\n",
|
||
"METNTR: MOEX Transport Total Return\n",
|
||
"METNTRN: MOEX Transport Net TR-NR\n",
|
||
"METNTRR: MOEX Transport Net TR-Res\n",
|
||
"MICEXBORR1W: MCX BO 1W\n",
|
||
"MICEXBORR2W: MCX BO 2W\n",
|
||
"MICEXBORRON: MCX BO ON\n",
|
||
"MICEXEQRR1W: MCX EQ 1W\n",
|
||
"MICEXEQRR2W: MCX EQ 2W\n",
|
||
"MICEXEQRRON: MCX EQ ON\n",
|
||
"MIPO: Индекс МосБиржи IPO\n",
|
||
"MIPOTR: Индекс МосБиржи IPO полн. дох-ти\n",
|
||
"MKBDA: iNAV МКБ Рос. Дивидендные Акции\n",
|
||
"MOEX10: Индекс МосБиржи 10\n",
|
||
"MOEXBC: Индекс голубых фишек\n",
|
||
"MOEXBMI: Индекс широкого рынка\n",
|
||
"MOEXCH: Индекс химии и нефтехимии\n",
|
||
"MOEXCN: Индекс потребительского сектора / Индекс потребит сектора\n",
|
||
"MOEXEU: Индекс электроэнергетики\n",
|
||
"MOEXFN: Индекс финансов\n",
|
||
"MOEXINN: Индекс МосБиржи инноваций\n",
|
||
"MOEXIT: Индекс МосБиржи IT\n",
|
||
"MOEXMM: Индекс металлов и добычи\n",
|
||
"MOEXOG: Индекс нефти и газа\n",
|
||
"MOEXRE: Индекс МосБиржи недвижимости\n",
|
||
"MOEXREPO: MXREPO\n",
|
||
"MOEXREPO1W: MOEXREPO1W\n",
|
||
"MOEXREPO1WE: MOEXREPO1WE\n",
|
||
"MOEXREPOE: MXREPOE\n",
|
||
"MOEXREPOEQ: MXREPOEQ\n",
|
||
"MOEXREPOEQE: MXREPOEQE\n",
|
||
"MOEXREPOUSD: MOEXREPOUSD\n",
|
||
"MOEXREPOUSDE: MOEXREPOUSDE\n",
|
||
"MOEXTL: Индекс телекоммуникаций\n",
|
||
"MOEXTN: Индекс транспорта\n",
|
||
"MRBC: Индекс МосБиржи 15\n",
|
||
"MRBCTR: Индекс МосБиржи полн дох-ти 15\n",
|
||
"MREDC: Индекс недвиж-ти Домклик Москва\n",
|
||
"MREF: Индекс МосБиржи ЗПИФН\n",
|
||
"MREFTR: Индекс МосБиржи ЗПИФН ПД\n",
|
||
"MRRT: Индекс MRRT\n",
|
||
"MRSV: Индекс MRSV\n",
|
||
"MRSVR: Индекс МосБиржи-РСПП MRSV RU Co\n",
|
||
"MRSVRT: Индекс МосБиржи-РСПП MRSV RU TR\n",
|
||
"MRSVT: Индекс МосБиржи-РСПП Вектор TR\n",
|
||
"MTEKA: iNAV Фридом - Лидеры Технологий\n",
|
||
"MXSHAR: Индекс МосБиржи Исламский\n",
|
||
"MXSHARTR: Индекс МосБиржи Исламский TR\n",
|
||
"OBLGA: iNAV OBLG ETF\n",
|
||
"OISFIXUSD: Индекс доходности валютных свопов\n",
|
||
"ONLYO: iNAV «Открытие – Всепогодный» (устар.)\n",
|
||
"OPNAO: iNAV Открытие – Акции Азии\n",
|
||
"OPNBO: iNAV Открытие – Облигации РФ\n",
|
||
"OPNEO: iNAV Открытие – Акции Европы\n",
|
||
"OPNRI: Открытие - Акции РФ (Моментум)\n",
|
||
"OPNRO: iNAV Открытие – Акции РФ\n",
|
||
"OPNRPI: Открытие - Акции РФ\n",
|
||
"OPNSO: iNAV Открытие – Акции США\n",
|
||
"OPNTI: Открытие – Технологии\n",
|
||
"OPNTIB: Открытие – Технологии TR\n",
|
||
"OPNTIP: Открытие – Технологии CP\n",
|
||
"OPNUO: iNAV Открытие – Облигации США\n",
|
||
"OPNVI: Открытие – Тренды\n",
|
||
"OPNVIB: Открытие – Тренды TR\n",
|
||
"OPNVIP: Открытие – Тренды CP\n",
|
||
"OPNWO: iNAV «Открытие – Всепогодный»\n",
|
||
"PRIEA: iNAV RSHB-ESG RU Corp Eurobonds\n",
|
||
"PRIER: iNAV RSHB-И.Эс.Джи PRIE RU\n",
|
||
"PSMMA: iNAV ПСБ - Денежный рынок\n",
|
||
"PSRBA: iNAV ПСБ - Рублевые облигации\n",
|
||
"RCGLA: iNAV Райф - Золото\n",
|
||
"RCHYB: iNAV Райф – Высокодоходные бонды\n",
|
||
"RCMBB: iNAV «Райффайзен – Еврооблигации\n",
|
||
"RCMBD: iNAV «Райффайзен – Еврооблигации\n",
|
||
"RCMMF: iNAV Райф – Фонд денежного рынка\n",
|
||
"RCUSA: iNAV Райф - Американские акции\n",
|
||
"RCUSB: Райф - Американские акции\n",
|
||
"RFBC15: iNAV «Raiffeisen-MOEX Index 15»\n",
|
||
"RGBI: Индекс Мосбиржи гос обл RGBI\n",
|
||
"RGBITR: Индекс Мосбиржи гос обл RGBITR\n",
|
||
"RPGCC: MOEXREPOGCC\n",
|
||
"RPGCC1W: MOEXREPOGCC1W\n",
|
||
"RPGCC1WE: MOEXREPOGCC1WE\n",
|
||
"RPGCCE: MOEXREPOGCCE\n",
|
||
"RQIEA: iNAV Raif - ETF Tactic strategy\n",
|
||
"RQIEB: Райф Тактическая статегия\n",
|
||
"RQISETFE: Райф. Тактическая Стратегия\n",
|
||
"RQISETFU: Райф. Сбалансированная Стратегия\n",
|
||
"RQIUA: iNAV Raif QIS balanced\n",
|
||
"RQIUB: Райф Сбалансированная стратегия\n",
|
||
"RSHAN: iNAV RSHA ETF\n",
|
||
"RSHAN2: iNAV RSHA ETF\n",
|
||
"RSHEM: iNAV RSHE ETF\n",
|
||
"RSHEM2: iNAV RSHE ETF\n",
|
||
"RSHHY: iNAV RSHH ETF\n",
|
||
"RSHHY2: iNAV RSHH ETF\n",
|
||
"RSHIA: iNAV RSHI ETF\n",
|
||
"RSHLE: iNAV RSHL Fund\n",
|
||
"RSHUE: iNAV RSHU ETF\n",
|
||
"RSHYE: iNAV RSHY ETF\n",
|
||
"RTSCH: Индекс РТС химии и нефтехимии\n",
|
||
"RTSCR: Индекс РТС потреб. сектора\n",
|
||
"RTSEU: Индекс РТС электроэнергетики\n",
|
||
"RTSFN: Индекс РТС финансов\n",
|
||
"RTSGBPTRN: RTSGBPTRN\n",
|
||
"RTSI: Индекс РТС\n",
|
||
"RTSIDIV: Индекс дивидендов РТС\n",
|
||
"RTSIDIVN: Индекс дивидендов РТС нетто-рос\n",
|
||
"RTSIGBP: RTSIGBP\n",
|
||
"RTSIT: Индекс РТС IT\n",
|
||
"RTSMM: Индекс РТС металлов и добычи\n",
|
||
"RTSOG: Индекс РТС нефти и газа\n",
|
||
"RTSRE: Индекс РТС недвижимости\n",
|
||
"RTSSIB: Индекс ММВБ Сибирь\n",
|
||
"RTSSM: RTS SMID Index\n",
|
||
"RTSTL: Индекс РТС телекоммуникаций\n",
|
||
"RTSTN: Индекс РТС транспорта\n",
|
||
"RTSTR: RTS Total Return\n",
|
||
"RTSTRN: RTS Net-TR-NR\n",
|
||
"RTSTRR: RTS Net-TR-Res\n",
|
||
"RTSUSDCUR: RTSUSDCUR\n",
|
||
"RTSVX: Индекс RTSVX\n",
|
||
"RUABICP: ABI CP\n",
|
||
"RUABITR: ABI TR\n",
|
||
"RUBMI: Индекс РТС широкого рынка\n",
|
||
"RUCBCP2A3A: RUCBCP2A3A\n",
|
||
"RUCBCP2A3A3Y: RUCBCP2A3A3Y\n",
|
||
"RUCBCP2A3A5Y: RUCBCP2A3A5Y\n",
|
||
"RUCBCP2B3B: RUCBCP2B3B\n",
|
||
"RUCBCP3A3YNS: RUCBCP3A3YNS\n",
|
||
"RUCBCP3A5YNS: RUCBCP3A5YNS\n",
|
||
"RUCBCP3Y: Индекс Мосбиржи корп обл CBICP 3-5\n",
|
||
"RUCBCP3YNS: RUCBCP3YNS\n",
|
||
"RUCBCP5Y: Индекс Мосбиржи корп обл CBICP 1-3\n",
|
||
"RUCBCP5YNS: RUCBCP5YNS\n",
|
||
"RUCBCPA2A: RUCBCPA2A\n",
|
||
"RUCBCPA2A3Y: RCBCPA2A3Y\n",
|
||
"RUCBCPA2A5Y: RUCBTRA2A5Y\n",
|
||
"RUCBCPA3YNS: RUCBCPA3YNS\n",
|
||
"RUCBCPA5YNS: RUCBCPA5YNS\n",
|
||
"RUCBCPAA3YNS: RUCBCPAA3YNS\n",
|
||
"RUCBCPAA5YNS: RUCBCPAA5YNS\n",
|
||
"RUCBCPAAANS: RUCBCPAAANS\n",
|
||
"RUCBCPAANS: RUCBCPAANS\n",
|
||
"RUCBCPANS: RUCBCPANS\n",
|
||
"RUCBCPB2B: RUCBCPB2B\n",
|
||
"RUCBCPB2B3B: RUCBCPB2B3B\n",
|
||
"RUCBCPBBBNS: RUCBCPBBBNS\n",
|
||
"RUCBCPNS: RUCBCPNS\n",
|
||
"RUCBHYCP: Индекс МосБиржи ВДО ПИР CP\n",
|
||
"RUCBHYTR: Индекс МосБиржи ВДО ПИР TR\n",
|
||
"RUCBICP: Индекс Мосбиржи корп обл CBICP\n",
|
||
"RUCBICP1Y: CBI CP 1Y\n",
|
||
"RUCBICP3+: CBI CP 3+\n",
|
||
"RUCBICPB: CBI CP B\n",
|
||
"RUCBICPB3Y: CBI CP B 3Y\n",
|
||
"RUCBICPBB: CBI CP BB\n",
|
||
"RUCBICPBB3+: CBI CP BB 3+\n",
|
||
"RUCBICPBB3Y: CBI CP BBB 3Y\n",
|
||
"RUCBICPBB5Y: CBI CP BB 5Y\n",
|
||
"RUCBICPBBB: CBI CP BBB\n",
|
||
"RUCBICPBBB3+: CBI CP BBB 3+\n",
|
||
"RUCBICPBBB3Y: CBI CP BBB 3Y\n",
|
||
"RUCBICPBBB5Y: CBI CP BBB 5Y\n",
|
||
"RUCBICPL1: CBI CP L1\n",
|
||
"RUCBICPL2: CBI CP L2\n",
|
||
"RUCBICPL3: CBI CP L3\n",
|
||
"RUCBITR: Индекс Мосбиржи корп обл CBITR\n",
|
||
"RUCBITR1Y: CBI TR 1Y\n",
|
||
"RUCBITR3+: CBI TR 3+\n",
|
||
"RUCBITRB: CBI TR B\n",
|
||
"RUCBITRB3Y: CBI TR B 3Y\n",
|
||
"RUCBITRBB: CBI TR BB\n",
|
||
"RUCBITRBB3+: CBI TR BB 3+\n",
|
||
"RUCBITRBB3Y: CBI TR BB 3Y\n",
|
||
"RUCBITRBB5Y: CBI TR BB 5Y\n",
|
||
"RUCBITRBBB: CBI TR BBB\n",
|
||
"RUCBITRBBB3+: CBI TR BBB 3+\n",
|
||
"RUCBITRBBB3Y: CBI TR BBB 3Y\n",
|
||
"RUCBITRBBB5Y: CBI TR BBB 5Y\n",
|
||
"RUCBITRL1: CBI TR L1\n",
|
||
"RUCBITRL2: CBI TR L2\n",
|
||
"RUCBITRL3: CBI TR L3\n",
|
||
"RUCBKEYCP: RUCBKEYCP\n",
|
||
"RUCBKEYTR: RUCBKEYTR\n",
|
||
"RUCBRNCP: RUCBRNCP\n",
|
||
"RUCBRNTR: RUCBRNTR\n",
|
||
"RUCBTR2A3A: RUCBTR2A3A\n",
|
||
"RUCBTR2A3A3Y: RUCBTR2A3A3Y\n",
|
||
"RUCBTR2A3A5Y: RUCBTR2A3A5Y\n",
|
||
"RUCBTR2B3B: RUCBTR2B3B\n",
|
||
"RUCBTR3A3YNS: RUCBTR3A3YNS\n",
|
||
"RUCBTR3A5YNS: RUCBTR3A5YNS\n",
|
||
"RUCBTR3Y: Индекс Мосбиржи корп обл CBITR 3-5\n",
|
||
"RUCBTR3YNS: RUCBTR3YNS\n",
|
||
"RUCBTR5Y: Индекс Мосбиржи корп обл CBITR 1-3\n",
|
||
"RUCBTR5YNS: RUCBTR5YNS\n",
|
||
"RUCBTRA2A: RUCBTRA2A\n",
|
||
"RUCBTRA2A3Y: RCBTRA2A3Y\n",
|
||
"RUCBTRA2A5Y: RUCBTRA2A5Y\n",
|
||
"RUCBTRA3YNS: RUCBTRA3YNS\n",
|
||
"RUCBTRA5YNS: RUCBTRA5YNS\n",
|
||
"RUCBTRAA3YNS: RUCBTRAA3YNS\n",
|
||
"RUCBTRAA5YNS: RUCBTRAA5YNS\n",
|
||
"RUCBTRAAANS: RUCBTRAAANS\n",
|
||
"RUCBTRAANS: RUCBTRAANS\n",
|
||
"RUCBTRANS: RUCBTRANS\n",
|
||
"RUCBTRB2B: RUCBTRB2B\n",
|
||
"RUCBTRB2B3B: RUCBTRB2B3B\n",
|
||
"RUCBTRBBBNS: RUCBTRBBBNS\n",
|
||
"RUCBTRNS: RUCBTRNS\n",
|
||
"RUCEU: Индекс Корп. Рос. Еврооблигаций\n",
|
||
"RUCGI: Нац. индекс корп. Управления\n",
|
||
"RUCHTR: RTS Chemicals Total Return\n",
|
||
"RUCHTRN: RTS Chemicals Net TR-NR\n",
|
||
"RUCHTRR: RTS Chemicals Net TR-Res\n",
|
||
"RUCNTR: RTS Consumer Total Return\n",
|
||
"RUCNTRN: RTS Consumer Net TR-NR\n",
|
||
"RUCNTRR: RTS Consumer Net TR-Res\n",
|
||
"RUCNYCP: RUCNYCP\n",
|
||
"RUCNYTR: RUCNYTR\n",
|
||
"RUESGCP: RUESGCP\n",
|
||
"RUESGTR: RUESGTR\n",
|
||
"RUEU10: RUEU10\n",
|
||
"RUEUESG: RUEUESG\n",
|
||
"RUEURAIF: Индекса МосБиржи еврооблигаций RUEURAIF\n",
|
||
"RUEUTR: RTS El.Utilities Total Return\n",
|
||
"RUEUTRN: RTS El. Utilities Net TR-NR\n",
|
||
"RUEUTRR: RTS El. Utilities Net TR-Res\n",
|
||
"RUEYBCSCP: RUEYBCSCP\n",
|
||
"RUEYBCSTR: RUEYBCSTR\n",
|
||
"RUFLBICP: RUFLBICP\n",
|
||
"RUFLBITR: RUFLBITR\n",
|
||
"RUFLCBCP: RUFLCBCP\n",
|
||
"RUFLCBTR: RUFLCBTR\n",
|
||
"RUFLGBICP: RUFLGBICP\n",
|
||
"RUFLGBITR: RUFLGBITR\n",
|
||
"RUFNTR: RTS Financials Total Return\n",
|
||
"RUFNTRN: RTS Financials Net TR-NR\n",
|
||
"RUFNTRR: RTS Financials Net TR-Res\n",
|
||
"RUGBICP10Y: GBI CP 10Y\n",
|
||
"RUGBICP1Y: GBI CP 1Y\n",
|
||
"RUGBICP3Y: GBI CP 3Y\n",
|
||
"RUGBICP5+: GBI CP 5+\n",
|
||
"RUGBICP5Y: GBI CP 5Y\n",
|
||
"RUGBICP5Y7Y: RUGBICP5Y7Y\n",
|
||
"RUGBICP7Y+: RUGBICP7Y+\n",
|
||
"RUGBINFCP: RUGBINFCP\n",
|
||
"RUGBINFTR: RUGBINFTR\n",
|
||
"RUGBITR10Y: GBI TR 10Y\n",
|
||
"RUGBITR1Y: GBI TR 1Y\n",
|
||
"RUGBITR3Y: GBI TR 3Y\n",
|
||
"RUGBITR5+: GBI TR 5+\n",
|
||
"RUGBITR5Y: GBI TR 5Y\n",
|
||
"RUGBITR5Y7Y: RUGBITR5Y7Y\n",
|
||
"RUGBITR7Y+: RUGBITR7Y+\n",
|
||
"RUGOLD: RUGOLD\n",
|
||
"RUGROWCP: RUGROWCP\n",
|
||
"RUGROWTR: RUGROWTR\n",
|
||
"RUHYRAIF: RUHYRAIF\n",
|
||
"RUITTR: RTS IT TR Index\n",
|
||
"RUITTRN: RTS IT Net TR-NR\n",
|
||
"RUITTRR: RTS IT Net TR-Res\n",
|
||
"RUMBCP3+NS: RUMBCP3+NS\n",
|
||
"RUMBCP3A3+NS: RUMBCP3A3+NS\n",
|
||
"RUMBCP3A3YNS: RUMBCP3A3YNS\n",
|
||
"RUMBCP3YNS: RUMBCP3YNS\n",
|
||
"RUMBCPA3+NS: RUMBCPA3+NS\n",
|
||
"RUMBCPA3YNS: RUMBCPA3YNS\n",
|
||
"RUMBCPAA3+NS: RUMBCPAA3+NS\n",
|
||
"RUMBCPAA3YNS: RUMBCPAA3YNS\n",
|
||
"RUMBCPAAANS: RUMBCPAAANS\n",
|
||
"RUMBCPAANS: RUMBCPAANS\n",
|
||
"RUMBCPANS: RUMBCPANS\n",
|
||
"RUMBCPBBBNS: RUMBCPBBBNS\n",
|
||
"RUMBCPNS: RUMBCPNS\n",
|
||
"RUMBICP: Индекс Мосбиржи мун обл MOEX MBICP\n",
|
||
"RUMBICP1Y: MBI CP 1Y\n",
|
||
"RUMBICP3+: MBI CP 3Y+\n",
|
||
"RUMBICP3Y: MBI CP 3Y\n",
|
||
"RUMBICPBB: MBI CP BB\n",
|
||
"RUMBICPBB3Y: MBI CP BB 3Y\n",
|
||
"RUMBICPBBB: MBI CP BBB\n",
|
||
"RUMBICPBBB3+: MBI CP BBB 3+\n",
|
||
"RUMBICPBBB3Y: MBI TR BBB 3Y\n",
|
||
"RUMBICPL1: MBI CP L1\n",
|
||
"RUMBICPL3: MBI CP L3\n",
|
||
"RUMBITR: Индекс Мосбиржи мун обл MBITR\n",
|
||
"RUMBITR1Y: MBI TR 1Y\n",
|
||
"RUMBITR3+: MBI TR 3Y+\n",
|
||
"RUMBITR3Y: MBI TR 3Y\n",
|
||
"RUMBITRBB: MBI TR BB\n",
|
||
"RUMBITRBB3Y: MBI TR BB 3Y\n",
|
||
"RUMBITRBBB: MBI TR BBB\n",
|
||
"RUMBITRBBB3+: MBI TR BBB 3+\n",
|
||
"RUMBITRBBB3Y: MBI TR BBB 3Y\n",
|
||
"RUMBITRL1: MBI TR L1\n",
|
||
"RUMBITRL3: MBI TR L3\n",
|
||
"RUMBTR3+NS: RUMBTR3+NS\n",
|
||
"RUMBTR3A3+NS: RUMBTR3A3+NS\n",
|
||
"RUMBTR3A3YNS: RUMBTR3A3YNS\n",
|
||
"RUMBTR3YNS: RUMBTR3YNS\n",
|
||
"RUMBTRA3+NS: RUMBTRA3+NS\n",
|
||
"RUMBTRA3YNS: RUMBTRA3YNS\n",
|
||
"RUMBTRAA3+NS: RUMBTRAA3+NS\n",
|
||
"RUMBTRAA3YNS: RUMBTRAA3YNS\n",
|
||
"RUMBTRAAANS: RUMBTRAAANS\n",
|
||
"RUMBTRAANS: RUMBTRAANS\n",
|
||
"RUMBTRANS: RUMBTRANS\n",
|
||
"RUMBTRBBBNS: RUMBTRBBBNS\n",
|
||
"RUMBTRNS: RUMBTRNS\n",
|
||
"RUMMA: iNAV Райф - Денежный рынок USD\n",
|
||
"RUMMTR: RTS Metals & Min Total Return\n",
|
||
"RUMMTRN: RTS Metals & Mining Net TR-NR\n",
|
||
"RUMMTRR: RTS Metals & Min Net TR-Res\n",
|
||
"RUOGTR: RTS Oil & Gas Total Return\n",
|
||
"RUOGTRN: RTS Oil & Gas Net TR-NR\n",
|
||
"RUOGTRR: RTS Oil & Gas Net TR-Res\n",
|
||
"RUPAI: Агрессивный индекс\n",
|
||
"RUPCI: Консервативный индекс\n",
|
||
"RUPMI: Сбалансированный индекс\n",
|
||
"RURETR: RTS RE Total Return\n",
|
||
"RURETRN: RTS RE Net TR-NR\n",
|
||
"RURETRR: RTS RE Net TR-RES\n",
|
||
"RURPLCP: RURPLCP\n",
|
||
"RURPLRUBCP: RURPLRUBCP\n",
|
||
"RURPLRUBTR: RURPLRUBTR\n",
|
||
"RURPLTR: RURPLTR\n",
|
||
"RUSFAR: RUSFAR\n",
|
||
"RUSFAR1M: RUSFAR 1M\n",
|
||
"RUSFAR1MRT: RUSFAR1MRT\n",
|
||
"RUSFAR1W: RUSFAR 1W\n",
|
||
"RUSFAR1WRT: RUSFAR1WRT\n",
|
||
"RUSFAR2W: RUSFAR 2W\n",
|
||
"RUSFAR2WRT: RUSFAR2WRT\n",
|
||
"RUSFAR3M: RUSFAR 3M\n",
|
||
"RUSFAR3MRT: RUSFAR3MRT\n",
|
||
"RUSFARC1WR: RUSFARC1WR\n",
|
||
"RUSFARCN1W: RUSFARCN1W\n",
|
||
"RUSFARCNRT: RUSFARCNRT\n",
|
||
"RUSFARCNY: RUSFARCNY\n",
|
||
"RUSFARRT: RUSFARRT\n",
|
||
"RUSFARUSD: RUSFARUSD\n",
|
||
"RUSMTR: RTS SMID Total Return\n",
|
||
"RUSMTRN: RTS SMID Net TR-NR\n",
|
||
"RUSMTRR: RTS SMID Net TR-Res\n",
|
||
"RUTLTR: RTS Telecom Total Return\n",
|
||
"RUTLTRN: RTS Telecom Net TR-NR\n",
|
||
"RUTLTRR: RTS Telecom Net TR-Res\n",
|
||
"RUTNTR: RTS Transport Total Return\n",
|
||
"RUTNTRN: RTS Transport Net TR-NR\n",
|
||
"RUTNTRR: RTS Transport Net TR-Res\n",
|
||
"RVI: Индекс RVI\n",
|
||
"SBBEA: iNAVПерваяБлокчейнЭкономикаUSD\n",
|
||
"SBBEB: iNAVПерваяБлокчейнЭкономикаRUB\n",
|
||
"SBBYA: iNAV Первая Облигации в юаняхCNY\n",
|
||
"SBBYB: iNAV Первая Сберегат.в юанях RUB\n",
|
||
"SBCBA: iNAV Первая Еврооблигации USD\n",
|
||
"SBCBB: iNAV Первая Еврооблигации RUB\n",
|
||
"SBCNA: iNAV Первая Сберегат.в юаняхCNY\n",
|
||
"SBCNB: iNAV Первая Сберегат. в юаняхRUB\n",
|
||
"SBCSA: iNAV Первая Консерватив смарт\n",
|
||
"SBDSA: iNAV Первая Моя цель 2045\n",
|
||
"SBFRA: iNAVПервая Облигации флоатеры\n",
|
||
"SBGBA: iNAV Первая – Гособлигации\n",
|
||
"SBGDA: iNAV Первая – Доступное Золото\n",
|
||
"SBHIA: iNAV Первая Халяльные инвест\n",
|
||
"SBLBA: iNAVПерваяДолгосроч.гособлигации\n",
|
||
"SBMMA: iNAV Первая Сберегательный\n",
|
||
"SBMXA: iNAV Первая Топ Рос. акций\n",
|
||
"SBOGA: iNAV Первая Глобал портфельUSD\n",
|
||
"SBOGB: iNAV Первая Глобал портфельRUB\n",
|
||
"SBOGE: iNAV Первая Глобал портфельEUR\n",
|
||
"SBPSA: iNAV Первая Моя цель 2035\n",
|
||
"SBRBA: iNAV Первая Корп. облигации\n",
|
||
"SBRIA: iNAV Первая Ответствен инвест\n",
|
||
"SBRSA: iNAV Первая Осторожный смарт\n",
|
||
"SBSCA: iNAVПерваяАкции сред.и мал.капит\n",
|
||
"SBSPA: iNAV Первая Америк. акции USD\n",
|
||
"SBSPB: iNAV Первая Америк. акции RUB\n",
|
||
"SBWSA: iNAV Первая Взвешенный смарт\n",
|
||
"SCFTA: iNAV Технологии будущего\n",
|
||
"SCIPA: БПИФ РФИ «Информатика+»\n",
|
||
"SCLIA: iNAV Ликвидный\n",
|
||
"SIPOA: iNAV Первая Индекс IPO\n",
|
||
"SMEXP: SMEXP\n",
|
||
"SOEXP: SOEXP\n",
|
||
"SOYDK: Индекс сои\n",
|
||
"SPBCA: iNAV БСПБ – Корп. облигации 1000\n",
|
||
"SPBCI: БСПБ Корп. облигации 1000\n",
|
||
"SPBFA: iNAV БСПБ – ОФЗ 1000\n",
|
||
"SPBFI: БСПБ ОФЗ 1000\n",
|
||
"SUGAROTCCEN: Внебиржевой индекс сахара в ЦФО\n",
|
||
"SUGAROTCSOU: Внебиржевой индекс сахара в ЮФО\n",
|
||
"SUGAROTCVOL: Внебиржевой индекс сахара в ПФО\n",
|
||
"SUGBA: iNAV «SUGB-RUGBICP3Y Index»\n",
|
||
"SUGCFO: SUGCFO\n",
|
||
"SUGSOU: SUGSOU\n",
|
||
"SUGVOL: SUGVOL\n",
|
||
"TBEUA: TBEUA iNAV\n",
|
||
"TBEUB: TBEUB iNAV\n",
|
||
"TBIOA: TBIO iNAV\n",
|
||
"TBIOB: TBIOB iNAV\n",
|
||
"TBRUA: TBRU iNAV\n",
|
||
"TBUYA: TBUY iNAV\n",
|
||
"TBUYB: TBUYB iNAV\n",
|
||
"TCBRA: TCBR iNAV\n",
|
||
"TCBRB: TCBRB iNAV\n",
|
||
"TDIVA: TDIV iNAV\n",
|
||
"TECHA: TECH iNAV\n",
|
||
"TECHB: TECHB iNAV\n",
|
||
"TEMSA: TEMS iNAV\n",
|
||
"TEMSB: TEMSB iNAV\n",
|
||
"TEURA: TEURA iNAV\n",
|
||
"TEURB: TEURB iNAV\n",
|
||
"TEUSA: TEUS iNAV\n",
|
||
"TEUSB: TEUSB iNAV\n",
|
||
"TFNXA: TFNX iNAV\n",
|
||
"TFNXB: TFNXB iNAV\n",
|
||
"TGLDA: TGLD iNAV\n",
|
||
"TGLDB: TGLDB iNAV\n",
|
||
"TGRNA: TGRN iNAV\n",
|
||
"TGRNB: TGRNB iNAV\n",
|
||
"TIPOA: TIPO iNAV\n",
|
||
"TIPOB: TIPOB iNAV\n",
|
||
"TITRA: TITR iNAV\n",
|
||
"TKBBA: iNAV ТКБ ИП - Сбалансированный\n",
|
||
"TLCBA: TLCB iNAV\n",
|
||
"TMONA: TMON iNAV\n",
|
||
"TMOSA: TMOS iNAV\n",
|
||
"TOFZA: TOFZA iNAV\n",
|
||
"TPASA: TPAS iNAV\n",
|
||
"TPASB: TPASB iNAV\n",
|
||
"TPAYA: TPAYA iNAV\n",
|
||
"TRAIA: TRAI iNAV\n",
|
||
"TRAIB: TRAIB iNAV\n",
|
||
"TRURA: TRUR iNAV\n",
|
||
"TSOXA: TSOX iNAV\n",
|
||
"TSOXB: TSOXB iNAV\n",
|
||
"TSPVA: TSPV iNAV\n",
|
||
"TSPVB: TSPV iNAV\n",
|
||
"TSPXA: TSPX iNAV\n",
|
||
"TSPXB: TSPXB iNAV\n",
|
||
"TSSTA: TSST iNAV\n",
|
||
"TSSTB: TSSTB iNAV\n",
|
||
"TUSDA: TUSDA iNAV\n",
|
||
"TUSDB: TUSDB iNAV\n",
|
||
"VTBBA: iNAV VTBB ETF\n",
|
||
"VTBEM: iNAV VTBE ETF\n",
|
||
"VTBEM2: iNAV VTBE ETF\n",
|
||
"VTBEUGEM: VTB Eurobond Index GEM EURO\n",
|
||
"VTBFG: iNAV VTBF Fund\n",
|
||
"VTBGO: iNAV VTBG ETF\n",
|
||
"VTBHY: iNAV VTBH ETF\n",
|
||
"VTBHY2: iNAV VTBH ETF\n",
|
||
"VTBIA: iNAV VTBI ETF\n",
|
||
"VTBLE: iNAV VTBL Fund\n",
|
||
"VTBMM: iNAV VTBM ETF\n",
|
||
"VTBSN: iNAV VTBA ETF\n",
|
||
"VTBSN2: iNAV VTBA ETF\n",
|
||
"VTBUE: iNAV VTBU ETF\n",
|
||
"VTBXE: iNAV VTBX ETF\n",
|
||
"VTBYE: iNAV VTBY ETF\n",
|
||
"WH4CPTNOV: Индекс пшеницы НТБ\n",
|
||
"WHFOB: WHFOB\n",
|
||
"YUANA: iNAV Облигации в юанях\n",
|
||
"YUANB: iNAV Облигации в юанях RUB\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import requests\n",
|
||
"\n",
|
||
"# Базовый URL для API Мосбиржи\n",
|
||
"base_url = \"https://iss.moex.com/iss\"\n",
|
||
"\n",
|
||
"def get_moex_indices():\n",
|
||
" \"\"\"\n",
|
||
" Получение списка индексов Мосбиржи\n",
|
||
" \"\"\"\n",
|
||
" # Формируем URL для запроса индексов\n",
|
||
" url = f\"{base_url}/engines/stock/markets/index/securities.json\"\n",
|
||
" \n",
|
||
" try:\n",
|
||
" # Выполняем запрос\n",
|
||
" response = requests.get(url)\n",
|
||
" response.raise_for_status() # Проверяем на ошибки\n",
|
||
" data = response.json()\n",
|
||
" \n",
|
||
" # Извлекаем информацию об индексах\n",
|
||
" securities = data['securities']\n",
|
||
" columns = securities['columns']\n",
|
||
" data = securities['data']\n",
|
||
" \n",
|
||
" # Создаем словарь с информацией об индексах\n",
|
||
" indices = {}\n",
|
||
" secid_index = columns.index('SECID')\n",
|
||
" shortname_index = columns.index('SHORTNAME')\n",
|
||
" \n",
|
||
" for row in data:\n",
|
||
" indices[row[secid_index]] = row[shortname_index]\n",
|
||
" \n",
|
||
" return indices\n",
|
||
" \n",
|
||
" except requests.exceptions.RequestException as e:\n",
|
||
" print(f\"Ошибка при получении данных: {e}\")\n",
|
||
" return None\n",
|
||
"\n",
|
||
"# Получаем и выводим список индексов\n",
|
||
"indices = get_moex_indices()\n",
|
||
"if indices:\n",
|
||
" print(\"Список индексов Мосбиржи:\")\n",
|
||
" for secid, shortname in indices.items():\n",
|
||
" print(f\"{secid}: {shortname}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\n",
|
||
"Металлы и добыча:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"253 MOEXMM Индекс металлов и добычи Индекс МосБиржи металлов и добычи\n",
|
||
"341 RTSMM Индекс РТС металлов и добычи Индекс РТС металлов и добычи\n",
|
||
"\n",
|
||
"Состав индекса MOEXMM:\n",
|
||
" ticker\n",
|
||
"0 ALRS\n",
|
||
"1 AMEZ\n",
|
||
"2 BELO\n",
|
||
"3 BLNG\n",
|
||
"4 CHEP\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXMM:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2005-05-27 1152.02\n",
|
||
"96 2005-05-30 1141.46\n",
|
||
"97 2005-05-31 1160.66\n",
|
||
"98 2005-06-01 1148.49\n",
|
||
"99 2005-06-02 1175.16\n",
|
||
"\n",
|
||
"Нефть и газ:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"254 MOEXOG Индекс нефти и газа Индекс МосБиржи нефти и газа\n",
|
||
"342 RTSOG Индекс РТС нефти и газа Индекс РТС нефти и газа\n",
|
||
"\n",
|
||
"Состав индекса MOEXOG:\n",
|
||
" ticker\n",
|
||
"0 BANE\n",
|
||
"1 BANEP\n",
|
||
"2 GAZP\n",
|
||
"3 JNOSP\n",
|
||
"4 KRKNP\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXOG:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2005-05-27 1123.93\n",
|
||
"96 2005-05-30 1122.11\n",
|
||
"97 2005-05-31 1134.91\n",
|
||
"98 2005-06-01 1136.09\n",
|
||
"99 2005-06-02 1149.11\n",
|
||
"\n",
|
||
"Химия:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"247 MOEXCH Индекс химии и нефтехимии Индекс МосБиржи химии и нефтехимии\n",
|
||
"331 RTSCH Индекс РТС химии и нефтехимии Индекс РТС химии и нефтехимии\n",
|
||
"\n",
|
||
"Состав индекса MOEXCH:\n",
|
||
" ticker\n",
|
||
"0 AKRN\n",
|
||
"1 AZKM\n",
|
||
"2 DGBZ\n",
|
||
"3 DGBZP\n",
|
||
"4 KAZT\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXCH:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2007-05-25 2668.55\n",
|
||
"96 2007-05-28 2635.22\n",
|
||
"97 2007-05-29 2632.88\n",
|
||
"98 2007-05-30 2634.61\n",
|
||
"99 2007-05-31 2648.73\n",
|
||
"\n",
|
||
"Электроэнергетика:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"249 MOEXEU Индекс электроэнергетики Индекс МосБиржи электроэнергетики\n",
|
||
"333 RTSEU Индекс РТС электроэнергетики Индекс РТС электроэнергетики\n",
|
||
"\n",
|
||
"Состав индекса MOEXEU:\n",
|
||
" ticker\n",
|
||
"0 ARSB\n",
|
||
"1 BEGY\n",
|
||
"2 DVEC\n",
|
||
"3 EESR\n",
|
||
"4 EESRP\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXEU:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2005-05-27 939.46\n",
|
||
"96 2005-05-30 935.03\n",
|
||
"97 2005-05-31 936.44\n",
|
||
"98 2005-06-01 938.51\n",
|
||
"99 2005-06-02 955.85\n",
|
||
"\n",
|
||
"Телекоммуникации:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"264 MOEXTL Индекс телекоммуникаций Индекс МосБиржи телекоммуникаций\n",
|
||
"346 RTSTL Индекс РТС телекоммуникаций Индекс РТС телекоммуникаций\n",
|
||
"\n",
|
||
"Состав индекса MOEXTL:\n",
|
||
" ticker\n",
|
||
"0 AFKC\n",
|
||
"1 AFKS\n",
|
||
"2 BISV\n",
|
||
"3 BISVP\n",
|
||
"4 CMST\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXTL:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2005-05-27 1104.80\n",
|
||
"96 2005-05-30 1104.71\n",
|
||
"97 2005-05-31 1122.26\n",
|
||
"98 2005-06-01 1120.09\n",
|
||
"99 2005-06-02 1118.60\n",
|
||
"\n",
|
||
"Финансы:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"250 MOEXFN Индекс финансов Индекс МосБиржи финансов\n",
|
||
"334 RTSFN Индекс РТС финансов Индекс РТС финансов\n",
|
||
"\n",
|
||
"Состав индекса MOEXFN:\n",
|
||
" ticker\n",
|
||
"0 AFKS\n",
|
||
"1 BSPB\n",
|
||
"2 BSPBP\n",
|
||
"3 CBOM\n",
|
||
"4 EPLN\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXFN:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2005-05-27 1253.71\n",
|
||
"96 2005-05-30 1261.84\n",
|
||
"97 2005-05-31 1292.26\n",
|
||
"98 2005-06-01 1287.78\n",
|
||
"99 2005-06-02 1285.13\n",
|
||
"\n",
|
||
"Потребительский сектор:\n",
|
||
" SECID SHORTNAME \\\n",
|
||
"158 IMOEXCNY Индекс МосБиржи в юанях \n",
|
||
"248 MOEXCN Индекс потребительского сектора / Индекс потре... \n",
|
||
"332 RTSCR Индекс РТС потреб. сектора \n",
|
||
"\n",
|
||
" NAME \n",
|
||
"158 Индекс МосБиржи в юанях \n",
|
||
"248 Индекс МосБиржи потребительского сектора \n",
|
||
"332 Индекс РТС потребительских товаров и розничной... \n",
|
||
"\n",
|
||
"Состав индекса IMOEXCNY:\n",
|
||
" ticker\n",
|
||
"0 AFKS\n",
|
||
"1 AFLT\n",
|
||
"2 AGRO\n",
|
||
"3 ALRS\n",
|
||
"4 ASTR\n",
|
||
"\n",
|
||
"Последние значения индекса IMOEXCNY:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2023-05-19 1065.94\n",
|
||
"96 2023-05-22 1068.01\n",
|
||
"97 2023-05-23 1074.12\n",
|
||
"98 2023-05-24 1080.49\n",
|
||
"99 2023-05-25 1078.79\n",
|
||
"\n",
|
||
"Транспорт:\n",
|
||
" SECID SHORTNAME NAME\n",
|
||
"265 MOEXTN Индекс транспорта Индекс МосБиржи транспорта\n",
|
||
"347 RTSTN Индекс РТС транспорта Индекс РТС транспорта\n",
|
||
"\n",
|
||
"Состав индекса MOEXTN:\n",
|
||
" ticker\n",
|
||
"0 AFLT\n",
|
||
"1 FESH\n",
|
||
"2 FLOT\n",
|
||
"3 GLTR\n",
|
||
"4 GTRK\n",
|
||
"\n",
|
||
"Последние значения индекса MOEXTN:\n",
|
||
" TRADEDATE CLOSE\n",
|
||
"95 2008-05-26 2301.71\n",
|
||
"96 2008-05-27 2290.71\n",
|
||
"97 2008-05-28 2288.25\n",
|
||
"98 2008-05-29 2309.14\n",
|
||
"99 2008-05-30 2312.14\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import requests\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"def get_index_constituents(index_id):\n",
|
||
" \"\"\"\n",
|
||
" Получение списка компаний, входящих в индекс\n",
|
||
" \"\"\"\n",
|
||
" # Используем другой эндпоинт для получения состава индекса\n",
|
||
" url = f\"https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/{index_id}/tickers.json\"\n",
|
||
" \n",
|
||
" try:\n",
|
||
" response = requests.get(url)\n",
|
||
" response.raise_for_status()\n",
|
||
" data = response.json()\n",
|
||
" \n",
|
||
" # Получаем данные из секции tickers\n",
|
||
" if 'tickers' in data:\n",
|
||
" tickers = data['tickers']\n",
|
||
" df = pd.DataFrame(tickers['data'], columns=tickers['columns'])\n",
|
||
" \n",
|
||
" # Выводим нужные колонки, если они есть\n",
|
||
" needed_columns = []\n",
|
||
" if 'ticker' in df.columns:\n",
|
||
" needed_columns.append('ticker')\n",
|
||
" if 'shortnames' in df.columns:\n",
|
||
" needed_columns.append('shortnames')\n",
|
||
" if 'weight' in df.columns:\n",
|
||
" needed_columns.append('weight')\n",
|
||
" \n",
|
||
" return df[needed_columns]\n",
|
||
" else:\n",
|
||
" print(f\"Нет данных о составе индекса {index_id}\")\n",
|
||
" return None\n",
|
||
" \n",
|
||
" except requests.exceptions.RequestException as e:\n",
|
||
" print(f\"Ошибка при получении данных: {e}\")\n",
|
||
" return None\n",
|
||
"\n",
|
||
"def get_index_history(index_id):\n",
|
||
" \"\"\"\n",
|
||
" Получение исторических значений индекса\n",
|
||
" \"\"\"\n",
|
||
" url = f\"https://iss.moex.com/iss/history/engines/stock/markets/index/securities/{index_id}.json\"\n",
|
||
" \n",
|
||
" try:\n",
|
||
" response = requests.get(url)\n",
|
||
" response.raise_for_status()\n",
|
||
" data = response.json()\n",
|
||
" \n",
|
||
" if 'history' in data:\n",
|
||
" history = data['history']\n",
|
||
" df = pd.DataFrame(history['data'], columns=history['columns'])\n",
|
||
" return df\n",
|
||
" else:\n",
|
||
" print(f\"Нет исторических данных для индекса {index_id}\")\n",
|
||
" return None\n",
|
||
" \n",
|
||
" except requests.exceptions.RequestException as e:\n",
|
||
" print(f\"Ошибка при получении исторических данных: {e}\")\n",
|
||
" return None\n",
|
||
"\n",
|
||
"def get_moex_sector_indices():\n",
|
||
" \"\"\"\n",
|
||
" Получение отраслевых индексов Мосбиржи\n",
|
||
" \"\"\"\n",
|
||
" url = \"https://iss.moex.com/iss/engines/stock/markets/index/securities.json\"\n",
|
||
" \n",
|
||
" try:\n",
|
||
" response = requests.get(url)\n",
|
||
" response.raise_for_status()\n",
|
||
" data = response.json()\n",
|
||
" \n",
|
||
" securities = data['securities']\n",
|
||
" df = pd.DataFrame(securities['data'], columns=securities['columns'])\n",
|
||
" \n",
|
||
" # Фильтруем отраслевые индексы\n",
|
||
" sector_indices = df[\n",
|
||
" (df['SECID'].str.contains('MOEX', na=False) & \n",
|
||
" ~df['SECID'].str.contains('REPO|EUROBOND', na=False)) |\n",
|
||
" (df['SECID'].str.contains('RTS', na=False) & \n",
|
||
" ~df['SECID'].str.contains('REPO|EUROBOND', na=False))\n",
|
||
" ]\n",
|
||
" \n",
|
||
" result = sector_indices[['SECID', 'SHORTNAME', 'NAME']].drop_duplicates()\n",
|
||
" \n",
|
||
" # Группируем по секторам\n",
|
||
" sectors = {\n",
|
||
" 'Металлы и добыча': result[result['SECID'].str.contains('MM|METL|GOLD|SILV', case=False, na=False)],\n",
|
||
" 'Нефть и газ': result[result['SECID'].str.contains('OG|OIL|GAS', case=False, na=False)],\n",
|
||
" 'Химия': result[result['SECID'].str.contains('CH|CHEM', case=False, na=False)],\n",
|
||
" 'Электроэнергетика': result[result['SECID'].str.contains('EU', case=False, na=False)],\n",
|
||
" 'Телекоммуникации': result[result['SECID'].str.contains('TL', case=False, na=False)],\n",
|
||
" 'Финансы': result[result['SECID'].str.contains('FN', case=False, na=False)],\n",
|
||
" 'Потребительский сектор': result[result['SECID'].str.contains('CN|CR', case=False, na=False)],\n",
|
||
" 'Транспорт': result[result['SECID'].str.contains('TN', case=False, na=False)]\n",
|
||
" }\n",
|
||
" \n",
|
||
" return sectors\n",
|
||
" \n",
|
||
" except requests.exceptions.RequestException as e:\n",
|
||
" print(f\"Ошибка при получении данных: {e}\")\n",
|
||
" return None\n",
|
||
"\n",
|
||
"# Пример использования\n",
|
||
"sectors = get_moex_sector_indices()\n",
|
||
"if sectors:\n",
|
||
" for sector_name, sector_data in sectors.items():\n",
|
||
" print(f\"\\n{sector_name}:\")\n",
|
||
" print(sector_data)\n",
|
||
" \n",
|
||
" if not sector_data.empty:\n",
|
||
" first_index = sector_data.iloc[0]['SECID']\n",
|
||
" print(f\"\\nСостав индекса {first_index}:\")\n",
|
||
" constituents = get_index_constituents(first_index)\n",
|
||
" if constituents is not None:\n",
|
||
" print(constituents.head())\n",
|
||
" \n",
|
||
" print(f\"\\nПоследние значения индекса {first_index}:\")\n",
|
||
" history = get_index_history(first_index)\n",
|
||
" if history is not None:\n",
|
||
" print(history[['TRADEDATE', 'CLOSE']].tail())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Тикеры по секторам:\n",
|
||
"\n",
|
||
"metals_mining:\n",
|
||
"['ALRS', 'AMEZ', 'BELO', 'BLNG', 'CHEP', 'CHMF', 'CHMK', 'CHZN', 'ENPG', 'GMKN', 'KBTK', 'KOGK', 'LNZL', 'LNZLP', 'MAGN', 'MGOK', 'MTLR', 'MTLRP', 'NLMK', 'PGIL', 'PLZL', 'PMTL', 'POGR', 'POLY', 'RASP', 'RUAL', 'RUALR', 'SELG', 'SELGP', 'TRMK', 'UGLD', 'UNKL', 'VSMO', 'VSMZ']\n",
|
||
"Количество компаний в секторе: 34\n",
|
||
"\n",
|
||
"oil_gas:\n",
|
||
"['BANE', 'BANEP', 'GAZP', 'JNOSP', 'KRKNP', 'LKOH', 'MFGS', 'MFGSP', 'NOTK', 'NVTK', 'RITK', 'RNFT', 'RNHSP', 'ROSN', 'SIBN', 'SNGS', 'SNGSP', 'TATN', 'TATNP', 'TNBP', 'TNBPP', 'TRMK', 'TRNFP']\n",
|
||
"Количество компаний в секторе: 23\n",
|
||
"\n",
|
||
"chemicals:\n",
|
||
"['AKRN', 'AZKM', 'DGBZ', 'DGBZP', 'KAZT', 'KZOS', 'KZOSP', 'MGNZ', 'NKNC', 'NKNCP', 'OMSH', 'PHOR', 'SILV', 'URKA', 'YASH']\n",
|
||
"Количество компаний в секторе: 15\n",
|
||
"\n",
|
||
"electric_utilities:\n",
|
||
"['ARSB', 'BEGY', 'DVEC', 'EESR', 'EESRP', 'ELFV', 'ENRU', 'EONR', 'FEES', 'HYDR', 'IRAO', 'IRGZ', 'KISB', 'KRNG', 'KRSG', 'LSNG', 'LSNGP', 'MGSV', 'MRKC', 'MRKH', 'MRKK', 'MRKP', 'MRKS', 'MRKU', 'MRKV', 'MRKY', 'MRKZ', 'MSNG', 'MSRS', 'MSSB', 'MSSV', 'OGK1', 'OGK2', 'OGK4', 'OGK6', 'OGKA', 'OGKB', 'OGKC', 'OGKD', 'OGKE', 'OGKF', 'RSTI', 'RSTIP', 'SAGO', 'SARE', 'SVER', 'TGKA', 'TGKB', 'TGKD', 'TGKE', 'TGKF', 'TGKH', 'TGKI', 'TGKJ', 'TGKN', 'TNSE', 'UPRO', 'VRAO', 'VTGK', 'YKEN']\n",
|
||
"Количество компаний в секторе: 60\n",
|
||
"\n",
|
||
"telecom:\n",
|
||
"['AFKC', 'AFKS', 'BISV', 'BISVP', 'CMST', 'CNTL', 'CNTLP', 'CTLK', 'DLSV', 'DLSVP', 'MFON', 'MGTS', 'MGTSP', 'MTSI', 'MTSS', 'RTKM', 'RTKMP', 'SPTL', 'SPTLP', 'STKM', 'STKMP', 'TTLK', 'URSI', 'URSIP', 'UTEL', 'VTEL', 'VTELP']\n",
|
||
"Количество компаний в секторе: 27\n",
|
||
"\n",
|
||
"finance:\n",
|
||
"['AFKS', 'BSPB', 'BSPBP', 'CBOM', 'EPLN', 'FTRE', 'LEAS', 'MBNK', 'MMBM', 'MOEX', 'PSBR', 'QIWI', 'RENI', 'ROSB', 'SBER', 'SBERP', 'SFIN', 'SPBE', 'T', 'TAVR', 'TCSG', 'TRHN', 'URSAP', 'VTBR', 'VTBS', 'VZRZ', 'VZRZP', 'YRSL', 'ZAYM']\n",
|
||
"Количество компаний в секторе: 29\n",
|
||
"\n",
|
||
"consumer:\n",
|
||
"['ABIO', 'AGRO', 'APTK', 'AQUA', 'AVAZ', 'AVAZP', 'BELU', 'DELI', 'DIXY', 'DSKY', 'EUTR', 'FIVE', 'FIXP', 'GCHE', 'GEMC', 'GRAZ', 'HNFG', 'ISKJ', 'KLNA', 'LENT', 'LIFE', 'LNTA', 'MDMG', 'MGNT', 'MVID', 'OBUV', 'OKEY', 'ORUP', 'OTCP', 'PHST', 'PKBA', 'PKBAP', 'PRMD', 'PRTK', 'ROST', 'RSEA', 'SCOH', 'SCON', 'SVAV', 'SYNG', 'VFRM', 'VRPH', 'VSEH', 'WBDF', 'WUSH', 'YNDX']\n",
|
||
"Количество компаний в секторе: 46\n",
|
||
"\n",
|
||
"transport:\n",
|
||
"['AFLT', 'FESH', 'FLOT', 'GLTR', 'GTRK', 'NKHP', 'NMTP', 'TAER', 'TRCN', 'UTAR']\n",
|
||
"Количество компаний в секторе: 10\n",
|
||
"\n",
|
||
"Тикер GAZP относится к сектору: oil_gas\n",
|
||
"\n",
|
||
"Статистика по секторам:\n",
|
||
"metals_mining: 34 компаний\n",
|
||
"oil_gas: 23 компаний\n",
|
||
"chemicals: 15 компаний\n",
|
||
"electric_utilities: 60 компаний\n",
|
||
"telecom: 27 компаний\n",
|
||
"finance: 29 компаний\n",
|
||
"consumer: 46 компаний\n",
|
||
"transport: 10 компаний\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import requests\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"def get_index_constituents(index_id):\n",
|
||
" \"\"\"\n",
|
||
" Получение списка компаний, входящих в индекс\n",
|
||
" \"\"\"\n",
|
||
" url = f\"https://iss.moex.com/iss/statistics/engines/stock/markets/index/analytics/{index_id}/tickers.json\"\n",
|
||
" \n",
|
||
" try:\n",
|
||
" response = requests.get(url)\n",
|
||
" response.raise_for_status()\n",
|
||
" data = response.json()\n",
|
||
" \n",
|
||
" if 'tickers' in data:\n",
|
||
" tickers = data['tickers']\n",
|
||
" df = pd.DataFrame(tickers['data'], columns=tickers['columns'])\n",
|
||
" \n",
|
||
" # Возвращаем только список тикеров\n",
|
||
" if 'ticker' in df.columns:\n",
|
||
" return df['ticker'].tolist()\n",
|
||
" return []\n",
|
||
" \n",
|
||
" except requests.exceptions.RequestException as e:\n",
|
||
" print(f\"Ошибка при получении данных: {e}\")\n",
|
||
" return []\n",
|
||
"\n",
|
||
"def get_sector_tickers():\n",
|
||
" \"\"\"\n",
|
||
" Формирование словаря секторов и входящих в них тикеров\n",
|
||
" \"\"\"\n",
|
||
" url = \"https://iss.moex.com/iss/engines/stock/markets/index/securities.json\"\n",
|
||
" \n",
|
||
" try:\n",
|
||
" response = requests.get(url)\n",
|
||
" response.raise_for_status()\n",
|
||
" data = response.json()\n",
|
||
" \n",
|
||
" securities = data['securities']\n",
|
||
" df = pd.DataFrame(securities['data'], columns=securities['columns'])\n",
|
||
" \n",
|
||
" # Определяем основные секторальные индексы MOEX\n",
|
||
" sector_indices = {\n",
|
||
" 'metals_mining': 'MOEXMM', # Металлы и добыча\n",
|
||
" 'oil_gas': 'MOEXOG', # Нефть и газ\n",
|
||
" 'chemicals': 'MOEXCH', # Химия и нефтехимия\n",
|
||
" 'electric_utilities': 'MOEXEU', # Электроэнергетика\n",
|
||
" 'telecom': 'MOEXTL', # Телекоммуникации\n",
|
||
" 'finance': 'MOEXFN', # Финансы\n",
|
||
" 'consumer': 'MOEXCN', # Потребительский сектор\n",
|
||
" 'transport': 'MOEXTN' # Транспорт\n",
|
||
" }\n",
|
||
" \n",
|
||
" # Создаем словарь для хранения тикеров по секторам\n",
|
||
" sector_tickers = {}\n",
|
||
" \n",
|
||
" # Получаем тикеры для каждого сектора\n",
|
||
" for sector, index_id in sector_indices.items():\n",
|
||
" tickers = get_index_constituents(index_id)\n",
|
||
" if tickers:\n",
|
||
" sector_tickers[sector] = tickers\n",
|
||
" else:\n",
|
||
" sector_tickers[sector] = []\n",
|
||
" \n",
|
||
" return sector_tickers\n",
|
||
" \n",
|
||
" except requests.exceptions.RequestException as e:\n",
|
||
" print(f\"Ошибка при получении данных: {e}\")\n",
|
||
" return None\n",
|
||
"\n",
|
||
"# Получаем словарь секторов и тикеров\n",
|
||
"sector_tickers = get_sector_tickers()\n",
|
||
"\n",
|
||
"if sector_tickers:\n",
|
||
" print(\"Тикеры по секторам:\")\n",
|
||
" for sector, tickers in sector_tickers.items():\n",
|
||
" print(f\"\\n{sector}:\")\n",
|
||
" print(tickers)\n",
|
||
" print(f\"Количество компаний в секторе: {len(tickers)}\")\n",
|
||
"\n",
|
||
"# Пример использования словаря для дальнейшей работы\n",
|
||
"def get_sector_by_ticker(ticker, sector_dict):\n",
|
||
" \"\"\"\n",
|
||
" Поиск сектора по тикеру\n",
|
||
" \"\"\"\n",
|
||
" for sector, tickers in sector_dict.items():\n",
|
||
" if ticker in tickers:\n",
|
||
" return sector\n",
|
||
" return None\n",
|
||
"\n",
|
||
"# Сохранение словаря в файл для дальнейшего использования\n",
|
||
"import json\n",
|
||
"\n",
|
||
"def save_sectors_to_file(sector_dict, filename='sector_tickers.json'):\n",
|
||
" \"\"\"\n",
|
||
" Сохранение словаря секторов в JSON файл\n",
|
||
" \"\"\"\n",
|
||
" with open(filename, 'w', encoding='utf-8') as f:\n",
|
||
" json.dump(sector_dict, f, ensure_ascii=False, indent=4)\n",
|
||
"\n",
|
||
"def load_sectors_from_file(filename='sector_tickers.json'):\n",
|
||
" \"\"\"\n",
|
||
" Загрузка словаря секторов из JSON файла\n",
|
||
" \"\"\"\n",
|
||
" try:\n",
|
||
" with open(filename, 'r', encoding='utf-8') as f:\n",
|
||
" return json.load(f)\n",
|
||
" except FileNotFoundError:\n",
|
||
" print(f\"Файл {filename} не найден\")\n",
|
||
" return None\n",
|
||
"\n",
|
||
"# Сохраняем данные\n",
|
||
"if sector_tickers:\n",
|
||
" save_sectors_to_file(sector_tickers)\n",
|
||
"\n",
|
||
"# Пример использования\n",
|
||
"test_ticker = 'GAZP' # например\n",
|
||
"sector = get_sector_by_ticker(test_ticker, sector_tickers)\n",
|
||
"if sector:\n",
|
||
" print(f\"\\nТикер {test_ticker} относится к сектору: {sector}\")\n",
|
||
"else:\n",
|
||
" print(f\"\\nТикер {test_ticker} не найден в секторальных индексах\")\n",
|
||
"\n",
|
||
"# Статистика по секторам\n",
|
||
"if sector_tickers:\n",
|
||
" print(\"\\nСтатистика по секторам:\")\n",
|
||
" for sector, tickers in sector_tickers.items():\n",
|
||
" print(f\"{sector}: {len(tickers)} компаний\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"----\n",
|
||
"----\n",
|
||
"----"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Данные по SBER:\n",
|
||
" BOARDID TRADEDATE SHORTNAME SECID NUMTRADES VALUE OPEN LOW \\\n",
|
||
"0 TQBR 2023-01-03 Сбербанк SBER 55187 3.000248e+09 141.60 141.56 \n",
|
||
"1 TQBR 2023-01-04 Сбербанк SBER 50172 2.419429e+09 141.85 140.75 \n",
|
||
"2 TQBR 2023-01-05 Сбербанк SBER 45764 2.435171e+09 141.60 140.54 \n",
|
||
"3 TQBR 2023-01-06 Сбербанк SBER 34184 1.504731e+09 141.39 140.90 \n",
|
||
"4 TQBR 2023-01-09 Сбербанк SBER 75295 4.480148e+09 141.83 141.65 \n",
|
||
"\n",
|
||
" HIGH LEGALCLOSEPRICE ... MARKETPRICE2 MARKETPRICE3 ADMITTEDQUOTE \\\n",
|
||
"0 143.25 141.65 ... 142.25 142.25 141.65 \n",
|
||
"1 142.28 141.30 ... 141.38 141.38 141.30 \n",
|
||
"2 141.84 141.31 ... 141.20 141.20 141.31 \n",
|
||
"3 141.62 141.14 ... 141.17 141.17 141.14 \n",
|
||
"4 142.99 142.43 ... 142.47 142.47 142.43 \n",
|
||
"\n",
|
||
" MP2VALTRD MARKETPRICE3TRADESVALUE ADMITTEDVALUE WAVAL \\\n",
|
||
"0 2.664724e+09 2.664724e+09 2.664724e+09 0 \n",
|
||
"1 2.119861e+09 2.119861e+09 2.119861e+09 0 \n",
|
||
"2 2.112355e+09 2.112355e+09 2.112355e+09 0 \n",
|
||
"3 1.265432e+09 1.265432e+09 1.265432e+09 0 \n",
|
||
"4 4.151012e+09 4.151012e+09 4.151012e+09 0 \n",
|
||
"\n",
|
||
" TRADINGSESSION CURRENCYID TRENDCLSPR \n",
|
||
"0 3 SUR 0.45 \n",
|
||
"1 3 SUR -0.25 \n",
|
||
"2 3 SUR -0.11 \n",
|
||
"3 3 SUR 0.09 \n",
|
||
"4 3 SUR 0.71 \n",
|
||
"\n",
|
||
"[5 rows x 23 columns]\n",
|
||
"\n",
|
||
"Индекс финансового сектора:\n",
|
||
" INDEX_VALUE INDEX_RETURN\n",
|
||
"TRADEDATE \n",
|
||
"2023-01-03 1000.000000 0.000000\n",
|
||
"2023-01-04 999.745229 -0.000255\n",
|
||
"2023-01-05 997.102317 -0.002644\n",
|
||
"2023-01-06 992.984269 -0.004130\n",
|
||
"2023-01-09 1001.715852 0.008793\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import requests\n",
|
||
"from datetime import datetime, timedelta\n",
|
||
"from typing import List, Dict, Optional\n",
|
||
"import asyncio\n",
|
||
"import aiohttp\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"class MOEXHistoricalData:\n",
|
||
" def __init__(self):\n",
|
||
" self.base_url = \"https://iss.moex.com/iss\"\n",
|
||
" \n",
|
||
" async def get_security_history(\n",
|
||
" self,\n",
|
||
" ticker: str,\n",
|
||
" start_date: str,\n",
|
||
" end_date: str,\n",
|
||
" engine: str = \"stock\",\n",
|
||
" market: str = \"shares\",\n",
|
||
" board: str = \"TQBR\"\n",
|
||
" ) -> pd.DataFrame:\n",
|
||
" \"\"\"\n",
|
||
" Получение исторических данных по отдельному тикеру\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" ticker: Тикер акции\n",
|
||
" start_date: Начальная дата в формате YYYY-MM-DD\n",
|
||
" end_date: Конечная дата в формате YYYY-MM-DD\n",
|
||
" engine: Торговый движок (по умолчанию stock)\n",
|
||
" market: Рынок (по умолчанию shares)\n",
|
||
" board: Режим торгов (по умолчанию TQBR)\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" DataFrame с историческими данными\n",
|
||
" \"\"\"\n",
|
||
" url = f\"{self.base_url}/history/engines/{engine}/markets/{market}/boards/{board}/securities/{ticker}.json\"\n",
|
||
" \n",
|
||
" all_data = []\n",
|
||
" start = 0\n",
|
||
" \n",
|
||
" async with aiohttp.ClientSession() as session:\n",
|
||
" while True:\n",
|
||
" params = {\n",
|
||
" \"from\": start_date,\n",
|
||
" \"till\": end_date,\n",
|
||
" \"start\": start,\n",
|
||
" \"limit\": 100\n",
|
||
" }\n",
|
||
" \n",
|
||
" async with session.get(url, params=params) as response:\n",
|
||
" data = await response.json()\n",
|
||
" \n",
|
||
" # Получаем данные истории\n",
|
||
" history_data = data['history']\n",
|
||
" \n",
|
||
" if not history_data['data']:\n",
|
||
" break\n",
|
||
" \n",
|
||
" # Добавляем данные в общий список\n",
|
||
" all_data.extend(history_data['data'])\n",
|
||
" start += 100\n",
|
||
" \n",
|
||
" if len(history_data['data']) < 100:\n",
|
||
" break\n",
|
||
" \n",
|
||
" # Создаем DataFrame\n",
|
||
" df = pd.DataFrame(all_data, columns=history_data['columns'])\n",
|
||
" \n",
|
||
" # Конвертируем даты и числовые значения\n",
|
||
" df['TRADEDATE'] = pd.to_datetime(df['TRADEDATE'])\n",
|
||
" numeric_columns = ['OPEN', 'HIGH', 'LOW', 'CLOSE', 'VALUE', 'VOLUME']\n",
|
||
" df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric)\n",
|
||
" \n",
|
||
" return df\n",
|
||
"\n",
|
||
" async def get_sector_history(\n",
|
||
" self,\n",
|
||
" sector_tickers: List[str],\n",
|
||
" start_date: str,\n",
|
||
" end_date: str,\n",
|
||
" engine: str = \"stock\",\n",
|
||
" market: str = \"shares\",\n",
|
||
" board: str = \"TQBR\"\n",
|
||
" ) -> Dict[str, pd.DataFrame]:\n",
|
||
" \"\"\"\n",
|
||
" Получение исторических данных по всем тикерам сектора\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" sector_tickers: Список тикеров сектора\n",
|
||
" start_date: Начальная дата в формате YYYY-MM-DD\n",
|
||
" end_date: Конечная дата в формате YYYY-MM-DD\n",
|
||
" engine: Торговый движок (по умолчанию stock)\n",
|
||
" market: Рынок (по умолчанию shares)\n",
|
||
" board: Режим торгов (по умолчанию TQBR)\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" Словарь {тикер: DataFrame с историческими данными}\n",
|
||
" \"\"\"\n",
|
||
" tasks = []\n",
|
||
" for ticker in sector_tickers:\n",
|
||
" task = self.get_security_history(\n",
|
||
" ticker=ticker,\n",
|
||
" start_date=start_date,\n",
|
||
" end_date=end_date,\n",
|
||
" engine=engine,\n",
|
||
" market=market,\n",
|
||
" board=board\n",
|
||
" )\n",
|
||
" tasks.append(task)\n",
|
||
" \n",
|
||
" results = await asyncio.gather(*tasks)\n",
|
||
" return dict(zip(sector_tickers, results))\n",
|
||
"\n",
|
||
" def calculate_sector_index(\n",
|
||
" self,\n",
|
||
" sector_data: Dict[str, pd.DataFrame],\n",
|
||
" weights: Optional[Dict[str, float]] = None\n",
|
||
" ) -> pd.DataFrame:\n",
|
||
" \"\"\"\n",
|
||
" Расчет индекса сектора на основе исторических данных входящих в него компаний\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" sector_data: Словарь с историческими данными по тикерам {тикер: DataFrame}\n",
|
||
" weights: Словарь с весами компаний {тикер: вес}. Если None, веса будут равными\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" DataFrame с рассчитанным индексом сектора\n",
|
||
" \"\"\"\n",
|
||
" # Если веса не указаны, используем равные веса\n",
|
||
" if weights is None:\n",
|
||
" weights = {ticker: 1/len(sector_data) for ticker in sector_data.keys()}\n",
|
||
" \n",
|
||
" # Создаем DataFrame с датами и ценами закрытия для каждого тикера\n",
|
||
" prices_df = pd.DataFrame()\n",
|
||
" \n",
|
||
" for ticker, df in sector_data.items():\n",
|
||
" prices_df[ticker] = df.set_index('TRADEDATE')['CLOSE']\n",
|
||
" \n",
|
||
" # Рассчитываем относительное изменение цен\n",
|
||
" returns_df = prices_df.pct_change()\n",
|
||
" \n",
|
||
" # Рассчитываем взвешенную доходность индекса\n",
|
||
" weighted_returns = pd.DataFrame()\n",
|
||
" for ticker in returns_df.columns:\n",
|
||
" weighted_returns[ticker] = returns_df[ticker] * weights[ticker]\n",
|
||
" \n",
|
||
" index_returns = weighted_returns.sum(axis=1)\n",
|
||
" \n",
|
||
" # Рассчитываем значения индекса\n",
|
||
" index_values = (1 + index_returns).cumprod() * 1000 # Начальное значение 1000\n",
|
||
" \n",
|
||
" # Создаем итоговый DataFrame\n",
|
||
" result_df = pd.DataFrame({\n",
|
||
" 'INDEX_VALUE': index_values,\n",
|
||
" 'INDEX_RETURN': index_returns\n",
|
||
" })\n",
|
||
" \n",
|
||
" return result_df\n",
|
||
"\n",
|
||
"# Пример использования:\n",
|
||
"async def main():\n",
|
||
" moex = MOEXHistoricalData()\n",
|
||
" \n",
|
||
" # Пример получения данных по одному тикеру\n",
|
||
" sber_data = await moex.get_security_history(\n",
|
||
" ticker=\"SBER\",\n",
|
||
" start_date=\"2023-01-01\",\n",
|
||
" end_date=\"2023-12-31\"\n",
|
||
" )\n",
|
||
" print(\"Данные по SBER:\")\n",
|
||
" print(sber_data.head())\n",
|
||
" \n",
|
||
" # Пример получения данных по сектору\n",
|
||
" finance_tickers = ['SBER', 'VTBR', 'MOEX'] # Укороченный список для примера\n",
|
||
" sector_data = await moex.get_sector_history(\n",
|
||
" sector_tickers=finance_tickers,\n",
|
||
" start_date=\"2023-01-01\",\n",
|
||
" end_date=\"2023-12-31\"\n",
|
||
" )\n",
|
||
" \n",
|
||
" # Расчет индекса сектора\n",
|
||
" sector_index = moex.calculate_sector_index(sector_data)\n",
|
||
" print(\"\\nИндекс финансового сектора:\")\n",
|
||
" print(sector_index.head())\n",
|
||
"\n",
|
||
"if __name__ == \"__main__\":\n",
|
||
" await main()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Данные по SBER:\n",
|
||
" BOARDID TRADEDATE SHORTNAME SECID NUMTRADES VALUE OPEN LOW \\\n",
|
||
"0 TQBR 2023-01-03 Сбербанк SBER 55187 3.000248e+09 141.60 141.56 \n",
|
||
"1 TQBR 2023-01-04 Сбербанк SBER 50172 2.419429e+09 141.85 140.75 \n",
|
||
"2 TQBR 2023-01-05 Сбербанк SBER 45764 2.435171e+09 141.60 140.54 \n",
|
||
"3 TQBR 2023-01-06 Сбербанк SBER 34184 1.504731e+09 141.39 140.90 \n",
|
||
"4 TQBR 2023-01-09 Сбербанк SBER 75295 4.480148e+09 141.83 141.65 \n",
|
||
"\n",
|
||
" HIGH LEGALCLOSEPRICE ... MARKETPRICE2 MARKETPRICE3 ADMITTEDQUOTE \\\n",
|
||
"0 143.25 141.65 ... 142.25 142.25 141.65 \n",
|
||
"1 142.28 141.30 ... 141.38 141.38 141.30 \n",
|
||
"2 141.84 141.31 ... 141.20 141.20 141.31 \n",
|
||
"3 141.62 141.14 ... 141.17 141.17 141.14 \n",
|
||
"4 142.99 142.43 ... 142.47 142.47 142.43 \n",
|
||
"\n",
|
||
" MP2VALTRD MARKETPRICE3TRADESVALUE ADMITTEDVALUE WAVAL \\\n",
|
||
"0 2.664724e+09 2.664724e+09 2.664724e+09 0 \n",
|
||
"1 2.119861e+09 2.119861e+09 2.119861e+09 0 \n",
|
||
"2 2.112355e+09 2.112355e+09 2.112355e+09 0 \n",
|
||
"3 1.265432e+09 1.265432e+09 1.265432e+09 0 \n",
|
||
"4 4.151012e+09 4.151012e+09 4.151012e+09 0 \n",
|
||
"\n",
|
||
" TRADINGSESSION CURRENCYID TRENDCLSPR \n",
|
||
"0 3 SUR 0.45 \n",
|
||
"1 3 SUR -0.25 \n",
|
||
"2 3 SUR -0.11 \n",
|
||
"3 3 SUR 0.09 \n",
|
||
"4 3 SUR 0.71 \n",
|
||
"\n",
|
||
"[5 rows x 23 columns]\n",
|
||
"\n",
|
||
"Индекс финансового сектора:\n",
|
||
" INDEX_VALUE INDEX_RETURN\n",
|
||
"TRADEDATE \n",
|
||
"2023-01-03 1000.000000 0.000000\n",
|
||
"2023-01-04 999.745229 -0.000255\n",
|
||
"2023-01-05 997.102317 -0.002644\n",
|
||
"2023-01-06 992.984269 -0.004130\n",
|
||
"2023-01-09 1001.715852 0.008793\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import requests\n",
|
||
"from datetime import datetime, timedelta\n",
|
||
"from typing import List, Dict, Optional\n",
|
||
"import asyncio\n",
|
||
"import aiohttp\n",
|
||
"import numpy as np\n",
|
||
"\n",
|
||
"class MOEXHistoricalData:\n",
|
||
" def __init__(self):\n",
|
||
" self.base_url = \"https://iss.moex.com/iss\"\n",
|
||
" \n",
|
||
" # Словарь соответствия секторов и их индексов на MOEX\n",
|
||
" self.sector_indices = {\n",
|
||
" 'metals_mining': 'MOEXMM', # Индекс Металлов и добычи\n",
|
||
" 'oil_gas': 'MOEXOG', # Индекс Нефти и газа\n",
|
||
" 'chemicals': 'MOEXCH', # Индекс Химии и нефтехимии\n",
|
||
" 'electric_utilities': 'MOEXEU', # Индекс Электроэнергетики\n",
|
||
" 'telecom': 'MOEXTL', # Индекс Телекоммуникаций\n",
|
||
" 'finance': 'MOEXFN', # Индекс Финансов\n",
|
||
" 'consumer': 'MOEXCN', # Индекс Потребительского сектора\n",
|
||
" 'transport': 'MOEXTN' # Индекс Транспорта\n",
|
||
" }\n",
|
||
" \n",
|
||
" async def get_security_history(\n",
|
||
" self,\n",
|
||
" ticker: str,\n",
|
||
" start_date: str,\n",
|
||
" end_date: str,\n",
|
||
" engine: str = \"stock\",\n",
|
||
" market: str = \"shares\",\n",
|
||
" board: str = \"TQBR\"\n",
|
||
" ) -> pd.DataFrame:\n",
|
||
" \"\"\"\n",
|
||
" Получение исторических данных по отдельному тикеру\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" ticker: Тикер акции\n",
|
||
" start_date: Начальная дата в формате YYYY-MM-DD\n",
|
||
" end_date: Конечная дата в формате YYYY-MM-DD\n",
|
||
" engine: Торговый движок (по умолчанию stock)\n",
|
||
" market: Рынок (по умолчанию shares)\n",
|
||
" board: Режим торгов (по умолчанию TQBR)\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" DataFrame с историческими данными\n",
|
||
" \"\"\"\n",
|
||
" url = f\"{self.base_url}/history/engines/{engine}/markets/{market}/boards/{board}/securities/{ticker}.json\"\n",
|
||
" \n",
|
||
" all_data = []\n",
|
||
" start = 0\n",
|
||
" \n",
|
||
" async with aiohttp.ClientSession() as session:\n",
|
||
" while True:\n",
|
||
" params = {\n",
|
||
" \"from\": start_date,\n",
|
||
" \"till\": end_date,\n",
|
||
" \"start\": start,\n",
|
||
" \"limit\": 100\n",
|
||
" }\n",
|
||
" \n",
|
||
" async with session.get(url, params=params) as response:\n",
|
||
" data = await response.json()\n",
|
||
" \n",
|
||
" # Получаем данные истории\n",
|
||
" history_data = data['history']\n",
|
||
" \n",
|
||
" if not history_data['data']:\n",
|
||
" break\n",
|
||
" \n",
|
||
" # Добавляем данные в общий список\n",
|
||
" all_data.extend(history_data['data'])\n",
|
||
" start += 100\n",
|
||
" \n",
|
||
" if len(history_data['data']) < 100:\n",
|
||
" break\n",
|
||
" \n",
|
||
" # Создаем DataFrame\n",
|
||
" df = pd.DataFrame(all_data, columns=history_data['columns'])\n",
|
||
" \n",
|
||
" # Конвертируем даты и числовые значения\n",
|
||
" df['TRADEDATE'] = pd.to_datetime(df['TRADEDATE'])\n",
|
||
" numeric_columns = ['OPEN', 'HIGH', 'LOW', 'CLOSE', 'VALUE', 'VOLUME']\n",
|
||
" df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric)\n",
|
||
" \n",
|
||
" return df\n",
|
||
"\n",
|
||
" async def get_sector_history(\n",
|
||
" self,\n",
|
||
" sector_tickers: List[str],\n",
|
||
" start_date: str,\n",
|
||
" end_date: str,\n",
|
||
" engine: str = \"stock\",\n",
|
||
" market: str = \"shares\",\n",
|
||
" board: str = \"TQBR\"\n",
|
||
" ) -> Dict[str, pd.DataFrame]:\n",
|
||
" \"\"\"\n",
|
||
" Получение исторических данных по всем тикерам сектора\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" sector_tickers: Список тикеров сектора\n",
|
||
" start_date: Начальная дата в формате YYYY-MM-DD\n",
|
||
" end_date: Конечная дата в формате YYYY-MM-DD\n",
|
||
" engine: Торговый движок (по умолчанию stock)\n",
|
||
" market: Рынок (по умолчанию shares)\n",
|
||
" board: Режим торгов (по умолчанию TQBR)\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" Словарь {тикер: DataFrame с историческими данными}\n",
|
||
" \"\"\"\n",
|
||
" tasks = []\n",
|
||
" for ticker in sector_tickers:\n",
|
||
" task = self.get_security_history(\n",
|
||
" ticker=ticker,\n",
|
||
" start_date=start_date,\n",
|
||
" end_date=end_date,\n",
|
||
" engine=engine,\n",
|
||
" market=market,\n",
|
||
" board=board\n",
|
||
" )\n",
|
||
" tasks.append(task)\n",
|
||
" \n",
|
||
" results = await asyncio.gather(*tasks)\n",
|
||
" return dict(zip(sector_tickers, results))\n",
|
||
"\n",
|
||
" async def get_official_sector_index(\n",
|
||
" self,\n",
|
||
" sector: str,\n",
|
||
" start_date: str,\n",
|
||
" end_date: str\n",
|
||
" ) -> pd.DataFrame:\n",
|
||
" \"\"\"\n",
|
||
" Получение официального отраслевого индекса с MOEX\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" sector: Название сектора (ключ из словаря sector_indices)\n",
|
||
" start_date: Начальная дата в формате YYYY-MM-DD\n",
|
||
" end_date: Конечная дата в формате YYYY-MM-DD\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" DataFrame с данными индекса\n",
|
||
" \"\"\"\n",
|
||
" if sector not in self.sector_indices:\n",
|
||
" raise ValueError(f\"Неизвестный сектор: {sector}. Доступные секторы: {list(self.sector_indices.keys())}\")\n",
|
||
" \n",
|
||
" index_ticker = self.sector_indices[sector]\n",
|
||
" url = f\"{self.base_url}/history/engines/stock/markets/index/securities/{index_ticker}.json\"\n",
|
||
" \n",
|
||
" all_data = []\n",
|
||
" start = 0\n",
|
||
" \n",
|
||
" async with aiohttp.ClientSession() as session:\n",
|
||
" while True:\n",
|
||
" params = {\n",
|
||
" \"from\": start_date,\n",
|
||
" \"till\": end_date,\n",
|
||
" \"start\": start,\n",
|
||
" \"limit\": 100\n",
|
||
" }\n",
|
||
" \n",
|
||
" async with session.get(url, params=params) as response:\n",
|
||
" data = await response.json()\n",
|
||
" \n",
|
||
" history_data = data['history']\n",
|
||
" \n",
|
||
" if not history_data['data']:\n",
|
||
" break\n",
|
||
" \n",
|
||
" all_data.extend(history_data['data'])\n",
|
||
" start += 100\n",
|
||
" \n",
|
||
" if len(history_data['data']) < 100:\n",
|
||
" break\n",
|
||
" \n",
|
||
" df = pd.DataFrame(all_data, columns=history_data['columns'])\n",
|
||
" \n",
|
||
" # Конвертируем даты и числовые значения\n",
|
||
" df['TRADEDATE'] = pd.to_datetime(df['TRADEDATE'])\n",
|
||
" numeric_columns = ['OPEN', 'HIGH', 'LOW', 'CLOSE', 'VALUE', 'VOLUME']\n",
|
||
" df[numeric_columns] = df[numeric_columns].apply(pd.to_numeric)\n",
|
||
" \n",
|
||
" return df\n",
|
||
"\n",
|
||
" def calculate_sector_index(\n",
|
||
" self,\n",
|
||
" sector_data: Dict[str, pd.DataFrame],\n",
|
||
" weights: Optional[Dict[str, float]] = None\n",
|
||
" ) -> pd.DataFrame:\n",
|
||
" \"\"\"\n",
|
||
" Расчет индекса сектора на основе исторических данных входящих в него компаний\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" sector_data: Словарь с историческими данными по тикерам {тикер: DataFrame}\n",
|
||
" weights: Словарь с весами компаний {тикер: вес}. Если None, веса будут равными\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" DataFrame с рассчитанным индексом сектора\n",
|
||
" \"\"\"\n",
|
||
" # Если веса не указаны, используем равные веса\n",
|
||
" if weights is None:\n",
|
||
" weights = {ticker: 1/len(sector_data) for ticker in sector_data.keys()}\n",
|
||
" \n",
|
||
" # Создаем DataFrame с датами и ценами закрытия для каждого тикера\n",
|
||
" prices_df = pd.DataFrame()\n",
|
||
" \n",
|
||
" for ticker, df in sector_data.items():\n",
|
||
" prices_df[ticker] = df.set_index('TRADEDATE')['CLOSE']\n",
|
||
" \n",
|
||
" # Рассчитываем относительное изменение цен\n",
|
||
" returns_df = prices_df.pct_change()\n",
|
||
" \n",
|
||
" # Рассчитываем взвешенную доходность индекса\n",
|
||
" weighted_returns = pd.DataFrame()\n",
|
||
" for ticker in returns_df.columns:\n",
|
||
" weighted_returns[ticker] = returns_df[ticker] * weights[ticker]\n",
|
||
" \n",
|
||
" index_returns = weighted_returns.sum(axis=1)\n",
|
||
" \n",
|
||
" # Рассчитываем значения индекса\n",
|
||
" index_values = (1 + index_returns).cumprod() * 1000 # Начальное значение 1000\n",
|
||
" \n",
|
||
" # Создаем итоговый DataFrame\n",
|
||
" result_df = pd.DataFrame({\n",
|
||
" 'INDEX_VALUE': index_values,\n",
|
||
" 'INDEX_RETURN': index_returns\n",
|
||
" })\n",
|
||
" \n",
|
||
" return result_df\n",
|
||
"\n",
|
||
"# Пример использования:\n",
|
||
"async def main():\n",
|
||
" moex = MOEXHistoricalData()\n",
|
||
" \n",
|
||
" # Пример получения данных по одному тикеру\n",
|
||
" sber_data = await moex.get_security_history(\n",
|
||
" ticker=\"SBER\",\n",
|
||
" start_date=\"2023-01-01\",\n",
|
||
" end_date=\"2023-12-31\"\n",
|
||
" )\n",
|
||
" print(\"Данные по SBER:\")\n",
|
||
" print(sber_data.head())\n",
|
||
" \n",
|
||
" # Пример получения данных по сектору\n",
|
||
" finance_tickers = ['SBER', 'VTBR', 'MOEX'] # Укороченный список для примера\n",
|
||
" sector_data = await moex.get_sector_history(\n",
|
||
" sector_tickers=finance_tickers,\n",
|
||
" start_date=\"2023-01-01\",\n",
|
||
" end_date=\"2023-12-31\"\n",
|
||
" )\n",
|
||
" \n",
|
||
" # Расчет индекса сектора\n",
|
||
" sector_index = moex.calculate_sector_index(sector_data)\n",
|
||
" print(\"\\nИндекс финансового сектора:\")\n",
|
||
" print(sector_index.head())\n",
|
||
"\n",
|
||
"if __name__ == \"__main__\":\n",
|
||
" await main()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>BOARDID</th>\n",
|
||
" <th>SECID</th>\n",
|
||
" <th>TRADEDATE</th>\n",
|
||
" <th>SHORTNAME</th>\n",
|
||
" <th>NAME</th>\n",
|
||
" <th>CLOSE</th>\n",
|
||
" <th>OPEN</th>\n",
|
||
" <th>HIGH</th>\n",
|
||
" <th>LOW</th>\n",
|
||
" <th>VALUE</th>\n",
|
||
" <th>DURATION</th>\n",
|
||
" <th>YIELD</th>\n",
|
||
" <th>DECIMALS</th>\n",
|
||
" <th>CAPITALIZATION</th>\n",
|
||
" <th>CURRENCYID</th>\n",
|
||
" <th>DIVISOR</th>\n",
|
||
" <th>TRADINGSESSION</th>\n",
|
||
" <th>VOLUME</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2018-01-03</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5936.24</td>\n",
|
||
" <td>5856.03</td>\n",
|
||
" <td>5936.24</td>\n",
|
||
" <td>5854.65</td>\n",
|
||
" <td>3.564566e+09</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1.066002e+12</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.795751e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2018-01-04</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>6009.94</td>\n",
|
||
" <td>5940.37</td>\n",
|
||
" <td>6009.94</td>\n",
|
||
" <td>5935.96</td>\n",
|
||
" <td>5.683395e+09</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1.079237e+12</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.795751e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2018-01-05</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5990.95</td>\n",
|
||
" <td>5988.89</td>\n",
|
||
" <td>5999.54</td>\n",
|
||
" <td>5956.60</td>\n",
|
||
" <td>5.170026e+09</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1.075825e+12</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.795751e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2018-01-09</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>6022.02</td>\n",
|
||
" <td>5987.07</td>\n",
|
||
" <td>6038.40</td>\n",
|
||
" <td>5972.35</td>\n",
|
||
" <td>7.377819e+09</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1.081405e+12</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.795751e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2018-01-10</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>6026.48</td>\n",
|
||
" <td>6010.55</td>\n",
|
||
" <td>6030.44</td>\n",
|
||
" <td>5971.82</td>\n",
|
||
" <td>5.791063e+09</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1.082207e+12</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.795751e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1726</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2024-11-25</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5870.08</td>\n",
|
||
" <td>6064.07</td>\n",
|
||
" <td>6079.37</td>\n",
|
||
" <td>5853.41</td>\n",
|
||
" <td>1.376984e+10</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>5.920869e+11</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.008651e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1727</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2024-11-26</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5704.27</td>\n",
|
||
" <td>5848.86</td>\n",
|
||
" <td>5905.42</td>\n",
|
||
" <td>5688.20</td>\n",
|
||
" <td>1.967379e+10</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>5.753617e+11</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.008651e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1728</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2024-11-27</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5802.04</td>\n",
|
||
" <td>5744.94</td>\n",
|
||
" <td>5881.01</td>\n",
|
||
" <td>5625.11</td>\n",
|
||
" <td>2.587743e+10</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>5.852239e+11</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.008651e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1729</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2024-11-28</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5942.27</td>\n",
|
||
" <td>5945.16</td>\n",
|
||
" <td>6004.23</td>\n",
|
||
" <td>5850.80</td>\n",
|
||
" <td>1.858550e+10</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>5.993674e+11</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.008651e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1730</th>\n",
|
||
" <td>SNDX</td>\n",
|
||
" <td>MOEXMM</td>\n",
|
||
" <td>2024-11-29</td>\n",
|
||
" <td>Индекс металлов и добычи</td>\n",
|
||
" <td>Индекс МосБиржи металлов и добычи</td>\n",
|
||
" <td>5993.04</td>\n",
|
||
" <td>5952.51</td>\n",
|
||
" <td>6046.36</td>\n",
|
||
" <td>5936.67</td>\n",
|
||
" <td>1.329048e+10</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>6.044888e+11</td>\n",
|
||
" <td>RUB</td>\n",
|
||
" <td>1.008651e+08</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>1731 rows × 18 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" BOARDID SECID TRADEDATE SHORTNAME \\\n",
|
||
"0 SNDX MOEXMM 2018-01-03 Индекс металлов и добычи \n",
|
||
"1 SNDX MOEXMM 2018-01-04 Индекс металлов и добычи \n",
|
||
"2 SNDX MOEXMM 2018-01-05 Индекс металлов и добычи \n",
|
||
"3 SNDX MOEXMM 2018-01-09 Индекс металлов и добычи \n",
|
||
"4 SNDX MOEXMM 2018-01-10 Индекс металлов и добычи \n",
|
||
"... ... ... ... ... \n",
|
||
"1726 SNDX MOEXMM 2024-11-25 Индекс металлов и добычи \n",
|
||
"1727 SNDX MOEXMM 2024-11-26 Индекс металлов и добычи \n",
|
||
"1728 SNDX MOEXMM 2024-11-27 Индекс металлов и добычи \n",
|
||
"1729 SNDX MOEXMM 2024-11-28 Индекс металлов и добычи \n",
|
||
"1730 SNDX MOEXMM 2024-11-29 Индекс металлов и добычи \n",
|
||
"\n",
|
||
" NAME CLOSE OPEN HIGH LOW \\\n",
|
||
"0 Индекс МосБиржи металлов и добычи 5936.24 5856.03 5936.24 5854.65 \n",
|
||
"1 Индекс МосБиржи металлов и добычи 6009.94 5940.37 6009.94 5935.96 \n",
|
||
"2 Индекс МосБиржи металлов и добычи 5990.95 5988.89 5999.54 5956.60 \n",
|
||
"3 Индекс МосБиржи металлов и добычи 6022.02 5987.07 6038.40 5972.35 \n",
|
||
"4 Индекс МосБиржи металлов и добычи 6026.48 6010.55 6030.44 5971.82 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"1726 Индекс МосБиржи металлов и добычи 5870.08 6064.07 6079.37 5853.41 \n",
|
||
"1727 Индекс МосБиржи металлов и добычи 5704.27 5848.86 5905.42 5688.20 \n",
|
||
"1728 Индекс МосБиржи металлов и добычи 5802.04 5744.94 5881.01 5625.11 \n",
|
||
"1729 Индекс МосБиржи металлов и добычи 5942.27 5945.16 6004.23 5850.80 \n",
|
||
"1730 Индекс МосБиржи металлов и добычи 5993.04 5952.51 6046.36 5936.67 \n",
|
||
"\n",
|
||
" VALUE DURATION YIELD DECIMALS CAPITALIZATION CURRENCYID \\\n",
|
||
"0 3.564566e+09 0.0 0.0 2 1.066002e+12 RUB \n",
|
||
"1 5.683395e+09 0.0 0.0 2 1.079237e+12 RUB \n",
|
||
"2 5.170026e+09 0.0 0.0 2 1.075825e+12 RUB \n",
|
||
"3 7.377819e+09 0.0 0.0 2 1.081405e+12 RUB \n",
|
||
"4 5.791063e+09 0.0 0.0 2 1.082207e+12 RUB \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"1726 1.376984e+10 0.0 0.0 2 5.920869e+11 RUB \n",
|
||
"1727 1.967379e+10 0.0 0.0 2 5.753617e+11 RUB \n",
|
||
"1728 2.587743e+10 0.0 0.0 2 5.852239e+11 RUB \n",
|
||
"1729 1.858550e+10 0.0 0.0 2 5.993674e+11 RUB \n",
|
||
"1730 1.329048e+10 0.0 0.0 2 6.044888e+11 RUB \n",
|
||
"\n",
|
||
" DIVISOR TRADINGSESSION VOLUME \n",
|
||
"0 1.795751e+08 3 NaN \n",
|
||
"1 1.795751e+08 3 NaN \n",
|
||
"2 1.795751e+08 3 NaN \n",
|
||
"3 1.795751e+08 3 NaN \n",
|
||
"4 1.795751e+08 3 NaN \n",
|
||
"... ... ... ... \n",
|
||
"1726 1.008651e+08 3 NaN \n",
|
||
"1727 1.008651e+08 3 NaN \n",
|
||
"1728 1.008651e+08 3 NaN \n",
|
||
"1729 1.008651e+08 3 NaN \n",
|
||
"1730 1.008651e+08 3 NaN \n",
|
||
"\n",
|
||
"[1731 rows x 18 columns]"
|
||
]
|
||
},
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"moex = MOEXHistoricalData()\n",
|
||
"\n",
|
||
"# Получение официального индекса металлургического сектора\n",
|
||
"metals_index = await moex.get_official_sector_index(\n",
|
||
" sector='metals_mining',\n",
|
||
" start_date=\"2018-01-01\",\n",
|
||
" end_date=\"2024-12-01\"\n",
|
||
")\n",
|
||
"\n",
|
||
"metals_index"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"['ALRS', 'AMEZ', 'BELO', 'BLNG', 'CHEP', 'CHMF', 'CHMK', 'CHZN', 'ENPG', 'GMKN', 'KBTK', 'KOGK', 'LNZL', 'LNZLP', 'MAGN', 'MGOK', 'MTLR', 'MTLRP', 'NLMK', 'PGIL', 'PLZL', 'PMTL', 'POGR', 'POLY', 'RASP', 'RUAL', 'RUALR', 'SELG', 'SELGP', 'TRMK', 'UGLD', 'UNKL', 'VSMO', 'VSMZ', 'BANE', 'BANEP', 'GAZP', 'JNOSP', 'KRKNP', 'LKOH', 'MFGS', 'MFGSP', 'NOTK', 'NVTK', 'RITK', 'RNFT', 'RNHSP', 'ROSN', 'SIBN', 'SNGS', 'SNGSP', 'TATN', 'TATNP', 'TNBP', 'TNBPP', 'TRMK', 'TRNFP', 'AKRN', 'AZKM', 'DGBZ', 'DGBZP', 'KAZT', 'KZOS', 'KZOSP', 'MGNZ', 'NKNC', 'NKNCP', 'OMSH', 'PHOR', 'SILV', 'URKA', 'YASH', 'ARSB', 'BEGY', 'DVEC', 'EESR', 'EESRP', 'ELFV', 'ENRU', 'EONR', 'FEES', 'HYDR', 'IRAO', 'IRGZ', 'KISB', 'KRNG', 'KRSG', 'LSNG', 'LSNGP', 'MGSV', 'MRKC', 'MRKH', 'MRKK', 'MRKP', 'MRKS', 'MRKU', 'MRKV', 'MRKY', 'MRKZ', 'MSNG', 'MSRS', 'MSSB', 'MSSV', 'OGK1', 'OGK2', 'OGK4', 'OGK6', 'OGKA', 'OGKB', 'OGKC', 'OGKD', 'OGKE', 'OGKF', 'RSTI', 'RSTIP', 'SAGO', 'SARE', 'SVER', 'TGKA', 'TGKB', 'TGKD', 'TGKE', 'TGKF', 'TGKH', 'TGKI', 'TGKJ', 'TGKN', 'TNSE', 'UPRO', 'VRAO', 'VTGK', 'YKEN', 'AFKC', 'AFKS', 'BISV', 'BISVP', 'CMST', 'CNTL', 'CNTLP', 'CTLK', 'DLSV', 'DLSVP', 'MFON', 'MGTS', 'MGTSP', 'MTSI', 'MTSS', 'RTKM', 'RTKMP', 'SPTL', 'SPTLP', 'STKM', 'STKMP', 'TTLK', 'URSI', 'URSIP', 'UTEL', 'VTEL', 'VTELP', 'AFKS', 'BSPB', 'BSPBP', 'CBOM', 'EPLN', 'FTRE', 'LEAS', 'MBNK', 'MMBM', 'MOEX', 'PSBR', 'QIWI', 'RENI', 'ROSB', 'SBER', 'SBERP', 'SFIN', 'SPBE', 'T', 'TAVR', 'TCSG', 'TRHN', 'URSAP', 'VTBR', 'VTBS', 'VZRZ', 'VZRZP', 'YRSL', 'ZAYM', 'ABIO', 'AGRO', 'APTK', 'AQUA', 'AVAZ', 'AVAZP', 'BELU', 'DELI', 'DIXY', 'DSKY', 'EUTR', 'FIVE', 'FIXP', 'GCHE', 'GEMC', 'GRAZ', 'HNFG', 'ISKJ', 'KLNA', 'LENT', 'LIFE', 'LNTA', 'MDMG', 'MGNT', 'MVID', 'OBUV', 'OKEY', 'ORUP', 'OTCP', 'PHST', 'PKBA', 'PKBAP', 'PRMD', 'PRTK', 'ROST', 'RSEA', 'SCOH', 'SCON', 'SVAV', 'SYNG', 'VFRM', 'VRPH', 'VSEH', 'WBDF', 'WUSH', 'YNDX', 'AFLT', 'FESH', 'FLOT', 'GLTR', 'GTRK', 'NKHP', 'NMTP', 'TAER', 'TRCN', 'UTAR']\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from config import sector_tickers\n",
|
||
"hi = [ticker for tickers in sector_tickers.values() for ticker in tickers]\n",
|
||
"print(hi)"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "venv",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.12.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|