hamuna-quant-cli 0.1.21__tar.gz → 0.1.22__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.21 → hamuna_quant_cli-0.1.22}/PKG-INFO +1 -1
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/__init__.py +1 -1
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/live/qmt_market.py +8 -25
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/PKG-INFO +1 -1
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/pyproject.toml +1 -1
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/MANIFEST.in +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/README.md +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/README.md +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/__main__.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/_market_fallback.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/_metrics_15.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/_test_akquant_parity.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/akquant_data_adapter.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/akquant_runner.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/akquant_schema_adapter.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/base_strategy.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/cross_sectional_helpers.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/live/__init__.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/live/loader.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/live/qmt_broker.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/live/runner.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/live/server_market_client.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/prebuilt_downloader.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/prebuilt_resolver.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/qmt_translator.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/__init__.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/backtest.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/cache.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/discipline.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/http_client.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/s3client.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/server_client.py +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/scripts/server.json +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/SOURCES.txt +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/dependency_links.txt +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/entry_points.txt +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/requires.txt +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/top_level.txt +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/setup.cfg +0 -0
- {hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/tests/test_live_safety.py +0 -0
|
@@ -177,16 +177,16 @@ def _make_market_gateway() -> Any:
|
|
|
177
177
|
self._tick_callback(raw)
|
|
178
178
|
|
|
179
179
|
def _emit_bar(self, raw: dict[str, Any]) -> None:
|
|
180
|
-
# Round 18.63.
|
|
181
|
-
#
|
|
182
|
-
#
|
|
183
|
-
#
|
|
184
|
-
# 修:
|
|
185
|
-
#
|
|
186
|
-
|
|
180
|
+
# Round 18.63.15: ts 用真实墙钟 (max(now, last+1ns)) — 之前 Round
|
|
181
|
+
# 18.63.3 用 max(now, last+period_ns) 造"假递增日期", SSE 每秒推同一根
|
|
182
|
+
# 当日 bar (time=00:00, volume 变) 时每根 +1 天 → 策略日期跳到未来
|
|
183
|
+
# (2026-10/11 月), %H:%M 恒为启动时刻 — 用户实测报告 (11:02 恒不变).
|
|
184
|
+
# 修: ts = max(now_ns, last_ns + 1) — 唯一递增 (流式每秒 1 根时墙钟
|
|
185
|
+
# 天然不同; 批量推送时 +1ns 防碰撞), 日期 = 当天, %H:%M 随墙钟走.
|
|
186
|
+
# QMT 真实 bar 时间 (epoch ms) 仍在 bar.extra['qmt_time_ms'] 可取.
|
|
187
187
|
now_ns = time.time_ns()
|
|
188
188
|
last_ns = getattr(self, "_last_bar_ts_ns", 0)
|
|
189
|
-
ts_ns = max(now_ns, last_ns +
|
|
189
|
+
ts_ns = max(now_ns, last_ns + 1) if last_ns else now_ns
|
|
190
190
|
self._last_bar_ts_ns = ts_ns
|
|
191
191
|
bar_obj = _to_bar_obj(raw, ts_ns=ts_ns)
|
|
192
192
|
if self._feed is not None:
|
|
@@ -606,23 +606,6 @@ def _unwrap_envelope(resp: dict[str, Any]) -> Any:
|
|
|
606
606
|
return resp.get("value", resp)
|
|
607
607
|
|
|
608
608
|
|
|
609
|
-
def _period_ns(period: str) -> int:
|
|
610
|
-
"""QMT period 字符串 → 单根 bar 的名义时长 (ns). 用于 _emit_bar 时间戳递增.
|
|
611
|
-
|
|
612
|
-
Round 18.63.3: live feed 按时间戳去重/聚合, 同刻多根 bar 只保留一根 →
|
|
613
|
-
批量推送攒不满 warmup_period → on_bar 永不触发. 修: bar ts 按 period 真实
|
|
614
|
-
递增, 保证每根唯一. 无法识别时退回 1 分钟 (保守, 避免未来戳).
|
|
615
|
-
"""
|
|
616
|
-
p = str(period or "").strip().lower()
|
|
617
|
-
table = {
|
|
618
|
-
"1m": 60, "5m": 300, "15m": 900, "30m": 1800, "60m": 3600,
|
|
619
|
-
"1h": 3600, "4h": 14400, "1d": 86400, "day": 86400, "1w": 604800,
|
|
620
|
-
"week": 604800, "1mo": 2592000, "month": 2592000,
|
|
621
|
-
}
|
|
622
|
-
seconds = table.get(p, 60)
|
|
623
|
-
return int(seconds * 1_000_000_000)
|
|
624
|
-
|
|
625
|
-
|
|
626
609
|
def _bar_signature(bar: dict[str, Any]) -> tuple:
|
|
627
610
|
"""bar 摘要 — 推 on_bar 去重用.
|
|
628
611
|
|
|
@@ -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.22"
|
|
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.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/_test_akquant_parity.py
RENAMED
|
File without changes
|
{hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/akquant_data_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/akquant_schema_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/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.21 → hamuna_quant_cli-0.1.22}/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.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli/runtime/server_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{hamuna_quant_cli-0.1.21 → hamuna_quant_cli-0.1.22}/hamuna_quant_cli.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|