moex-store


Namemoex-store JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryMOEX Store for Backtrader
upload_time2024-11-06 04:18:59
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseCopyright (c) 2018 The Python Packaging Authority Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords backtrader moex backtesting datafeed store cerebro
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Хранилище (Store) Источников данных Московской биржи MOEX для Backtrader.

Содержание:
1. [Назначение](#назначение)
2. [Установка](#установка)
3. [Применение в Backtrader](#применение-в-backtrader)
4. [Информация по фьючерсам MOEX](#информация-по-фьючерсам-moex)

   4.1. [Пример использования в Backtrader](#пример-использования-в-_backtrader_)
   
   4.2. [Справка по функциям](#справка-по-функциям)


## Назначение

Позволяет осуществить загрузку исторических котировок по инструментам Московской Бирже MOEX с 
информационного сервера биржи iss.moex.com прямо из кода тестирования вашей стратегии в [_backtrader_](https://www.backtrader.ru/). Не требует 
предварительной регистрации и аутентификации при запросе данных. Больше не нужно искать данные по историческим 
котировкам в открытых источниках, сохранять их в файлы и регулярно обновлять. 

## Установка

   ```pip install moex-store```

Установит библиотеку и все необходимые зависимости. Требуется Python `3.9` и выше.

## Применение в Backtrader

### Получение источников данных (котировок)

1. Импортируйте класс Хранилища `MoexStore` из библиотеки `moex_store` в скрипте, где вы инициализируете `cerebro`.
   
   ```python
   from moex_store import MoexStore
   
   ...
   ```
   
2. Создайте экземпляр Хранилища, сохраните его в переменную.

   ```python
   store = MoexStore(write_to_file=True, read_from_file=True)
   ```
   
   Хранилище имеет устанавливаемые пользователем атрибуты:

   - `write_to_file` (по умолчанию `True`) - если `True`, полученных с Биржи котировок на диск в файл `csv` для их 
   визуальной проверки и повторного использования. Запись осуществляется в папку `files_from_moex`, расположенную в 
   папке вашего скрипта. Папка создается в случае ее отсутствия.

   - `read_from_file` (по умолчанию `True`) - если `True`, при повторном запросе Инструмента с теми же параметрами, 
    он будет считан из файла в директории `files_from_moex`, а не запрошен у Биржи. Проверка осуществляется по имени 
   актива, тайм-фрейму, дате-с и дате-по запрошенных котировок.
   
3. Получение котировок осуществляется вызовом метода `get_data` (или `getdata`) экземпляра Хранилища `store`. На примере 
   акций Аэрофлота (тикер на бирже `AFLT`), сохраняем исторические котировки с тайм-фреймом 1 минута с 01 января 2023 
   по 01 января 2024 года в источник данных (DataFeed) `data`, присваивая ему имя `aflt`:

   ```python
   data = store.getdata(sec_id='AFLT', fromdate='01-01-2023', todate='01-01-2024', tf='1m', name='Аэрофлот')
   ```
   
   Все аргументы метода `get_data` являются обязательными, кроме `name` (по умолчанию `None`):

   - `sec_id` - тикер инструмента Мосбиржи ([Код инструмента в торговой системе](https://www.moex.com/ru/spot/issues.aspx)).

   - `fromdate` - дата, с которой будут загружаться котировки.

   - `todate` - дата, по которую будут загружаться котировки.

       Допустимые форматы для `fromdate` и `todate`:
       - datetime (`datetime.datetime(2023, 1, 1)`).
       - строка в формате `'YYYY-MM-DD'` или `'DD-MM-YYYY'`, как в примере выше.

   - `tf` - тайм-фрейм котировки. Допустимые значения:

      - `1m`: 1 минута, 
      - `5m`: 5 минут, 
      - `10m`: 10 минут, 
      - `15m`: 15 минут, 
      - `30m`: 30 минут, 
      - `1h`: 60 минут, 
      - `1d`: день, 
      - `1w`: неделя, 
      - `1M`: месяц, 
      - `1q`: квартал

   - `name` - имя возвращаемого источника данных для отображения на графиках платформы _backtrader_.

   Метод `get_data` возвращает объект [feeds.PandasData](https://www.backtrader.ru/docu/datafeed/datafeed_pandas/) 
   экосистемы _backtrader_, поэтому его можно сразу подгружать в `cerebro` с помощью `cerebro.adddata()`.


4. Добавление Источника данных в движок [cerebro](https://www.backtrader.ru/docu/cerebro/cerebro/) осуществляется стандартно:

   ```python
   cerebro.adddata(data)
   ```

Полный код примера:

```python
from __future__ import (absolute_import, division, print_function,
                    unicode_literals)
import backtrader as bt
from moex_store import MoexStore

def runstrat():
    cerebro = bt.Cerebro(stdstats=False)
    cerebro.addstrategy(bt.Strategy)

    store = MoexStore()
    data = store.getdata("AFLT", "01-01-2023", "01-01-2024", "1h", 'aflt-2023-hour')

    cerebro.adddata(data)
    cerebro.run()
    cerebro.plot(style="bar")


if __name__ == '__main__':
    runstrat()
```

Вывод покажет загруженный Источник данных:

![pict1.png](assets%2Fpict1.png)

Экземпляр Хранилища `store` позволяет осуществлять загрузку нескольких источников данных:

```python
from __future__ import (absolute_import, division, print_function,
                    unicode_literals)
import backtrader as bt
from moex_store import MoexStore
from datetime import datetime

def runstrat():
    cerebro = bt.Cerebro(stdstats=False)
    cerebro.addstrategy(bt.Strategy)

    store = MoexStore(write_to_file=False)
    tf = '1d'
    fromdate = '01-01-2023'
    todate = datetime.today()
    for tiker in ('GAZP', 'NLMK', 'SIH4'):
        data = store.get_data(sec_id=tiker, 
                              fromdate=fromdate, 
                              todate=todate, 
                              tf=tf, name=tiker)
        cerebro.adddata(data)

    cerebro.run()
    cerebro.plot(style='bar')


if __name__ == '__main__':
    runstrat()
```

Источники данных, добавленные в `cerebro`:

![pict2.png](assets%2Fpict2.png)

## Информация по фьючерсам MOEX

Начиная с версии `0.0.7`, библиотека дает возможность получить имена, даты экспирации и другую 
полезную информацию о фьючерсных контрактах. Функции для получения информации помещены в модуль библиотеки `futures`.

Для получения информации о фьючерсе нужно знать код его базового актива. Что такое код базового актива 
фьючерсного контракта? Это уникальный идентификатор (тикер или символ), который используется для обозначения базового 
актива, и на который ссылается фьючерс.

ℹ️ **Информация:**
    Примеры кодов базовых активов:

    1. Фьючерсы на индексы:
        * Фьючерсы на индекс ММВБ (MOEX): `MIX`
        * Фьючерсы на Индекс РТС: `RTS`
    2. Валютные фьючерсы:
        * Фьючерсы на курс доллар США - российский рубль: `Si`
        * Фьючерсы на курс китайский юань – российский рубль: `CNY`
    3. Товарные фьючерсы:
        * Фьючерсы на нефть марки Brent: `BR`
        * Фьючерсы на золото: `GOLD`
    4. Фьючерсы на акции:
        * Фьючерсы на обыкновенные акции ПАО Сбербанк: `SBRF`
        * Фьючерсы на обыкновенные акции ПАО Газпром: `GAZR`

Чтобы найти код базового актива можно воспользоваться функцией:

```python
store.futures.get_all_active_futures(show_table=True)
```

Функция запросит биржу, вернет и откроет в браузере таблицу со всеми активными торгуемыми фьючерсами _на момент ее вызова_. 
Html файл с этой таблицей будет сохранен в папке вашего скрипта:

[active_futures.html](assets%2Factive_futures.html)

⚠️ **Внимание:**
    Активный фьючерсный контракт — это фьючерсный контракт с ближайшей к текущей датой экспирации, который 
    характеризуется наибольшей ликвидностью и объемом торгов на рынке.

В колонках таблицы: 

* код текущего активного фьючерсного контракта `SECID`, 
* его короткое имя `SHORTNAME`, 
* искомый код базового актива `ASSETCODE`, 
* имя фьючерсного контракта `CONTRACTNAME`, 
* тип группы фьючерсного контракта `GROUPTYPE` (пригодится для определения комиссий, см. пост «Комиссия при работе с фьючерсами MOEX»), 
* дата начало торгов текущего активного фьючерсного контракта `FRSTTRADE`, 
* дата его экспирации `LASTTRADEDATE`, 
* количество знаков после запятой в значениях котировок `DECIMALS`,
* минимальный шаг цены `MINSTEP`,
* стоимость шага цены `STEPPRICE`,
* количество контрактов в лоте `LOTVOLUME`,
* и начальное значение гарантийного обеспечения `INITIALMARGIN`

### Пример использования в _backtrader_

В качестве примера использования новых функций `moex-story` разберем кейс, в котором получим котировки фьючерсных 
контрактов на индекс РТС за один прошедший год, начиная с текущей даты:

```python linenums="1"
1. from __future__ import (absolute_import, division, print_function,
2.                         unicode_literals)
3. import backtrader as bt
4. from datetime import datetime, timedelta
5. from moex_store import MoexStore
6. 
7.
8. def runstrat():
9.     cerebro = bt.Cerebro(stdstats=False)
10.    store = MoexStore()
11.    from_date = datetime.today() - timedelta(days=365)  # 2023-09-22
12.    to_date = datetime.today()                          # 2024-09-21
13.    contracts = store.futures.get_contracts_between(asset='RTS', 
14.                                                    from_date=from_date, 
15.                                                    to_date=to_date)
16.    # contracts - ['RIZ3', 'RIH4', 'RIM4', 'RIU4', 'RIZ4']
17.    
18.    for tiker in contracts:
19.        from_date = store.futures.get_previous_contract_exp_date(tiker)
20.        to_date = store.futures.get_contract_exp_date(tiker)
21.        data = store.getdata(sec_id=tiker, 
22.                             fromdate=from_date, todate=to_date, 
23.                             tf='1h', name=tiker)
24.        cerebro.adddata(data)
25.
26.    cerebro.run()
27.    cerebro.plot(style='bar')
28.
29.
30. if __name__ == '__main__':
31.     runstrat()
```

Разберем код по строкам:

* 9 - инициализируем движок `cerebro`
* 10 - инициализируем экземпляр хранилища источников данных `moex-story`
* 11-12 - задаем даты с/по, за которые попросим `moex-story `вернуть коды активных фьючерсных контрактов
* 13 - вызов функции `get_contracts_between()` для получения списка кодов фьючерсных контрактов с даты `from_date` по `to_date`.

    Функция принимает на вход аргументы:

    * `asset` - код базового актива искомого фьючерса, у нас это `RTS`, 
    * `from_date` - дата, на которую функция вернет начальный активный фьючерсный контракт, по умолчанию - текущая дата минус один год,
    * `to_date` - дата, на которую функция вернет конечный активный фьючерсный контракт, по умолчанию - текущая дата.
    
      Тип `from_date` и `to_date` может быть `datetime` или строка вида `'YYYY-MM-DD'` или '`DD-MM-YYYY'`

    Функция вернет список с кодами фьючерсных контрактов, от раннего к позднему. Список начнется с кода активного 
    фьючерсного контракта на дату `from_date` и закончится кодом активного 
    фьючерсного контракта на дату `to_date`. В нашем случае: `['RIZ3', 'RIH4', 'RIM4', 'RIU4', 'RIZ4']`
  
* 18 - проходим циклом по полученному списку с фьючерсными контрактами и для каждого:
* 19 - получаем дату экспирации предыдущего контракта функцией `get_previous_contract_exp_date(tiker)`,
* 20 - дату экспирации самого контракта функцией `get_contract_exp_date(tiker)`,
* 21 - получаем котировки каждого контракта с помощью функции `store.getdata()`, начиная с даты экспирации предыдущего 
  контракта по дату экспирации текущего в цикле. Получаем котировки в виде экземпляра встроенного в _backtrader_ класса 
  источника данных `PandasData`. Подробное описание функции см. в посте [MOEX Store](https://www.backtrader.ru/blog/2024/08/01/moex-store/).
* 24 - добавляем полученный источник данных с котировками фьючерсного контракта в движок `cerebro`.

Котировки фьючерсных контрактов загружены в `cerebro` и готовы к склейке или другим манипуляциям!

![print.png](assets%2Fprint.png)

Обратите внимание, строго говоря, мы загрузи котировки не за год с текущей даты. На дату год назад мы определили 
действующий тогда активный фьючерсный контракт (под капотом функции `get_contracts_between()`) и загрузили его котировки 
с момента экспирации предшествующего ему фьючерсного контракта. Обрезать котировки ровно на год назад, конечно, труда не составит.

### Справка по функциям

Применение:

```python
store = MoexStore()
result = store.futures.function()
```

#### **get_all_active_futures(show_table)**
* Алиас: `all_active`
* Принимает на вход параметр `show_table` (по умолчанию `True`):
    * `True` - результат выводится в виде таблицы в файл `html`, который будет открыт в браузере по умолчанию и сохранен в папку скрипта. Возвращает `None`.
    * `False` - результат вернет в виде списка списков.
* Возвращает информацию об активных фьючерсных контрактах биржи MOEX. Информация представлена в виде таблицы с колонками:
    * код текущего активного фьючерсного контракта `SECID`, 
    * его короткое имя `SHORTNAME`, 
    * код базового актива фьючерсного контракта `ASSETCODE`, 
    * имя фьючерсного контракта `CONTRACTNAME`, 
    * тип группы фьючерсного контракта `GROUPTYPE`, 
    * дата начало торгов текущего активного фьючерсного контракта `FRSTTRADE`, 
    * дата его экспирации `LASTTRADEDATE`, 
    * количество знаков после запятой в значениях котировок `DECIMALS`,
    * минимальный шаг цены `MINSTEP`,
    * стоимость шага цены `STEPPRICE`,
    * количество контрактов в лоте `LOTVOLUME`,
    * начальное значение гарантийного обеспечения `INITIALMARGIN`

#### **get_sec_info(sec_id)**

* Алиас: `info`
* Принимает код инструмента `sec_id` (фьючерсного контракта). Ответ вернется, только если тип инструмента - фьючерс.
* Возвращает словарь с информацией об инструменте. Ключи словаря:
      * Тип ценной бумаги `sectype`
      * Тип группы инструмента `grouptype`
      * Код базового актива фьючерсного контракта `assetcode` 
      * Режим торгов инструмента `board`
      * Тип финансового рынка инструмента `market`
      * Торговая система инструмента `engine`

#### **get_asset_code(sec_id):**

* Алиас: `asset`
* Принимает код инструмента `sec_id` (фьючерсного контракта)
* Возвращает код базового актива фьючерса `assetcode` (строка) 


#### **get_history_stat(asset, to_active, show_table)**
* Алиас: `stat`
* Принимает на вход: 
    * код базового актива фьючерса `asset`
    * параметр `to_active` (по умолчанию `True`):
        * `True` - вернет данные, ограничившись текущим активным фьючерсным контрактом.
        * `False` - вернет полные данные.
    * параметр `show_table` (по умолчанию `True`):
        * `True` - результат выводится в виде таблицы в файле `html`, который будет открыт в браузере по умолчанию и сохранен в папку скрипта. Возвращает `None`.
        * `False` - результат вернет в виде списка списков.
* Возвращает таблицу (или список списков) интервалов торгов всех фьючерсных контрактов для указанного базового актива (список списков). Таблица содержит следующие колонки:
    * Код контракта `secid`
    * Краткое имя контракта `shortname`
    * Дата начала торгов `startdate`
    * Дата экспирация `expdate`
    * Код базового актива `assetcode`
    * Базовый актив `underlyingasset`
    * Торгуется контракт или уже нет `is_traded` (0 - нет, 1- торгуется)
* Пример - результат вызова `get_history_stat('NG')`: [exp_dates.html](assets%2Fexp_dates.html)

#### **get_history_list(asset, to_active)**
* Алиас: `list`
* Принимает код базового актива фьючерса `asset` и параметр `to_active` (по умолчанию `True`):
    * `True` - вернет данные, ограничившись текущим активным фьючерсным контрактом.
    * `False` - вернет полные данные.
* Возвращает список кодов всех торговавшихся фьючерсных контрактов, от поздних к текущему активному (список строк).
* Пример - результат вызова `get_history_list('CNY')`: ['CRM2', 'CRU2', 'CRZ2', 'CRH3', 'CRM3', 'CRU3', 'CRZ3', 'CRH4', 'CRM4', 'CRU4', 'CRZ4']

#### **get_n_last_contracts(asset, n, to_active)**
* Алиас: `nlast`
* Принимает: 
    * код базового актива фьючерса `asset`, 
    * `n` - количество крайних контрактов в списке всех когда-либо торгуемых (`0` - все), 
    * `to_active` - см. выше.
* Возвращает список кодов `n` последних торговавшихся фьючерсных контрактов, от раннего к позднему.

#### **get_contracts_between(asset, from_date, to_date)**
* Алиас: `contracts_between`
* принимает на вход аргументы:
    * `asset` - код базового актива фьючерса, 
    * `from_date` - дата, на которую функция вернет начальный активный фьючерсный контракт, по умолчанию - текущая дата минус один год,
    * `to_date` - дата, на которую функция вернет конечный активный фьючерсный контракт, по умолчанию - текущая дата.
    
      Тип `from_date` и `to_date` может быть `datetime` или строка вида `'YYYY-MM-DD'` или '`DD-MM-YYYY'`

* возвращает список с кодами фьючерсных контрактов, от раннего к позднему, от кода активного 
фьючерсного контракта на дату `from_date` до кода активного фьючерсного контракта на дату `to_date`. 

#### **get_active_contract(asset, date)**
* Алиас: `active` 
* Принимает код базового актива фьючерса `asset` и `date` (по умолчанию - текущая дата) - дату, на которую нужно вернуть код активного фьючерсного контракта.
* Возвращает код активного фючерсного контракта, действовавшего на дату `date`.

#### **get_contract_exp_date(sec_id)**
* Алиас: `expdate`
* Принимает код инструмента `sec_id` (фьючерсного контракта)
* Возвращает дату экспирации фьючерсного контракта `sec_id`. Тип - строка формата `'YYYY-MM-DD'`

#### **get_previous_contract_exp_date(sec_id)**
* Алиас: `prevexpdate`
* Принимает код инструмента `sec_id` (фьючерсного контракта)
* Возвращает дату экспирации фьючерсного контракта, предшествующего контракту `sec_id`. Тип - строка формата `'YYYY-MM-DD'`








            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "moex-store",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "backtrader, moex, backtesting, datafeed, store, cerebro",
    "author": null,
    "author_email": "Celeevo <admin@backtrader.ru>",
    "download_url": "https://files.pythonhosted.org/packages/df/74/1a595701ecb2f02e88c0637b475577dd16c7f4f1b0c84fc8c76504868c3a/moex_store-0.1.0.tar.gz",
    "platform": null,
    "description": "# \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (Store) \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u0431\u0438\u0440\u0436\u0438 MOEX \u0434\u043b\u044f Backtrader.\r\n\r\n\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:\r\n1. [\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435](#\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)\r\n2. [\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430](#\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430)\r\n3. [\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 Backtrader](#\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435-\u0432-backtrader)\r\n4. [\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430\u043c MOEX](#\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f-\u043f\u043e-\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430\u043c-moex)\r\n\r\n   4.1. [\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Backtrader](#\u043f\u0440\u0438\u043c\u0435\u0440-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f-\u0432-_backtrader_)\r\n   \r\n   4.2. [\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c](#\u0441\u043f\u0440\u0430\u0432\u043a\u0430-\u043f\u043e-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c)\r\n\r\n\r\n## \u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\r\n\r\n\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u0411\u0438\u0440\u0436\u0435 MOEX \u0441 \r\n\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0438\u0440\u0436\u0438 iss.moex.com \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0432 [_backtrader_](https://www.backtrader.ru/). \u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \r\n\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \r\n\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0430\u043c \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0445 \u0432 \u0444\u0430\u0439\u043b\u044b \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c. \r\n\r\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n   ```pip install moex-store```\r\n\r\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Python `3.9` \u0438 \u0432\u044b\u0448\u0435.\r\n\r\n## \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 Backtrader\r\n\r\n### \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a)\r\n\r\n1. \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 `MoexStore` \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 `moex_store` \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435, \u0433\u0434\u0435 \u0432\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 `cerebro`.\r\n   \r\n   ```python\r\n   from moex_store import MoexStore\r\n   \r\n   ...\r\n   ```\r\n   \r\n2. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.\r\n\r\n   ```python\r\n   store = MoexStore(write_to_file=True, read_from_file=True)\r\n   ```\r\n   \r\n   \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438\u043c\u0435\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b:\r\n\r\n   - `write_to_file` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `True`) - \u0435\u0441\u043b\u0438 `True`, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0441 \u0411\u0438\u0440\u0436\u0438 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u043d\u0430 \u0434\u0438\u0441\u043a \u0432 \u0444\u0430\u0439\u043b `csv` \u0434\u043b\u044f \u0438\u0445 \r\n   \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0417\u0430\u043f\u0438\u0441\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 `files_from_moex`, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0432 \r\n   \u043f\u0430\u043f\u043a\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u041f\u0430\u043f\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f.\r\n\r\n   - `read_from_file` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `True`) - \u0435\u0441\u043b\u0438 `True`, \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \r\n    \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u043d \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 `files_from_moex`, \u0430 \u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d \u0443 \u0411\u0438\u0440\u0436\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \r\n   \u0430\u043a\u0442\u0438\u0432\u0430, \u0442\u0430\u0439\u043c-\u0444\u0440\u0435\u0439\u043c\u0443, \u0434\u0430\u0442\u0435-\u0441 \u0438 \u0434\u0430\u0442\u0435-\u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a.\r\n   \r\n3. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 `get_data` (\u0438\u043b\u0438 `getdata`) \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 `store`. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \r\n   \u0430\u043a\u0446\u0438\u0439 \u0410\u044d\u0440\u043e\u0444\u043b\u043e\u0442\u0430 (\u0442\u0438\u043a\u0435\u0440 \u043d\u0430 \u0431\u0438\u0440\u0436\u0435 `AFLT`), \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441 \u0442\u0430\u0439\u043c-\u0444\u0440\u0435\u0439\u043c\u043e\u043c 1 \u043c\u0438\u043d\u0443\u0442\u0430 \u0441 01 \u044f\u043d\u0432\u0430\u0440\u044f 2023 \r\n   \u043f\u043e 01 \u044f\u043d\u0432\u0430\u0440\u044f 2024 \u0433\u043e\u0434\u0430 \u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 (DataFeed) `data`, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044f \u0435\u043c\u0443 \u0438\u043c\u044f `aflt`:\r\n\r\n   ```python\r\n   data = store.getdata(sec_id='AFLT', fromdate='01-01-2023', todate='01-01-2024', tf='1m', name='\u0410\u044d\u0440\u043e\u0444\u043b\u043e\u0442')\r\n   ```\r\n   \r\n   \u0412\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 `get_data` \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u043a\u0440\u043e\u043c\u0435 `name` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `None`):\r\n\r\n   - `sec_id` - \u0442\u0438\u043a\u0435\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u041c\u043e\u0441\u0431\u0438\u0440\u0436\u0438 ([\u041a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435](https://www.moex.com/ru/spot/issues.aspx)).\r\n\r\n   - `fromdate` - \u0434\u0430\u0442\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438.\r\n\r\n   - `todate` - \u0434\u0430\u0442\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438.\r\n\r\n       \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u043b\u044f `fromdate` \u0438 `todate`:\r\n       - datetime (`datetime.datetime(2023, 1, 1)`).\r\n       - \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 `'YYYY-MM-DD'` \u0438\u043b\u0438 `'DD-MM-YYYY'`, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435.\r\n\r\n   - `tf` - \u0442\u0430\u0439\u043c-\u0444\u0440\u0435\u0439\u043c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:\r\n\r\n      - `1m`: 1 \u043c\u0438\u043d\u0443\u0442\u0430, \r\n      - `5m`: 5 \u043c\u0438\u043d\u0443\u0442, \r\n      - `10m`: 10 \u043c\u0438\u043d\u0443\u0442, \r\n      - `15m`: 15 \u043c\u0438\u043d\u0443\u0442, \r\n      - `30m`: 30 \u043c\u0438\u043d\u0443\u0442, \r\n      - `1h`: 60 \u043c\u0438\u043d\u0443\u0442, \r\n      - `1d`: \u0434\u0435\u043d\u044c, \r\n      - `1w`: \u043d\u0435\u0434\u0435\u043b\u044f, \r\n      - `1M`: \u043c\u0435\u0441\u044f\u0446, \r\n      - `1q`: \u043a\u0432\u0430\u0440\u0442\u0430\u043b\r\n\r\n   - `name` - \u0438\u043c\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b _backtrader_.\r\n\r\n   \u041c\u0435\u0442\u043e\u0434 `get_data` \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 [feeds.PandasData](https://www.backtrader.ru/docu/datafeed/datafeed_pandas/) \r\n   \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b _backtrader_, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 `cerebro` \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e `cerebro.adddata()`.\r\n\r\n\r\n4. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0432\u0438\u0436\u043e\u043a [cerebro](https://www.backtrader.ru/docu/cerebro/cerebro/) \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e:\r\n\r\n   ```python\r\n   cerebro.adddata(data)\r\n   ```\r\n\r\n\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430:\r\n\r\n```python\r\nfrom __future__ import (absolute_import, division, print_function,\r\n                    unicode_literals)\r\nimport backtrader as bt\r\nfrom moex_store import MoexStore\r\n\r\ndef runstrat():\r\n    cerebro = bt.Cerebro(stdstats=False)\r\n    cerebro.addstrategy(bt.Strategy)\r\n\r\n    store = MoexStore()\r\n    data = store.getdata(\"AFLT\", \"01-01-2023\", \"01-01-2024\", \"1h\", 'aflt-2023-hour')\r\n\r\n    cerebro.adddata(data)\r\n    cerebro.run()\r\n    cerebro.plot(style=\"bar\")\r\n\r\n\r\nif __name__ == '__main__':\r\n    runstrat()\r\n```\r\n\r\n\u0412\u044b\u0432\u043e\u0434 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445:\r\n\r\n![pict1.png](assets%2Fpict1.png)\r\n\r\n\u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 `store` \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445:\r\n\r\n```python\r\nfrom __future__ import (absolute_import, division, print_function,\r\n                    unicode_literals)\r\nimport backtrader as bt\r\nfrom moex_store import MoexStore\r\nfrom datetime import datetime\r\n\r\ndef runstrat():\r\n    cerebro = bt.Cerebro(stdstats=False)\r\n    cerebro.addstrategy(bt.Strategy)\r\n\r\n    store = MoexStore(write_to_file=False)\r\n    tf = '1d'\r\n    fromdate = '01-01-2023'\r\n    todate = datetime.today()\r\n    for tiker in ('GAZP', 'NLMK', 'SIH4'):\r\n        data = store.get_data(sec_id=tiker, \r\n                              fromdate=fromdate, \r\n                              todate=todate, \r\n                              tf=tf, name=tiker)\r\n        cerebro.adddata(data)\r\n\r\n    cerebro.run()\r\n    cerebro.plot(style='bar')\r\n\r\n\r\nif __name__ == '__main__':\r\n    runstrat()\r\n```\r\n\r\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 `cerebro`:\r\n\r\n![pict2.png](assets%2Fpict2.png)\r\n\r\n## \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430\u043c MOEX\r\n\r\n\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 `0.0.7`, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430, \u0434\u0430\u0442\u044b \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \r\n\u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u0445. \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 `futures`.\r\n\r\n\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043a\u043e\u0434 \u0435\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \r\n\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430? \u042d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u0442\u0438\u043a\u0435\u0440 \u0438\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \r\n\u0430\u043a\u0442\u0438\u0432\u0430, \u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0444\u044c\u044e\u0447\u0435\u0440\u0441.\r\n\r\n\u2139\ufe0f **\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f:**\r\n    \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u043e\u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0430\u043a\u0442\u0438\u0432\u043e\u0432:\r\n\r\n    1. \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b:\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u041c\u041c\u0412\u0411 (MOEX): `MIX`\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u0418\u043d\u0434\u0435\u043a\u0441 \u0420\u0422\u0421: `RTS`\r\n    2. \u0412\u0430\u043b\u044e\u0442\u043d\u044b\u0435 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u044b:\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u043a\u0443\u0440\u0441 \u0434\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410 - \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c: `Si`\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u043a\u0443\u0440\u0441 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u044e\u0430\u043d\u044c \u2013 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c: `CNY`\r\n    3. \u0422\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u044b:\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u043d\u0435\u0444\u0442\u044c \u043c\u0430\u0440\u043a\u0438 Brent: `BR`\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u0437\u043e\u043b\u043e\u0442\u043e: `GOLD`\r\n    4. \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u0430\u043a\u0446\u0438\u0438:\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u043a\u0446\u0438\u0438 \u041f\u0410\u041e \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a: `SBRF`\r\n        * \u0424\u044c\u044e\u0447\u0435\u0440\u0441\u044b \u043d\u0430 \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u043a\u0446\u0438\u0438 \u041f\u0410\u041e \u0413\u0430\u0437\u043f\u0440\u043e\u043c: `GAZR`\r\n\r\n\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439:\r\n\r\n```python\r\nstore.futures.get_all_active_futures(show_table=True)\r\n```\r\n\r\n\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442 \u0431\u0438\u0440\u0436\u0443, \u0432\u0435\u0440\u043d\u0435\u0442 \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0442\u043e\u0440\u0433\u0443\u0435\u043c\u044b\u043c\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430\u043c\u0438 _\u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0435 \u0432\u044b\u0437\u043e\u0432\u0430_. \r\nHtml \u0444\u0430\u0439\u043b \u0441 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430:\r\n\r\n[active_futures.html](assets%2Factive_futures.html)\r\n\r\n\u26a0\ufe0f **\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435:**\r\n    \u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u2014 \u044d\u0442\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0441 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u043e\u0439 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \r\n    \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043b\u0438\u043a\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0442\u043e\u0440\u0433\u043e\u0432 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435.\r\n\r\n\u0412 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b: \r\n\r\n* \u043a\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `SECID`, \r\n* \u0435\u0433\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0438\u043c\u044f `SHORTNAME`, \r\n* \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 `ASSETCODE`, \r\n* \u0438\u043c\u044f \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `CONTRACTNAME`, \r\n* \u0442\u0438\u043f \u0433\u0440\u0443\u043f\u043f\u044b \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `GROUPTYPE` (\u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0438\u0441\u0441\u0438\u0439, \u0441\u043c. \u043f\u043e\u0441\u0442 \u00ab\u041a\u043e\u043c\u0438\u0441\u0441\u0438\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430\u043c\u0438 MOEX\u00bb), \r\n* \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0442\u043e\u0440\u0433\u043e\u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `FRSTTRADE`, \r\n* \u0434\u0430\u0442\u0430 \u0435\u0433\u043e \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 `LASTTRADEDATE`, \r\n* \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a `DECIMALS`,\r\n* \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433 \u0446\u0435\u043d\u044b `MINSTEP`,\r\n* \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0448\u0430\u0433\u0430 \u0446\u0435\u043d\u044b `STEPPRICE`,\r\n* \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0432 \u043b\u043e\u0442\u0435 `LOTVOLUME`,\r\n* \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f `INITIALMARGIN`\r\n\r\n### \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 _backtrader_\r\n\r\n\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 `moex-story` \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0435\u0439\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \r\n\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0420\u0422\u0421 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0439 \u0433\u043e\u0434, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u044b:\r\n\r\n```python linenums=\"1\"\r\n1. from __future__ import (absolute_import, division, print_function,\r\n2.                         unicode_literals)\r\n3. import backtrader as bt\r\n4. from datetime import datetime, timedelta\r\n5. from moex_store import MoexStore\r\n6. \r\n7.\r\n8. def runstrat():\r\n9.     cerebro = bt.Cerebro(stdstats=False)\r\n10.    store = MoexStore()\r\n11.    from_date = datetime.today() - timedelta(days=365)  # 2023-09-22\r\n12.    to_date = datetime.today()                          # 2024-09-21\r\n13.    contracts = store.futures.get_contracts_between(asset='RTS', \r\n14.                                                    from_date=from_date, \r\n15.                                                    to_date=to_date)\r\n16.    # contracts - ['RIZ3', 'RIH4', 'RIM4', 'RIU4', 'RIZ4']\r\n17.    \r\n18.    for tiker in contracts:\r\n19.        from_date = store.futures.get_previous_contract_exp_date(tiker)\r\n20.        to_date = store.futures.get_contract_exp_date(tiker)\r\n21.        data = store.getdata(sec_id=tiker, \r\n22.                             fromdate=from_date, todate=to_date, \r\n23.                             tf='1h', name=tiker)\r\n24.        cerebro.adddata(data)\r\n25.\r\n26.    cerebro.run()\r\n27.    cerebro.plot(style='bar')\r\n28.\r\n29.\r\n30. if __name__ == '__main__':\r\n31.     runstrat()\r\n```\r\n\r\n\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u043e\u0434 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c:\r\n\r\n* 9 - \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0432\u0438\u0436\u043e\u043a `cerebro`\r\n* 10 - \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 `moex-story`\r\n* 11-12 - \u0437\u0430\u0434\u0430\u0435\u043c \u0434\u0430\u0442\u044b \u0441/\u043f\u043e, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c `moex-story `\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434\u044b \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432\r\n* 13 - \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `get_contracts_between()` \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u0434\u043e\u0432 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0441 \u0434\u0430\u0442\u044b `from_date` \u043f\u043e `to_date`.\r\n\r\n    \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:\r\n\r\n    * `asset` - \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430, \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e `RTS`, \r\n    * `from_date` - \u0434\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430 \u043c\u0438\u043d\u0443\u0441 \u043e\u0434\u0438\u043d \u0433\u043e\u0434,\r\n    * `to_date` - \u0434\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430.\r\n    \r\n      \u0422\u0438\u043f `from_date` \u0438 `to_date` \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c `datetime` \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0438\u0434\u0430 `'YYYY-MM-DD'` \u0438\u043b\u0438 '`DD-MM-YYYY'`\r\n\r\n    \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043a\u043e\u0434\u0430\u043c\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432, \u043e\u0442 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u043a \u043f\u043e\u0437\u0434\u043d\u0435\u043c\u0443. \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \r\n    \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043d\u0430 \u0434\u0430\u0442\u0443 `from_date` \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u043a\u043e\u0434\u043e\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \r\n    \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043d\u0430 \u0434\u0430\u0442\u0443 `to_date`. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435: `['RIZ3', 'RIH4', 'RIM4', 'RIU4', 'RIZ4']`\r\n  \r\n* 18 - \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0441 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u043c\u0438 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e:\r\n* 19 - \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u0442\u0443 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 `get_previous_contract_exp_date(tiker)`,\r\n* 20 - \u0434\u0430\u0442\u0443 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 `get_contract_exp_date(tiker)`,\r\n* 21 - \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `store.getdata()`, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0434\u0430\u0442\u044b \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \r\n  \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u043e \u0434\u0430\u0442\u0443 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432 \u0446\u0438\u043a\u043b\u0435. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0432 _backtrader_ \u043a\u043b\u0430\u0441\u0441\u0430 \r\n  \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 `PandasData`. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043c. \u0432 \u043f\u043e\u0441\u0442\u0435 [MOEX Store](https://www.backtrader.ru/blog/2024/08/01/moex-store/).\r\n* 24 - \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0432 \u0434\u0432\u0438\u0436\u043e\u043a `cerebro`.\r\n\r\n\u041a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 `cerebro` \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u043a\u043b\u0435\u0439\u043a\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f\u043c!\r\n\r\n![print.png](assets%2Fprint.png)\r\n\r\n\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0441\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0435 \u0437\u0430 \u0433\u043e\u0434 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u044b. \u041d\u0430 \u0434\u0430\u0442\u0443 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \r\n\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u043e\u0433\u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 (\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `get_contracts_between()`) \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0435\u0433\u043e \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \r\n\u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0435\u043c\u0443 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430. \u041e\u0431\u0440\u0435\u0437\u0430\u0442\u044c \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0440\u0443\u0434\u0430 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442.\r\n\r\n### \u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435:\r\n\r\n```python\r\nstore = MoexStore()\r\nresult = store.futures.function()\r\n```\r\n\r\n#### **get_all_active_futures(show_table)**\r\n* \u0410\u043b\u0438\u0430\u0441: `all_active`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `show_table` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `True`):\r\n    * `True` - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0444\u0430\u0439\u043b `html`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `None`.\r\n    * `False` - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0435\u0440\u043d\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u0445 \u0431\u0438\u0440\u0436\u0438 MOEX. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438:\r\n    * \u043a\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `SECID`, \r\n    * \u0435\u0433\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0438\u043c\u044f `SHORTNAME`, \r\n    * \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `ASSETCODE`, \r\n    * \u0438\u043c\u044f \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `CONTRACTNAME`, \r\n    * \u0442\u0438\u043f \u0433\u0440\u0443\u043f\u043f\u044b \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `GROUPTYPE`, \r\n    * \u0434\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0442\u043e\u0440\u0433\u043e\u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `FRSTTRADE`, \r\n    * \u0434\u0430\u0442\u0430 \u0435\u0433\u043e \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 `LASTTRADEDATE`, \r\n    * \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u043a\u043e\u0442\u0438\u0440\u043e\u0432\u043e\u043a `DECIMALS`,\r\n    * \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0433 \u0446\u0435\u043d\u044b `MINSTEP`,\r\n    * \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0448\u0430\u0433\u0430 \u0446\u0435\u043d\u044b `STEPPRICE`,\r\n    * \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0432 \u043b\u043e\u0442\u0435 `LOTVOLUME`,\r\n    * \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f `INITIALMARGIN`\r\n\r\n#### **get_sec_info(sec_id)**\r\n\r\n* \u0410\u043b\u0438\u0430\u0441: `info`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `sec_id` (\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430). \u041e\u0442\u0432\u0435\u0442 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0442\u0438\u043f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 - \u0444\u044c\u044e\u0447\u0435\u0440\u0441.\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435. \u041a\u043b\u044e\u0447\u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f:\r\n      * \u0422\u0438\u043f \u0446\u0435\u043d\u043d\u043e\u0439 \u0431\u0443\u043c\u0430\u0433\u0438 `sectype`\r\n      * \u0422\u0438\u043f \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `grouptype`\r\n      * \u041a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `assetcode` \r\n      * \u0420\u0435\u0436\u0438\u043c \u0442\u043e\u0440\u0433\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `board`\r\n      * \u0422\u0438\u043f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u0440\u044b\u043d\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `market`\r\n      * \u0422\u043e\u0440\u0433\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `engine`\r\n\r\n#### **get_asset_code(sec_id):**\r\n\r\n* \u0410\u043b\u0438\u0430\u0441: `asset`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `sec_id` (\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430)\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430 `assetcode` (\u0441\u0442\u0440\u043e\u043a\u0430) \r\n\r\n\r\n#### **get_history_stat(asset, to_active, show_table)**\r\n* \u0410\u043b\u0438\u0430\u0441: `stat`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434: \r\n    * \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430 `asset`\r\n    * \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `to_active` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `True`):\r\n        * `True` - \u0432\u0435\u0440\u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c.\r\n        * `False` - \u0432\u0435\u0440\u043d\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.\r\n    * \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `show_table` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `True`):\r\n        * `True` - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 `html`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `None`.\r\n        * `False` - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0435\u0440\u043d\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (\u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432) \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0442\u043e\u0440\u0433\u043e\u0432 \u0432\u0441\u0435\u0445 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 (\u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432). \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438:\r\n    * \u041a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `secid`\r\n    * \u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `shortname`\r\n    * \u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u043e\u0440\u0433\u043e\u0432 `startdate`\r\n    * \u0414\u0430\u0442\u0430 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u044f `expdate`\r\n    * \u041a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 `assetcode`\r\n    * \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u043a\u0442\u0438\u0432 `underlyingasset`\r\n    * \u0422\u043e\u0440\u0433\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0438\u043b\u0438 \u0443\u0436\u0435 \u043d\u0435\u0442 `is_traded` (0 - \u043d\u0435\u0442, 1- \u0442\u043e\u0440\u0433\u0443\u0435\u0442\u0441\u044f)\r\n* \u041f\u0440\u0438\u043c\u0435\u0440 - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 `get_history_stat('NG')`: [exp_dates.html](assets%2Fexp_dates.html)\r\n\r\n#### **get_history_list(asset, to_active)**\r\n* \u0410\u043b\u0438\u0430\u0441: `list`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430 `asset` \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `to_active` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e `True`):\r\n    * `True` - \u0432\u0435\u0440\u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c.\r\n    * `False` - \u0432\u0435\u0440\u043d\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0434\u043e\u0432 \u0432\u0441\u0435\u0445 \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432, \u043e\u0442 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c\u0443 (\u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u043a).\r\n* \u041f\u0440\u0438\u043c\u0435\u0440 - \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 `get_history_list('CNY')`: ['CRM2', 'CRU2', 'CRZ2', 'CRH3', 'CRM3', 'CRU3', 'CRZ3', 'CRH4', 'CRM4', 'CRU4', 'CRZ4']\r\n\r\n#### **get_n_last_contracts(asset, n, to_active)**\r\n* \u0410\u043b\u0438\u0430\u0441: `nlast`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442: \r\n    * \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430 `asset`, \r\n    * `n` - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u0442\u043e\u0440\u0433\u0443\u0435\u043c\u044b\u0445 (`0` - \u0432\u0441\u0435), \r\n    * `to_active` - \u0441\u043c. \u0432\u044b\u0448\u0435.\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u0434\u043e\u0432 `n` \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432, \u043e\u0442 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u043a \u043f\u043e\u0437\u0434\u043d\u0435\u043c\u0443.\r\n\r\n#### **get_contracts_between(asset, from_date, to_date)**\r\n* \u0410\u043b\u0438\u0430\u0441: `contracts_between`\r\n* \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:\r\n    * `asset` - \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430, \r\n    * `from_date` - \u0434\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430 \u043c\u0438\u043d\u0443\u0441 \u043e\u0434\u0438\u043d \u0433\u043e\u0434,\r\n    * `to_date` - \u0434\u0430\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430.\r\n    \r\n      \u0422\u0438\u043f `from_date` \u0438 `to_date` \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c `datetime` \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u0438\u0434\u0430 `'YYYY-MM-DD'` \u0438\u043b\u0438 '`DD-MM-YYYY'`\r\n\r\n* \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043a\u043e\u0434\u0430\u043c\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432, \u043e\u0442 \u0440\u0430\u043d\u043d\u0435\u0433\u043e \u043a \u043f\u043e\u0437\u0434\u043d\u0435\u043c\u0443, \u043e\u0442 \u043a\u043e\u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \r\n\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043d\u0430 \u0434\u0430\u0442\u0443 `from_date` \u0434\u043e \u043a\u043e\u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043d\u0430 \u0434\u0430\u0442\u0443 `to_date`. \r\n\r\n#### **get_active_contract(asset, date)**\r\n* \u0410\u043b\u0438\u0430\u0441: `active` \r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u043a\u0442\u0438\u0432\u0430 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u0430 `asset` \u0438 `date` (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0430\u0442\u0430) - \u0434\u0430\u0442\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u0434 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0444\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0435\u0433\u043e \u043d\u0430 \u0434\u0430\u0442\u0443 `date`.\r\n\r\n#### **get_contract_exp_date(sec_id)**\r\n* \u0410\u043b\u0438\u0430\u0441: `expdate`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `sec_id` (\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430)\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0430\u0442\u0443 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 `sec_id`. \u0422\u0438\u043f - \u0441\u0442\u0440\u043e\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 `'YYYY-MM-DD'`\r\n\r\n#### **get_previous_contract_exp_date(sec_id)**\r\n* \u0410\u043b\u0438\u0430\u0441: `prevexpdate`\r\n* \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 `sec_id` (\u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430)\r\n* \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u0430\u0442\u0443 \u044d\u043a\u0441\u043f\u0438\u0440\u0430\u0446\u0438\u0438 \u0444\u044c\u044e\u0447\u0435\u0440\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0443 `sec_id`. \u0422\u0438\u043f - \u0441\u0442\u0440\u043e\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 `'YYYY-MM-DD'`\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n",
    "bugtrack_url": null,
    "license": "Copyright (c) 2018 The Python Packaging Authority  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "MOEX Store for Backtrader",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/Celeevo/moex_store",
        "Issues": "https://github.com/Celeevo/moex_store/issues"
    },
    "split_keywords": [
        "backtrader",
        " moex",
        " backtesting",
        " datafeed",
        " store",
        " cerebro"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b231a2ee09619379606704fa624ba772af10337eda5840e6da9f14a9544cc5ea",
                "md5": "b7464785581fb51f1c602370acea342d",
                "sha256": "4ef39acf31f155026046955cdb098208ee55ec621d31405f2a19acbf4e6e46d4"
            },
            "downloads": -1,
            "filename": "moex_store-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b7464785581fb51f1c602370acea342d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 24281,
            "upload_time": "2024-11-06T04:18:58",
            "upload_time_iso_8601": "2024-11-06T04:18:58.140566Z",
            "url": "https://files.pythonhosted.org/packages/b2/31/a2ee09619379606704fa624ba772af10337eda5840e6da9f14a9544cc5ea/moex_store-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "df741a595701ecb2f02e88c0637b475577dd16c7f4f1b0c84fc8c76504868c3a",
                "md5": "d70c213c64ffc94efb498ca502e27a80",
                "sha256": "e4210deb73f1aad4f17acebbc0f1305e8e71b3e55badb2e1aa5dbb03f538c537"
            },
            "downloads": -1,
            "filename": "moex_store-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d70c213c64ffc94efb498ca502e27a80",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 29800,
            "upload_time": "2024-11-06T04:18:59",
            "upload_time_iso_8601": "2024-11-06T04:18:59.421581Z",
            "url": "https://files.pythonhosted.org/packages/df/74/1a595701ecb2f02e88c0637b475577dd16c7f4f1b0c84fc8c76504868c3a/moex_store-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-06 04:18:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Celeevo",
    "github_project": "moex_store",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "moex-store"
}
        
Elapsed time: 0.35186s