pep8
This commit is contained in:
parent
d08b0918ad
commit
44843910c6
@ -390,6 +390,7 @@ def calculate_max_drawdown(trades: pd.DataFrame, *, date_col: str = 'close_date'
|
||||
low_val = max_drawdown_df.loc[idxmin, 'cumulative']
|
||||
return abs(min(max_drawdown_df['drawdown'])), high_date, low_date, high_val, low_val
|
||||
|
||||
|
||||
# TODO : is supposed to work only with long positions
|
||||
def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float:
|
||||
"""
|
||||
@ -399,7 +400,6 @@ def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float :
|
||||
Args:
|
||||
:param data: (dict) dictionnary of candle dataframe per pair used to calculate the mdd.
|
||||
:param trades: (pd.DataFrame) trades used to find the intervals dates.
|
||||
|
||||
Returns:
|
||||
:return: (float) Give the maximum drawdown among each trades.
|
||||
:raise: (ValueError) if trade-dataframe was found empty.
|
||||
@ -407,9 +407,7 @@ def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float :
|
||||
"""
|
||||
if len(trades) == 0:
|
||||
raise ValueError("Trade dataframe empty")
|
||||
|
||||
trades_mdd_pair_list = []
|
||||
|
||||
for pair, df in data.items():
|
||||
if isinstance(df, pd.DataFrame):
|
||||
# Gather the opening and closing trade dates into one Dates DataFrame
|
||||
@ -453,9 +451,9 @@ def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float :
|
||||
|
||||
# Compute the drawdown at each time of each trades
|
||||
data_join = data_join.rename(columns={'open_mark': 'drawdown'})
|
||||
data_join.loc[data_join['is_in_trade'] == 1, 'drawdown'] = \
|
||||
(data_join['close_cummax'] - data_join['close']) \
|
||||
/ data_join['close_cummax']
|
||||
data_join.loc[data_join['is_in_trade'] == 1, 'drawdown'] = ((
|
||||
data_join['close_cummax'] - data_join['close'])
|
||||
/ data_join['close_cummax'])
|
||||
|
||||
mdd_pair = data_join['drawdown'].max()
|
||||
trades_mdd_pair_list.append(mdd_pair)
|
||||
@ -466,6 +464,7 @@ def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float :
|
||||
trades_mdd_pair_list = np.array(trades_mdd_pair_list)
|
||||
return trades_mdd_pair_list.max()
|
||||
|
||||
|
||||
def calculate_csum(trades: pd.DataFrame, starting_balance: float = 0) -> Tuple[float, float]:
|
||||
"""
|
||||
Calculate min/max cumsum of trades, to show if the wallet/stake amount ratio is sane
|
||||
|
@ -10,7 +10,8 @@ from freqtrade.configuration import TimeRange
|
||||
from freqtrade.constants import LAST_BT_RESULT_FN
|
||||
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS, BT_DATA_COLUMNS_MID, BT_DATA_COLUMNS_OLD,
|
||||
analyze_trade_parallelism, calculate_csum,
|
||||
calculate_market_change, calculate_max_drawdown, calculate_trades_mdd,
|
||||
calculate_market_change, calculate_max_drawdown,
|
||||
calculate_trades_mdd,
|
||||
combine_dataframes_with_mean, create_cum_profit,
|
||||
extract_trades_of_period, get_latest_backtest_filename,
|
||||
get_latest_hyperopt_file, load_backtest_data, load_trades,
|
||||
@ -333,6 +334,7 @@ def test_calculate_max_drawdown2():
|
||||
with pytest.raises(ValueError, match='No losing trade, therefore no drawdown.'):
|
||||
calculate_max_drawdown(df, date_col='open_date', value_col='profit')
|
||||
|
||||
|
||||
def test_calculate_trades_mdd(testdatadir):
|
||||
backtest_file = testdatadir / "backtest-result_test.json"
|
||||
trades = load_backtest_data(backtest_file)
|
||||
|
Loading…
Reference in New Issue
Block a user