mirror of
https://github.com/triqbit/mt5-ai-xauusd-trader.git
synced 2026-11-02 06:56:15 +00:00
* feat: implement institutional-grade research reporting system - Implement structured report objects via Pydantic in src/research/reporting.py. - Add granular sections for Risk Audit, Data Quality, Regime Analysis, and Stress Testing. - Enhance reporting with metrics like Walk-Forward Efficiency (WFE) and Sharpe decay. - Create professional Jinja2 templates for Markdown and HTML exports. - Update research modules to populate new institutional-grade metrics. - Expand test suite to verify reporting integrity and formatting. - Ensure Python 3.10+ compatibility with timezone-aware timestamps. Co-authored-by: saysgrok <279469430+saysgrok@users.noreply.github.com> * feat: institutional research reporting system improvements - Implement structured report objects via Pydantic in src/research/reporting.py. - Add granular sections for Risk Audit, Data Quality, Regime Analysis, and Stress Testing. - Enhance reporting with metrics like Walk-Forward Efficiency (WFE) and Sharpe decay. - Create professional Jinja2 templates for Markdown and HTML exports. - Update research modules to populate new institutional-grade metrics. - Expand test suite to verify reporting integrity and formatting. - Ensure Python 3.10+ compatibility with timezone-aware timestamps. - Fix dependency conflict with python-socketio in pyproject.toml. - Resolve Ruff and Mypy violations in reporting modules. Co-authored-by: saysgrok <279469430+saysgrok@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: saysgrok <279469430+saysgrok@users.noreply.github.com>
144 lines
3.9 KiB
TOML
144 lines
3.9 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=65.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "mt5-ai-xauusd-trader"
|
|
version = "1.1.0-rc7"
|
|
description = "AI/ML Trading Bot for MetaTrader 5 - XAUUSD Gold Trading"
|
|
authors = [{name = "triqbit"}]
|
|
readme = "README.md"
|
|
license = {text = "MIT"}
|
|
requires-python = ">=3.10"
|
|
classifiers = [
|
|
"Programming Language :: Python :: 3",
|
|
"License :: OSI Approved :: MIT License",
|
|
]
|
|
dependencies = [
|
|
"torch==2.5.1",
|
|
"stable-baselines3==2.8.0",
|
|
"gymnasium==1.0.0",
|
|
"numpy==1.26.4",
|
|
"scipy==1.15.3",
|
|
"scikit-learn==1.6.1",
|
|
"pandas==2.2.3",
|
|
"TA-Lib==0.6.4",
|
|
"requests==2.33.1",
|
|
"aiohttp==3.13.4",
|
|
"httpx==0.28.1",
|
|
"psycopg2-binary==2.9.10",
|
|
"sqlalchemy==2.0.38",
|
|
"alembic==1.14.1",
|
|
"redis==7.4.0",
|
|
"prometheus-client==0.21.1",
|
|
"structlog==25.5.0",
|
|
"rich==13.9.4",
|
|
"tqdm==4.67.1",
|
|
"jinja2==3.1.6",
|
|
"fastapi==0.136.1",
|
|
"uvicorn[standard]==0.34.0",
|
|
"python-dotenv==1.2.2",
|
|
"pydantic==2.13.4",
|
|
"pydantic-settings==2.14.1",
|
|
"tomli==2.2.1",
|
|
"python-dateutil==2.9.0.post0",
|
|
"nest-asyncio==1.6.0",
|
|
"pytz==2026.2",
|
|
"click==8.1.8",
|
|
"tabulate==0.9.0",
|
|
"joblib==1.4.2",
|
|
"python-telegram-bot==21.10",
|
|
"psutil==7.2.2",
|
|
"optuna==4.8.0",
|
|
"python-socketio<5.0.0",
|
|
"MetaTrader5==5.0.5735; sys_platform == 'win32'",
|
|
"metaapi-cloud-sdk==29.1.1",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pre-commit==4.1.0",
|
|
"ruff==0.9.6",
|
|
"mypy==1.15.0",
|
|
"pip-audit",
|
|
]
|
|
test = [
|
|
"pytest==9.0.3",
|
|
"pytest-asyncio==1.3.0",
|
|
"pytest-mock==3.15.1",
|
|
"pytest-cov==7.1.0",
|
|
"hypothesis==6.125.2",
|
|
"types-redis==4.6.0.20241004",
|
|
"types-requests==2.32.0.20241016",
|
|
"types-python-dateutil==2.9.0.20260508",
|
|
"types-setuptools==82.0.0.20260508",
|
|
"types-PyYAML==6.0.12.20260510",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["src*"]
|
|
|
|
# ===========================================================
|
|
# Ruff — single tool for lint + format + import sorting
|
|
# Replaces: black, isort, flake8, pyupgrade
|
|
# ===========================================================
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py311"
|
|
|
|
[tool.ruff.format]
|
|
# ruff format is the black-compatible formatter
|
|
quote-style = "double"
|
|
indent-style = "space"
|
|
skip-magic-trailing-comma = false
|
|
line-ending = "auto"
|
|
|
|
[tool.ruff.lint]
|
|
# Rule sets enabled:
|
|
# E/W = pycodestyle errors/warnings
|
|
# F = pyflakes (undefined names, unused imports)
|
|
# I = isort (import sorting — enforced)
|
|
# B = flake8-bugbear (likely bugs and design issues)
|
|
# C4 = flake8-comprehensions (simplify comprehensions)
|
|
# SIM = flake8-simplify
|
|
# RUF = ruff-specific rules
|
|
#
|
|
# NOTE: UP (pyupgrade) intentionally excluded until source files
|
|
# are migrated from typing.Dict/List/Optional to built-in generics.
|
|
# Track in: https://github.com/triqbit/mt5-ai-xauusd-trader/issues
|
|
select = ["E", "W", "F", "I", "B", "C4", "SIM", "RUF"]
|
|
ignore = [
|
|
"E501", # line-length — handled by ruff format
|
|
"B008", # function calls in default args (FastAPI Depends pattern)
|
|
"RUF012", # mutable class attrs — false positives in pydantic models
|
|
"SIM108", # ternary operator — sometimes less readable
|
|
]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["src"]
|
|
combine-as-imports = true
|
|
force-single-line = false
|
|
split-on-trailing-comma = true
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"tests/**" = ["S101", "B011"] # assert + raise-without-from OK in tests
|
|
|
|
# ===========================================================
|
|
# mypy
|
|
# ===========================================================
|
|
[tool.mypy]
|
|
python_version = "3.11"
|
|
strict = true
|
|
warn_return_any = true
|
|
warn_unused_configs = true
|
|
ignore_missing_imports = true
|
|
|
|
# ===========================================================
|
|
# pytest
|
|
# ===========================================================
|
|
[tool.pytest.ini_options]
|
|
pythonpath = "."
|
|
testpaths = ["tests"]
|
|
addopts = "--strict-markers --verbose"
|