以前一直只是观测某次交易的回撤,昨天用到最大回撤,所以去查了资料。
看图说话:
一、沪深300指数的收盘价走势
df['close'].plot()

二、计算股价滚动最高价(黄色线)
df['close'].plot()
df['滚动最大值'].plot()

三、计算落差值[在每个x轴上,计算落差值,【黄线】 减去 【蓝线】]
df['回落值']= df.eval("close - 滚动最大值")
df['回落值'].plot()

四、计算回撤值(落差值 / 滚动最高值)
df['回撤集合'] = df.eval("回落值 / 滚动最大值")
df['回撤集合'].plot()

五、取最大回撤值
df['回撤集合'].min()
计算值:-0.4333949500130653
六、全部代码
import pandas as pd
import numpy as np
#计算系列值的最大回撤
def get_max_retreat(df:pd.DataFrame,price_tag:str)->float:
"""
df:DataFrame
price_tag:要计算的列名,比如'close'
"""
roll_max = df[price_tag].expanding().max()
retreat_sets = 100 * (df[price_tag] / roll_max -1)
max_retreat = np.min(retreat_sets)
return max_retreat
#====测试代码====
retreat = get_max_retreat(df,'close')
retreat
网友评论