detailed info about wallets

This commit is contained in:
2025-10-25 19:59:13 +02:00
parent fe5cc8e1d1
commit 76a858a7df

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
Hyperliquid Wallet Data Fetcher - Perfect Table Alignment Hyperliquid Wallet Data Fetcher - FINAL Perfect Alignment
========================================================== ==========================================================
Complete Python script to pull all available data for a Hyperliquid wallet via API. Complete Python script to pull all available data for a Hyperliquid wallet via API.
@ -189,18 +189,19 @@ class HyperliquidWalletAnalyzer:
def print_positions_summary_table(self, positions: list): def print_positions_summary_table(self, positions: list):
""" """
Print a summary table of all positions with properly aligned vertical separators. Print a summary table of all positions with perfectly aligned columns.
NO emojis in data cells - keeps them simple text only for perfect alignment.
Args: Args:
positions: List of position dictionaries positions: List of position dictionaries
""" """
print(f"\n{'='*130}") print(f"\n{'='*130}")
print(f"POSITIONS SUMMARY TABLE") print("POSITIONS SUMMARY TABLE")
print(f"{'='*130}") print('='*130)
# Header with vertical separators # Print header
print("| Asset | Side | Size | Entry Price | Position Value | Unrealized PnL | ROE | Leverage |") print("| Asset | Side | Size | Entry Price | Position Value | Unrealized PnL | ROE | Leverage |")
print("|----------|-----------|------------------|------------------|--------------------|--------------------|------------|------------|") print("|----------|-------|-------------------|-------------------|-------------------|-------------------|------------|------------|")
total_position_value = 0 total_position_value = 0
total_pnl = 0 total_pnl = 0
@ -220,53 +221,40 @@ class HyperliquidWalletAnalyzer:
leverage_value = leverage.get('value', 0) if isinstance(leverage, dict) else 0 leverage_value = leverage.get('value', 0) if isinstance(leverage, dict) else 0
leverage_type = leverage.get('type', 'cross') if isinstance(leverage, dict) else 'cross' leverage_type = leverage.get('type', 'cross') if isinstance(leverage, dict) else 'cross'
# Determine side - NO EMOJIS in data
side_text = "LONG" if size > 0 else "SHORT" side_text = "LONG" if size > 0 else "SHORT"
side_emoji = "📈" if size > 0 else "📉"
# Add color indicators (using text instead of emojis for alignment) # Format PnL and ROE with signs
pnl_sign = "+" if unrealized_pnl >= 0 else "" pnl_sign = "+" if unrealized_pnl >= 0 else ""
roe_sign = "+" if return_on_equity >= 0 else ""
# Accumulate totals # Accumulate totals
total_position_value += abs(position_value) total_position_value += abs(position_value)
total_pnl += unrealized_pnl total_pnl += unrealized_pnl
# Format numbers with proper width - no emojis in the data # Format all values as strings with proper width
size_str = f"{abs(size):,.4f}" asset_str = f"{coin[:8]:<8}"
entry_str = f"${entry_px:,.2f}" side_str = f"{side_text:<5}"
value_str = f"${abs(position_value):,.2f}" size_str = f"{abs(size):>17,.4f}"
pnl_str = f"{pnl_sign}${unrealized_pnl:,.2f}" entry_str = f"${entry_px:>16,.2f}"
roe_str = f"{return_on_equity:+.2%}" value_str = f"${abs(position_value):>16,.2f}"
pnl_str = f"{pnl_sign}${unrealized_pnl:>15,.2f}"
roe_str = f"{roe_sign}{return_on_equity:>9.2%}"
lev_str = f"{leverage_value}x {leverage_type[:4]}" lev_str = f"{leverage_value}x {leverage_type[:4]}"
# Use fixed width with ljust/rjust for proper alignment # Print row with exact spacing
row = (f"| {coin[:8]:<8} " print(f"| {asset_str} | {side_str} | {size_str} | {entry_str} | {value_str} | {pnl_str} | {roe_str} | {lev_str:<10} |")
f"| {side_text:<5} {side_emoji} "
f"| {size_str:>16} "
f"| {entry_str:>16} "
f"| {value_str:>18} "
f"| {pnl_str:>18} "
f"| {roe_str:>10} "
f"| {lev_str:<10} |")
print(row)
# Separator before totals # Separator before totals
print("|==========|===========|==================|==================|====================|====================|============|============|") print("|==========|=======|===================|===================|===================|===================|============|============|")
# Total row # Total row
total_value_str = f"${total_position_value:,.2f}" total_value_str = f"${total_position_value:>16,.2f}"
total_pnl_sign = "+" if total_pnl >= 0 else "" total_pnl_sign = "+" if total_pnl >= 0 else ""
total_pnl_str = f"{total_pnl_sign}${total_pnl:,.2f}" total_pnl_str = f"{total_pnl_sign}${total_pnl:>15,.2f}"
total_row = (f"| {'TOTAL':<8} " print(f"| TOTAL | | | | {total_value_str} | {total_pnl_str} | | |")
f"| {'':<9} " print('='*130 + '\n')
f"| {'':<16} "
f"| {'':<16} "
f"| {total_value_str:>18} "
f"| {total_pnl_str:>18} "
f"| {'':<10} "
f"| {'':<10} |")
print(total_row)
print(f"{'='*130}\n")
def get_spot_state(self) -> Dict[str, Any]: def get_spot_state(self) -> Dict[str, Any]:
""" """