initial balance on dash

This commit is contained in:
Dobromir Popov
2025-05-27 13:53:12 +03:00
parent 4567912186
commit ae62d893bc
4 changed files with 307 additions and 26 deletions

View File

@ -93,7 +93,7 @@ class TradingDashboard:
self.current_position = None # {'side': 'BUY', 'price': 3456.78, 'size': 0.1, 'timestamp': datetime}
self.total_realized_pnl = 0.0
self.total_fees = 0.0
self.starting_balance = 100.0 # Starting portfolio value in USD
self.starting_balance = self._get_initial_balance() # Get balance from MEXC or default to 100
# Closed trades tracking for accounting
self.closed_trades = [] # List of all closed trades with full details
@ -143,6 +143,34 @@ class TradingDashboard:
logger.info("Trading Dashboard initialized with continuous training")
def _get_initial_balance(self) -> float:
"""Get initial USDT balance from MEXC or return default"""
try:
if self.trading_executor and hasattr(self.trading_executor, 'get_account_balance'):
logger.info("Fetching initial balance from MEXC...")
# Get USDT balance from MEXC
balance_info = self.trading_executor.get_account_balance()
if balance_info and 'USDT' in balance_info:
usdt_balance = float(balance_info['USDT'].get('free', 0))
if usdt_balance > 0:
logger.info(f"MEXC: Retrieved USDT balance: ${usdt_balance:.2f}")
return usdt_balance
else:
logger.warning("MEXC: No USDT balance found")
else:
logger.warning("MEXC: Failed to retrieve balance info")
else:
logger.info("MEXC: Trading executor not available for balance retrieval")
except Exception as e:
logger.error(f"Error getting MEXC balance: {e}")
# Fallback to default
default_balance = 100.0
logger.info(f"Using default starting balance: ${default_balance:.2f}")
return default_balance
def _setup_layout(self):
"""Setup the dashboard layout"""
self.app.layout = html.Div([
@ -1376,11 +1404,16 @@ class TradingDashboard:
# Add MEXC execution status to decision record
decision['mexc_executed'] = mexc_success
# Calculate confidence-based position size (0.05 to 0.2 range)
base_size = 0.1 # Base size
confidence_multiplier = max(0.5, min(2.0, decision['confidence'] * 2)) # 0.5x to 2x multiplier
position_size = base_size * confidence_multiplier
decision['size'] = round(position_size, 3) # Update decision with calculated size
# Calculate USD-based position size for testing ($1 orders)
if current_price and current_price > 0:
usd_size = 1.0 # $1 per trade for testing
position_size = usd_size / current_price # Convert USD to crypto amount
decision['size'] = round(position_size, 6) # Update decision with calculated size
decision['usd_size'] = usd_size # Track USD amount for logging
else:
# Fallback if no price available
decision['size'] = 0.001
decision['usd_size'] = 1.0
if decision['action'] == 'BUY':
# First, close any existing SHORT position
@ -1452,7 +1485,7 @@ class TradingDashboard:
trade_record['fees'] = fee
self.session_trades.append(trade_record)
logger.info(f"[TRADE] OPENED LONG: {decision['size']} @ ${decision['price']:.2f} (confidence: {decision['confidence']:.1%})")
logger.info(f"[TRADE] OPENED LONG: {decision['size']:.6f} (~${decision.get('usd_size', 1.0):.2f}) @ ${decision['price']:.2f} (confidence: {decision['confidence']:.1%})")
elif self.current_position['side'] == 'LONG':
# Already have a long position - could add to it or replace it
@ -1577,7 +1610,7 @@ class TradingDashboard:
trade_record['fees'] = fee
self.session_trades.append(trade_record)
logger.info(f"[TRADE] OPENED SHORT: {decision['size']} @ ${decision['price']:.2f} (confidence: {decision['confidence']:.1%})")
logger.info(f"[TRADE] OPENED SHORT: {decision['size']:.6f} (~${decision.get('usd_size', 1.0):.2f}) @ ${decision['price']:.2f} (confidence: {decision['confidence']:.1%})")
elif self.current_position['side'] == 'SHORT':
# Already have a short position - could add to it or replace it