Skip to content

byigorduvanov/bybit-tradefi

Repository files navigation

bybit-tradefi

Локальний моніторинг TradFi-інструментів поверх криптобіржових маркетів з фокусом на Bybit. Проєкт збирає каталог інструментів, нормалізує символи, підписується на публічні WebSocket-потоки й віддає актуальні ціни через CLI, HTTP API та WebSocket.

Що вміє

  • відкривати каталог TradFi/RWA-інструментів на Bybit, Gate і Bitget
  • нормалізувати різні біржові символи до спільного формату на кшталт TSLAUSDT
  • стрімити bid / ask / last по одному або кількох символах
  • працювати як JSON-first CLI для локальної автоматизації
  • піднімати локальний FastAPI-сервіс без авторизації

Активний runtime

Актуальна реалізація знаходиться в src/tradfi_monitor/:

  • discovery/bybit.py - discovery і REST-допоміжні методи для Bybit
  • price/clients/ - окремі стрімінгові клієнти для Bybit, Gate, Bitget
  • price/hub.py - єдиний хаб, який зводить оновлення з усіх бірж
  • service/ - локальний HTTP/WebSocket шар на FastAPI
  • cli.py - CLI інтерфейс
  • scanner.py і scripts/run_monitor.py - швидкий локальний запуск

Історичний код з UI, трейдингом і старими артефактами перенесений у legacy/ і не є частиною активного runtime.

Вимоги

  • Python 3.12
  • доступ у мережу до публічних REST/WebSocket endpoint'ів бірж

У репозиторії поки немає pyproject.toml, тому базові залежності винесені в requirements.txt.

Встановлення

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt

httpx потрібен для тестів API, pytest для unit-тестів.

Швидкий старт

Моніторити весь доступний маркет:

python .\scripts\run_monitor.py

Моніторити один символ:

python .\scripts\run_monitor.py TSLAUSDT

Запускати пакет напряму:

$env:PYTHONPATH = (Resolve-Path .\src)
python -m tradfi_monitor watch TSLAUSDT --limit 5

CLI

Основна точка входу:

python .\scripts\run_monitor.py --help

Підтримувані команди:

  • list-symbols
  • validate-symbol
  • subscribe-many
  • watch
  • watch-many
  • serve

Приклади:

python .\scripts\run_monitor.py list-symbols
python .\scripts\run_monitor.py list-symbols --exchange bybit --group Stocks --query TSLA
python .\scripts\run_monitor.py validate-symbol TSLAUSDT
python .\scripts\run_monitor.py subscribe-many TSLAUSDT AAPLUSDT --wait-for-data
python .\scripts\run_monitor.py watch TSLAUSDT --limit 10
python .\scripts\run_monitor.py watch-many TSLAUSDT AAPLUSDT --limit 20
python .\scripts\run_monitor.py serve --host 127.0.0.1 --port 8000

watch і watch-many друкують JSON-рядки з подіями типу subscribed та price, тому їх зручно використовувати у скриптах.

HTTP API

Після запуску:

python .\scripts\run_monitor.py serve

Сервіс доступний за замовчуванням на http://127.0.0.1:8000.

Swagger UI:

  • http://127.0.0.1:8000/docs
  • http://127.0.0.1:8000/redoc

Основні endpoint'и:

  • GET /health
  • GET /symbols
  • GET /symbols/{symbol}/validate
  • POST /subscriptions
  • GET /prices/latest
  • GET /stream-status
  • WS /ws/prices?symbols=TSLAUSDT,AAPLUSDT

Приклади:

curl "http://127.0.0.1:8000/symbols?exchange=bybit&group=Stocks&query=TSLA"
curl "http://127.0.0.1:8000/symbols/TSLAUSDT/validate"
curl "http://127.0.0.1:8000/prices/latest?symbols=TSLAUSDT,AAPLUSDT&wait_for_data=true"

Тіло для POST /subscriptions:

