> ## 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, доступный внутри файла алгоритма Ziplime от Финама

В этом разделе описан API, доступный внутри файла алгоритма Ziplime от Финама. Сам файл алгоритма представляет собой обычный Python-код, а Ziplime дополняет его компактным событийным API:

* `context` хранит состояние стратегии и предоставляет торговые функции.
* `data` предоставляет доступ к текущим и историческим рыночным данным.
* Функции жизненного цикла сообщают Ziplime, когда нужно выполнить настройку, торговую логику, подготовку к сессии и анализ результатов.

Основная работа стратегии выполняется в двух функциях:

```python theme={null}
async def initialize(context):
    ...

async def handle_data(context, data):
    ...
```

## Модель работы

`initialize` — блок настройки. В нём находят инструменты, сохраняют параметры, регистрируют функции по расписанию и задают ограничения.

`handle_data` — блок торговой логики. Он запускается на каждом сформированном баре, читает `data`, проверяет состояние портфеля, размещает заявки и записывает метрики.

`before_trading_start` — необязательная функция ежедневной подготовки. Используйте её для выбора набора инструментов на день или получения результатов пайплайна. Не размещайте в ней заявки.

`analyze` — необязательная функция формирования отчёта после завершения бэктеста.

## Минимальный алгоритм

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

SYMBOLS = ["SBER", "GAZP", "LKOH"]


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


async def handle_data(context, data):
    if context.has_rebalanced:
        return

    weight = 1.0 / len(context.assets)
    for asset in context.assets:
        await context.order_target_percent(
            asset=asset,
            target=weight,
            style=MarketOrder(),
        )

    context.has_rebalanced = True
    context.record(target_weight=weight, cash=context.portfolio.cash)
```

## Основные объекты

| Объект              | Где доступен                                                       | Назначение                                                  |
| ------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------- |
| `context`           | Во всех функциях жизненного цикла                                  | Постоянное состояние стратегии и торговый API               |
| `data`              | В `handle_data`, запланированных функциях и `before_trading_start` | Текущие и исторические данные                               |
| `context.portfolio` | В любое время после инициализации                                  | Денежные средства, стоимость портфеля, позиции и доходность |
| `context.account`   | В любое время после инициализации                                  | Показатели счёта и кредитного плеча                         |
| `perf`              | В `analyze(context, perf)`                                         | Итоговая таблица результатов                                |

## Простое правило для async

Используйте `await` при вызове функций, которые загружают данные, находят инструменты, размещают или отменяют заявки:

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

asset = await context.symbol("SBER")
prices = await data.history(assets=[asset], fields=["close"], bar_count=20)
order = await context.order_target_percent(asset, 0.25, style=MarketOrder())
```

В текущей версии среды:

| Функция                               | Должна быть асинхронной? | Примечание                                                                             |
| ------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------- |
| `initialize(context)`                 | Да                       | Ziplime ожидает её через `await`.                                                      |
| `handle_data(context, data)`          | Да                       | Ziplime ожидает её через `await` на каждом баре.                                       |
| Запланированные функции               | Да                       | Ziplime ожидает через `await` функции, зарегистрированные методом `schedule_function`. |
| `before_trading_start(context, data)` | Нет                      | Вызывается синхронно.                                                                  |
| `analyze(context, perf)`              | Нет                      | Вызывается синхронно после завершения запуска.                                         |

## Карта API

| Задача                       | Основные функции                                                                                                                                  |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Найти инструменты            | `context.symbol`, `context.sid`, `context.future_symbol`, `context.symbols_universe`                                                              |
| Получить текущие данные      | `await data.current(...)`                                                                                                                         |
| Получить историческое окно   | `await data.history(...)`                                                                                                                         |
| Разместить заявку            | `context.order`, `context.order_target`, `context.order_target_percent`, `context.order_percent`, `context.order_target_value`                    |
| Проверить заявки             | `context.get_open_orders`, `context.get_order`, `context.cancel_order`                                                                            |
| Проверить портфель           | `context.portfolio`, `context.account`, вспомогательные методы портфеля                                                                           |
| Записать метрики             | `context.record(...)`                                                                                                                             |
| Запланировать функции        | `context.schedule_function(...)`, `date_rules`, `time_rules`                                                                                      |
| Настроить ограничения        | `context.set_long_only`, `context.set_max_leverage`, `context.set_max_position_size`, `context.set_max_order_size`, `context.set_max_order_count` |
| Использовать пайплайны       | `context.attach_pipeline`, `context.pipeline_output`                                                                                              |
| Перенести старый код Zipline | [«Миграция с классического Zipline»](/language/strategy-language/zipline-migration)                                                               |

## Рекомендуемый порядок чтения

1. [Файл алгоритма](/language/strategy-language/algorithm-file)
2. [API объекта context](/language/strategy-language/context-api)
3. [Рыночные данные](/language/strategy-language/market-data)
4. [Заявки](/language/strategy-language/orders)
5. [Портфель и запись метрик](/language/strategy-language/portfolio-and-recording)
6. [Расписание и ограничения](/language/strategy-language/scheduling-and-controls)
7. [Пайплайны](/language/strategy-language/pipelines)
8. [Миграция с классического Zipline](/language/strategy-language/zipline-migration)
