refactor: rename WalletHistory fieldname from price to rate

This commit is contained in:
Matthias
2026-01-12 20:28:47 +01:00
parent 623991c772
commit f7ddf46b32
7 changed files with 18 additions and 18 deletions
@@ -39,7 +39,7 @@ def convert_bt_wallet_collection(wallet_captures: list[tuple]) -> DataFrame:
return DataFrame() return DataFrame()
return DataFrame( return DataFrame(
wallet_captures, wallet_captures,
columns=["date", "currency", "price", "balance"], columns=["date", "currency", "rate", "balance"],
) )
@@ -47,7 +47,7 @@ def generate_wallet_stats(wallet_df: DataFrame, stake_currency: str) -> dict[str
"""Generate wallet statistics from the wallet DataFrame.""" """Generate wallet statistics from the wallet DataFrame."""
if wallet_df is None or wallet_df.empty: if wallet_df is None or wallet_df.empty:
return {} return {}
wallet_df.loc[:, "total"] = wallet_df["price"] * wallet_df["balance"] wallet_df.loc[:, "total"] = wallet_df["rate"] * wallet_df["balance"]
# Group by date to get total wallet value at each timestamp # Group by date to get total wallet value at each timestamp
wallet = wallet_df.groupby("date")["total"].sum().reset_index() wallet = wallet_df.groupby("date")["total"].sum().reset_index()
start_balance = wallet.iloc[0]["total"] start_balance = wallet.iloc[0]["total"]
+2 -2
View File
@@ -18,7 +18,7 @@ class WalletHistory(ModelBase):
id: Mapped[int] = mapped_column(Integer, primary_key=True) id: Mapped[int] = mapped_column(Integer, primary_key=True)
timestamp: Mapped[datetime] = mapped_column(DateTime, nullable=False, index=True) timestamp: Mapped[datetime] = mapped_column(DateTime, nullable=False, index=True)
currency: Mapped[str] = mapped_column(String(25), nullable=False) currency: Mapped[str] = mapped_column(String(25), nullable=False)
price: Mapped[float] = mapped_column(Float, nullable=True) rate: Mapped[float] = mapped_column(Float, nullable=True)
balance: Mapped[float] = mapped_column(Float, nullable=False) balance: Mapped[float] = mapped_column(Float, nullable=False)
leverage: Mapped[float] = mapped_column(Float, nullable=False, default=1.0) leverage: Mapped[float] = mapped_column(Float, nullable=False, default=1.0)
bot_managed: Mapped[bool] = mapped_column(nullable=False, default=True) bot_managed: Mapped[bool] = mapped_column(nullable=False, default=True)
@@ -31,5 +31,5 @@ class WalletHistory(ModelBase):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"WalletHistory(timestamp={self.timestamp}, currency={self.currency}, " f"WalletHistory(timestamp={self.timestamp}, currency={self.currency}, "
f"price={self.price}, balance={self.balance}, leverage={self.leverage})" f"rate={self.rate}, balance={self.balance}, leverage={self.leverage})"
) )
+1 -1
View File
@@ -791,7 +791,7 @@ class RPC:
:return: DataFrame with the balance history and the timestamp of the migration :return: DataFrame with the balance history and the timestamp of the migration
""" """
results = read_sql("wallet_history", con=Trade.session.bind, parse_dates=["timestamp"]) results = read_sql("wallet_history", con=Trade.session.bind, parse_dates=["timestamp"])
results.loc[:, "total"] = results["price"] * results["balance"] / results["leverage"] results.loc[:, "total"] = results["rate"] * results["balance"] / results["leverage"]
results = results.rename({"timestamp": "date"}, axis=1) results = results.rename({"timestamp": "date"}, axis=1)
results.loc[:, "__date_ts"] = results.loc[:, "date"].astype("int64") // 1000 // 1000 results.loc[:, "__date_ts"] = results.loc[:, "date"].astype("int64") // 1000 // 1000
# Exclude non-bot managed for now # Exclude non-bot managed for now
@@ -85,7 +85,7 @@ def _migrate_wallet_history(config: Config, exchange: Exchange, starting_balance
pair_leverage_idx = { pair_leverage_idx = {
pair: balance_dist.columns.get_loc(f"{pair}_leverage") + 1 for pair in pairlist_valid pair: balance_dist.columns.get_loc(f"{pair}_leverage") + 1 for pair in pairlist_valid
} }
pair_price_idx = { pair_rate_idx = {
pair: balance_dist.columns.get_loc(f"{pair}_open") + 1 for pair in pairlist_valid pair: balance_dist.columns.get_loc(f"{pair}_open") + 1 for pair in pairlist_valid
} }
@@ -101,7 +101,7 @@ def _migrate_wallet_history(config: Config, exchange: Exchange, starting_balance
WalletHistory( WalletHistory(
timestamp=date, timestamp=date,
currency=stake_currency, currency=stake_currency,
price=1.0, # Stake currency price is always 1.0 rate=1.0, # Stake currency price is always 1.0
balance=stake_balance, balance=stake_balance,
leverage=1.0, leverage=1.0,
bot_managed=True, bot_managed=True,
@@ -115,14 +115,14 @@ def _migrate_wallet_history(config: Config, exchange: Exchange, starting_balance
leverage_value = row[pair_leverage_idx[pair]] leverage_value = row[pair_leverage_idx[pair]]
# Only add entry if balance is not empty/NaN # Only add entry if balance is not empty/NaN
if not pd.isna(balance_value) and balance_value > 0: if not pd.isna(balance_value) and balance_value > 0:
price_value = row[pair_price_idx[pair]] rate_value = row[pair_rate_idx[pair]]
price = price_value if not pd.isna(price_value) else None rate = rate_value if not pd.isna(rate_value) else None
wallet_entries.append( wallet_entries.append(
WalletHistory( WalletHistory(
timestamp=date, timestamp=date,
currency=base_currency, currency=base_currency,
price=price, rate=rate,
balance=balance_value, balance=balance_value,
leverage=leverage_value if not pd.isna(leverage_value) else 1.0, leverage=leverage_value if not pd.isna(leverage_value) else 1.0,
bot_managed=True, bot_managed=True,
+2 -2
View File
@@ -465,7 +465,7 @@ class Wallets:
position_record = WalletHistory( position_record = WalletHistory(
timestamp=timestamp, timestamp=timestamp,
currency=position.symbol, currency=position.symbol,
price=rate, rate=rate,
balance=position.position, balance=position.position,
leverage=position.leverage or 1.0, leverage=position.leverage or 1.0,
bot_managed=base in open_assets, bot_managed=base in open_assets,
@@ -483,7 +483,7 @@ class Wallets:
wallet_record = WalletHistory( wallet_record = WalletHistory(
timestamp=timestamp, timestamp=timestamp,
currency=wallet.currency, currency=wallet.currency,
price=rate, rate=rate,
balance=wallet.total balance=wallet.total
- (position_collaterals if wallet.currency == self._stake_currency else 0), - (position_collaterals if wallet.currency == self._stake_currency else 0),
leverage=1.0, leverage=1.0,
+3 -3
View File
@@ -643,10 +643,10 @@ def test_record_wallet_state_stores_wallet_history(mocker, default_conf):
records_by_currency = {entry.currency: entry for entry in wallet_entries} records_by_currency = {entry.currency: entry for entry in wallet_entries}
assert records_by_currency[stake_currency].balance == 1.5 assert records_by_currency[stake_currency].balance == 1.5
assert records_by_currency[stake_currency].price == 1.0 assert records_by_currency[stake_currency].rate == 1.0
assert records_by_currency["ETH"].price == 0.5 assert records_by_currency["ETH"].rate == 0.5
assert records_by_currency["ETH/BTC"].balance == 0.8 assert records_by_currency["ETH/BTC"].balance == 0.8
assert records_by_currency["ETH/BTC"].price == 2500.0 assert records_by_currency["ETH/BTC"].rate == 2500.0
@pytest.mark.usefixtures("init_persistence") @pytest.mark.usefixtures("init_persistence")
@@ -232,14 +232,14 @@ def test_migrate_wallet_history_with_multiple_pairs(default_conf_usdt, fee, time
# Stake currency should have price = 1.0 # Stake currency should have price = 1.0
for entry in usdt_entries: for entry in usdt_entries:
assert entry.price == 1.0 assert entry.rate == 1.0
eth_entries = [e for e in wallet_entries if e.currency == "ETH"] eth_entries = [e for e in wallet_entries if e.currency == "ETH"]
btc_entries = [e for e in wallet_entries if e.currency == "BTC"] btc_entries = [e for e in wallet_entries if e.currency == "BTC"]
assert len(eth_entries) == 4 assert len(eth_entries) == 4
assert len(btc_entries) == 2 assert len(btc_entries) == 2
assert all(entry.price and entry.price > 1400 and entry.price < 1600 for entry in eth_entries) assert all(entry.rate and entry.rate > 1400 and entry.rate < 1600 for entry in eth_entries)
assert all(entry.price and entry.price > 29000 and entry.price < 31000 for entry in btc_entries) assert all(entry.rate and entry.rate > 29000 and entry.rate < 31000 for entry in btc_entries)
assert all(entry.balance == 10 for entry in btc_entries) assert all(entry.balance == 10 for entry in btc_entries)