diff --git a/freqtrade/data/btanalysis/trade_parallelism.py b/freqtrade/data/btanalysis/trade_parallelism.py index 82cc043b1..f69cb4e80 100644 --- a/freqtrade/data/btanalysis/trade_parallelism.py +++ b/freqtrade/data/btanalysis/trade_parallelism.py @@ -93,13 +93,16 @@ def balance_distribution_over_time( min_date_res = timeframe_to_prev_date(timeframe, min_date) max_date_res = timeframe_to_prev_date(timeframe, max_date) index = pd.date_range(min_date_res, max_date_res, freq=timeframe_to_resample_freq(timeframe)) - df = pd.DataFrame(index=index) + pairs_lev = [f"{pair}_leverage" for pair in pairlist] + df = pd.DataFrame(index=index, columns=[stake_currency] + pairlist + pairs_lev, dtype=float) df[stake_currency] = float(start_balance) df[pairlist] = 0.0 + df[pairs_lev] = np.nan for trade in trades.sort_values(by=["open_date"]).itertuples(): end_date = trade.close_date if trade.close_date is not pd.NaT else None # Exclude open orders - these won't have order_filled_timestamp set. orders = [o for o in trade.orders if o["order_filled_timestamp"]] + df.loc[trade.open_date : end_date, f"{trade.pair}_leverage"] = trade.leverage for order in sorted(orders, key=lambda x: x["order_filled_timestamp"]): filled_at = pd.Timestamp(dt_from_ts(order["order_filled_timestamp"])) real_amount = order.get("filled", order["amount"]) / trade.leverage diff --git a/freqtrade/util/migrations/migrate_wallet_history.py b/freqtrade/util/migrations/migrate_wallet_history.py index 9693dfd7d..a03ac8c70 100644 --- a/freqtrade/util/migrations/migrate_wallet_history.py +++ b/freqtrade/util/migrations/migrate_wallet_history.py @@ -81,6 +81,9 @@ def _migrate_wallet_history(config: Config, exchange: Exchange, starting_balance # Assume the first column is the index (date) stake_idx = balance_dist.columns.get_loc(stake_currency) pair_balance_idx = {pair: balance_dist.columns.get_loc(pair) + 1 for pair in pairlist_valid} + pair_leverage_idx = { + pair: balance_dist.columns.get_loc(f"{pair}_leverage") + 1 for pair in pairlist_valid + } pair_price_idx = { pair: balance_dist.columns.get_loc(f"{pair}_open") + 1 for pair in pairlist_valid } @@ -106,6 +109,7 @@ def _migrate_wallet_history(config: Config, exchange: Exchange, starting_balance for pair in pairlist_valid: base_currency = pair.split("/")[0] balance_value = row[pair_balance_idx[pair]] + leverage_value = row[pair_leverage_idx[pair]] # Only add entry if balance is not empty/NaN if not pd.isna(balance_value) and balance_value > 0: price_value = row[pair_price_idx[pair]] @@ -117,6 +121,7 @@ def _migrate_wallet_history(config: Config, exchange: Exchange, starting_balance currency=base_currency, price=price, balance=balance_value, + leverage=leverage_value if not pd.isna(leverage_value) else 1.0, ) )