mirror of
https://ghfast.top/https://github.com/aeroxw/easy_tdx_max.git
synced 2026-09-12 15:44:18 +08:00
- ZIG 右侧突破回补策略:MyTT 新增 ZIG 之字转向(未来函数,含前视偏差警示); 波谷启动建仓挂硬止损(OCO)→ 见顶清仓记前高 → 右侧突破回补;路径依赖不实现 entry_exit_masks(向量化守护测试白名单);含寻优预设网格与 --strategy-file 独立文件 - 交易时段感知刷新:realtime/session.py(09:15~11:30:30 / 13:00~15:05)+ GET /market/session;看板 30/60/120s 轮询休市自动暂停(三态状态栏 + 开关持久化 + 手动刷新不受限);SSE/WS 既有会话语义不动 - 120 分钟 K 线:/bars?category=MIN_120(MAC 原生 Period.MINS×120 优先, 2×60M 相邻聚合兜底,标准客户端上限 400 根);前端周期选择器同步 - 逐 bar 衍生字段:/bars 与 /bars/index 附带 pre_close/change/change_pct/ amplitude_pct(pre_close≤0.01 兜底防除零) - 159 只核心龙头池:数据资产取自 Fork(东财全行业龙头名单,四组分层); universe=core 接入 screen scan / SignalScanner / StrengthRanker / market strength; GET /market/core-leaders + WebUI「龙头池」页(搜索/个股详情) - 多 Provider LLM 直连:easy_tdx.ai + /llm/*(DeepSeek/通义/智谱/Kimi/MiniMax/ OpenAI/Claude/Ollama/自定义,openai 兼容 + anthropic 原生双协议); 配置落盘 ~/.easy_tdx/llm.json(WebUI「AI 设置」页 ⇆ 手工编辑双向兼容, 文件>环境变量>预设;key 脱敏回显/CLEAR 清除);「AI 解读」后台任务化 (复用 task_runner,提交+轮询,不占 HTTP 连接);思考型模型空白正文防御 (reasoning_content 耗尽 max_tokens → 可操作报错;默认 16000); AI 解读历史页(自动归档 Prompt/正文/策略上下文 + 去回测带参引导) - WebUI 加固:SPA fallback 对未知 /api/* 返回 JSON 404(不再 200 HTML 伪装解析错); index.html 一律 Cache-Control: no-store(防缓存旧资源引用);路由兜底重定向; 全局风险提示常驻底栏 + 龙头池/AI 解读针对性免责声明 - 测试:新增 9 个单测文件共 59 例;黄金基线仅新增 zig_breakout 条目(其余零漂移); 全量 1448 例通过
88 lines
2.8 KiB
TOML
88 lines
2.8 KiB
TOML
[build-system]
|
||
requires = ["hatchling"]
|
||
build-backend = "hatchling.build"
|
||
|
||
[project]
|
||
name = "easy-tdx"
|
||
version = "1.29.0"
|
||
description = "通达信 TCP 协议行情数据客户端,支持在线行情、离线数据读取与写入同步"
|
||
readme = "README.md"
|
||
requires-python = ">=3.10"
|
||
dependencies = ["pandas>=2.0,<3", "tzdata>=2024.1", "click>=8.0,<9"]
|
||
|
||
[project.scripts]
|
||
easy-tdx = "easy_tdx.cli:cli" # cli/__init__.py exposes the click group
|
||
|
||
[project.optional-dependencies]
|
||
dev = ["pytest>=8.0", "pytest-asyncio>=0.23", "pytest-cov", "mypy>=1.9", "ruff>=0.4", "scipy>=1.10,<1.16", "httpx>=0.27", "duckdb>=1.0"]
|
||
science = ["scipy>=1.10,<1.16"]
|
||
web = ["fastapi>=0.110,<1", "uvicorn[standard]>=0.29"]
|
||
# 本地 K 线数据仓库(easy-tdx warehouse ...):DuckDB 单文件列存
|
||
warehouse = ["duckdb>=1.0"]
|
||
# 打包成桌面 EXE 用:系统托盘(pystray)+ 图标生成(Pillow)。
|
||
# 仅 PyInstaller 打包态需要,开发态 ``pip install -e .[web]`` 不强制装。
|
||
packaging = ["pystray>=0.19", "Pillow>=10.0"]
|
||
|
||
[tool.hatch.build]
|
||
# 前端 dist 是构建产物(在 .gitignore 里),hatchling 默认不打包。
|
||
# artifacts 让它被 sdist 和 wheel 都强制包含。
|
||
artifacts = [
|
||
"web-ui/dist/",
|
||
]
|
||
|
||
[tool.hatch.build.targets.wheel]
|
||
packages = ["src/easy_tdx"]
|
||
# 前端 dist 映射到包内 easy_tdx/web/dist/。CI(ci.yml)、publish(publish.yml)
|
||
# 和 release(release.yml)都会在 pip install / build 前先 npm run build。
|
||
force-include = { "web-ui/dist" = "easy_tdx/web/dist" }
|
||
|
||
[tool.mypy]
|
||
strict = true
|
||
python_version = "3.12"
|
||
# 跳过未跟踪的本地脚本(依赖外部 unified_config/sqlalchemy/requests,不属于库)
|
||
exclude = ["src/easy_tdx/exchange_margin\\.py"]
|
||
|
||
[[tool.mypy.overrides]]
|
||
module = ["pandas", "tabulate", "matplotlib", "matplotlib.*"]
|
||
ignore_missing_imports = true
|
||
|
||
[[tool.mypy.overrides]]
|
||
module = "easy_tdx.MyTT"
|
||
# Type stubs provided via MyTT.pyi — keep strict checks enabled
|
||
|
||
[[tool.mypy.overrides]]
|
||
module = ["fastapi.*", "uvicorn.*", "pydantic.*"]
|
||
ignore_missing_imports = true
|
||
|
||
[[tool.mypy.overrides]]
|
||
# pystray / Pillow 无 type stubs;tray.py 已用 type: ignore 兜底关键调用
|
||
module = ["pystray", "pystray.*", "PIL", "PIL.*"]
|
||
ignore_missing_imports = true
|
||
|
||
[[tool.mypy.overrides]]
|
||
module = ["scipy", "scipy.*"]
|
||
ignore_missing_imports = true
|
||
|
||
[tool.ruff]
|
||
target-version = "py310"
|
||
line-length = 100
|
||
extend-exclude = ["*.pyi", "src/easy_tdx/exchange_margin.py"]
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "I", "UP"]
|
||
|
||
[tool.pytest.ini_options]
|
||
testpaths = ["tests"]
|
||
addopts = "--tb=short"
|
||
asyncio_mode = "auto"
|
||
|
||
[tool.coverage.run]
|
||
source = ["easy_tdx"]
|
||
omit = ["tests/*"]
|
||
|
||
[tool.coverage.report]
|
||
# 覆盖率门槛。从 50 提升到 60(审计 #9):补充 reconnect/bitmap/config 测试后
|
||
# 实测约 61%。进一步提到 70 需补 web/ 路由与更多 client 镜像测试,留待后续。
|
||
fail_under = 60
|
||
show_missing = true
|