globalsy_mvp/test.ipynb
belikovme 61b6f03e26 Обновление зависимостей и игнорируемых файлов
- Добавлен yfinance в requirements.txt
- Расширен .gitignore для исключения служебных файлов Python
- Исправлен импорт в currency.py для корректной работы с модулями
2025-03-12 14:49:12 +07:00

2270 lines
103 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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
}