Mdd almost final push
Correction bug close mark & compute mdd for each pair
This commit is contained in:
parent
3c83de940d
commit
4b05786230
@ -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']]]
|
||||
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')
|
||||
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['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]:
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user