{
  "symbols": ["TSLAUSDT", "AAPLUSDT"],
  "wait_for_data": true,
  "timeout": 10.0
}

WebSocket надсилає повідомлення двох основних типів:

  • subscribed - результат підписки та перелік прийнятих/відхилених символів
  • price - нормалізований snapshot з біржі

Під час простою сервер може надсилати heartbeat.

Нормалізація символів

Проєкт працює з нормалізованими символами, але зберігає сирі біржові ідентифікатори:

  • Bybit: TSLA.S, TSLA, TSLA+ -> TSLAUSDT
  • Gate: TSLAX_USDT, TSLAON_USDT -> TSLAUSDT
  • Bitget: TSLAUSDT -> TSLAUSDT

Це дозволяє:

  • підписуватись на зручний символ для автоматизації
  • не втрачати raw symbol для дебагу або майбутнього order-routing

Структура репозиторію

.
|-- docs/
|   `-- plans/
|-- legacy/
|   |-- artifacts/
|   |-- scripts/
|   |-- tests/
|   |-- trading/
|   `-- ui/
|-- scripts/
|   `-- run_monitor.py
|-- src/
|   `-- tradfi_monitor/
|       |-- discovery/
|       |-- price/
|       |   |-- clients/
|       |   |-- common.py
|       |   `-- hub.py
|       |-- service/
|       |-- cli.py
|       `-- scanner.py
`-- tests/
    `-- unit/

Secrets

Signed MT5 requests now read credentials from local environment variables instead of keeping them in the repository.

$env:BYBIT_API_KEY = "your-bybit-api-key"
$env:BYBIT_API_SECRET = "your-bybit-api-secret"
python .\scripts\run_monitor.py

For manual legacy diagnostics, use the same environment variables before running legacy/tests/test_auth.py directly.

Docker Compose

Підняти локальний HTTP/WebSocket сервіс у контейнері:

docker compose up -d --build

Сервіс буде доступний на http://127.0.0.1:8000.

Базова перевірка контейнера:

curl http://127.0.0.1:8000/health
docker compose ps

Очікуваний health response:

{"ok": true}

Перевірений smoke-check API:

curl "http://127.0.0.1:8000/symbols?exchange=bybit&group=Stocks&query=TSLA"
curl "http://127.0.0.1:8000/symbols/TSLAUSDT/validate"
curl "http://127.0.0.1:8000/prices/latest?symbols=TSLAUSDT&wait_for_data=true&timeout=15"

Перевірений CLI всередині контейнера:

docker compose exec -T app python -m tradfi_monitor validate-symbol TSLAUSDT
docker compose exec -T app python -m tradfi_monitor watch TSLAUSDT --limit 1

/symbols, /prices/latest, watch і WebSocket сценарії потребують виходу з контейнера до публічних REST/WebSocket endpoint'ів бірж.

Корисні команди:

docker compose ps
docker compose logs -f app
docker compose down

Тестування

$env:PYTHONPATH = (Resolve-Path .\src)
python -m pytest .\tests\unit -q

Поточні unit-тести покривають:

  • CLI
  • discovery Bybit
  • multi-exchange price hub
  • FastAPI transport layer
  • service manager

Важливі зауваження

  • HTTP-сервіс локальний і навмисно не має auth-шару.
  • Основний сценарій проєкту зараз це моніторинг, а не трейдинг.
  • Частина історичних сценаріїв збережена в legacy/, але не повинна вважатися production-runtime.
  • У src/tradfi_monitor/discovery/bybit.py є dev-only helper для MT5 account status, який читає ключі тільки зі змінних середовища. Для локальної розробки використовуйте BYBIT_API_KEY і BYBIT_API_SECRET, не зберігаючи їх у репозиторії.

Де продовжувати

  • дизайн-нотатки: docs/plans/
  • активні тести: tests/unit/
  • основна сервісна логіка: src/tradfi_monitor/service/manager.py
  • інтеграція бірж: src/tradfi_monitor/price/clients/

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors