Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import numpy as np | |
| import time | |
| from typing import List, Dict | |
| class MockDataGenerator: | |
| """Generates synthetic L2 Orderbook and Trade data for testing.""" | |
| def generate_l2_snapshot(num_rows: int = 100, levels: int = 20) -> pd.DataFrame: | |
| """ | |
| Generates a DataFrame mimicking the L2 Snapshot structure. | |
| Columns: ts_event, instrument_id, bids, asks | |
| """ | |
| base_price = 2000.0 | |
| data = [] | |
| start_time = time.time() * 1000 | |
| for i in range(num_rows): | |
| ts = start_time + i * 1000 # 1 sec intervals | |
| # Random Walk Price | |
| noise = np.random.normal(0, 1) | |
| mid_price = base_price + noise | |
| base_price = mid_price | |
| # Generate Levels | |
| bids = [] | |
| asks = [] | |
| for l in range(levels): | |
| spread = (l + 1) * 0.5 | |
| bid_p = mid_price - spread | |
| ask_p = mid_price + spread | |
| bid_sz = abs(np.random.normal(10, 5)) + 1 | |
| ask_sz = abs(np.random.normal(10, 5)) + 1 | |
| bids.append([bid_p, bid_sz]) | |
| asks.append([ask_p, ask_sz]) | |
| data.append({ | |
| "ts_event": ts, | |
| "instrument_id": "ETH-USD", | |
| "bids": bids, # List of lists format | |
| "asks": asks | |
| }) | |
| return pd.DataFrame(data) | |
| def generate_trades(num_rows: int = 100) -> pd.DataFrame: | |
| """ | |
| Generates synthetic trade data. | |
| Columns: time, coin, px, sz, side | |
| """ | |
| base_price = 2000.0 | |
| data = [] | |
| start_time = time.time() * 1000 | |
| for i in range(num_rows): | |
| ts = start_time + i * 500 | |
| px = base_price + np.random.normal(0, 1) | |
| sz = abs(np.random.normal(1, 0.5)) | |
| side = 'B' if np.random.random() > 0.5 else 'A' | |
| data.append({ | |
| "time": ts, | |
| "coin": "ETH", | |
| "px": px, | |
| "sz": sz, | |
| "side": side | |
| }) | |
| return pd.DataFrame(data) | |