Pandas和Numpy的一些金融相关的操作

给定一个净值序列,求出最大回撤

# arr是一个净值的np.ndarray
i = np.argmax(
(np.maximum.acumulate(arr) - arr) / np.maximum.acculate(arr))

if i == 0:
 max_draw_dowm = 0
else:
 j = np.maximum(arr[:i])  # 开始位置
 max_draw_down = (arr[j] - arr[i]) / arr[j]

# i为回撤结束位置 j为回撤开始位置
# 可以用动态规划解决最小子列和的思路求出最大回撤 时间复杂度为O(n)

已知净值求日收益率

# net_value是一个净值的pd.Series 按照时间排序 较早的时间在前面
daily_return = net_value.pct_change()

已知日收益率求净值

# daily_return是一个日收益率的pd.Series 按照时间排序 较早的时间在前面
_net_value = (daily_return + 1).cumprod()  # 这时候第一个值还不是1
net_value = _net_value / _net_value.iloc[0]

已知净值求累计收益率

# net_value是一个净值的pd.Series 按照时间排序 较早的时间在前面
cum_return = net_value / net_value.iloc[0] - 1

版权声明:本文为forcee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/forcee/p/12616312.html