A production-ready wrapper for the Moscow Exchange API
Project description
MOEX Wrapper
🚀 Производственно-готовая обёртка для API Московской Биржи
Современная Python библиотека для работы с API Московской Биржи (MOEX) с поддержкой корректной обработки ошибок, логирования, повторных попыток и ограничения частоты запросов.
✨ Особенности
- 🛡️ Надёжность: Встроенная обработка ошибок и логика повторных попыток
- ⚡ Производительность: Автоматическое ограничение частоты запросов и кэширование
- 📊 Удобство: Прямая интеграция с pandas DataFrame
- 🎨 Логирование: Красивые цветные логи с настраиваемым уровнем детализации
- 🔄 Пагинация: Автоматическая обработка больших наборов данных
- 🐍 Современный Python: Типизация, dataclasses, контекстные менеджеры
📦 Установка
pip install pandas requests
Затем скопируйте файлы из репозитория в ваш проект.
🚀 Быстрый старт
from moex.moex_wrapper import MOEXWrapper
# Создание экземпляра обёртки
moex = MOEXWrapper(verbose=1)
# Поиск ценных бумаг
securities = moex.search_securities("Сбербанк")
print(securities.head())
# Получение рыночных данных
market_data = moex.security_market_data("SBER")
print(f"Последняя цена SBER: {market_data['node']['last']}")
# Получение исторических данных (свечи)
candles = moex.candles_data("SBER", "2023-01-01", "2023-12-31")
print(candles.head())
📖 Подробные примеры
Поиск ценных бумаг
# Поиск по названию компании
yandex_securities = moex.search_securities("Яндекс")
# Фильтрация только обыкновенных акций
yandex_common = moex.get_common_shares("Яндекс")
# Поиск с дополнительными параметрами
securities = moex.search_securities("Газпром", limit=10)
Работа с рыночными данными
# Получение данных для конкретной ценной бумаги
sber_data = moex.security_market_data("SBER")
print(f"Цена: {sber_data['LAST']} RUB")
print(f"Объём торгов: {sber_data['VALTODAY']} RUB")
# Получение данных для всех ценных бумаг рынка
market_data = moex.securities_market_data("stock", "shares", first=50)
for secid, data in market_data.items():
print(f"{secid}: {data['node']['last']} RUB")
Исторические данные (свечи)
# Дневные свечи за год
daily_candles = moex.candles_data("SBER", "2023-01-01", "2023-12-31", interval=24)
# Часовые свечи за месяц
hourly_candles = moex.candles_data("YNDX", "2023-11-01", "2023-11-30", interval=60)
# Минутные свечи за день
minute_candles = moex.candles_data("GAZP", "2023-12-01", "2023-12-01", interval=1)
print(f"Получено {len(daily_candles)} дневных свечей")
print(daily_candles[['open', 'close', 'high', 'low', 'volume']].head())
Информация о структуре биржи
# Получение всех движков
engines = moex.engines()
for engine in engines:
print(f"Движок: {engine['name']} - {engine['title']}")
# Получение рынков для движка акций
stock_markets = moex.markets("stock")
for market in stock_markets:
print(f"Рынок: {market['name']} - {market['title']}")
# Получение режимов торгов
boards = moex.boards("stock", "shares")
for board in boards:
print(f"Режим: {board['boardid']} - {board['title']}")
⚙️ Конфигурация
from moex.moex_wrapper import MOEXWrapper, MOEXConfig
# Пользовательская конфигурация
config = MOEXConfig(
timeout=60, # Таймаут запросов в секундах
max_retries=5, # Максимальное количество повторных попыток
rate_limit_delay=0.1, # Задержка между запросами (10 запросов в секунду)
user_agent="МойПроект/1.0"
)
moex = MOEXWrapper(config=config, verbose=2) # verbose=2 для отладочных логов
🎯 Уровни логирования
verbose=0: Без логированияverbose=1: Основные операции и ошибки (по умолчанию)verbose=2: Подробная отладочная информация
🔄 Контекстный менеджер
# Автоматическое закрытие сессии
with MOEXWrapper() as moex:
data = moex.search_securities("Сбербанк")
# Сессия автоматически закроется при выходе из блока
📊 Интервалы для свечей
1- Минутные свечи10- 10-минутные свечи60- Часовые свечи24- Дневные свечи (по умолчанию)7- Недельные свечи31- Месячные свечи
🛠️ API Reference
Основные методы
search_securities(query: str, **kwargs) -> pd.DataFrame
Поиск ценных бумаг по строке запроса.
Параметры:
query: Строка поиска**kwargs: Дополнительные параметры API
Возвращает: DataFrame с найденными ценными бумагами
security_market_data(security: str, currency: Optional[str] = None) -> Optional[Dict]
Получение рыночных данных для ценной бумаги.
Параметры:
security: ID ценной бумаги (например, "SBER")currency: Фильтр по валюте (опционально)
Возвращает: Словарь с рыночными данными или None
candles_data(security: str, from_date: str, till_date: str, interval: int = 24) -> pd.DataFrame
Получение исторических данных (свечей).
Параметры:
security: ID ценной бумагиfrom_date: Дата начала (YYYY-MM-DD)till_date: Дата окончания (YYYY-MM-DD)interval: Интервал свечей в минутах
Возвращает: DataFrame с данными свечей
Служебные методы
engines()- Получить все движкиmarkets(engine)- Получить рынки для движкаboards(engine, market)- Получить режимы торговsecurity_definition(security)- Получить определение ценной бумаги
⚠️ Обработка ошибок
from moex.moex_wrapper import MOEXAPIError, MOEXError
try:
data = moex.security_market_data("INVALID_SECID")
except MOEXAPIError as e:
print(f"Ошибка API: {e}")
print(f"Код ответа: {e.status_code}")
except MOEXError as e:
print(f"Общая ошибка MOEX: {e}")
🔍 Примеры анализа данных
import matplotlib.pyplot as plt
# Получение и визуализация дневных свечей
candles = moex.candles_data("SBER", "2023-01-01", "2023-12-31")
# Построение графика цены закрытия
plt.figure(figsize=(12, 6))
plt.plot(candles.index, candles['close'])
plt.title('Динамика цены акций Сбербанка в 2023 году')
plt.xlabel('Дата')
plt.ylabel('Цена закрытия (RUB)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# Расчёт простой скользящей средней
candles['sma_20'] = candles['close'].rolling(window=20).mean()
candles['sma_50'] = candles['close'].rolling(window=50).mean()
📝 Требования
- Python 3.7+
- pandas
- requests
🤝 Вклад в проект
Мы приветствуем вклад в развитие проекта! Пожалуйста:
- Форкните репозиторий
- Создайте ветку для вашей функции (
git checkout -b feature/amazing-feature) - Закоммитьте изменения (
git commit -m 'Добавить amazing-feature') - Запушьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
📄 Лицензия
Этот проект лицензирован под лицензией MIT - см. файл LICENSE для подробностей.
📞 Поддержка
Если у вас есть вопросы или предложения, пожалуйста:
- Создайте issue в репозитории
- Ознакомьтесь с документацией API MOEX: https://iss.moex.com/iss/reference/
Сделано с ❤️ для российского финтех-сообщества
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file moex_wrapper-0.1.0.tar.gz.
File metadata
- Download URL: moex_wrapper-0.1.0.tar.gz
- Upload date:
- Size: 17.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea8a721cb62201f9913e6f99718c4f458a75d207e67b2c908ce3e8a38566e9de
|
|
| MD5 |
782672a85847f306a455e9b8bed27a73
|
|
| BLAKE2b-256 |
049b86b23c5feca23788f912d2f92a7880dfafc07bc685db350c312f870e7766
|
File details
Details for the file moex_wrapper-0.1.0-py3-none-any.whl.
File metadata
- Download URL: moex_wrapper-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c342e477b70f5221d9029a06d450cc9d216d5c4815b5fae698a942a467220f8d
|
|
| MD5 |
de386d377df92b2f1f1958a3a3d3a693
|
|
| BLAKE2b-256 |
a853d05957e145ada1aa78e453f8ff23eb9c6328ff7c0485aa4704f19ca2ff6e
|