Update btanalysis.py

This commit is contained in:
EmbraysiteReal 2021-12-07 18:06:43 +01:00
parent 95e6f574f3
commit 48d36cd98f

View File

@ -412,30 +412,36 @@ def calculate_mdd(data: dict, trades: pd.DataFrame, *, date_col: str = 'close_da
for pair, df in data.items():
# Init colonne boolean à 0
df_bis = df.copy()
df_bis["is_into_trade"] = np.zeros(len(df_bis), dtype=bool)
# df_bis = df.copy()
# df_bis["is_into_trade"] = np.zeros(len(df_bis), dtype=bool)
# Récupération des index
open_close_date = trades.loc[trades['pair']==pair][["open_date","close_date"]]
mdd_df = df[df["date"].isin([open_close_date["open_date"],open_close_date["close_date"]])]
l_open=df[df["date"].isin(open_close_date["open_date"])].index.values.tolist()
l_close=df[df["date"].isin(open_close_date["close_date"])].index.values.tolist()
# open_close_date = trades.loc[trades['pair']==pair][["open_date","close_date"]]
# mdd_df = df[df["date"].isin([open_close_date["open_date"],open_close_date["close_date"]])]
# l_open=df[df["date"].isin(open_close_date["open_date"])].index.values.tolist()
# l_close=df[df["date"].isin(open_close_date["close_date"])].index.values.tolist()
# Set 1 aux bornes open et close dans le df
df_bis["is_into_trade"].iloc[l_open] = 1
df_bis["is_into_trade"].iloc[l_close] = 1
# df_bis["is_into_trade"].iloc[l_open] = 1
# df_bis["is_into_trade"].iloc[l_close] = 1
# cumulative sum modulo 2
df_bis["is_into_trade"] = df_bis["is_into_trade"].cumsum()&1
# df_bis["is_into_trade"] = df_bis["is_into_trade"].cumsum()&1
# close boundaries set to 1 (again)
df_bis["is_into_trade"].iloc[l_close] = 1
# df_bis["is_into_trade"].iloc[l_close] = 1
# trades_pair = trades.loc[trades['pair']==pair][["open_date","close_date"]]
# trades_pair = trades_pair['is_in_trade'] = np.ones(len(trades_pair))
# trades_list = pd.concat([trades_pair.rename(columns={'open_date':'date'})[['date','is_in_trade']],trades_pair.rename(columns={'close_date':'date'})[['date','is_in_trade']]]).sort_values(by='date')
# trades_join = df.set_index('date').join(trades_list.set_index('date'))
# trades_join = trades_join.fillna(0)
trades_aux = trades.loc[trades['pair']==pair][["open_date","close_date"]]
trades_aux['open_close_mark'] = np.ones(len(trades_aux))
trades_aux = pd.concat([trades_aux.rename(columns={'open_date':'date'})[['date','open_close_mark']],trades_aux.rename(columns={'close_date':'date'})[['date','open_close_mark']]]).sort_values(by='date')
data_join = df.set_index('date').join(trades_aux.set_index('date'))
data_join = data_join.fillna(0)
data_join['is_in_trade'] = data_join.open_close_mark.cumsum()%2
data_join['is_in_trade'].loc[data_join['open_close_mark'] == 1] = 1
data_join['close_cummax'] = 0
data_join['close_cummax'] = data_join.groupby(data_join.open_close_mark.cumsum()).close.cummax()
data_join['close_cummax'].loc[data_join['is_in_trade'] == 0] = 0
# print(mdd_df)
return mdd_df