test done
This commit is contained in:
parent
91e57f64d4
commit
d08b0918ad
@ -390,6 +390,7 @@ def calculate_max_drawdown(trades: pd.DataFrame, *, date_col: str = 'close_date'
|
|||||||
low_val = max_drawdown_df.loc[idxmin, 'cumulative']
|
low_val = max_drawdown_df.loc[idxmin, 'cumulative']
|
||||||
return abs(min(max_drawdown_df['drawdown'])), high_date, low_date, high_val, low_val
|
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 :
|
def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float :
|
||||||
"""
|
"""
|
||||||
Calculate Trades MDD (Max DrawDown) :
|
Calculate Trades MDD (Max DrawDown) :
|
||||||
@ -410,9 +411,7 @@ def calculate_trades_mdd(data: dict, trades: pd.DataFrame) -> float :
|
|||||||
trades_mdd_pair_list = []
|
trades_mdd_pair_list = []
|
||||||
|
|
||||||
for pair, df in data.items():
|
for pair, df in data.items():
|
||||||
if df is None:
|
if isinstance(df, pd.DataFrame):
|
||||||
break
|
|
||||||
|
|
||||||
# Gather the opening and closing trade dates into one Dates DataFrame
|
# Gather the opening and closing trade dates into one Dates DataFrame
|
||||||
open_close_trades = trades.loc[trades['pair']==pair][["open_date","close_date"]]
|
open_close_trades = trades.loc[trades['pair']==pair][["open_date","close_date"]]
|
||||||
open_close_trades = pd.concat(
|
open_close_trades = pd.concat(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from math import isclose
|
from math import isclose
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
import numpy as np
|
||||||
import pytest
|
import pytest
|
||||||
from arrow import Arrow
|
from arrow import Arrow
|
||||||
from pandas import DataFrame, DateOffset, Timestamp, to_datetime
|
from pandas import DataFrame, DateOffset, Timestamp, to_datetime
|
||||||
@ -10,7 +10,7 @@ from freqtrade.configuration import TimeRange
|
|||||||
from freqtrade.constants import LAST_BT_RESULT_FN
|
from freqtrade.constants import LAST_BT_RESULT_FN
|
||||||
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS, BT_DATA_COLUMNS_MID, BT_DATA_COLUMNS_OLD,
|
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS, BT_DATA_COLUMNS_MID, BT_DATA_COLUMNS_OLD,
|
||||||
analyze_trade_parallelism, calculate_csum,
|
analyze_trade_parallelism, calculate_csum,
|
||||||
calculate_market_change, calculate_max_drawdown,
|
calculate_market_change, calculate_max_drawdown, calculate_trades_mdd,
|
||||||
combine_dataframes_with_mean, create_cum_profit,
|
combine_dataframes_with_mean, create_cum_profit,
|
||||||
extract_trades_of_period, get_latest_backtest_filename,
|
extract_trades_of_period, get_latest_backtest_filename,
|
||||||
get_latest_hyperopt_file, load_backtest_data, load_trades,
|
get_latest_hyperopt_file, load_backtest_data, load_trades,
|
||||||
@ -332,3 +332,15 @@ def test_calculate_max_drawdown2():
|
|||||||
df = DataFrame(zip(values[:5], dates[:5]), columns=['profit', 'open_date'])
|
df = DataFrame(zip(values[:5], dates[:5]), columns=['profit', 'open_date'])
|
||||||
with pytest.raises(ValueError, match='No losing trade, therefore no drawdown.'):
|
with pytest.raises(ValueError, match='No losing trade, therefore no drawdown.'):
|
||||||
calculate_max_drawdown(df, date_col='open_date', value_col='profit')
|
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)
|
||||||
|
pairlist = set(trades["pair"])
|
||||||
|
|
||||||
|
with pytest.raises(ValueError, match='All dataframe in candle data are None'):
|
||||||
|
calculate_trades_mdd({"BTC/BUSD" : None}, trades)
|
||||||
|
|
||||||
|
data = load_data(datadir=testdatadir, pairs=pairlist, timeframe='5m')
|
||||||
|
trades_mdd = calculate_trades_mdd(data, trades)
|
||||||
|
assert np.round(trades_mdd, 6) == 0.138943
|
Loading…
Reference in New Issue
Block a user