hamuna-quant-cli 0.1.17__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.
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/PKG-INFO +1 -1
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/__init__.py +1 -1
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/qmt_market.py +15 -11
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/PKG-INFO +1 -1
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/pyproject.toml +1 -1
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/MANIFEST.in +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/README.md +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/README.md +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/__main__.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_market_fallback.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_metrics_15.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_test_akquant_parity.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_data_adapter.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_runner.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_schema_adapter.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/base_strategy.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/cross_sectional_helpers.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/__init__.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/loader.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/qmt_broker.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/runner.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/server_market_client.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/prebuilt_downloader.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/prebuilt_resolver.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/qmt_translator.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/__init__.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/backtest.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/cache.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/discipline.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/http_client.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/s3client.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/server_client.py +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/scripts/server.json +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/SOURCES.txt +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/dependency_links.txt +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/entry_points.txt +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/requires.txt +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/top_level.txt +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/setup.cfg +0 -0
- {hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/tests/test_live_safety.py +0 -0
|
@@ -673,21 +673,25 @@ def _to_bar_obj(raw: dict[str, Any], ts_ns: int | None = None):
|
|
|
673
673
|
引擎当"实时新 bar"接收.
|
|
674
674
|
|
|
675
675
|
Round 18.63.7 补充: 原始 QMT bar 的真实时间戳 ``raw['time']`` (epoch ms)
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
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).
|
|
680
685
|
"""
|
|
681
686
|
import time as _t
|
|
682
687
|
from akquant import Bar
|
|
683
688
|
ts = ts_ns if ts_ns is not None else _t.time_ns()
|
|
684
|
-
# 把 QMT 真实时间塞 extra
|
|
685
|
-
extra
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
extra = {k: v for k, v in extra.items() if v is not None}
|
|
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)
|
|
691
695
|
return Bar(
|
|
692
696
|
timestamp=ts,
|
|
693
697
|
open=float(raw.get("open") or 0.0),
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hamuna-quant-cli"
|
|
7
|
-
version = "0.1.
|
|
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"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/_test_akquant_parity.py
RENAMED
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_data_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/akquant_schema_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/cross_sectional_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/live/server_market_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli/runtime/server_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{hamuna_quant_cli-0.1.17 → hamuna_quant_cli-0.1.18}/hamuna_quant_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|