Mdd almost final push

Correction bug close mark & compute mdd for each pair
This commit is contained in:
EmbraysiteReal 2021-12-09 12:17:51 +01:00
parent 3c83de940d
commit 4b05786230

View File

@ -409,25 +409,45 @@ def calculate_mdd(data: dict, trades: pd.DataFrame, *, date_col: str = 'close_da
mdd_df = pd.DataFrame()
mdd_pair_list = []
for pair, df in data.items():
trades_aux = trades.loc[trades['pair']==pair][["open_date","close_date"]]
trades_aux = pd.concat([trades_aux.rename(columns={'open_date':'date'})[['date']],
trades_aux.rename(columns={'close_date':'date'})[['date']]]
).sort_values(by='date')
trades_aux['open_close_mark'] = np.ones(len(trades_aux), dtype=int)
data_join = df.set_index('date').join(trades_aux.set_index('date'))
data_join["open_close_mark"] = data_join["open_close_mark"].fillna(0).astype(int)
open_close_trades = trades.loc[trades['pair']==pair][["open_date","close_date"]]
open_close_trades = pd.concat([open_close_trades.rename(columns={'open_date':'date'})[['date']],
open_close_trades.rename(columns={'close_date':'date'})[['date']]]
).sort_values(by='date')
open_close_trades['open_close_mark'] = np.ones(len(open_close_trades), dtype=int)
data_join = df.set_index('date').join(open_close_trades.set_index('date'))
del open_close_trades
close_trades = trades.loc[trades['pair']==pair][["close_date"]]
close_trades = close_trades.rename(columns={'close_date':'date'})
close_trades['close_mark'] = np.ones(len(close_trades), dtype=int)
data_join = data_join.join(close_trades.set_index('date'))
del close_trades
data_join[["open_close_mark",'close_mark']] = data_join[["open_close_mark",'close_mark']].fillna(0).astype(int)
data_join['is_in_trade'] = data_join.open_close_mark.cumsum()&1 # &1 <=> %2
data_join.loc[data_join['open_close_mark'] == 1, 'is_in_trade'] = 1
data_join['close_cummax'] = 0
data_join["open_close_mark"] = data_join["open_close_mark"] - data_join["close_mark"]
data_join['close_cummax'] = data_join.groupby(data_join.open_close_mark.cumsum()).close.cummax()
data_join.loc[data_join['is_in_trade'] == 0, 'close_cummax'] = 0
data_join = data_join.rename(columns={'close_mark':'drawdown'})
data_join['drawdown'] = data_join['close_cummax'] - data_join['close']
mdd_pair = data_join['drawdown'].max()
mdd_pair_list.append(mdd_pair)
# print(mdd_df)
return mdd_df
mdd_pair_list = np.ndarray(mdd_pair_list)
return mdd_pair_list.max()
def calculate_csum(trades: pd.DataFrame, starting_balance: float = 0) -> Tuple[float, float]:
"""