Практический market making / spread-capture бот для Bybit linear perpetual с хранением данных в parquet, event-driven бэктестом, rolling WFA, Optuna-оптимизацией, dry-run/live runtime и Telegram-мониторингом.
Исходный workspace для этой сборки был пустым, поэтому текущий репозиторий представляет собой полноценную рабочую baseline-реализацию, а не буквальный рефактор уже существующего локального кода стратегии. Архитектура намеренно оставлена компактной, а стратегическая логика собрана в одном файле.
repo/
pyproject.toml
README.md
.env.example
Dockerfile
docker-compose.yml
Makefile
configs/
data/
logs/
src/
scripts/
tests/
python3 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
cp .env.example .envКлючевые переменные:
APP_ENVLOG_LEVELEXCHANGESYMBOLMARKET_TYPEDRY_RUNLIVE_TRADING_ENABLEDBYBIT_API_KEYBYBIT_API_SECRETBYBIT_TESTNETTELEGRAM_BOT_TOKENTELEGRAM_CHAT_IDENABLE_TELEGRAMENABLE_TELEGRAM_TRADE_CONTROLDATA_DIRLOG_DIRCONFIG_PATHAPP_NAMEMAKER_FEE_BPSTAKER_FEE_BPSMAX_INVENTORYHARD_INVENTORY_LIMITORDER_SIZEMIN_SPREAD_BPSMAX_SPREAD_BPSVOLATILITY_MULTIPLIERINVENTORY_SKEW_COEFFICIENTTOXICITY_THRESHOLDCANCEL_EDGE_BPSMAX_QUOTE_AGE_SECONDSMAX_DATA_STALENESS_SECONDSMAX_VOLATILITY_BPSEMERGENCY_FLATTEN_PNLEMERGENCY_FLATTEN_INVENTORYHISTORICAL_LOOKBACK_DAYSLIVE_LOOP_INTERVAL_MSLATENCY_MS
make install
make test
make download
make record
make backtest
make wfa
make optuna
make live
make telegramПрямые entrypoints:
python scripts/download_data.py
python scripts/record_data.py
python scripts/run_backtest.py
python scripts/run_wfa.py
python scripts/run_optuna.py
python scripts/run_live.py
python scripts/run_telegram_bot.pyЗагрузка исторических данных:
python scripts/download_data.pyЗапись live-потока:
python scripts/record_data.pyФормат хранения:
parquet- партиционирование:
data/raw/exchange=.../symbol=.../channel=.../date=... - нормализованная схема:
timestamp, exchange, symbol, channel, side, price, size, payload
python scripts/run_backtest.pyАртефакты:
reports/backtest/backtest_summary.jsonreports/backtest/backtest_fills.csvreports/backtest/backtest_equity.csvreports/backtest/backtest_report.md
Модель бэктеста включает:
- replay рыночных событий по trades/orderbook/mark price
- приближение maker-fill логики
- post-only quoting
- approximation очереди исполнения
- latency-aware cancel logic
- realized/unrealized inventory PnL
- adverse selection diagnostics
Rolling WFA:
python scripts/run_wfa.pyOptuna:
python scripts/run_optuna.pyЦелевая функция:
score = net_pnl - a * max_drawdown - b * inventory_variance - c * taker_ratio
Dry-run по умолчанию:
python scripts/run_live.pyРеальная торговля возможна только если одновременно выполнены все условия:
LIVE_TRADING_ENABLED=trueDRY_RUN=false- заданы
BYBIT_API_KEYиBYBIT_API_SECRET
Защитные механизмы:
- защита от stale data
- защита от экстремальной волатильности
- жёсткий лимит inventory
- kill switch при аварийных условиях
- cancel-all при shutdown
- post-only выставление заявок
Запуск бота:
python scripts/run_telegram_bot.pyПоддерживаемые команды:
/status/position/pnl/orders/risk/lastfills/health
Команды, меняющие торговое состояние, отключены, пока ENABLE_TELEGRAM_TRADE_CONTROL=true не включён явно.
Сборка и запуск:
docker compose up --buildСервисы:
live_bottelegram_botrecorder
pytestПокрытие сфокусировано на:
- загрузке конфигов
- сигналах и quoting math
- inventory skew
- smoke-сценарии бэктеста
- live risk checks
Live trading связан с риском реальных убытков. Репозиторий по умолчанию запускается в safe mode, но ошибки конфигурации, поведение биржи, сетевые сбои и ошибки модели всё равно могут привести к потерям. Перед любым live-запуском обязательно проверьте всё на testnet и в dry-run режиме.
.png)