[Торгова інфраструктура · State machines · Backend-автоматизація]
Керування ризиками та життєвий цикл угод
Контрольований життєвий цикл торгових операцій: кожен сигнал перевіряється за правилами ризику, проходить через явні стани й закривається із записаним результатом.
01Огляд проєкту
Згенерувати сигнал — лише половина задачі. Друга половина — що відбувається далі: перевірка параметрів, застосування налаштувань ризику акаунта, відстеження позиції та рішення, коли й як її завершити.
Ця підсистема описує життєвий цикл явно. Угода проходить через визначені стани, а кожен перехід захищений перевіркою та записується в базу даних.
02Інженерна задача
Торгова автоматизація ламається тихо: пропущене оновлення, часткове виконання, яке так і не звірили, або помилка біржі, після якої локальний стан розходиться з реальним. Життєвий цикл має робити такі випадки видимими та відновлюваними.
- A
Відхиляти небезпечні поєднання параметрів до будь-якої спроби операції.
- B
Підтримувати різні режими ризику та плеча для кожного акаунта.
- C
Зберігати узгодженість локального стану під час збою або таймауту зовнішнього виклику.
- D
Формувати підсумковий результат, який можна перевірити, для кожної операції.
03Архітектура рішення
Наведіть або натисніть на етап.
Вхідний сигнал
Структурований сигнал надходить від рушія сигналів або іншого джерела.
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 життєвого циклу угоди
ІлюстраціяІлюстративне демо. Запускайте події та дивіться, які переходи дозволені. Спрощена модель без підключення до біржі.
state = created · fire an event
07Інженерні рішення
- 01
Явні стани замість прапорців
Одне поле стану з дозволеними переходами простіше перевіряти й аудитувати, ніж набір булевих прапорців, що можуть суперечити один одному.
- 02
Помилки — це стани
Збої API переводять операцію в стан «Помилка» з причиною, щоб її можна було дослідити й вирішити, а не загубити.
- 03
Правила ризику в коді
Ліміти застосовуються системою до виконання. Помилка в конфігурації не може їх обійти.
- 04
Історія лише дописується
Переходи записуються як події, тому відновити, що сталося, просто.
08Надійність і тестування
- Захист переходів відхиляє неможливі зміни стану.
- Класифікація помилок біржі на повторювані та остаточні.
- Звірка локального стану із зовнішнім після збоїв.
- Регресійні тести правил перевірки ризику.
09Приклад коду
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Можливий розвиток
- Дашборди ризиків за акаунтами на основі збереженої історії подій.
- Режим симуляції, що проганяє весь цикл на записаних даних.
- Алерти щодо операцій, які перебувають у стані «Помилка» довше за поріг.