基于Python Numpy的数组最大回撤(局部最值差)计算实现问询
原代码问题说明
- 仅对比相邻元素的差值,没有计算「当前值相对于此前历史峰值的最大跌幅」,不符合最大回撤的定义
- 直接对numpy数组做
if cumsum[prev] > cumsum[current]的判断会触发布尔数组歧义的报错,逻辑不成立 - 返回值和打印逻辑混乱,无法统一输出符合要求的结果
正确实现代码
import numpy as np def MXincrementedDrawdown(cumsum): # 计算截至每个位置的历史累计最大值 running_max = np.maximum.accumulate(cumsum) # 计算每个位置的回撤值 drawdowns = cumsum - running_max # 取最大回撤(最小的回撤值对应最大跌幅) max_drawdown = drawdowns.min() if max_drawdown >= 0: print("No drawdown") else: print(max_drawdown) # 测试数组 A = np.array([0,2,5,44,-12,3,-5]) B = np.array([0,10,-110,23,45,66,30,2,12]) C = np.array([0,10,11,-23,45,11,66,45,4,12]) D = np.array([0,5,6,7,8]) MXincrementedDrawdown(A) MXincrementedDrawdown(B) MXincrementedDrawdown(C) MXincrementedDrawdown(D)
输出结果
-56 -120 -62 No drawdown
内容的提问来源于stack exchange,提问作者tony selcuk
相关产品推荐
相关产品推荐

