gpt4 book ai didi

python - 选择满足特定条件的第一行

转载 作者:行者123 更新时间:2023-12-01 04:42:26 25 4
gpt4 key购买 nike

我有以下数据框:

Date         RunningTotal
01-05-2015 100
02-05-2015 150
03_05-2015 140
04-05-2015 130
05_05_2015 140
06-05-2015 170
07-05-2015 180

我需要确定最大值drawdown的开始和结束为运行总计。到目前为止,我可以确定最大回撤的起始索引位置和最大回撤的索引位置,如下所示:

df.set_index(['RunningTotal'], inplace=True)
max_drawdown_ix = np.argmax(np.maximum.accumulate(df.index) - df.index)+1
start_drawdown_ix = np.argmax(df.index[:max_drawdown_ix])

我无法做的是确定回撤结束时的索引位置(即:运行总额何时高于回撤开始时的索引位置)。在上面的示例中,结果如下:

max_drawdown_ix occurs on 04_05_2015 which is index position 3
start_drawdown_ix occurs on 02_05_2015 which is index position 1
end_drawdown_ix occurs on 06_05_2015 which is index position 5

关于如何确定最大/最大回撤何时结束有什么建议吗? (即:如何确定何时第一次出现runningtotal大于start_drawdown_ix,它发生在max_drawdown_ix之后)

最佳答案

首先,让我们计算一下您的亏损。

df['drawdown'] = df.RunningTotal.cummax() - df.RunningTotal

接下来,找出最大回撤发生的位置。

max_dd_idx = df.drawdown.idxmax()
max_dd_date = df.Date.iat[max_dd_idx]
>>> max_dd_date
'04-05-2015'

然后,我们需要搜索该索引位置之前的第一个零值,以找到回撤期的开始。

dd_start_idx = (df.drawdown.loc[:max_dd_idx]
[df.drawdown.loc[:max_dd_idx] == 0].index[-1])
dd_start_date = df.Date.iat[dd_start_idx]
>>> dd_start_idx
'02-05-2015'

然后获取最大回撤周期结束时的索引位置(即最大 DD 在最大 DD 之后首先变为零的位置)。

dd_end_idx = (df.drawdown.loc[max_dd_idx:]
[df.drawdown.loc[max_dd_idx:] == 0].index[0])
dd_end_date = df.Date.iat[dd_end_idx]
>>> dd_end_date
'06-05-2015'

请注意,如果当前回撤期正在进行,您将需要进行边界检查以避免索引错误。

if len(df.drawdown.loc[max_dd_idx:][df.drawdown.loc[max_dd_idx:] == 0]) == 0:
pass # Current drawdown period is ongoing.

关于python - 选择满足特定条件的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30304887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com