[Infrastruktura tradingowa · Maszyny stanów · Automatyzacja backendu]

Zarządzanie ryzykiem i cykl życia transakcji

Kontrolowany cykl życia operacji tradingowych: każdy sygnał jest weryfikowany regułami ryzyka, przechodzi przez jawne stany i kończy się zapisanym wynikiem.

Przynależność
Podsystem ekosystemu automatyzacji tradingu i AI Astra Raven
Fokus techniczny
State MachinesPythonExchange APIsSQLRisk Validation
Co pokazuje
Maszyny stanów w backendzie · Inżynieria niezawodności · Automatyzacja finansowa · Bazy SQL · Integracja API · Monitoring transakcji

01Przegląd projektu

Wygenerowanie sygnału to tylko połowa zadania. Druga połowa to to, co dzieje się dalej: weryfikacja parametrów, zastosowanie ustawień ryzyka konta, śledzenie pozycji i decyzja, kiedy i jak ją zakończyć.

Ten podsystem modeluje cykl życia w sposób jawny. Transakcja przechodzi przez zdefiniowane stany, a każde przejście jest chronione walidacją i zapisywane w bazie danych.

02Wyzwanie inżynierskie

Automatyzacja tradingu psuje się po cichu: pominięta aktualizacja, częściowe wykonanie, którego nigdy nie uzgodniono, albo błąd giełdy, po którym stan lokalny rozjeżdża się z rzeczywistym. Cykl życia musi takie przypadki ujawniać i umożliwiać ich naprawę.

  • A

    Odrzucać niebezpieczne kombinacje parametrów przed jakąkolwiek próbą operacji.

  • B

    Obsługiwać różne tryby ryzyka i dźwigni dla każdego konta.

  • C

    Zachować spójność stanu lokalnego, gdy wywołanie zewnętrzne się nie powiedzie lub przekroczy czas.

  • D

    Wytworzyć końcowy, audytowalny wynik każdej operacji.

03Architektura rozwiązania

Najedź lub dotknij etapu.

01

Sygnał wejściowy

Ustrukturyzowany sygnał przychodzi z silnika sygnałów lub innego źródła.

04Główne komponenty

  • 01

    Walidator parametrów

    Sprawdza relacje wejścia, stop loss i take profit, zakresy liczbowe i pola wymagane.

  • 02

    Silnik ryzyka

    Stosuje ustawienia konta — tryb ryzyka, dźwignię, limity ekspozycji — i blokuje operacje, które je naruszają.

  • 03

    Maszyna stanów

    Utworzona → Zwalidowana → Aktywna → Częściowo zamknięta → Zamknięta, plus jawne stany „Odrzucona” i „Błąd”.

  • 04

    Integracja z giełdą

    Opakowuje wywołania API klasyfikacją błędów, aby awaria stawała się znanym stanem, a nie crashem.

  • 05

    Dziennik zdarzeń

    Każde przejście jest zapisywane z czasem i powodem, tworząc historię transakcji.

  • 06

    Kontrola wyników

    Ocenia zamknięte operacje i zasila automatyczne raporty.

05Stack technologiczny

Rdzeń

  • Python
  • asyncio
  • State machine design

Integracja

  • Binance Futures API ecosystem
  • Error classification

Dane

  • SQL
  • Event history
  • Reports

06Interaktywna demonstracja

Maszyna stanów cyklu życia transakcji

IlustracjaDemo ilustracyjne. Wywołuj zdarzenia i sprawdź, które przejścia są dozwolone. Uproszczony model, bez połączenia z giełdą.

trade-lifecycle · state machineUtworzona
Utworzona Zwalidowana Aktywna Częściowo zamknięta Zamknięta Odrzucona Błąd

Parametry zlecenia · limity demo

maks. dźwignia
20×
maks. odległość stopu
5%
min. zysk : ryzyko
1.2

state = created · fire an event

07Decyzje inżynierskie

  1. 01

    Jawne stany zamiast flag

    Jedno pole stanu z dozwolonymi przejściami łatwiej walidować i audytować niż zestaw flag logicznych, które mogą sobie przeczyć.

  2. 02

    Błędy to stany

    Awarie API przenoszą operację do stanu „Błąd” z powodem, aby można ją było zbadać i rozwiązać, zamiast ją zgubić.

  3. 03

    Reguły ryzyka w kodzie

    Limity są egzekwowane przez system przed wykonaniem. Błąd konfiguracji nie może ich obejść.

  4. 04

    Historia tylko dopisywana

    Przejścia są zapisywane jako zdarzenia, więc odtworzenie przebiegu jest proste.

08Niezawodność i testy

  • Strażnicy przejść odrzucają niemożliwe zmiany stanu.
  • Klasyfikacja błędów giełdy na ponawialne i ostateczne.
  • Uzgadnianie stanu lokalnego z zewnętrznym po awariach.
  • Testy regresji reguł walidacji ryzyka.

09Przykład kodu

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

Ilustracja Przykład ilustracyjny — uproszczona tabela przejść.

Kod źródłowy produktu jest prywatny. Przykłady pokazują podejście inżynierskie, a nie wewnętrzną logikę. Więcej w Engineering Lab.

10Możliwe kierunki rozwoju

  • Dashboardy ryzyka per konto oparte na zapisanej historii zdarzeń.
  • Tryb symulacji uruchamiający cały cykl na zapisanych danych.
  • Alerty dla operacji, które pozostają w stanie „Błąd” dłużej niż próg.
Następny case · 03 Telegram Mini App i interfejs produktu Rozwój produktu · Inżynieria UI · Integracja z backendem