65ed73977e
Per Podman deploybarer Bot, der Käufe und Verkäufe simuliert ausführt und sich aus den Ergebnissen weiter antrainiert. Aufbau - Einheitliche Bar-Verarbeitung für paper, backtest und live; ausgetauscht werden nur Datenquelle und Broker. - Börsenanbindung über ccxt: rund 100 Börsen allein über exchange.id erreichbar. Zugangsdaten kommen über ENV-Platzhalter, der Live-Modus ist doppelt abgesichert. - Paper-Broker mit Gebühren, Slippage, Börsenpräzision und Volumengrenzen. - Online trainierte logistische Regression bewertet jedes Einstiegssignal. Sie lernt aus realen Trade-Ergebnissen, aus Shadow-Labels aller Kandidaten – auch der abgelehnten – und aus Hintergrund-Stichproben; beim Kaltstart wird sie aus der Kurshistorie vorgelernt. - Risikomanagement: Positions- und Exposure-Grenzen, ATR-Stops, Cooldown sowie Tagesverlust- und Drawdown-Notbremsen. - SQLite-Persistenz, HTTP-Status mit Prometheus-Metriken und Dashboard, Webhooks. Deployment - Containerfile (zweistufig, non-root UID 10001), podman-compose, systemd-Quadlet. - Modell und Datenbank liegen im Volume /data und überleben Neustarts. 128 Tests, ruff sauber. Verifiziert gegen echte Marktdaten sowie im gebauten Container inklusive Healthcheck und Zustandswiederherstellung.
51 lines
1.1 KiB
TOML
51 lines
1.1 KiB
TOML
[build-system]
|
||
requires = ["setuptools>=68", "wheel"]
|
||
build-backend = "setuptools.build_meta"
|
||
|
||
[project]
|
||
name = "trademind"
|
||
version = "0.1.0"
|
||
description = "Selbstlernender Krypto-Trading-Bot mit Paper-Trading, Backtest und Live-Modus"
|
||
readme = "README.md"
|
||
requires-python = ">=3.11"
|
||
license = { text = "MIT" }
|
||
|
||
dependencies = [
|
||
"ccxt>=4.3.0",
|
||
"numpy>=1.26",
|
||
"PyYAML>=6.0",
|
||
"pydantic>=2.6",
|
||
"aiohttp>=3.9",
|
||
]
|
||
|
||
[project.optional-dependencies]
|
||
dev = [
|
||
"pytest>=8.0",
|
||
"pytest-asyncio>=0.23",
|
||
"ruff>=0.4",
|
||
]
|
||
|
||
[project.scripts]
|
||
trademind = "trademind.cli:main"
|
||
|
||
[tool.setuptools.packages.find]
|
||
where = ["src"]
|
||
|
||
[tool.pytest.ini_options]
|
||
testpaths = ["tests"]
|
||
asyncio_mode = "auto"
|
||
filterwarnings = ["ignore::DeprecationWarning"]
|
||
|
||
[tool.ruff]
|
||
line-length = 110
|
||
target-version = "py311"
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "I", "UP", "B"]
|
||
# UP042: str+Enum ist bewusst gewählt – es serialisiert ohne Sonderbehandlung nach JSON.
|
||
ignore = ["B008", "UP042"]
|
||
|
||
[tool.ruff.lint.per-file-ignores]
|
||
# server.py enthält das eingebettete Dashboard (HTML/CSS/JS) als String.
|
||
"src/trademind/server.py" = ["E501"]
|