hamuna-quant-cli 0.1.16__tar.gz → 0.1.18__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/PKG-INFO +1 -1
  2. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/__init__.py +1 -1
  3. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/qmt_market.py +19 -2
  4. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/PKG-INFO +1 -1
  5. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/pyproject.toml +1 -1
  6. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/MANIFEST.in +0 -0
  7. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/README.md +0 -0
  8. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/README.md +0 -0
  9. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/__main__.py +0 -0
  10. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_market_fallback.py +0 -0
  11. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_metrics_15.py +0 -0
  12. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_test_akquant_parity.py +0 -0
  13. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_data_adapter.py +0 -0
  14. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_runner.py +0 -0
  15. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_schema_adapter.py +0 -0
  16. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/base_strategy.py +0 -0
  17. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/cross_sectional_helpers.py +0 -0
  18. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/__init__.py +0 -0
  19. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/loader.py +0 -0
  20. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/qmt_broker.py +0 -0
  21. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/runner.py +0 -0
  22. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/server_market_client.py +0 -0
  23. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/prebuilt_downloader.py +0 -0
  24. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/prebuilt_resolver.py +0 -0
  25. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/qmt_translator.py +0 -0
  26. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/__init__.py +0 -0
  27. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/backtest.py +0 -0
  28. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/cache.py +0 -0
  29. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/discipline.py +0 -0
  30. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/http_client.py +0 -0
  31. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/s3client.py +0 -0
  32. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/server_client.py +0 -0
  33. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/scripts/server.json +0 -0
  34. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/SOURCES.txt +0 -0
  35. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/dependency_links.txt +0 -0
  36. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/entry_points.txt +0 -0
  37. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/requires.txt +0 -0
  38. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/top_level.txt +0 -0
  39. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/setup.cfg +0 -0
  40. {hamuna_quant_cli-0.1.16 → hamuna_quant_cli-0.1.18}/tests/test_live_safety.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hamuna-quant-cli
3
- Version: 0.1.16
3
+ Version: 0.1.18
4
4
  Summary: Hamuna A 股回测 + 实盘统一 CLI (akquant 0.3.x). 替代 v1 自建 driver + QMT-style 策略规范.
5
5
  Author-email: Hamuna Team <team@hamuna.example>
6
6
  License: MIT
@@ -12,4 +12,4 @@ server (13-key metrics schema). 全部走 akquant 0.3.x 引擎.
12
12
  """
13
13
  from __future__ import annotations
14
14
 
15
- __version__ = "0.1.16"
15
+ __version__ = "0.1.18"
@@ -670,12 +670,28 @@ def _to_bar_obj(raw: dict[str, Any], ts_ns: int | None = None):
670
670
  QMT 日线 bar 的 ``time`` 字段是当日 00:00, 永远早于盘中 session 启动
671
671
  时间 → 全被当历史滤掉 → on_bar 永不触发 (Round 18.63 复现根因).
672
672
  修: Bar.timestamp 用 wall-clock ns (或调用方传入的单调递增 ts_ns), 让
673
- 引擎当"实时新 bar"接收. raw 的 ``time`` 字段保留给指标对齐/日志 (CLI 侧
674
- _sse_dispatch 里 sig 去重用).
673
+ 引擎当"实时新 bar"接收.
674
+
675
+ Round 18.63.7 补充: 原始 QMT bar 的真实时间戳 ``raw['time']`` (epoch ms)
676
+ 通过 Bar.extra={'qmt_time_ms'} 字段传给策略层 — 策略 on_bar 可读
677
+ ``bar.extra.get('qmt_time_ms')`` 拿到 QMT 真实 bar 时间 (epoch ms).
678
+ 注: raw['stime'] (YYYYMMDDhhmmss 字符串) **不放 extra** — akquant Bar
679
+ 的 extra 字段是 f64 dict (Rust 侧冻结), 不接受 string. 如策略要 stime,
680
+ 直接 qmt_time_ms // 1000 → datetime 转换.
681
+
682
+ Round 18.63.8 修正: Bar.extra 是 f64 → string 写入会 TypeError.
683
+ 修复: extra 只放数字 (qmt_time_ms). stime 通过 numeric qmt_time_ms 已足够
684
+ 还原 (qmt_time_ms/1000 → epoch s → datetime → str).
675
685
  """
676
686
  import time as _t
677
687
  from akquant import Bar
678
688
  ts = ts_ns if ts_ns is not None else _t.time_ns()
689
+ # 把 QMT 真实时间塞 extra — Bar 构造时一次性传 (事后不可写, Rust 侧冻结).
690
+ # extra 必须是 f64 dict, 跳过 None / 非数字字段 (Rust 侧拒收 string).
691
+ qmt_ms = raw.get("time")
692
+ extra: dict[str, float] = {}
693
+ if isinstance(qmt_ms, (int, float)) and qmt_ms > 0:
694
+ extra["qmt_time_ms"] = float(qmt_ms)
679
695
  return Bar(
680
696
  timestamp=ts,
681
697
  open=float(raw.get("open") or 0.0),
@@ -684,6 +700,7 @@ def _to_bar_obj(raw: dict[str, Any], ts_ns: int | None = None):
684
700
  close=float(raw.get("close") or 0.0),
685
701
  volume=float(raw.get("volume") or 0.0),
686
702
  symbol=str(raw.get("symbol") or ""),
703
+ extra=extra,
687
704
  )
688
705
 
689
706
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hamuna-quant-cli
3
- Version: 0.1.16
3
+ Version: 0.1.18
4
4
  Summary: Hamuna A 股回测 + 实盘统一 CLI (akquant 0.3.x). 替代 v1 自建 driver + QMT-style 策略规范.
5
5
  Author-email: Hamuna Team <team@hamuna.example>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hamuna-quant-cli"
7
- version = "0.1.16"
7
+ version = "0.1.18"
8
8
  description = "Hamuna A 股回测 + 实盘统一 CLI (akquant 0.3.x). 替代 v1 自建 driver + QMT-style 策略规范."
9
9
  readme = "hamuna_quant_cli/README.md"
10
10
  requires-python = ">=3.10"