找到从一个波峰到后面临近的波谷的跌幅的最大值。绿线和红线之间的一段波峰到波谷的落差就是这段时间的最大连续跌幅。
import pandas as pd
import matplotlib.pylab as plt
import numpy as np
from time import perf_counter
to=perf_counter()
def maxfall(n=30):
'''寻找最大连续跌幅'''
# data = np.random.randint(-10,40,n)*0.2 + np.random.randint(-10,10,n)
data = np.random.randn(n)
data=[round(i,2) for i in data]
data[0] = 0
maxDown,maxN,maxT,minL,temp =data[0],data[0],data[0],data[0],data[0]
for i in range(1,len(data)):
maxN = max(maxN,data[i])
temp = maxN - data[i]
if data[i] > data[i-1]:
maxN = data[i] #
if temp > maxDown:
maxDown = temp
maxT = maxN
minL = data[i]
print('最大连续跌幅:',maxDown,"最大值:",(maxT),"最大值横坐标:",*np.argwhere(data == maxT))
# data = pd.Series(data)
# print('最大连续跌幅:',maxDown,'对应坐标:',data.where(data == maxT).dropna(),data.where(data == minL).dropna())
# data.plot()
# plt.scatter(data.index,data,s=10,color='g')
plt.plot(data,'--P',markersize=4,linewidth=1)
plt.axhline(maxT,color='#14A054')
plt.axhline(minL,color='r')
print(perf_counter()-to)
plt.show()
maxfall()