Merge pull request #3127 from orehunt/max_drawdown_fix_db_plot
use equality instead of index for row lookups
This commit is contained in:
commit
9387585756
@ -151,13 +151,20 @@ def load_trades(source: str, db_url: str, exportfilename: Path,
|
|||||||
return load_backtest_data(exportfilename)
|
return load_backtest_data(exportfilename)
|
||||||
|
|
||||||
|
|
||||||
def extract_trades_of_period(dataframe: pd.DataFrame, trades: pd.DataFrame) -> pd.DataFrame:
|
def extract_trades_of_period(dataframe: pd.DataFrame, trades: pd.DataFrame,
|
||||||
|
date_index=False) -> pd.DataFrame:
|
||||||
"""
|
"""
|
||||||
Compare trades and backtested pair DataFrames to get trades performed on backtested period
|
Compare trades and backtested pair DataFrames to get trades performed on backtested period
|
||||||
:return: the DataFrame of a trades of period
|
:return: the DataFrame of a trades of period
|
||||||
"""
|
"""
|
||||||
trades = trades.loc[(trades['open_time'] >= dataframe.iloc[0]['date']) &
|
if date_index:
|
||||||
(trades['close_time'] <= dataframe.iloc[-1]['date'])]
|
trades_start = dataframe.index[0]
|
||||||
|
trades_stop = dataframe.index[-1]
|
||||||
|
else:
|
||||||
|
trades_start = dataframe.iloc[0]['date']
|
||||||
|
trades_stop = dataframe.iloc[-1]['date']
|
||||||
|
trades = trades.loc[(trades['open_time'] >= trades_start) &
|
||||||
|
(trades['close_time'] <= trades_stop)]
|
||||||
return trades
|
return trades
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ from freqtrade.data.btanalysis import (calculate_max_drawdown,
|
|||||||
create_cum_profit,
|
create_cum_profit,
|
||||||
extract_trades_of_period, load_trades)
|
extract_trades_of_period, load_trades)
|
||||||
from freqtrade.data.converter import trim_dataframe
|
from freqtrade.data.converter import trim_dataframe
|
||||||
|
from freqtrade.exchange import timeframe_to_prev_date
|
||||||
from freqtrade.data.history import load_data
|
from freqtrade.data.history import load_data
|
||||||
from freqtrade.misc import pair_to_filename
|
from freqtrade.misc import pair_to_filename
|
||||||
from freqtrade.resolvers import StrategyResolver
|
from freqtrade.resolvers import StrategyResolver
|
||||||
@ -122,7 +123,8 @@ def add_profit(fig, row, data: pd.DataFrame, column: str, name: str) -> make_sub
|
|||||||
return fig
|
return fig
|
||||||
|
|
||||||
|
|
||||||
def add_max_drawdown(fig, row, trades: pd.DataFrame, df_comb: pd.DataFrame) -> make_subplots:
|
def add_max_drawdown(fig, row, trades: pd.DataFrame, df_comb: pd.DataFrame,
|
||||||
|
timeframe: str) -> make_subplots:
|
||||||
"""
|
"""
|
||||||
Add scatter points indicating max drawdown
|
Add scatter points indicating max drawdown
|
||||||
"""
|
"""
|
||||||
@ -132,8 +134,8 @@ def add_max_drawdown(fig, row, trades: pd.DataFrame, df_comb: pd.DataFrame) -> m
|
|||||||
drawdown = go.Scatter(
|
drawdown = go.Scatter(
|
||||||
x=[highdate, lowdate],
|
x=[highdate, lowdate],
|
||||||
y=[
|
y=[
|
||||||
df_comb.loc[highdate, 'cum_profit'],
|
df_comb.loc[timeframe_to_prev_date(timeframe, highdate), 'cum_profit'],
|
||||||
df_comb.loc[lowdate, 'cum_profit'],
|
df_comb.loc[timeframe_to_prev_date(timeframe, lowdate), 'cum_profit'],
|
||||||
],
|
],
|
||||||
mode='markers',
|
mode='markers',
|
||||||
name=f"Max drawdown {max_drawdown * 100:.2f}%",
|
name=f"Max drawdown {max_drawdown * 100:.2f}%",
|
||||||
@ -383,6 +385,9 @@ def generate_profit_graph(pairs: str, data: Dict[str, pd.DataFrame],
|
|||||||
# Combine close-values for all pairs, rename columns to "pair"
|
# Combine close-values for all pairs, rename columns to "pair"
|
||||||
df_comb = combine_dataframes_with_mean(data, "close")
|
df_comb = combine_dataframes_with_mean(data, "close")
|
||||||
|
|
||||||
|
# Trim trades to available OHLCV data
|
||||||
|
trades = extract_trades_of_period(df_comb, trades, date_index=True)
|
||||||
|
|
||||||
# Add combined cumulative profit
|
# Add combined cumulative profit
|
||||||
df_comb = create_cum_profit(df_comb, trades, 'cum_profit', timeframe)
|
df_comb = create_cum_profit(df_comb, trades, 'cum_profit', timeframe)
|
||||||
|
|
||||||
@ -405,7 +410,7 @@ def generate_profit_graph(pairs: str, data: Dict[str, pd.DataFrame],
|
|||||||
|
|
||||||
fig.add_trace(avgclose, 1, 1)
|
fig.add_trace(avgclose, 1, 1)
|
||||||
fig = add_profit(fig, 2, df_comb, 'cum_profit', 'Profit')
|
fig = add_profit(fig, 2, df_comb, 'cum_profit', 'Profit')
|
||||||
fig = add_max_drawdown(fig, 2, trades, df_comb)
|
fig = add_max_drawdown(fig, 2, trades, df_comb, timeframe)
|
||||||
|
|
||||||
for pair in pairs:
|
for pair in pairs:
|
||||||
profit_col = f'cum_profit_{pair}'
|
profit_col = f'cum_profit_{pair}'
|
||||||
|
Loading…
Reference in New Issue
Block a user