Comprehensive position-level analysis of the October 10, 2025 Auto-Deleveraging (ADL) event on Hyperliquid for BTC and SOL.
Event Details:
- Date: October 10, 2025
- Time: 21:15 - 21:27 UTC (12-minute window)
- Assets: BTC & SOL
- Total Positions: 13,031
- Total Fills: 204,976
- Aggregate PNL: +$28.3M
Market Impact:
- BTC: -13.1% ($112k β $97k)
- SOL: -26.0% ($185 β $137)
Key Findings:
- 3,088 Liquidations (blockchain-verified)
- 4,619 ADL Events (blockchain-verified)
- Top 10 Winners: All SHORT positions, $137.4M profit
- All winners were Auto-Deleveraged (ADL'd)
| Data | Description | Records |
|---|---|---|
| positions_FINAL.csv | Complete position analysis | 13,031 positions |
| Transaction hashes | For manual entry price lookup | Top 10 winners |
| Mark prices | Official Hyperliquid prices | 1-minute snapshots |
| Fill data | All BTC & SOL trades | 204,976 fills |
- Absolute PNL - From blockchain
closedPnl - Position Side (LONG/SHORT) - From
startPosition - Liquidation Status - Blockchain-verified
- ADL Status - Blockchain-verified
- Mark Prices - Official asset_ctxs
- Entry Prices: NULL for 88% of positions (opened before 21:15 UTC)
- % PNL: NULL when entry price is NULL
- Leverage Ratio: Requires account-level clearinghouse state
- Negative Equity: Requires account-level clearinghouse state
git clone https://github.com/ConejoCapital/HyperAnalyzeADL.git
cd HyperAnalyzeADLimport pandas as pd
# Load main results
df = pd.read_csv('positions_FINAL.csv')
print(f"Total positions: {len(df):,}")
print(f"Aggregate PNL: ${df['absolute_pnl'].sum():,.2f}")
# Top 10 winners
print(df.nlargest(10, 'absolute_pnl')[['user_address', 'asset', 'side', 'absolute_pnl']])Most positions were opened before our 21:15-21:27 UTC window. To get entry prices:
- Open
TOP_10_TX_HASHES_FOR_EXPLORER.md - Pick an address
- Search on Hyperliquid Explorer
- Or use HyperDash for full trading history
| File | Description | Size |
|---|---|---|
| positions_FINAL.csv | Complete position analysis (13,031 positions) | 1.5 MB |
| TOP_10_TX_HASHES_FOR_EXPLORER.md | Transaction hashes for manual entry price lookup | - |
| File | Description |
|---|---|
| START_HERE.md | π Start here! Navigation guide |
| README.md | This file - Usage guide |
| EXECUTIVE_SUMMARY.md | Key findings (5-minute read) |
| METHODOLOGY.md | Complete methodology |
| BUG_FIX_SUMMARY.md | What bugs were fixed |
| ENTRY_PRICE_SOLUTION.md | Why entry prices are NULL & how to get them |
| TOP_10_WINNERS_FINAL.md | Top 10 list with details |
| File | Description |
|---|---|
| analyze_positions_FINAL.py | Complete analysis pipeline |
| 01_download_s3_data.py | Download raw data from S3 |
| 02_extract_fills.py | Extract trade fills |
| 03_extract_liquidations.py | Extract liquidation events |
| 04_extract_mark_prices.py | Extract mark prices |
| Column | Type | Description | Availability |
|---|---|---|---|
user_address |
string | User's wallet address | 100% |
asset |
string | "BTC" or "SOL" | 100% |
side |
string | "LONG" or "SHORT" | 100% |
position_size |
float | Position size (absolute value) | 100% |
entry_price |
float | Entry price (NULL if opened before window) | 12% |
mark_price |
float | Mark price at end of window | 100% |
absolute_pnl |
float | Total PNL (realized + unrealized) | 100% |
pnl_percent |
float | PNL as % (NULL if entry price NULL) | 12% |
realized_pnl |
float | Realized PNL from closedPnl | 100% |
unrealized_pnl |
float | Unrealized PNL (0 for closed positions) | 100% |
leverage_ratio |
NULL | Not available | 0% |
is_negative_equity |
NULL | Not available | 0% |
was_liquidated |
bool | Blockchain-verified | 100% |
was_adl |
bool | Blockchain-verified | 100% |
trades_count |
int | Number of fills | 100% |
had_pre_existing_position |
bool | Position opened before window | 100% |
- BTC SHORT - $79.7M -
0xb317d2bc2d3d2df5fa441b5bae0ab9d8b07283ae- ADL'd - SOL SHORT - $10.6M -
0x880ac484a1743862989a441d6d867238c7aa311c- ADL'd - BTC SHORT - $9.8M -
0x8decc13b6e83873a78126e99036f9442019fd0b5- ADL'd - SOL SHORT - $9.4M -
0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00- ADL'd - SOL SHORT - $7.5M -
0x35d1151ef1aab579cbb3109e69fa82f94ff5acb1- ADL'd - BTC SHORT - $6.4M -
0x5d2f4460ac3514ada79f5d9838916e508ab39bb7- ADL'd - SOL SHORT - $4.9M -
0x023a3d058020fb76cca98f01b3c48c8938a22355- ADL'd - BTC SHORT - $3.1M -
0x960bb18454cd67b5a3edb4fa802b7c0b5b10e2ee- ADL'd - SOL SHORT - $2.8M -
0xd4c1f7e8d876c4749228d515473d36f919583d1d- ADL'd - SOL SHORT - $2.8M -
0xa461db6d21568e97e040c4ab57ff38708a4f0f67- ADL'd
Key Insight: All top 10 winners were:
- β SHORT positions (profited from crash)
- β Auto-Deleveraged (ADL'd) by protocol
β οΈ Entry prices NULL (positions opened before 21:15 UTC)
88% of positions were opened before our 21:15-21:27 UTC analysis window:
- Profitable shorts likely opened days/weeks earlier (predicting crash)
- Example: One trader had 183,821 SOL short - clearly not opened in 12 minutes!
- Downloading 24 hours wouldn't help - need weeks/months of data
Solution: Use Hyperliquid Explorer to manually look up entry prices
- See
TOP_10_TX_HASHES_FOR_EXPLORER.mdfor instructions - Or use HyperDash for full trading history
| Asset | Positions | Longs | Shorts | Liquidated | ADL'd | Aggregate PNL |
|---|---|---|---|---|---|---|
| BTC | 6,925 | 4,485 | 2,440 | 1,575 | 1,759 | +$25.8M |
| SOL | 6,106 | 2,990 | 3,116 | 1,349 | 2,860 | +$2.5M |
- Profitable positions: 4,165 (32%)
- Unprofitable positions: 8,866 (68%)
- Aggregate PNL: +$28.3M
- Top winner: +$79.7M
- Worst loser: -$10M (estimated)
- Position-level trading behavior
- PNL distributions
- Market microstructure analysis
- ADL mechanism effectiveness
- Liquidation cascades
- Short vs. long profitability during crashes
- Account-level leverage analysis
- Solvency studies
- Negative equity detection
- Full risk management analysis
@misc{hyperanalyze2025,
title={Hyperliquid ADL Event Analysis: October 10, 2025},
author={ConejoCapital},
year={2025},
publisher={GitHub},
url={https://github.com/ConejoCapital/HyperAnalyzeADL},
note={Trade fills from Hyperliquid L1 public S3 buckets}
}All data sourced from Hyperliquid's public S3 buckets:
- Trade fills:
s3://hl-mainnet-node-data/node_fills_by_block/hourly/20251010/21.lz4 - Mark prices:
s3://hyperliquid-archive/asset_ctxs/20251010.csv.lz4 - Liquidations:
s3://hl-mainnet-node-data/misc_events_by_block/hourly/20251010/21.lz4
88% of positions have NULL entry prices because:
- Positions were opened before 21:15 UTC
- Our analysis window is only 12 minutes (21:15-21:27 UTC)
- Profitable shorts were likely opened days/weeks before the crash
To get entry prices:
- Use Hyperliquid Explorer to search addresses
- Find first "Open Short" or "Open Long" transaction
- See
TOP_10_TX_HASHES_FOR_EXPLORER.mdfor guidance
Leverage Ratio and Negative Equity are NULL because:
- Requires
accountValue(total collateral per user) - Requires
totalRawUsd(account cash balance) - Not available in public S3
node_fills_by_blockdata
To get account-level metrics:
- Request clearinghouse state snapshots from Hyperliquid team
- Or use historical
clearinghouseStateAPI (if available)
See LIMITATIONS.md for full details.
This analysis includes critical bug fixes from earlier versions:
- Problem: "Close Short" fills were included in entry price (resulted in prices like $1.6M for BTC)
- Fix: Only "Open Short" fills now count toward entry price
- Problem: Positions opened before our window showed $0 entry price
- Fix: Entry price now marked as NULL (honest data limitation)
See BUG_FIX_SUMMARY.md for full details.
- Download raw data from Hyperliquid S3 buckets
- Extract fills, liquidations, and mark prices
- Reconstruct positions from trade history
- Calculate PNL using mark prices
- Verify liquidations/ADL from blockchain events
- Export to CSV
# Track position from fills
for fill in user_fills:
if fill['direction'] == 'Open Short':
position_size -= fill['size']
entry_cost += fill['price'] * fill['size']
elif fill['direction'] == 'Close Short':
position_size += fill['size']
realized_pnl += fill['closedPnl']
# ... handle liquidations, ADL, etc.
# Calculate entry price
entry_price = entry_cost / total_opened_size
# Calculate PNL
unrealized_pnl = (entry_price - mark_price) * position_size # For shorts
absolute_pnl = realized_pnl + unrealized_pnlSee METHODOLOGY.md for complete details.
- Python 3.7+ with pandas:
pip install pandas - Or any CSV viewer (Excel, Google Sheets)
pip install pandas
python3 analyze_positions_FINAL.pypip install boto3 lz4
aws configure # Requires AWS credentials for "requester pays" buckets
python3 01_download_s3_data.pyimport pandas as pd
# Load data
df = pd.read_csv('positions_FINAL.csv')
# Summary by asset
print(df.groupby('asset').agg({
'absolute_pnl': ['sum', 'mean', 'count'],
'was_liquidated': 'sum',
'was_adl': 'sum'
}))
# Top winners
top_10 = df.nlargest(10, 'absolute_pnl')
print(top_10[['asset', 'side', 'absolute_pnl', 'was_adl']])
# Profitability by side
print(df.groupby(['asset', 'side'])['absolute_pnl'].agg(['sum', 'mean', 'count']))
# Liquidation analysis
liquidated = df[df['was_liquidated'] == True]
print(f"Total liquidations: {len(liquidated):,}")
print(f"Average loss: ${liquidated['absolute_pnl'].mean():,.2f}")# Load data
df <- read.csv('positions_FINAL.csv')
# Summary statistics
summary(df$absolute_pnl)
# By asset
aggregate(absolute_pnl ~ asset, data=df, FUN=sum)
# Profitability
table(df$side, df$absolute_pnl > 0)
# Visualization
hist(df$absolute_pnl[df$asset == 'BTC'],
main='BTC PNL Distribution',
xlab='PNL (USD)',
breaks=50)Found an issue or have suggestions?
- Open an Issue
- Submit a Pull Request
- Contact @ConejoCapital
- GitHub: @ConejoCapital
- Questions: Open an issue
- Methodology questions: See
METHODOLOGY.md - Data limitations: See
LIMITATIONS.md
- Hyperliquid: https://hyperliquid.xyz
- Documentation: https://hyperliquid.gitbook.io
- Historical Data: https://hyperliquid.gitbook.io/hyperliquid-docs/historical-data
- Explorer: https://app.hyperliquid.xyz/explorer
- HyperDash: https://hyperdash.info
If this dataset is useful for your research, please star the repository!
GNU General Public License v3.0
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
See LICENSE for full details.
- Hyperliquid Team for providing public S3 data access
- Community for feedback and verification
Last Updated: November 6, 2025
Analysis Window: October 10, 2025, 21:15-21:27 UTC
Data Quality: βββββ (99.5% for position-level metrics)
Status: β
Publication-ready
Made with π for academic research