> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ziplime.ru/llms.txt
> Use this file to discover all available pages before exploring further.

# API объекта context

> Поиск инструментов, торговля, расписание и проверка состояния через context

`context` — постоянный объект алгоритма, который передаётся в функции жизненного цикла. Храните в нём состояние стратегии и вызывайте его методы, чтобы находить инструменты, торговать, планировать задачи, проверять состояние портфеля и настраивать ограничения.

## Прямые вызовы через context

Предпочтительно вызывать методы непосредственно у `context`:

```python theme={null}
from ziplime.finance.execution import MarketOrder

asset = await context.symbol("SBER")
await context.order_target_percent(asset, 0.25, style=MarketOrder())
```

Ziplime также предоставляет функции в стиле Zipline через `ziplime.api`, но в асинхронном коде алгоритма прямые вызовы `context` читаются яснее.

## Поиск инструментов

### `await context.symbol(symbol, mic=None, asset_type=AssetType.EQUITY)`

Находит биржевой инструмент по тикеру.

```python theme={null}
context.sber = await context.symbol("SBER")
context.gazp = await context.symbol("GAZP@MISX")
context.lkoh = await context.symbol("LKOH", mic="MISX")
```

Если строка символа содержит `@`, часть после `@` интерпретируется как MIC-код биржи.

### Несколько символов

Рекомендуемый вариант:

```python theme={null}
SYMBOLS = ["SBER", "GAZP", "LKOH"]


async def initialize(context):
    context.assets = [await context.symbol(symbol) for symbol in SYMBOLS]
```

Метод `context.symbols(*symbols)` сохранён для совместимости, но в текущей реализации возвращает список awaitable-объектов. Если вы его используете, соберите результаты через `gather` или дождитесь каждого объекта отдельно:

```python theme={null}
import asyncio

context.assets = await asyncio.gather(*context.symbols("SBER", "GAZP", "LKOH"))
```

### `await context.symbols_universe(name, dt=None)`

Загружает именованный набор символов из сервиса инструментов.

```python theme={null}
context.moex_liquid = await context.symbols_universe(name="MOEX_LIQUID")
```

Имя набора должно быть зарегистрировано в сервисе инструментов. Если `dt` не указан, Ziplime использует текущие дату и время симуляции.

### `await context.sid(sid)`

Находит инструмент по числовому SID.

```python theme={null}
asset = await context.sid(12345)
```

### `await context.future_symbol(symbol, exchange_name=None)`

Находит фьючерсный контракт.

```python theme={null}
contract = await context.future_symbol("SiM5", exchange_name="MOEX")
```

Значение `exchange_name` должно совпадать с именем биржи в конфигурации запуска.

## Время и конфигурация

### `context.get_datetime()`

Возвращает текущие дату и время симуляции.

```python theme={null}
now = context.get_datetime()
```

`context.simulation_dt` содержит ту же текущую временную метку симуляции.

### `context.algorithm.config`

Предоставляет доступ к типизированной конфигурации алгоритма, загруженной из JSON.

```python theme={null}
async def initialize(context):
    cfg = context.algorithm.config
    context.max_weight = cfg.max_weight
```

Шаблон класса конфигурации описан в разделе [«Файл алгоритма»](/language/strategy-language/algorithm-file#конфигурация-алгоритма).

## Доступные методы

| Метод                                                            | Нужен `await`? | Основное назначение                                                        |
| ---------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------- |
| `symbol(symbol, mic=None, asset_type=...)`                       | Да             | Найти акцию или другой биржевой инструмент.                                |
| `symbols(*symbols, **kwargs)`                                    | См. примечание | Вспомогательный метод совместимости; предпочтительнее списковое включение. |
| `symbols_universe(name, dt=None)`                                | Да             | Загрузить именованный набор инструментов.                                  |
| `sid(sid)`                                                       | Да             | Найти инструмент по числовому идентификатору.                              |
| `future_symbol(symbol, exchange_name=None)`                      | Да             | Найти фьючерсный контракт.                                                 |
| `get_datetime()`                                                 | Нет            | Получить текущие дату и время симуляции.                                   |
| `record(**kwargs)`                                               | Нет            | Добавить пользовательские столбцы в итоговую таблицу.                      |
| `schedule_function(func, date_rule=None, time_rule=None, ...)`   | Нет            | Зарегистрировать функцию обратного вызова.                                 |
| `order(asset, amount, style, exchange_name=None)`                | Да             | Купить или продать фиксированное количество.                               |
| `order_percent(asset, percent, style, exchange_name=None)`       | Да             | Изменить позицию на долю текущей стоимости портфеля.                       |
| `order_target(asset, target, style, exchange_name=None)`         | Да             | Привести позицию к целевому числу акций или контрактов.                    |
| `order_target_value(asset, target, style, exchange_name=None)`   | Да             | Привести позицию к целевой денежной экспозиции в валюте портфеля.          |
| `order_target_percent(asset, target, style, exchange_name=None)` | Да             | Привести позицию к целевому весу в портфеле.                               |
| `get_open_orders(asset=None)`                                    | Нет            | Получить открытые заявки.                                                  |
| `get_order(order_id, exchange_name)`                             | Нет            | Получить конкретную заявку.                                                |
| `cancel_order(order_id, exchange_name, relay_status=True)`       | Да             | Отменить открытую заявку.                                                  |
| `set_long_only()`                                                | Нет            | Запретить короткие позиции.                                                |
| `set_max_leverage(max_leverage)`                                 | Нет            | Ограничить плечо счёта.                                                    |
| `set_max_position_size(...)`                                     | Нет            | Ограничить размер позиции.                                                 |
| `set_max_order_size(...)`                                        | Нет            | Ограничить размер одной заявки.                                            |
| `set_max_order_count(max_count)`                                 | Нет            | Ограничить число заявок за день.                                           |
| `attach_pipeline(pipeline, name, ...)`                           | Нет            | Зарегистрировать пайплайн во время инициализации.                          |
| `pipeline_output(name)`                                          | Нет            | Получить результаты подключённого пайплайна после инициализации.           |

## Имена бирж

Большинство методов работы с заявками принимает необязательный параметр `exchange_name`. Если он не указан, Ziplime использует биржу по умолчанию из конфигурации запуска симуляции. В примерах для российского контура используется имя `"MOEX"`.

Указывайте имя биржи явно, если:

* В запуске используется несколько бирж.
* Вы получаете или отменяете заявку через `get_order` или `cancel_order`.
* Вызываете методы портфеля с фильтрацией по бирже.

Строка `exchange_name` — это имя из конфигурации запуска, а не обязательно MIC-код. Если в вашей конфигурации задано другое имя, используйте его вместо `"MOEX"`.
