Imported from xsa-dev/crypto-breakout-screener (
AGENTS.md). Install upstream withnpx skills add xsa-dev/crypto-breakout-screener. Copyright stays with the author.
AGENTS.md
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ AI-Π°Π³Π΅Π½ΡΠΎΠ² (Claude Code, Codex ΠΈ Π΄Ρ.), ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°. Π¨Π°Π±Π»ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΡΡΡΠ΅ Ayaz Sh ΠΏΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΡΠΈΠΏΡΠΎ-ΡΠΊΡΠΈΠ½Π΅ΡΠΎΠ² ΠΈ ΡΠΎΡΠ³ΠΎΠ²ΡΡ Π±ΠΎΡΠΎΠ².
Π¦Π΅Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° β ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΡΠ΅Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ, Π° Π°Π³Π΅Π½Ρ Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈΠ» ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ.
1. Π’ΠΈΠΏΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π¨Π°Π±Π»ΠΎΠ½ ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΠ°ΡΡΡ β ΠΊΠ°ΡΠ°Π»ΠΎΠ³ app/core/. Π Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π»Π΅ΠΆΠΈΡ Π»ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ (config.py, env.py, logger.py); ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ core/ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡΠΈ (ΡΠΌ. Π½ΠΈΠΆΠ΅). ΠΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ (ΠΊΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄: exchanges/, screeners/, strategies/ ΠΈ Ρ. Π΄.) ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΌ, ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· Π·Π°Π΄Π°ΡΠΈ. ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ β ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ
Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Π½Π΅Π»ΡΠ·Ρ.
<project_root>/
βββ .claude/
β βββ skills/ # project-level skills (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 4)
βββ app/
β βββ __init__.py
β βββ __main__.py # entrypoint: Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· `python -m app`
β βββ core/ # ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°: ΠΎΠ±ΡΠΈΠ΅, ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅, Π½Π΅ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ
β β βββ __init__.py
β β βββ config.py # ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ)
β β βββ env.py # Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ (.env)
β β βββ logger.py # Π½Π°ΡΡΡΠΎΠΉΠΊΠ° loguru (ΡΠΌ. skill loguru-logging)
β β
β βββ ... # Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ β ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
βββ .env.example
βββ .gitignore
βββ pyproject.toml
βββ README.md
βββ AGENTS.md
βββ CLAUDE.md # ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° AGENTS.md
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ
app/core/β Π²ΡΡ, ΡΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅: ΠΊΠΎΠ½ΡΠΈΠ³, ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±ΡΠΈΠ΅ DTO/enums/ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ. ΠΡΠΎΡ ΡΠ»ΠΎΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΠ°Π±Π»ΠΎΠ½Π°.- ΠΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²
app/β Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΆΡΡΡΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΈΠ·core/, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.core/Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. - ΠΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ β
app/, entrypoint βapp/__main__.py. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉpython -m app. ΠΡΠΎ Π΄Π΅ΡΠΎΠ»Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ΅Π±Π½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² β ΠΎΠ½ ΠΏΡΠΎΡΠ΅, ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Ρ Π·Π°Π΄Π°Ρ ΠΊΡΡΡΠ°.
Π‘ΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ (src/ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ)
ΠΠΎΠ³Π΄Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΡΠ°Π΅Ρ ΡΠ°ΠΌΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° β Π΅ΡΡΡ ΡΠΎΡΠ³ΠΎΠ²Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ Π²Π΅Π±-Π°Π΄ΠΌΠΈΠ½ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΊΠ°ΠΊ Π΄Π²Π° ΡΠ΅ΡΠ²ΠΈΡΠ°, Π½ΠΎ Π΄Π΅Π»ΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΠΎΠ΄ (core/, ΠΠ), β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ° Ρ src/. ΠΡΠΎ ΠΊΠ°Π½ΠΎΠ½ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π²ΠΈΠ΄Π° Β«ΡΠΎΡΠ³ΠΎΠ²ΡΠΉ Π±ΠΎΡ + Π²Π΅Π±-ΠΏΠ°Π½Π΅Π»ΡΒ» (ΠΏΡΠΈΠΌΠ΅Ρ β examples/pd-tradebot).
ΠΠΎΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Π² src/ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° β Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ (panel/, bot/, db/, trading/):
src/
βββ core/ # ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°: config, env, logger, schemas, enums... β ΠΊΠ°ΠΊ app/core/ Π²ΡΡΠ΅
βββ database/ # ΡΠ»ΠΎΠΉ ΠΠ: database.py, models.py, repositories.py (skill sqlite-settings-storage)
βββ app/ # Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΡΠΊΡΠΈΠ½Π΅Ρ (producer/consumer), signal_manager, tradebot
β βββ __main__.py # ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ: python -m src.app
βββ web/ # Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: FastAPI-Π°Π΄ΠΌΠΈΠ½ΠΊΠ° β ΡΠΎΡΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ
βββ __main__.py # ΡΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π°: ASGI-ΠΎΠ±ΡΠ΅ΠΊΡ app; Π·Π°ΠΏΡΡΠΊ: uvicorn src.web.__main__:app --host ... --port ...
ΠΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡ ΠΏΡΡΠΈ ΠΎΡ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° (from src.core..., python -m src.app). src/ β ΠΎΠ±ΡΡΠ½Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π±Π΅Π· __init__.py: Python Π²ΠΈΠ΄ΠΈΡ Π΅Ρ ΠΊΠ°ΠΊ namespace-ΠΏΠ°ΠΊΠ΅Ρ (PEP 420), ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠ· ΠΊΠΎΡΠ½Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· editable-install. ΠΡΠΎΠ΅ΠΊΡ Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ ([tool.uv] package = false).
src/core/ΠΈsrc/database/β ΠΎΠ±ΡΠΈΠ΅, ΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡ ΠΎΠ±Π° ΠΏΡΠΎΡΠ΅ΡΡΠ°.core/Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ Π½ΠΈ ΠΎapp/, Π½ΠΈ ΠΎweb/.src/app/β Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΡΠΊΡΠΈΠ½Π΅Ρ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ tradebot'Ρ (ΡΠΌ. skillsscreener-architecture,tradebot-architecture). ΠΠ°ΠΏΡΡΠΊ βpython -m src.app.src/web/β ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅Π±: FastAPI-ΡΠΎΡΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ, ΡΡΠ°ΡΠΈΠΊΠ°. ΠΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ Π½Π΅ Π΄ΡΠ±Π»ΠΈΡΡΠ΅Ρ β ΡΠΈΡΠ°Π΅Ρ/ΠΏΠΈΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠ΅Π·src/database/. Π’ΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° βsrc/web/__main__.py(ΡΠ°ΠΌ Π»Π΅ΠΆΠΈΡ ASGI-ΠΎΠ±ΡΠ΅ΠΊΡapp), Π·Π°ΠΏΡΡΠΊ β ΡΠ΅ΡΠ΅Π· uvicorn (uvicorn src.web.__main__:app --host 0.0.0.0 --port 8000), Π° Π½Π΅python -m web: ΡΠ°ΠΊ host ΠΈ port Π·Π°Π΄Π°ΡΡΡΡ ΠΏΡΡΠΌΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°.- ΠΠ²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° = Π΄Π²Π° systemd-ΡΠ½ΠΈΡΠ° (ΡΠΌ. skill
systemd-vps-deploy):python -m src.appΠΈuvicorn src.web.__main__:app. ΠΠ°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ.
ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ app/ ΠΈ web/ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, app/screener/, app/tradebot/, web/routes/) β Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°; ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ ΡΠ΅ΡΡΡΠ΅ Π²Π΅ΡΡ
Π½Π΅ΡΡΠΎΠ²Π½Π΅Π²ΡΡ
ΠΈΠΌΠ΅Π½ΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ src/ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π°Π»ΡΠ½ΠΎ Π΅ΡΡΡ Π΄Π²Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠΈΡΡΡΠΉ ΡΠΊΡΠΈΠ½Π΅Ρ, ΠΎΠ΄ΠΈΠ½ Telegram-Π±ΠΎΡ, REST-ΡΠ΅ΡΠ²ΠΈΡ) Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ±ΠΈΡΠ°ΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (app/) β ΠΎΠ½ ΠΏΡΠΎΡΠ΅.
Π§ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»Π΅ΠΆΠ°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² core/
core/ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ β ΡΡΠΈ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°:
| Π€Π°ΠΉΠ» | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|
config.py |
ΠΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, Π΄Π΅ΡΠΎΠ»ΡΡ. |
env.py |
Π§ΡΠ΅Π½ΠΈΠ΅ .env, Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ (Pydantic Settings ΠΈΠ»ΠΈ ΡΡΡΠ½Π°Ρ), ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Env. |
logger.py |
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ loguru β sinks, ΡΠΎΡΠΌΠ°Ρ, ΡΠΎΡΠ°ΡΠΈΡ, retention. Π‘ΠΌ. skill loguru-logging. |
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ core/ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ ΠΈ Π·Π°Π²ΠΎΠ΄ΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π°Π΄ΠΎΠ±Π½ΠΎΡΡΠΈ β ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ. ΠΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉ ΠΈΡ
Β«Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅Β» ΠΏΡΡΡΡΠΌΠΈ. ΠΠΎΠ³Π΄Π° Π·Π°Π²ΠΎΠ΄ΠΈΡΡ β ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΠΉΡΡ ΡΡΠΈΡ
ΠΈΠΌΡΠ½ ΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ Π²ΡΠΎΠ΄Π΅ dto.py, types.py, errors.py):
| Π€Π°ΠΉΠ» | ΠΠΎΠ³Π΄Π° Π·Π°Π²ΠΎΠ΄ΠΈΡΡ ΠΈ ΡΡΠΎ Π²Π½ΡΡΡΠΈ |
|---|---|
models.py |
ΠΠΎΠ³Π΄Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»ΠΎΡΠΌΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ Ρ
ΠΎΠ΄ΠΈΡΡ DTO ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠ½ΠΊΠΎΠΌ β SettingsDTO, SignalDTO, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠΎΠ½ΡΠΈΠ³Π°. Pydantic, Π²Π°Π»ΠΈΠ΄ΠΈΡΡΡΡΡΡ Π½Π° Π²Ρ
ΠΎΠ΄Π΅. |
schemas.py |
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ ΡΡΠ½ΠΎΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΈΠΌ Π½ΡΠΆΠ΅Π½ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ β TypedDict (KlineDict, TradeDict, TickerDailyItem, LiquidationDict, ...). ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ unicex β ΡΠ΅-ΡΠΊΡΠΏΠΎΡΡΠ° Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· unicex.types. Π‘ΠΌ. skill market-data-normalization. |
enums.py |
ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΎΠ±ΡΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°: Side (BUY/SELL), OrderType, OrderStatus, Exchange, TimeFrame, PositionSide ΠΈ Ρ. Π΄. |
exceptions.py |
ΠΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° Π² ΠΊΠΎΠ΄Π΅. ΠΠ° ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΠ°ΠΉΠ»Π° Π½Π΅Ρ β Π½Π΅ Π·Π°Π²ΠΎΠ΄ΠΈ ΠΊΠ»Π°ΡΡΡ Β«Π½Π° Π±ΡΠ΄ΡΡΠ΅Π΅Β». |
utils.py |
ΠΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅, Π½Π΅ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Ρ
Π΅Π»ΠΏΠ΅ΡΡ. Π‘ΡΠ΄Π° ΠΆΠ΅ ΠΊΠ»Π°Π΄ΡΡΡΡ TelegramBot Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ (ΡΠΌ. skill telegram-alerts) β Π½Π΅ Π·Π°Π²ΠΎΠ΄ΠΈ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ app/notifier/. |
ΠΡΠΈΠ½ΡΠΈΠΏΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² (models.py, enums.py, exceptions.py)
- ΠΠ΄ΠΈΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ
Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΈΡΠΆΠ΅Π²ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΡΡΡΡ Π½Π° Π³ΡΠ°Π½ΠΈΡΠ΅ (Π² ΠΊΠΎΠ΄Π΅ Π±ΠΈΡΠΆΠ΅Π²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°), Π½Π°ΡΡΠΆΡ ΡΡ
ΠΎΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΡ ΠΈΠ·
core/schemas.py(ΡΡΠ½ΠΎΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅) ΠΈΠ»ΠΈcore/models.py(DTO ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ). Π‘ΠΌ. skillmarket-data-normalization. - Pydantic β Π΄Π»Ρ DTO ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (
models.py): Π΄Π°ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ. - TypedDict β Π΄Π»Ρ ΡΡΠ½ΠΎΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
(
schemas.py): ΠΎΠ½ΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΡΠΆΠ΅ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΎΡ Π±ΠΈΡΠΆΠ΅Π²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Π°, Π° TypedDict Π΄Π°ΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π±Π΅Π· ΠΎΠ²Π΅ΡΡ Π΅Π΄Π°. - ΠΠΈΠΊΠ°ΠΊΠΈΡ
ΡΡΡΡΡ
dict'ΠΎΠ² Ρ Π±ΠΈΡΠΆΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Ρ
ΠΎΠ΄ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»ΠΎΡΠΌΠΈ β ΡΡΠΎ Π»ΠΈΠ±ΠΎ TypedDict ΠΈΠ·
schemas.py, Π»ΠΈΠ±ΠΎ Pydantic-DTO ΠΈΠ·models.py. - Enum'Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΡΠΎΠΊ.
Side.BUY, Π° Π½Π΅"BUY". - ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ β ΠΏΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ° ΠΏΠ΅ΡΠ²ΡΡ
, ΠΏΡΠΎΡΡΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Ρ
Π²Π°ΡΠ°Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Python ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π‘Π²ΠΎΠΈ ΠΊΠ»Π°ΡΡΡ Π²
core/exceptions.pyΠ·Π°Π²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° Π² ΠΊΠΎΠ΄Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΡΠ°ΠΈΡΡ ΡΡΠ°Π½Π·ΠΈΠ΅Π½ΡΠ½ΡΠ΅, Π½ΠΎ ΠΏΡΠΎΠΊΠΈΠ΄ΡΠ²Π°ΡΡ Π½Π°Π²Π΅ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ β ΡΠΌ. skillexchange-error-handling).
2. ΠΠΌΠΏΠΎΡΡΡ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΡ ΠΎΡ ΠΊΠΎΡΠ½Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°:
from app.core.config import config. Πsrc/-ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ΅srcβ ΠΏΠ°ΠΊΠ΅Ρ, ΠΈ ΠΈΠΌΠΏΠΎΡΡ ΠΈΠ΄ΡΡ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡ ΠΏΡΡΠΈ ΠΎΡ Π½Π΅Π³ΠΎ:from src.core.config import config,from src.database import Database,from src.app.tradebot import Tradebot. - ΠΠ½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅:
from .models import SignalDTO. core/Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΈΠ· Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π ΡΠΎΡΡΠ°Π²Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅app/ΠΈweb/Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° β ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π·core/ΠΈdatabase/.
3. Π‘ΡΠΈΠ»Ρ ΠΊΠΎΠ΄Π°
- Python 3.13+.
- Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π° Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
- Pydantic v2 Π΄Π»Ρ DTO.
- ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π·
loguru, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π²core/logger.py. ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡprintΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉloggingΠ½Π°ΠΏΡΡΠΌΡΡ. - ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ β ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π·
core/config.pyΠΈcore/env.py. ΠΠ΅ ΡΠΈΡΠ°ΡΡos.environΡΠΎΡΡΡΠΏΡΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρ. - ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Ruff ΠΈ Pyright Π»Π΅ΠΆΠ°Ρ Π²
pyproject.toml. ΠΠ΅ Π·Π°Π²ΠΎΠ΄ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅.ruff.toml,ruff.tomlΠΈΠ»ΠΈpyrightconfig.jsonΠ±Π΅Π· ΡΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΡΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. - ΠΡΠ°Π²ΠΈΠ»Π° Π»ΠΈΠ½ΡΠΈΠ½Π³Π° ΠΈ type checking Π½Π΅ ΠΎΡΠ»Π°Π±Π»ΡΡΡ ΡΠ°Π΄ΠΈ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠ΅ΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠ΅ β ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ±ΡΡΡΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ ΡΠΎΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.
4. ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ Π·Π°ΠΏΡΡΠΊ
Π ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
ΠΊΡΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ uv β ΡΡΠΎ Π΄Π΅ΡΠΎΠ»Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ²Π½ΠΎ Π½Π΅ ΠΏΠΎΠΏΡΠΎΡΠΈΠ» pip, poetry ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΡ. ΠΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ΄ΡΡ ΡΠ΅ΡΠ΅Π· uv.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
# ΡΠΎΠ·Π΄Π°ΡΡ .venv ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ· pyproject.toml + uv.lock
uv sync
ΠΠΎΡΠ»Π΅ uv sync ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ .venv/ Π² ΠΊΠΎΡΠ½Π΅ ΠΈ uv.lock (Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈ pyproject.toml).
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
uv add aiohttp # ΡΠ°Π½ΡΠ°ΠΉΠΌ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ
uv add --dev pytest ruff # dev-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ
uv remove aiohttp
ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉ pyproject.toml ΡΡΠΊΠ°ΠΌΠΈ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² β uv add ΠΎΠ±Π½ΠΎΠ²ΠΈΡ ΠΈ pyproject.toml, ΠΈ uv.lock ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎ.
ΠΠ°ΠΏΡΡΠΊ
uv run python -m app # Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
uv run pytest # Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ²
uv run ruff check . # Π»ΠΈΠ½ΡΠ΅Ρ
uv run pyright # ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ²
uv run ΡΠ°ΠΌ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅Ρ .venv ΠΈ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ source .venv/bin/activate Π½Π΅ Π½ΡΠΆΠ΅Π½.
ΠΡΠ°Π²ΠΈΠ»Π°
- ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ» ΠΈΠ½ΠΎΠ΅ β Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡ Π°Π³Π΅Π½ΡΠ° ΠΈΠ΄ΡΡ ΡΠ΅ΡΠ΅Π·
uv(uv sync,uv add,uv run ...). pip installΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ Π°Π³Π΅Π½ΡΠ° β ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ²Π½ΠΎ ΠΎΡΠΊΠ°Π·Π°Π»ΡΡ ΠΎΡuv.uv.lockΠΊΠΎΠΌΠΌΠΈΡΠΈΠΌ..venv/β Π½Π΅Ρ (ΡΠΆΠ΅ Π².gitignore).- ΠΠ° VPS
uvΡΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ (curl -LsSf https://astral.sh/uv/install.sh | sh), ΠΈ systemd-ΡΠ½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρuv run python -m appΠ»ΠΈΠ±ΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΠ·.venv(ΡΠΌ. skillsystemd-vps-deploy).
5. ΠΠΈΡΠΆΠ΅Π²ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΈΡΠΈ Π±ΠΈΡΠΆΠ΅Π²ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΎΠ΄ΠΏΠΈΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠ΅ΠΊΠΎΠ½Π½Π΅ΠΊΡΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π»ΠΈΠΌΠΈΡΠΎΠ², ΡΠ°Π·Π±ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π±ΠΈΡΠΆΠΈ β ΡΡΠΎ ΡΠ΅ΡΡΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΈ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π² ΡΡΠ΅Π±Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ±ΠΎΡΠ°:
- ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±ΠΈΡΠΆΠΈ (Π΅ΡΠ»ΠΈ Ρ Π±ΠΈΡΠΆΠΈ Π΅ΡΡΡ ΡΠ²ΠΎΠΉ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡ). ΠΠ»Ρ Binance β
python-binance(from binance import AsyncClient): ΠΏΠΎΠΊΡΡΠ²Π°Π΅Ρ spot ΠΈ futures, REST ΠΈ WebSocket. ΠΡΠΎ Π΄Π΅ΡΠΎΠ»Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΊΡΡΡΠ° ΠΏΠΎ Binance. unicexβ Π΅ΡΠ»ΠΈ Ρ Π±ΠΈΡΠΆΠΈ Π½Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ°Π·Ρ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π±ΠΈΡΠΆΠ°ΠΌΠΈ ΠΈ Π½ΡΠΆΠ΅Π½ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.unicexΠ΄Π°ΡΡ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, websocket-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΈExchangeInfoΡ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ ΡΠΈΠ»ΡΡΡΡ.- Π‘Π²ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ β ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π²
unicexΠ½Π΅Ρ. Π’ΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈ ΡΠ΅ΡΡΠΈΡ Π²ΡΠ½ΠΎΡΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠΉ skillexchange-error-handling.
ΠΠΈΡΠΆΠ΅Π²ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· (await AsyncClient.create(api_key=..., api_secret=...)) ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ; Π² ΠΊΠΎΠ½ΡΠ΅ β await client.close_connection(). ΠΠ»ΡΡΠΈ Π±Π΅ΡΡΡΡΡ ΠΈΠ· core/env.py (ΡΠΌ. skill secrets-storage), ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π½/ΠΎΠ±ΡΡΠΌΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠ΄Π΅ΡΠΎΠΌ β ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ (ΡΠΌ. skill exchange-rounding).
6. Skills (.claude/skills/ ΠΈ .codex/skills/)
Π ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ project-level skills, ΠΏΠΎΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΠ·ΠΊΠΈΠ΅ ΠΌΠ΅ΡΡΠ° ΠΊΡΠΈΠΏΡΠΎ-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΠ³Π΅Π½Ρ ΠΎΠ±ΡΠ·Π°Π½ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ skill, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² Π΅Ρ ΠΎΠ±Π»Π°ΡΡΡ:
ΠΡΡΠΎΡΠ½ΠΈΠΊ skills Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ β .claude/skills/. ΠΠ»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ Codex ΡΠΎΡ ΠΆΠ΅ Π½Π°Π±ΠΎΡ skills Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ Π² .codex/skills/.
api-rate-limitsβ REST/WS Π»ΠΈΠΌΠΈΡΡ, backoff.websocket-lifecycleβ ΡΠ΅ΠΊΠΎΠ½Π½Π΅ΠΊΡΡ, ping/pong, gap detection.market-data-normalizationβ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΡΠΆΠ°ΠΌΠΈ.loguru-loggingβ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΎΠ².exchange-error-handlingβ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ Π±ΠΈΡΠΆΠΈ.order-position-lifecycleβ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌΠΈ.systemd-vps-deployβ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΊΠ°ΠΊ systemd-ΡΠ΅ΡΠ²ΠΈΡ.telegram-alertsβ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π² Telegram.screener-architectureβ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΡΠΊΡΠΈΠ½Π΅ΡΠ°.exchange-roundingβ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π½ ΠΈ ΠΎΠ±ΡΡΠΌΠΎΠ² ΠΏΠΎΠ΄ ΡΠΈΠ»ΡΡΡΡ Π±ΠΈΡΠΆΠΈ.order-placement-rulesβ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ΄Π΅ΡΠΎΠ².position-sizingβ ΡΠ°ΡΡΡΡ quantity ΠΈΠ· USDT, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ Π½Π° N ΠΎΡΠ΄Π΅ΡΠΎΠ².secrets-storageβ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠ΅ΡΠΎΠ² Π².env/ΠΠ, ΠΏΡΠ°Π²Π° API-ΠΊΠ»ΡΡΠ΅ΠΉ Π±ΠΈΡΠΆΠΈ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΡΡΠ΅ΡΠΊΠ΅.env-and-configβcore/env.py(pydantic-settings) +core/config.py(ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ).sqlite-settings-storageβ SQLite ΡΠ΅ΡΠ΅Π· SQLAlchemy async + aiosqlite (Π±Π΅Π· Alembic): runtime-Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΏΡΠΎΡΠΈΠ»ΠΈ, ΠΈΡΡΠΎΡΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²/ΡΠ΄Π΅Π»ΠΎΠΊ. ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ°app/database/ΠΈΠ· ΡΡΡΡ ΠΏΠ»ΠΎΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²:database.py,models.py,repositories.py. ΠΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ storage live-ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (ΡΡΠΎ Π±ΠΈΡΠΆΠ°).async-patternsβ asyncio-ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ: ΡΠΎΠ½ΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, gather, ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΊΠ»Ρ, graceful shutdown, ΠΎΡΠΌΠ΅Π½Π°.tradebot-architectureβ ΡΠΎΡΠ³ΠΎΠ²ΡΠΉ Π±ΠΎΡ ΠΏΠΎΠ²Π΅ΡΡ ΡΠΊΡΠΈΠ½Π΅ΡΠ°: ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΡΠΈΠ»ΡΡΡΡ, ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ tradebot Π½Π° ΡΠΈΠΌΠ²ΠΎΠ».time-and-timezonesβ Π±ΠΈΡΠΆΠ΅Π²ΡΠ΅ ms-ΡΠ°ΠΉΠΌΡΡΠ΅ΠΌΠΏΡ, UTC vs Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ ΡΠ²Π΅ΡΠ΅ΠΉ, monotonic vs wall clock.graceful-config-reloadβ Π³ΠΎΡΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π±Π΅Π· ΡΠ΅ΡΡΠ°ΡΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°: ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΡΠΈΠΊΠ» ΠΏΠ΅ΡΠ΅ΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ· ΠΠ, Π°ΡΠΎΠΌΠ°ΡΠ½Π°Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.timeout-trackerβ ΠΊΡΠ»Π΄Π°ΡΠ½Ρ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²: Π½Π΅ ΡΠ»Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π°Π»Π΅ΡΡ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ N ΠΌΠΈΠ½ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ.signal-linksβ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π±ΠΈΡΠΆΡ, CoinGlass, TradingView Π΄Π»Ρ Telegram-Π°Π»Π΅ΡΡΠΎΠ²: inline-ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ HTML-ΡΡΡΠ»ΠΊΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ ΡΠΈΠ³Π½Π°Π»Π°.
7. Π§Π΅ΠΊ-Π»ΠΈΡΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ
- ΠΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° (β
app/core/) ΠΈΠ»ΠΈ Π΄ΠΎΠΌΠ΅Π½ (β ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉapp/). - ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠ΅ΡΠ΅Π·
loguru, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅ΠΊΡΠ΅ΡΡ β ΡΠ΅ΡΠ΅Π·core/config.py/core/env.py(Π½Π΅print, Π½Π΅os.environΡΠΎΡΡΡΠΏΡΡ). - ΠΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ
ΠΎΠ΄ΠΈΡ Π² Π±ΠΈΡΠΆΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ (ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠ»ΠΈ
unicex, Π½Π΅ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠΉ β ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 5), ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ skill (rate-limits, rounding, error-handling ΠΈ Ρ. Π΄.).
