版权正式的:冠词是视频博客作者的怪人文字。,请表明转载的起端。 leehao.me https://blog.csdn.net/lihao21/article/details/85521514

葡京官网是指授予结成在采的圆状物内,在什么时期点逆推。,净资产等于最大可能性降低。。躬身送出门指的是净值从顶T降低的射程。。葡京官网经用比例来表现,它是单独要紧的风险按生活指数调整。。葡京官网的计算式为

=()/
葡京官网 = \left( 浪尖值 – 浪尖值 右) / 浪尖值

在意这点。

浪尖值

浪尖值

它不确定的是最高值和最下限值。,这边的

浪尖值

浪尖值

它理应与时期长度顾虑。。

并且,值当提示的是,葡京官网不过作图授予结成资产净值降低的最大射程,但它没阐明回复净资产等于必要多长时期。。

冠词告知你方法应用它。 Python 技术计算一组建议 numpy 来计算葡京官网。

便于作图算法,本人观念化葡京官网的下定义,只思索净值降低。,没降低百分数。,就是,为序列。

x1,x2,,xnx_1, x_2, \ldots, x_n

,下定义葡京官网

dd

d=maxij(xixj)
d = \max \limits_{i\leqslant j} \left( x_i – x_j 右)

免得必要改用比例来表现葡京官网,它只必要划分。

xix_i

那就够了。

停飞下定义,从容的闪现葡京官网的算法。遍历序列中持有元素,为每个元素计算其降低最高值,当时的再喻为持有元素降低最高值,采出最大的元素降低最高值。这样算法的时期复合物为

O(n2)O(n^2)

这么,可能的选择在通过单独的若干阶段来发展时期复合物求葡京官网的算法呢?答案是必定的。算法可以整齐的应用以下式子来表现:

d=maxij(xixj)=maxj(maxijxixj)
d = \max \limits_{i\leqslant j} \left( x_i – x_j 右) = \max \limits_{j} \left( \max \limits_{i \leqslant j} x_i – x_j 右)

这样式子看着复杂,真正不难逮捕。式子右边是葡京官网的下定义,上面本人引见过了。上面引见方法逮捕式子的右半平衡。
本人先看待

(maxijxixj)\left( \max \limits_{i \leqslant j} x_i – x_j 右)

,想象本人称呼委任元素

xjx_j

,元素

xix_i

是指持有在元素

xjx_j

前的元素。

maxijxi\max \limits_{i \leqslant j} x_i

表现持有在元素

xjx_j

前的元素射中靶子最大元素,

(maxijxixj)\left( \max \limits_{i \leqslant j} x_i – x_j 右)

则表现这样最大元素减去元素

xjx_j

。说得大概还短距离概括,本人以单独详细案件来阐明。
想象有一序列,[100, 200, 50, 300, 150, 100, 200],元素下标

00

让本人开端吧。,称呼委任

jj

为4,

xjx_j

为150,则

ii

非常 0, 1, 2, 3, 4,故

maxijxi\max \limits_{i \leqslant j} x_i

为 300,

(maxijxixj)\left( \max \limits_{i \leqslant j} x_i – x_j 右)

为 150。
现时再看一遍。

maxj(maxijxixj)\max \limits_{j} \left( \max \limits_{i \leqslant j} x_i – x_j 右)

来意图。本人可以在每单独后面计算

jj

,有单独。

(maxijxixj)\left( \max \limits_{i \leqslant j} x_i – x_j 右)

值,为持若干

jj

,拿最大的吧。

(maxijxixj)\left( \max \limits_{i \leqslant j} x_i – x_j 右)

值,即为葡京官网值,并取出利润葡京官网时对应的

jj

ii

下标,求解算法。。

采取 Python 的 numpy 造成该算法。,源代码如次:

import numpy as np
import matplotlib.pyplot as plt

x =[100,200,50,300,150,100,200]
j = np.argmax(np.maximum.accumulate(x)- x)print(''j is {j}''.format(j=j))
i = np.argmax(x[:j])print(''i is {i}''.format(i=i))
d = x[i]- x[j]print(d)

plt.plot(x)
plt.plot([i, j],[x[i], x[j]],''o'', color=白色, markersize=10)
plt.show()

为应用图形来说明葡京官网,本人用过它。 matplotlib,出口导致:

j is 5
i is 3
200

出口图形:

  1. https://www.investopedia.com/terms/t/trough.asp
  2. https://www.investopedia.com/terms/m/maximum-drawdown-mdd.asp
  3. https://baike.baidu.com/item/葡京官网率
  4. https://blog.csdn.net/tz_zs/article/details/80335238
  5. https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.ufunc.accumulate.html
  6. https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.maximum.html
  7. https://stackoverflow.com/questions/22607324/start-end-and-duration-of-maximum-drawdown-in-python