qka 2.4.5.dev2__py3-none-any.whl → 2.4.6.dev2__py3-none-any.whl

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.
qka/core/indicator.py CHANGED
@@ -105,8 +105,13 @@ def max_drawdown(df: pd.DataFrame, symbol: str, window: int) -> pd.Series:
105
105
  cum_values = cum.values
106
106
  result = np.full(len(cum_values), np.nan)
107
107
  for i in range(window - 1, len(cum_values)):
108
- peak = np.max(cum_values[i - window + 1 : i + 1])
109
- result[i] = (cum_values[i] - peak) / peak
108
+ seg = cum_values[i - window + 1 : i + 1]
109
+ # 窗口内逐日刷新峰值,再取「任意时刻从峰到谷」最深的那一次。
110
+ # 旧实现只算 (末值 - 窗口峰值) / 窗口峰值 —— 那是「当前回撤」(现在离最高点多远),
111
+ # 会漏掉中间已经发生过的深坑:净值 1 → 1.2 → 0.6 → 1.3,旧算法给 0,
112
+ # 实际最深跌过 -50%。与 analysis.max_drawdown 的口径也不一致。
113
+ peak = np.maximum.accumulate(seg)
114
+ result[i] = np.min(seg / peak - 1.0)
110
115
  return pd.Series(result, index=cum.index)
111
116
 
112
117
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: qka
3
- Version: 2.4.5.dev2
3
+ Version: 2.4.6.dev2
4
4
  Summary: QKA(快量化 / Quant Kit for A-shares)- 简洁易用的 A 股量化回测框架
5
5
  Project-URL: Home, https://github.com/zsrl/qka
6
6
  Project-URL: Repository, https://github.com/zsrl/qka
@@ -6,7 +6,7 @@ qka/core/analysis.py,sha256=EXCO4qhzd2av5Yb4jihcNji1V-VFPOceUHKtg-q8bLs,11142
6
6
  qka/core/backtest.py,sha256=kzMAFbyGFvGE--Qypiot6wAp0jTiEsOPbaPd8Zs3o1M,13541
7
7
  qka/core/broker.py,sha256=FxeHh9qZ9M6FNFLd8EXwztA4kmC9zZzkrXin2hdVFa4,9662
8
8
  qka/core/data.py,sha256=VKXgFLsUJnD-36yYWb0Na84kqeJWr3_vSetG3mJCMGE,95301
9
- qka/core/indicator.py,sha256=OId8bgYFCzDgjPr27rb6zHYxkPYX0XrjlWylGSQ2KCU,6447
9
+ qka/core/indicator.py,sha256=CR6b-WYXb70VPqiRYkGaBeZRjc1hmKbUojB6n_laMpo,6895
10
10
  qka/core/report.py,sha256=TaZoxWk7ZIPLhA9Ss9UOmxWY2ymzKJRUnxSzmyPcBTI,22386
11
11
  qka/core/simulate.py,sha256=bdThckUFj0Y3GyAj5ahLIGv3HetJFTbyxbEcX2SUKn0,2915
12
12
  qka/core/sizing.py,sha256=xMLHUPnmmwnm51EaJu9cgsN3Yp7t9pVt8yv-yJ6X4wc,6334
@@ -21,8 +21,8 @@ qka/skills/qka/references/broker.md,sha256=wr62v1asRM-wBdsADIsB406eXm_ENYcrwGMAN
21
21
  qka/skills/qka/references/data.md,sha256=6mL44eGOk_xXLqQ62Wmv1DFYcXn3kayYWYWMd8-hFOk,28857
22
22
  qka/skills/qka/references/sizing.md,sha256=3SsX2ddQoHjE177dberW0Q7wYxW-M_2DG_-sV3CCo9A,656
23
23
  qka/skills/qka/references/strategy.md,sha256=-6xa_oigTTj77Siity5bTC5MbdF3UKfld9imnevlAAc,4455
24
- qka-2.4.5.dev2.dist-info/METADATA,sha256=GGgy1pKolxfDgtl_g9oFQYzlubVc_56mk2hw_FUExrk,7545
25
- qka-2.4.5.dev2.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
26
- qka-2.4.5.dev2.dist-info/entry_points.txt,sha256=quG9zg-rOKKtbg-6FiXkoxkUUTMltMBD0hZ0QUnJ6RM,37
27
- qka-2.4.5.dev2.dist-info/licenses/LICENSE,sha256=3iIG35SnJNF11yIzm3vxa2QUvy9SS5rktM3O1DL2vqM,1075
28
- qka-2.4.5.dev2.dist-info/RECORD,,
24
+ qka-2.4.6.dev2.dist-info/METADATA,sha256=s5mrtfJD_td6KFH2ZKzDVmd6w2YLwKvPr6OF6fsQIHg,7545
25
+ qka-2.4.6.dev2.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
26
+ qka-2.4.6.dev2.dist-info/entry_points.txt,sha256=quG9zg-rOKKtbg-6FiXkoxkUUTMltMBD0hZ0QUnJ6RM,37
27
+ qka-2.4.6.dev2.dist-info/licenses/LICENSE,sha256=3iIG35SnJNF11yIzm3vxa2QUvy9SS5rktM3O1DL2vqM,1075
28
+ qka-2.4.6.dev2.dist-info/RECORD,,