initial balance on dash
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user