【发布时间】:2021-08-01 17:02:24
【问题描述】:
下面的代码计算从 $100 开始的 Compounding 值和百分比收益 gains。下面的代码从整个增益数组[20,3,4,55,6.5,-10, 20,-60,5] 开始,最后得到96.25,然后取出第一个索引并重新计算复合值[3,4,55,6.5,-10, 20,-60,5],得到80.20。它将一直执行此操作,直到增益数组 [5] 结束。我想编写一个代码来计算最大回撤,因为它正在计算f。这将是f[120., 123.6 ,128.544, 199.243, 212.194008 190.9746072, 229.16952864, 91.66781146, 96.25120203] 第一次迭代的复合结果,如果它低于初始资本Amount 值,我想记录一个值。所以第一次迭代时的最小值是91.67,所以这将是输出,而在第二次迭代中,它将是76.37。由于在最后一次迭代中有 [5] 导致复合输出 105 没有低于 100 的值,所以它是 None 作为输出。我怎样才能在下面的代码中实现这一点并获得预期的输出?
import numpy as np
Amount = 100
def moneyrisk(array):
f = lambda array: Amount*np.cumprod(array/100 + 1, 1)
rep = array[None].repeat(len(array), 0)
rep_t = np.triu(rep, k=0)
final = f(rep_t)[:, -1]
gains= np.array([20,3,4,55,6.5,-10, 20,-60,5])
预期输出:
[91.67, 76.37, 74.164, 71.312, 46.008, 43.2, 48., 40., None]
【问题讨论】:
标签: python arrays numpy indexing lambda