[Торговая инфраструктура · State machines · Backend-автоматизация]

Управление рисками и жизненный цикл сделок

Контролируемый жизненный цикл торговых операций: каждый сигнал проверяется по правилам риска, проходит через явные состояния и закрывается с записанным результатом.

Принадлежность
Подсистема экосистемы торговой и AI-автоматизации Astra Raven
Технический фокус
State MachinesPythonExchange APIsSQLRisk Validation
Что демонстрирует
Backend state machines · Инженерия надёжности · Финансовая автоматизация · SQL-базы данных · Интеграция API · Мониторинг сделок

01Обзор проекта

Сгенерировать сигнал — только половина задачи. Вторая половина — что происходит дальше: проверка параметров, применение настроек риска аккаунта, отслеживание позиции и решение, когда и как её завершить.

Эта подсистема описывает жизненный цикл явно. Сделка проходит через определённые состояния, а каждый переход защищён проверкой и записывается в базу данных.

02Инженерная задача

Торговая автоматизация ломается тихо: пропущенное обновление, частичное исполнение, которое так и не сверили, или ошибка биржи, после которой локальное состояние расходится с реальным. Жизненный цикл должен делать такие случаи видимыми и восстанавливаемыми.

  • A

    Отклонять опасные сочетания параметров до любой попытки операции.

  • B

    Поддерживать разные режимы риска и плеча для каждого аккаунта.

  • C

    Сохранять согласованность локального состояния при сбое или таймауте внешнего вызова.

  • D

    Формировать итоговый, проверяемый результат для каждой операции.

03Архитектура решения

Наведите или нажмите на этап.

01

Входящий сигнал

Структурированный сигнал приходит от движка сигналов или другого источника.

04Основные компоненты

  • 01

    Проверка параметров

    Проверяет соотношения входа, стоп-лосса и тейк-профита, числовые границы и обязательные поля.

  • 02

    Движок рисков

    Применяет настройки аккаунта — режим риска, плечо, лимиты экспозиции — и блокирует операции, которые их нарушают.

  • 03

    State machine

    Создана → Проверена → Активна → Частично закрыта → Закрыта, плюс явные состояния «Отклонена» и «Ошибка».

  • 04

    Интеграция с биржей

    Оборачивает вызовы API классификацией ошибок, чтобы сбой становился известным состоянием, а не падением.

  • 05

    Журнал событий

    Каждый переход сохраняется с временем и причиной, формируя историю сделки.

  • 06

    Проверка результата

    Оценивает закрытые операции и наполняет автоматические отчёты.

05Технологический стек

Ядро

  • Python
  • asyncio
  • State machine design

Интеграция

  • Binance Futures API ecosystem
  • Error classification

Данные

  • SQL
  • Event history
  • Reports

06Интерактивная демонстрация

State machine жизненного цикла сделки

ИллюстрацияИллюстративное демо. Запускайте события и смотрите, какие переходы разрешены. Упрощённая модель, без подключения к бирже.

trade-lifecycle · state machineСоздана
Создана Проверена Активна Частично закрыта Закрыта Отклонена Ошибка

Параметры ордера · демо-лимиты

макс. плечо
20×
макс. дистанция стопа
5%
мин. прибыль : риск
1.2

state = created · fire an event

07Инженерные решения

  1. 01

    Явные состояния вместо флагов

    Одно поле состояния с разрешёнными переходами проще проверять и аудировать, чем набор булевых флагов, которые могут противоречить друг другу.

  2. 02

    Ошибки — это состояния

    Сбои API переводят операцию в состояние «Ошибка» с причиной, чтобы её можно было изучить и разрешить, а не потерять.

  3. 03

    Правила риска в коде

    Лимиты применяются системой до исполнения. Ошибка в конфигурации не может их обойти.

  4. 04

    История только дописывается

    Переходы записываются как события, поэтому восстановить, что произошло, просто.

08Надёжность и тестирование

  • Защита переходов отклоняет невозможные смены состояния.
  • Классификация ошибок биржи на повторяемые и окончательные.
  • Сверка локального состояния с внешним после сбоев.
  • Регрессионные тесты правил проверки риска.

09Пример кода

trade_state.py python
from enum import Enum

class TradeState(str, Enum):
    CREATED = "created"
    VALIDATED = "validated"
    ACTIVE = "active"
    PARTIALLY_CLOSED = "partially_closed"
    CLOSED = "closed"
    REJECTED = "rejected"
    ERROR = "error"

ALLOWED: dict[TradeState, set[TradeState]] = {
    TradeState.CREATED: {TradeState.VALIDATED, TradeState.REJECTED},
    TradeState.VALIDATED: {TradeState.ACTIVE, TradeState.REJECTED, TradeState.ERROR},
    TradeState.ACTIVE: {TradeState.PARTIALLY_CLOSED, TradeState.CLOSED, TradeState.ERROR},
    TradeState.PARTIALLY_CLOSED: {TradeState.CLOSED, TradeState.ERROR},
    TradeState.ERROR: {TradeState.ACTIVE, TradeState.CLOSED},
}

class InvalidTransition(Exception):
    pass

def transition(current: TradeState, target: TradeState) -> TradeState:
    if target not in ALLOWED.get(current, set()):
        raise InvalidTransition(f"{current.value} -> {target.value} is not allowed")
    return target

Иллюстрация Иллюстративный инженерный пример — упрощённая таблица переходов.

Исходный код продукта закрыт. Примеры показывают инженерный подход, а не внутреннюю логику. Больше — в Engineering Lab.

10Возможное развитие

  • Дашборды рисков по аккаунтам на основе сохранённой истории событий.
  • Режим симуляции, прогоняющий весь цикл на записанных данных.
  • Алерты по операциям, которые находятся в состоянии «Ошибка» дольше порога.
Следующий кейс · 03 Telegram Mini App и интерфейс продукта Продуктовая разработка · UI-инженерия · Интеграция с бэкендом