diff --git a/.gitignore b/.gitignore index 207fc66..cc083b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,83 @@ +# =================== +# Data files +# =================== +data/spot/ +data/futures/ +data/option/ *.zip -!/updates/*.zip -.DS_Store +*.csv +*.CHECKSUM + +# Keep symbol_dates.json (useful cache) +!data/symbol_dates.json + +# =================== +# Python +# =================== +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +venv/ +ENV/ +env/ +.venv/ + +# =================== +# IDE & Editors +# =================== .idea/ -*/.DS_Store -*/.idea/ -*/__pycache__/ +.vscode/ +*.swp +*.swo +*~ +.project +.pydevproject +.settings/ + +# =================== +# OS files +# =================== +.DS_Store +Thumbs.db +desktop.ini + +# =================== +# Logs & Cache +# =================== +logs/ +*.log +.pytest_cache/ +.mypy_cache/ +.coverage +htmlcov/ + +# =================== +# Temporary files +# =================== +*.tmp +*.temp +*.bak + +# =================== +# Legacy +# =================== python/data/ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..1b9aa2f --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,314 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is the official **Binance Public Data** repository - a toolkit for downloading historical market data from Binance's public data archive at `https://data.binance.vision/`. + +The project has been refactored to provide both **legacy scripts** (for backward compatibility) and a **modern Python framework** with enhanced features. + +### Data Types Available + +**Spot Market:** +- klines (candlesticks), trades, aggregated trades, depth + +**USD-M Futures (um):** +- klines, trades, aggregated trades, index price, mark price, premium index, funding rate, book ticker, depth + +**COIN-M Futures (cm):** +- klines, trades, aggregated trades, index price, mark price, funding rate, liquidation snapshots, book ticker + +**Options:** +- Options data + +--- + +## Setup and Dependencies + +```bash +# Install Python dependencies +pip install -r python/requirements.txt + +# Or install the package with extras +pip install -e . + +# Set output directory environment variable (optional, can override with -folder) +export STORE_DIRECTORY=/path/to/output +``` + +### Dependencies + +- **Required**: `pandas>=1.3.0`, `certifi>=2021.5.30` +- **Optional**: `pyyaml>=5.4.1` (for config file support) +- **Development**: `pytest`, `pytest-cov`, `pytest-mock`, `black`, `flake8`, `mypy` + +--- + +## Running Download Scripts + +### Legacy Scripts (Backward Compatible) + +The original scripts in `python/` continue to work exactly as before: + +```bash +# Download klines +python3 python/download-kline.py -t spot -s ETHUSDT BTCUSDT -i 1h 1d -y 2023 2024 + +# Download trades +python3 python/download-trade.py -t spot -s ETHUSDT -startDate 2023-01-01 -endDate 2023-12-31 + +# Download aggregated trades +python3 python/download-aggTrade.py -t um -s BTCUSDT -y 2023 + +# Futures data +python3 python/download-futures-indexPriceKlines.py -t um -s BTCUSDT +python3 python/download-futures-markPriceKlines.py -t cm -s BTCUSD_PERP +python3 python/download-futures-premiumPriceKlines.py -t um -i 1m +``` + +### New Enhanced Scripts (Recommended) + +The new scripts in `scripts/` provide additional features: + +```bash +# Universal downloader - supports all data types +python3 scripts/download-all.py -t spot -s BTCUSDT -d klines trades -y 2024 + +# Download all supported data types for a market +python3 scripts/download-all.py -t spot --all-data -s BTCUSDT -y 2024 + +# New data types +python3 scripts/download-futures-fundingRate.py -t um -s BTCUSDT -y 2024 +python3 scripts/download-liquidation-snapshot.py -t cm -s ADAUSD_PERP -y 2024 +python3 scripts/download-book-ticker.py -t um -s BTCUSDT -y 2024 +python3 scripts/download-depth.py -t spot -s BTCUSDT -y 2024 +python3 scripts/download-option.py -s BTC-240301-50000-C -y 2024 + +# Use config file +python3 scripts/download-all.py --config configs/default_config.yaml +``` + +### Common Arguments + +| Argument | Purpose | +|----------|---------| +| `-t` | **Market type**: `spot`, `um` (USD-M Futures), or `cm` (COIN-M Futures) - **Required** | +| `-s` | Symbols to download (space-separated) - Default: all symbols | +| `-d` | Data types to download (for download-all.py) - Default: klines | +| `--all-data` | Download all supported data types for the market | +| `-i` | Kline intervals (e.g., `1m`, `1h`, `1d`) - Default: all intervals | +| `-y` | Years (e.g., `2023 2024`) - Default: 2020 to current year | +| `-m` | Months (1-12, space-separated) - Default: all months | +| `-d` | Specific dates in `YYYY-MM-DD` format - Default: from 2020-01-01 | +| `-startDate` | Start date range in `YYYY-MM-DD` format - Default: 2020-01-01 | +| `-endDate` | End date range in `YYYY-MM-DD` format - Default: current date | +| `-skip-monthly` | Set to `1` to skip monthly files | +| `-skip-daily` | Set to `1` to skip daily files | +| `-folder` | Output directory - Default: `STORE_DIRECTORY` env var or current directory | +| `-c` | Set to `1` to download `.CHECKSUM` files for data verification | +| `-verify-checksum` | Set to `1` to verify checksums after download | +| `-max_workers` | Number of threads for parallel downloads (default: 10) | +| `--config` | Path to YAML configuration file | +| `-log-level` | Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | +| `-log-file` | Log file path (default: logs/download.log) | + +--- + +## New Architecture + +### Directory Structure + +``` +J:\binance-public-data\ +├── src/binance_data_downloader/ # New modular framework +│ ├── core/ # Core components +│ │ ├── base_downloader.py # Abstract base class +│ │ ├── data_type_config.py # Data type registry +│ │ ├── retry_handler.py # Retry mechanism +│ │ └── checksum_verifier.py # Checksum verification +│ ├── downloaders/ # Specific downloader implementations +│ ├── utils/ # Utilities (path, date, file, logger) +│ ├── config/ # Configuration management +│ └── cli/ # Command-line interface +├── scripts/ # New enhanced scripts +├── python/ # Legacy scripts (PRESERVED) +├── shell/ # Shell scripts (PRESERVED) +├── tests/ # Unit and integration tests +├── configs/ # Configuration files +└── logs/ # Log output directory +``` + +### Core Components + +**1. BaseDownloader (Abstract Base Class)** +- Location: `src/binance_data_downloader/core/base_downloader.py` +- All downloaders inherit from this class +- Provides `download_monthly()` and `download_daily()` methods +- Supports multi-threading via `-max_workers` parameter + +**2. Data Type Configuration** +- Location: `src/binance_data_downloader/core/data_type_config.py` +- Central registry of all 12 data types +- `DataType` enum and `DataTypeSpec` dataclass +- `get_supported_data_types(market_type)` returns available data types + +**3. Individual Downloaders** +- Location: `src/binance_data_downloader/downloaders/` +- Each downloader implements 4 abstract methods: + - `get_data_type()` - Returns data type identifier + - `supports_intervals()` - Whether intervals are supported + - `format_monthly_filename()` - Monthly file naming + - `format_daily_filename()` - Daily file naming + +**4. Retry Handler** +- Location: `src/binance_data_downloader/core/retry_handler.py` +- Exponential backoff for failed downloads +- HTTP 404 errors are not retried (file doesn't exist) +- Configurable max retries and delay + +**5. Checksum Verifier** +- Location: `src/binance_data_downloader/core/checksum_verifier.py` +- Cross-platform SHA256 verification +- Supports Linux (sha256sum), macOS (shasum), Windows (hashlib) + +--- + +## Configuration File Support + +Create a YAML config file to save frequently-used settings: + +```yaml +# configs/my_config.yaml +download: + market_type: spot + max_workers: 10 + output_directory: /data/binance + download_checksum: true + verify_checksum: true + +date_range: + years: [2023, 2024] + months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + +logging: + level: INFO + file: logs/download.log + +progress: + show_bar: true + show_statistics: true +``` + +Use it with: `python3 scripts/download-all.py --config configs/my_config.yaml` + +--- + +## Programmatic API + +You can also use the downloaders directly in Python code: + +```python +from binance_data_downloader import KlineDownloader + +# Initialize downloader +downloader = KlineDownloader(trading_type='spot', max_workers=10) + +# Download monthly data +downloader.download_monthly( + symbols=['BTCUSDT', 'ETHUSDT'], + intervals=['1h', '1d'], + years=['2024'], + months=list(range(1, 13)), + folder='/data/output', + download_checksum=True, + verify_checksum=True +) + +# Download daily data +downloader.download_daily( + symbols=['BTCUSDT'], + intervals=['1h'], + dates=['2024-01-01', '2024-01-02'], + folder='/data/output' +) +``` + +--- + +## Testing + +```bash +# Run all tests +pytest tests/ -v + +# Run with coverage +pytest tests/ --cov=src/binance_data_downloader --cov-report=html + +# Run specific test +pytest tests/unit/test_data_type_config.py -v +``` + +--- + +## Cross-Platform Compatibility + +The scripts work on: +- **Linux**: Uses `sha256sum` for checksum verification +- **macOS**: Uses `shasum -a 256` for checksum verification +- **Windows**: Uses Python `hashlib` for checksum verification + +--- + +## Key Implementation Details + +### Legacy Scripts (python/) +- **Location**: `python/download-*.py` +- **Dependencies**: `python/utility.py`, `python/enums.py` +- **Behavior**: Preserved exactly as before +- **Status**: Do NOT modify - maintain backward compatibility + +### New Framework (src/binance_data_downloader/) +- **Architecture**: Modular, extensible, testable +- **Code reuse**: 90%+ reduction in code duplication +- **Features**: Multi-threading, retry, checksum verification, logging, progress tracking +- **Status**: Active development - add new features here + +### Data URL Structure + +``` +https://data.binance.vision/ +├── data/ +│ ├── spot/ +│ │ ├── monthly/klines/{SYMBOL}/{INTERVAL}/{SYMBOL}-{INTERVAL}-{YEAR}-{MONTH}.zip +│ │ ├── daily/klines/{SYMBOL}/{INTERVAL}/{SYMBOL}-{INTERVAL}-{DATE}.zip +│ │ └── daily/depth/{SYMBOL}/{SYMBOL}-depth-{DATE}.zip +│ └── futures/ +│ ├── um/ (USD-M Futures) +│ │ ├── monthly/klines/ +│ │ ├── monthly/fundingRate/ +│ │ └── daily/bookTicker/ +│ └── cm/ (COIN-M Futures) +│ ├── monthly/klines/ +│ └── daily/liquidationSnapshot/ +``` + +### Error Handling + +- **HTTP 404**: File not found, logged and skipped (not an error) +- **Network errors**: Retried with exponential backoff (max 3 retries) +- **Corrupted downloads**: Detected via checksum verification if enabled + +--- + +## Migration Notes + +When adding new features or modifying downloaders: + +1. **New data types**: Add to `core/data_type_config.py`, then create downloader in `downloaders/` +2. **CLI changes**: Modify `cli/argument_parser.py` and `cli/commands.py` +3. **Config options**: Update `config/config_loader.py` and `configs/default_config.yaml` +4. **DO NOT modify**: Legacy scripts in `python/` directory (maintain backward compatibility) +5. **Always add tests**: Unit tests in `tests/unit/`, integration tests in `tests/integration/` + +See `MIGRATION.md` for detailed migration guide from legacy scripts to new framework. diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 0000000..8b10e96 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,351 @@ +# Migration Guide: Legacy Scripts to New Framework + +This guide helps you migrate from the legacy Python scripts to the new enhanced framework while maintaining full backward compatibility. + +--- + +## Quick Reference + +| Legacy Script | New Equivalent | Notes | +|--------------|----------------|-------| +| `python/download-kline.py` | `scripts/download-all.py -d klines` | Use `-i` for intervals | +| `python/download-trade.py` | `scripts/download-all.py -d trades` | Same arguments | +| `python/download-aggTrade.py` | `scripts/download-all.py -d aggTrades` | Same arguments | +| `python/download-futures-indexPriceKlines.py` | `scripts/download-all.py -d indexPriceKlines` | Use `-i` for intervals | +| `python/download-futures-markPriceKlines.py` | `scripts/download-all.py -d markPriceKlines` | Use `-i` for intervals | +| `python/download-futures-premiumPriceKlines.py` | `scripts/download-all.py -d premiumIndexKlines` | Use `-i` for intervals | + +--- + +## Backward Compatibility Guarantee + +**All existing commands continue to work exactly as before:** + +```bash +# These commands still work and produce identical results +python3 python/download-kline.py -t spot -s BTCUSDT -i 1h -y 2024 +python3 python/download-trade.py -t spot -s ETHUSDT -startDate 2023-01-01 -endDate 2023-12-31 +python3 python/download-aggTrade.py -t um -s BTCUSDT -y 2023 +``` + +**No changes required to your existing scripts or workflows.** + +--- + +## Why Migrate to the New Framework? + +### 1. **Multi-Data-Type Downloads** +Download multiple data types in a single command: + +```bash +# Legacy: Run multiple commands +python3 python/download-kline.py -t spot -s BTCUSDT -i 1h -y 2024 +python3 python/download-trade.py -t spot -s BTCUSDT -y 2024 +python3 python/download-aggTrade.py -t spot -s BTCUSDT -y 2024 + +# New: Single command +python3 scripts/download-all.py -t spot -s BTCUSDT -d klines trades aggTrades -y 2024 +``` + +### 2. **Access to New Data Types** +5 new data types not available in legacy scripts: + +```bash +# Funding Rate (NEW) +python3 scripts/download-futures-fundingRate.py -t um -s BTCUSDT -y 2024 + +# Liquidation Snapshots (NEW) +python3 scripts/download-liquidation-snapshot.py -t cm -s ADAUSD_PERP -y 2024 + +# Book Ticker (NEW) +python3 scripts/download-book-ticker.py -t um -s BTCUSDT -y 2024 + +# Depth Data (NEW) +python3 scripts/download-depth.py -t spot -s BTCUSDT -y 2024 + +# Options Data (NEW) +python3 scripts/download-option.py -s BTC-240301-50000-C -y 2024 +``` + +### 3. **Enhanced Features** + +**Automatic Checksum Verification:** +```bash +# Legacy: Manual verification +sha256sum -c FILENAME.zip.CHECKSUM + +# New: Automatic verification +python3 scripts/download-all.py -t spot -s BTCUSDT -y 2024 -c 1 -verify-checksum 1 +``` + +**Config File Support:** +```bash +# Create config once +cat > my_config.yaml < + + + Binance Data Collection + + + + +
+ + + + + + + + + + + +
ItemSizeLast Modified
+
+ + + + + + + diff --git a/configs/default_config.yaml b/configs/default_config.yaml new file mode 100644 index 0000000..929456f --- /dev/null +++ b/configs/default_config.yaml @@ -0,0 +1,84 @@ +# Binance Public Data Downloader - Default Configuration + +download: + # Market type: spot, um (USD-M futures), cm (COIN-M futures) + market_type: spot + + # Number of worker threads for parallel downloads + max_workers: 10 + + # Output directory for downloaded files (null = use current directory or STORE_DIRECTORY env var) + output_directory: null + + # Download .CHECKSUM files along with data files + download_checksum: false + + # Verify checksums after download (requires download_checksum: true) + verify_checksum: false + + # Skip downloading monthly files + skip_monthly: false + + # Skip downloading daily files + skip_daily: false + +retry: + # Maximum number of retry attempts for failed downloads + max_retries: 3 + + # Initial delay before first retry (seconds) + initial_delay: 5.0 + + # Use exponential backoff (each retry waits 2x longer than the previous) + exponential_backoff: true + +date_range: + # Start date filter (YYYY-MM-DD format, null = no limit) + start_date: null + + # End date filter (YYYY-MM-DD format, null = no limit) + end_date: null + + # Years to download (used when not specifying date range) + years: + - 2020 + - 2021 + - 2022 + - 2023 + - 2024 + - 2025 + + # Months to download (1-12) + months: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + - 10 + - 11 + - 12 + +logging: + # Log level: DEBUG, INFO, WARNING, ERROR, CRITICAL + level: INFO + + # Log file path (null = only console logging) + file: logs/download.log + + # Log message format + format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + +progress: + # Show progress bar during downloads + show_bar: true + + # Show detailed statistics + show_statistics: true + + # Update interval for statistics (number of files between updates) + update_interval: 5 diff --git a/data/futures/um/monthly/klines/MINAUSDT/optimization_results.csv b/data/futures/um/monthly/klines/MINAUSDT/optimization_results.csv new file mode 100644 index 0000000..4f6e746 --- /dev/null +++ b/data/futures/um/monthly/klines/MINAUSDT/optimization_results.csv @@ -0,0 +1,561 @@ +period,devfactor,atr_period,atr_mult,return_pct,sharpe_ratio,max_drawdown,total_trades,win_rate,final_value +60,1.5,20,2.5,27.403622617200018,0,22.762782905095076,52,38.46153846153847,12740.362261720002 +60,1.5,7,2.0,26.46729670160012,0,23.11076178969343,53,37.735849056603776,12646.729670160012 +60,1.5,10,2.0,26.46729670160012,0,23.11076178969343,53,37.735849056603776,12646.729670160012 +60,1.5,14,2.0,26.46729670160012,0,23.11076178969343,53,37.735849056603776,12646.729670160012 +60,1.5,7,2.5,25.130943090800013,0,23.613178913515267,52,38.46153846153847,12513.094309080001 +60,1.5,10,2.5,25.130943090800013,0,23.613178913515267,52,38.46153846153847,12513.094309080001 +60,1.5,14,2.5,25.130943090800013,0,23.613178913515267,52,38.46153846153847,12513.094309080001 +60,1.5,14,3.0,24.960015037199902,0,23.717193456199777,52,38.46153846153847,12496.00150371999 +60,1.5,20,3.0,24.960015037199902,0,23.717193456199777,52,38.46153846153847,12496.00150371999 +60,1.5,10,3.0,24.709811533999908,0,23.87033077120984,52,38.46153846153847,12470.981153399991 +60,1.5,20,2.0,24.528301402799972,0,24.289996730184964,54,37.03703703703704,12452.830140279997 +60,1.5,7,3.0,23.77666292959988,0,24.43964968219821,52,38.46153846153847,12377.666292959988 +50,1.5,20,2.5,21.430213085200247,0,22.828231840053814,63,33.33333333333333,12143.021308520025 +60,1.5,14,1.0,21.03809376920024,0,26.975366420140066,70,28.57142857142857,12103.809376920024 +30,1.5,7,2.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,7,2.5,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,7,3.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,10,2.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,10,2.5,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,10,3.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,14,2.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,14,2.5,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,14,3.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,20,2.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,20,2.5,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +30,1.5,20,3.0,19.58637851239986,0,23.4049676153644,98,36.734693877551024,11958.637851239986 +50,1.5,7,3.0,19.457366590399978,0,23.48917876761164,63,33.33333333333333,11945.736659039998 +50,1.5,10,3.0,19.457366590399978,0,23.48917876761164,63,33.33333333333333,11945.736659039998 +50,1.5,14,3.0,19.457366590399978,0,23.48917876761164,63,33.33333333333333,11945.736659039998 +50,1.5,20,3.0,19.457366590399978,0,23.48917876761164,63,33.33333333333333,11945.736659039998 +60,1.5,10,1.0,18.719105980800197,0,28.373773894202518,71,28.169014084507044,11871.91059808002 +50,2.5,7,2.0,18.502825916399978,0,24.774378558616494,36,47.22222222222222,11850.282591639998 +50,2.5,10,2.0,18.502825916399978,0,24.774378558616494,36,47.22222222222222,11850.282591639998 +50,1.5,7,2.5,18.434108332000196,0,24.732330567590843,64,32.8125,11843.41083320002 +50,1.5,10,2.5,18.434108332000196,0,24.732330567590843,64,32.8125,11843.41083320002 +50,1.5,14,2.5,18.434108332000196,0,24.732330567590843,64,32.8125,11843.41083320002 +50,1.5,14,2.0,18.25407418719997,0,25.625913164252367,65,32.30769230769231,11825.407418719997 +40,1.5,7,2.0,18.0650000687998,0,23.95021695039679,76,32.89473684210527,11806.50000687998 +40,1.5,10,2.0,18.0650000687998,0,23.95021695039679,76,32.89473684210527,11806.50000687998 +40,1.5,14,2.0,18.0650000687998,0,23.95021695039679,76,32.89473684210527,11806.50000687998 +40,1.5,20,2.0,18.0650000687998,0,23.95021695039679,76,32.89473684210527,11806.50000687998 +60,2.0,14,1.5,17.660420517600013,0,20.42430077087853,43,41.86046511627907,11766.042051760001 +60,2.0,20,1.5,17.487821510800003,0,20.540984451016865,43,41.86046511627907,11748.78215108 +60,1.5,7,1.0,17.41365775920016,0,28.373773894202518,71,28.169014084507044,11741.365775920016 +60,2.0,10,2.0,17.10912014919997,0,20.41399526578395,41,43.90243902439025,11710.912014919997 +60,2.0,14,2.0,17.10912014919997,0,20.41399526578395,41,43.90243902439025,11710.912014919997 +60,2.0,20,2.0,17.10912014919997,0,20.41399526578395,41,43.90243902439025,11710.912014919997 +60,2.0,7,1.5,17.0615692160001,0,19.92359958513119,42,42.857142857142854,11706.15692160001 +30,1.5,10,1.5,16.79211192960007,0,24.74651586489917,99,36.36363636363637,11679.211192960007 +80,2.0,14,3.0,16.448605623200002,0,22.50917737727834,31,48.38709677419355,11644.86056232 +80,2.0,20,3.0,16.448605623200002,0,22.50917737727834,31,48.38709677419355,11644.86056232 +30,1.5,7,1.5,16.381085937999888,0,25.010825893505267,99,36.36363636363637,11638.108593799989 +60,2.0,10,1.5,16.327427819600036,0,20.425230104981267,43,41.86046511627907,11632.742781960003 +60,2.0,7,2.0,16.294622563199972,0,20.413996714462808,41,43.90243902439025,11629.462256319997 +40,1.5,7,2.5,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,7,3.0,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,10,2.5,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,10,3.0,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,14,2.5,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,14,3.0,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,20,2.5,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +40,1.5,20,3.0,16.170642453599886,0,23.94987779987423,76,32.89473684210527,11617.064245359988 +60,2.0,14,3.0,16.02850302119992,0,21.044417210955768,39,46.15384615384615,11602.850302119992 +60,2.0,20,3.0,16.02850302119992,0,21.044417210955768,39,46.15384615384615,11602.850302119992 +50,1.5,20,2.0,15.84981642079998,0,27.13888185120516,66,31.818181818181817,11584.981642079998 +60,2.0,10,3.0,15.796374775599906,0,21.202892322746735,39,46.15384615384615,11579.63747755999 +50,2.0,7,1.0,15.717548247600096,0,22.0140299783681,57,33.33333333333333,11571.75482476001 +50,2.0,10,1.0,15.717548247600096,0,22.0140299783681,57,33.33333333333333,11571.75482476001 +80,2.0,7,3.0,15.630970877999989,0,22.50917737727834,31,48.38709677419355,11563.097087799999 +80,2.0,10,3.0,15.630970877999989,0,22.50917737727834,31,48.38709677419355,11563.097087799999 +50,2.0,20,2.0,15.513181830000011,0,25.930551886702457,49,40.816326530612244,11551.318183000001 +50,2.5,20,2.5,15.365001901199884,0,26.182059084871298,36,47.22222222222222,11536.500190119988 +60,2.0,7,1.0,15.260387111199888,0,21.974023791039333,49,34.69387755102041,11526.038711119989 +60,2.0,10,1.0,15.260387111199888,0,21.974023791039333,49,34.69387755102041,11526.038711119989 +60,2.0,7,3.0,14.929990990799908,0,21.791724586817754,39,46.15384615384615,11492.99909907999 +80,2.0,14,2.0,14.928309539199908,0,20.57144476461261,33,45.45454545454545,11492.83095391999 +80,2.0,20,2.0,14.928309539199908,0,20.57144476461261,33,45.45454545454545,11492.83095391999 +80,2.0,10,2.0,14.79222637119994,0,20.665733292313917,33,45.45454545454545,11479.222637119994 +60,1.5,7,1.5,14.584878026400203,0,24.55670798504825,60,33.33333333333333,11458.48780264002 +40,1.5,14,1.5,14.572456698400002,0,23.922689743152453,79,31.645569620253166,11457.24566984 +50,2.0,7,2.0,14.362576167200041,0,26.668822340487186,49,40.816326530612244,11436.257616720004 +50,2.0,10,2.0,14.362576167200041,0,26.668822340487186,49,40.816326530612244,11436.257616720004 +50,2.0,14,2.0,14.362576167200041,0,26.668822340487186,49,40.816326530612244,11436.257616720004 +50,1.5,7,2.0,14.350457615199922,0,25.64123105900517,67,31.343283582089555,11435.045761519992 +60,1.5,10,1.5,14.036341492800092,0,24.916787446204417,61,32.78688524590164,11403.63414928001 +50,2.0,20,1.5,13.791142404000075,0,24.07733950320258,51,37.254901960784316,11379.114240400007 +50,1.5,10,2.0,13.674484755199792,0,25.64165947732817,67,31.343283582089555,11367.44847551998 +60,1.5,20,1.0,13.661282718800122,0,31.42617453311301,72,26.38888888888889,11366.128271880012 +50,2.0,14,1.5,13.659587984400003,0,24.164226346934207,51,37.254901960784316,11365.95879844 +80,2.5,20,1.5,13.605883863600084,0,12.554486552264462,28,42.857142857142854,11360.588386360008 +50,2.0,14,3.0,13.312493651600107,0,27.35666122138649,48,41.66666666666667,11331.24936516001 +50,2.0,20,3.0,13.312493651600107,0,27.35666122138649,48,41.66666666666667,11331.24936516001 +50,2.5,10,2.5,13.305970117599935,0,27.377133227891395,36,47.22222222222222,11330.597011759994 +50,2.5,14,2.5,13.305970117599935,0,27.377133227891395,36,47.22222222222222,11330.597011759994 +80,2.0,7,2.0,13.267983327199929,0,21.719136583819523,33,45.45454545454545,11326.798332719993 +50,2.0,10,3.0,13.085589050799989,0,27.502540961028984,48,41.66666666666667,11308.558905079999 +50,2.0,10,1.5,12.769930683600105,0,25.022852480719465,51,37.254901960784316,11276.99306836001 +50,2.0,7,1.5,12.689027415199943,0,24.81225926040774,50,38.0,11268.902741519994 +40,1.5,7,1.5,12.57390562280003,0,25.249693193596155,79,31.645569620253166,11257.390562280003 +80,2.5,14,1.5,12.526075410400098,0,12.035297731551672,28,42.857142857142854,11252.60754104001 +50,2.5,7,2.5,12.445479566799968,0,27.377133227891395,36,47.22222222222222,11244.547956679997 +30,1.5,14,1.5,12.366870858799976,0,27.5971478515223,100,36.0,11236.687085879998 +50,1.5,10,1.0,12.328616606800187,0,27.21567808046706,82,25.609756097560975,11232.861660680019 +80,1.5,7,3.0,12.292120514399848,0,23.910152500877285,41,39.02439024390244,11229.212051439985 +80,1.5,10,3.0,12.292120514399848,0,23.910152500877285,41,39.02439024390244,11229.212051439985 +80,1.5,14,3.0,12.292120514399848,0,23.910152500877285,41,39.02439024390244,11229.212051439985 +80,1.5,20,3.0,12.292120514399848,0,23.910152500877285,41,39.02439024390244,11229.212051439985 +50,2.0,7,3.0,12.239295396800117,0,28.044494318182444,48,41.66666666666667,11223.929539680012 +50,2.5,14,3.0,12.212978153200002,0,27.475129783058033,36,47.22222222222222,11221.29781532 +50,2.5,20,3.0,12.212978153200002,0,27.475129783058033,36,47.22222222222222,11221.29781532 +40,1.5,10,1.5,12.038090416800078,0,25.60954869258214,80,31.25,11203.809041680008 +50,2.0,20,2.5,12.008261356399943,0,27.26116384808744,49,40.816326530612244,11200.826135639994 +50,2.5,10,3.0,11.988049839999876,0,27.620654172089633,36,47.22222222222222,11198.804983999988 +60,1.5,20,1.5,11.92921870240003,0,27.000733330149487,62,32.25806451612903,11192.921870240003 +80,2.5,10,1.0,11.619365763199912,0,10.623531328382974,32,34.375,11161.936576319991 +40,1.5,20,1.5,11.604062169199898,0,24.819716864758337,80,31.25,11160.40621691999 +100,1.5,7,3.0,11.57659816720001,0,25.93375468663125,33,36.36363636363637,11157.65981672 +80,2.5,20,2.0,11.573660139199946,0,13.9318626217471,26,46.15384615384615,11157.366013919995 +50,1.5,14,1.0,11.530252005600177,0,27.733396840053626,82,25.609756097560975,11153.025200560018 +60,1.5,14,1.5,11.44186416160008,0,26.62593947519682,62,32.25806451612903,11144.186416160008 +50,2.5,7,3.0,11.150237939599865,0,28.161802327605127,36,47.22222222222222,11115.023793959987 +80,2.5,7,2.0,11.127354908799989,0,14.82337316629376,25,48.0,11112.735490879999 +50,1.5,7,1.0,11.089365904400184,0,27.114712944427747,83,25.301204819277107,11108.936590440018 +80,2.5,10,1.5,10.92662306839986,0,12.036002333917223,28,42.857142857142854,11092.662306839986 +80,2.5,14,2.0,10.90539943240001,0,13.931710216123799,26,46.15384615384615,11090.53994324 +80,2.5,10,2.0,10.77406095719998,0,14.033016186142959,26,46.15384615384615,11077.406095719998 +50,2.0,7,2.5,10.730422306400031,0,28.091699548663822,49,40.816326530612244,11073.042230640003 +50,2.0,10,2.5,10.730422306400031,0,28.091699548663822,49,40.816326530612244,11073.042230640003 +50,2.0,14,2.5,10.730422306400031,0,28.091699548663822,49,40.816326530612244,11073.042230640003 +80,2.5,7,1.0,10.667679522399922,0,11.008291898619152,31,35.483870967741936,11066.767952239992 +30,1.5,20,1.5,10.617897500400105,0,28.72418728126082,101,35.64356435643564,11061.78975004001 +60,2.0,20,2.5,10.5505807119999,0,23.490615157196867,41,43.90243902439025,11055.05807119999 +80,2.5,7,1.5,10.41195292159995,0,13.255248068180853,27,44.44444444444444,11041.195292159995 +80,2.0,14,2.5,10.376268785199809,0,22.686928546496812,33,45.45454545454545,11037.62687851998 +80,2.0,20,2.5,10.376268785199809,0,22.686928546496812,33,45.45454545454545,11037.62687851998 +50,2.0,14,1.0,10.153194149599894,0,25.990559728734397,59,30.508474576271187,11015.31941495999 +80,2.0,10,2.5,10.065923871999967,0,22.904000246068552,33,45.45454545454545,11006.592387199997 +80,2.5,14,2.5,9.781330522399875,0,15.855365121850868,25,48.0,10978.133052239988 +50,2.0,20,1.0,9.762060053600035,0,25.990422779274134,59,30.508474576271187,10976.206005360003 +60,2.0,14,1.0,9.732711528000037,0,25.873682371764854,51,31.372549019607842,10973.271152800004 +30,2.5,14,3.0,9.675608867200008,0,23.534066015499157,55,40.0,10967.56088672 +80,2.0,7,2.5,9.526188356799867,0,23.28254714996443,33,45.45454545454545,10952.618835679987 +60,2.0,20,1.0,9.34188448040006,0,26.13781537265861,51,31.372549019607842,10934.188448040006 +60,2.0,7,2.5,9.287032939199872,0,24.364549535926827,41,43.90243902439025,10928.703293919987 +60,2.0,10,2.5,9.287032939199872,0,24.364549535926827,41,43.90243902439025,10928.703293919987 +60,2.0,14,2.5,9.287032939199872,0,24.364549535926827,41,43.90243902439025,10928.703293919987 +100,1.5,14,3.0,9.193329214000151,0,25.933192403922277,34,35.294117647058826,10919.332921400015 +100,1.5,20,3.0,9.193329214000151,0,25.933192403922277,34,35.294117647058826,10919.332921400015 +50,2.5,14,2.0,9.129645327599919,0,30.72389322228096,37,45.94594594594595,10912.964532759992 +50,2.5,20,2.0,9.129645327599919,0,30.72389322228096,37,45.94594594594595,10912.964532759992 +60,2.5,10,2.0,9.063926524399903,0,19.60090637676849,35,48.57142857142857,10906.39265243999 +30,2.5,7,2.0,8.813658142799977,0,24.8689798130684,56,39.285714285714285,10881.365814279998 +30,2.5,10,2.0,8.813658142799977,0,24.8689798130684,56,39.285714285714285,10881.365814279998 +30,2.5,20,3.0,8.7739537648001,0,23.931192689645922,55,40.0,10877.39537648001 +100,2.0,10,1.0,8.706138353599945,0,20.50839692584442,34,23.52941176470588,10870.613835359994 +60,2.5,14,2.0,8.696719496799924,0,19.87165513229429,35,48.57142857142857,10869.671949679992 +60,2.5,20,2.0,8.696719496799924,0,19.87165513229429,35,48.57142857142857,10869.671949679992 +50,1.5,14,1.5,8.684442032400057,0,26.88353489439968,73,28.767123287671232,10868.444203240006 +100,1.5,10,3.0,8.664962401200155,0,26.11117883627724,34,35.294117647058826,10866.496240120015 +80,2.5,10,2.5,8.652274067599866,0,16.720465558836963,25,48.0,10865.227406759986 +30,2.5,10,3.0,8.556089851200177,0,24.08379493253898,55,40.0,10855.608985120018 +50,1.5,10,1.5,8.328486647200188,0,27.378765741500803,73,28.767123287671232,10832.848664720019 +60,2.5,7,2.0,8.304237150399986,0,20.16110351119592,35,48.57142857142857,10830.423715039999 +50,1.5,20,1.5,8.271551328400054,0,27.161410815475072,73,28.767123287671232,10827.155132840006 +80,2.5,7,2.5,7.840840864400034,0,16.709551078879063,25,48.0,10784.084086440003 +30,2.5,7,3.0,7.744118237600232,0,24.651687424717217,55,40.0,10774.411823760023 +60,2.5,14,3.0,7.647614668799887,0,20.0370529231055,33,51.515151515151516,10764.761466879989 +60,2.5,20,3.0,7.647614668799887,0,20.0370529231055,33,51.515151515151516,10764.761466879989 +50,1.5,7,1.5,7.632794924000027,0,26.108920947285853,72,29.166666666666668,10763.279492400003 +80,1.5,20,2.5,7.619624692400012,0,23.907814005940125,43,37.2093023255814,10761.962469240001 +40,1.5,7,1.0,7.599551036799766,0,27.76546662697191,90,27.77777777777778,10759.955103679977 +60,2.5,10,3.0,7.4320210131999005,0,20.19763525773908,33,51.515151515151516,10743.20210131999 +80,2.5,10,3.0,7.297506881200025,0,17.129359592127482,25,48.0,10729.750688120002 +80,2.5,14,3.0,7.297506881200025,0,17.129359592127482,25,48.0,10729.750688120002 +80,2.5,20,3.0,7.297506881200025,0,17.129359592127482,25,48.0,10729.750688120002 +60,2.5,10,1.5,7.206394817199907,0,19.66736532327708,38,44.73684210526316,10720.63948171999 +100,2.0,7,1.0,7.100337978800017,0,20.904261265152545,34,23.52941176470588,10710.033797880002 +30,2.5,20,2.5,7.08099786159988,0,25.475738894961417,56,39.285714285714285,10708.099786159988 +100,1.5,14,2.0,7.040267313199928,0,24.110308089105864,38,31.57894736842105,10704.026731319993 +100,1.5,20,2.0,7.040267313199928,0,24.110308089105864,38,31.57894736842105,10704.026731319993 +80,1.5,7,2.5,6.87622325719989,0,24.167877505758884,43,37.2093023255814,10687.622325719989 +80,1.5,10,2.5,6.87622325719989,0,24.167877505758884,43,37.2093023255814,10687.622325719989 +80,1.5,14,2.5,6.87622325719989,0,24.167877505758884,43,37.2093023255814,10687.622325719989 +80,2.5,20,2.5,6.806067390799944,0,15.85450016778522,26,46.15384615384615,10680.606739079994 +30,2.5,10,2.5,6.594221604800095,0,25.814977183054083,56,39.285714285714285,10659.42216048001 +30,2.5,14,2.5,6.594221604800095,0,25.814977183054083,56,39.285714285714285,10659.42216048001 +80,2.5,20,1.0,6.507477357999979,0,13.79547468062208,34,29.411764705882355,10650.747735799998 +60,2.5,7,1.5,6.37396862399979,0,20.392797183506566,37,45.94594594594595,10637.396862399979 +100,1.5,7,2.0,6.161089360399947,0,24.679824720864293,38,31.57894736842105,10616.108936039995 +100,1.5,10,2.0,6.161089360399947,0,24.679824720864293,38,31.57894736842105,10616.108936039995 +40,2.5,7,2.0,6.041179136399842,0,24.91352219743737,44,36.36363636363637,10604.117913639984 +60,2.5,20,2.5,5.940162935999797,0,21.903642443520138,34,50.0,10594.01629359998 +80,2.5,14,1.0,5.877725080399941,0,13.915268806788275,34,29.411764705882355,10587.772508039994 +30,2.5,7,2.5,5.784675112000078,0,25.814977183054083,56,39.285714285714285,10578.467511200008 +40,1.5,14,1.0,5.717359012399702,0,27.76128962307571,93,26.881720430107524,10571.73590123997 +80,2.5,7,3.0,5.576756342799963,0,18.45767701532952,25,48.0,10557.675634279996 +60,2.5,14,2.5,5.45825071799989,0,22.258371831767473,34,50.0,10545.825071799989 +40,2.5,10,2.0,5.4158871755999645,0,24.913158638197583,44,36.36363636363637,10541.588717559996 +40,1.5,10,1.0,5.300399831599934,0,28.13283981854215,93,26.881720430107524,10530.039983159993 +100,2.0,20,1.5,5.180856183999931,0,23.522891265322503,31,29.03225806451613,10518.085618399993 +60,2.5,7,3.0,4.919124419999898,0,22.063947884794192,33,51.515151515151516,10491.91244199999 +50,1.5,20,1.0,4.767527868000034,0,32.292749332707395,84,23.809523809523807,10476.752786800003 +100,1.5,14,1.0,4.733853616799897,0,25.255578143196377,49,22.448979591836736,10473.38536167999 +100,1.5,14,2.5,4.702431143199883,0,27.30303802788034,36,33.33333333333333,10470.243114319988 +100,1.5,20,2.5,4.702431143199883,0,27.30303802788034,36,33.33333333333333,10470.243114319988 +80,1.5,7,2.0,4.522733975999908,0,24.617606979238232,46,34.78260869565217,10452.27339759999 +80,1.5,10,2.0,4.522733975999908,0,24.617606979238232,46,34.78260869565217,10452.27339759999 +100,1.5,7,2.5,4.450861423999977,0,27.478429427283913,36,33.33333333333333,10445.086142399998 +60,2.5,10,2.5,4.375005521599797,0,23.057644045166054,34,50.0,10437.50055215998 +100,2.0,20,1.0,4.291339238399833,0,25.339106278871007,35,22.857142857142858,10429.133923839983 +80,2.0,7,1.0,4.277958040800004,0,21.385717565949665,42,30.952380952380953,10427.79580408 +80,1.5,14,2.0,4.170107654399926,0,24.87139793427729,46,34.78260869565217,10417.010765439993 +80,1.5,20,2.0,4.170107654399926,0,24.87139793427729,46,34.78260869565217,10417.010765439993 +100,2.0,14,1.5,4.105096345999937,0,24.24569388389015,31,29.03225806451613,10410.509634599994 +100,1.5,10,2.5,3.923050211200025,0,27.84436223411916,36,33.33333333333333,10392.305021120002 +60,2.5,7,2.5,3.581882490799817,0,23.057644045166054,34,50.0,10358.188249079982 +100,2.0,14,1.0,3.3991675075999956,0,25.443461754398346,35,22.857142857142858,10339.91675076 +80,2.0,10,1.0,3.312578582800051,0,22.11349798975676,43,30.23255813953488,10331.257858280005 +40,2.5,20,2.5,3.1375868236001767,0,25.597199647354426,44,36.36363636363637,10313.758682360018 +30,1.5,14,1.0,3.0595469732000313,0,34.091623856786306,108,33.33333333333333,10305.954697320003 +40,2.0,7,1.0,3.0498749675998806,0,27.238536110544874,71,28.169014084507044,10304.987496759988 +40,2.0,10,1.0,2.9069571495999664,0,27.339419514072397,71,28.169014084507044,10290.695714959997 +100,1.5,7,1.0,2.8990086004001023,0,25.227002028042154,50,22.0,10289.90086004001 +80,2.0,20,1.5,2.816116342000096,0,24.36194458185464,37,37.83783783783784,10281.61163420001 +80,2.0,14,1.5,2.736082822000099,0,24.36194458185464,37,37.83783783783784,10273.60828220001 +50,2.5,14,1.5,2.692530309599879,0,29.60712809636908,42,38.095238095238095,10269.253030959988 +40,2.5,7,2.5,2.6688015964002263,0,25.93568286503296,44,36.36363636363637,10266.880159640023 +40,2.5,10,2.5,2.6688015964002263,0,25.93568286503296,44,36.36363636363637,10266.880159640023 +40,2.5,14,2.5,2.6688015964002263,0,25.93568286503296,44,36.36363636363637,10266.880159640023 +100,1.5,10,1.0,2.5559287315999426,0,25.07340354478872,51,21.568627450980394,10255.592873159994 +100,2.0,10,1.5,2.4918591583999112,0,25.101949607002574,31,29.03225806451613,10249.185915839991 +100,2.5,10,1.0,2.2377060116000393,0,14.040877991203226,26,26.923076923076923,10223.770601160004 +50,2.5,20,1.5,2.166668264399814,0,30.02235691170936,42,38.095238095238095,10216.666826439981 +40,2.5,14,3.0,1.7358913491999737,0,26.03600640130342,44,36.36363636363637,10173.589134919997 +40,2.5,20,3.0,1.7358913491999737,0,26.03600640130342,44,36.36363636363637,10173.589134919997 +40,2.5,10,3.0,1.5318469044000085,0,26.184758561639494,44,36.36363636363637,10153.18469044 +50,2.5,7,1.5,1.4158022339998388,0,30.8557018833812,40,40.0,10141.580223399984 +100,2.0,7,1.5,1.2633543564000866,0,26.042977067972963,30,30.0,10126.335435640009 +50,2.5,10,1.5,1.23510139039985,0,30.605580937516102,42,38.095238095238095,10123.510139039985 +80,2.0,10,1.5,1.1440152575999853,0,25.21821158583219,37,37.83783783783784,10114.401525759999 +30,1.5,7,1.0,1.130944826800114,0,35.324927964894336,109,33.02752293577982,10113.094482680011 +60,2.5,20,1.5,0.939177257599913,0,20.141257390571166,39,41.02564102564102,10093.917725759991 +100,2.5,20,1.5,0.7888490788000491,0,14.983214357573946,24,29.166666666666668,10078.884907880005 +40,2.5,7,3.0,0.772283821200108,0,26.73662493105862,44,36.36363636363637,10077.22838212001 +30,2.0,7,1.0,0.7216704528000992,0,32.595448696677984,89,30.337078651685395,10072.16704528001 +30,2.0,10,1.0,0.7216704528000992,0,32.595448696677984,89,30.337078651685395,10072.16704528001 +30,1.5,10,1.0,0.6166724084002817,0,35.65390111554561,109,33.02752293577982,10061.667240840028 +60,2.5,14,1.5,-0.021784665600207517,0,19.66737408250718,39,41.02564102564102,9997.82153343998 +30,2.5,20,1.5,-0.13640349439987404,0,29.068747143605954,60,33.33333333333333,9986.359650560013 +100,2.0,20,2.0,-0.2006099475998599,0,27.31784219648781,29,31.03448275862069,9979.939005240014 +30,1.5,20,1.0,-0.3579933867999898,0,36.277436268244784,109,33.02752293577982,9964.200661320001 +100,1.5,20,1.0,-0.3774811091999436,0,28.509148783361724,52,19.230769230769234,9962.251889080006 +100,1.5,14,1.5,-0.5029462091998721,0,28.017252153307002,43,27.906976744186046,9949.705379080013 +30,2.5,14,1.5,-0.5610663371999363,0,29.370171329140824,60,33.33333333333333,9943.893366280006 +30,2.0,20,2.5,-0.7200945387998945,0,33.52295961061831,80,35.0,9927.99054612001 +100,1.5,10,1.5,-0.7906049663999329,0,28.22532633341896,43,27.906976744186046,9920.939503360007 +30,2.5,14,2.0,-0.8227158556001085,0,31.522596489090486,57,36.84210526315789,9917.72841443999 +100,1.5,20,1.5,-1.0910387595998507,0,28.44251755990188,43,27.906976744186046,9890.896124040015 +80,2.0,7,1.5,-1.114601436799967,0,26.708825633592337,36,38.88888888888889,9888.539856320003 +30,2.5,20,2.0,-1.2753525183998318,0,31.834999818287763,57,36.84210526315789,9872.464748160017 +100,2.0,10,2.0,-1.2770789851999689,0,28.43244830875339,28,32.142857142857146,9872.292101480003 +30,2.0,7,2.0,-1.2907844384001874,0,34.428273803747906,81,34.5679012345679,9870.921556159981 +30,2.0,14,3.0,-1.306487622799923,0,33.91586654872959,80,35.0,9869.351237720008 +30,2.0,20,3.0,-1.306487622799923,0,33.91586654872959,80,35.0,9869.351237720008 +100,1.5,7,1.5,-1.452714180799958,0,28.704999275282848,43,27.906976744186046,9854.728581920004 +30,2.0,10,3.0,-1.5046471687997474,0,34.048520329326784,80,35.0,9849.535283120025 +80,1.5,7,1.5,-1.5976361851999898,0,27.73377982445147,52,30.76923076923077,9840.236381480001 +100,2.0,14,2.0,-1.61572908679982,0,28.348146553192016,29,31.03448275862069,9838.427091320018 +30,2.5,10,1.5,-1.627133273599884,0,30.12748118394235,60,33.33333333333333,9837.286672640012 +30,2.0,10,2.0,-1.8983808407999279,0,34.832068033698114,81,34.5679012345679,9810.161915920007 +30,2.0,14,2.0,-1.8983808407999279,0,34.832068033698114,81,34.5679012345679,9810.161915920007 +40,1.5,20,1.0,-1.9855729120003163,0,32.58811486799657,95,25.263157894736842,9801.442708799968 +100,2.0,7,3.0,-2.0213917403999586,0,28.96685252222548,26,34.61538461538461,9797.860825960004 +80,1.5,14,1.5,-2.0506247772001736,0,28.06652208907063,53,30.18867924528302,9794.937522279983 +80,1.5,20,1.5,-2.1938304880002217,0,28.17195008224413,53,30.18867924528302,9780.616951199978 +30,2.0,7,3.0,-2.2412766775999806,0,34.54147974474392,80,35.0,9775.872332240002 +80,1.5,10,1.5,-2.332532586000034,0,28.274547917592287,53,30.18867924528302,9766.746741399997 +30,2.0,20,2.0,-2.396148339599931,0,35.16271343892994,81,34.5679012345679,9760.385166040007 +30,2.5,20,1.0,-2.4455417199999645,0,30.939289814270417,64,28.125,9755.445828000004 +20,1.5,14,1.0,-2.806850639199856,0,29.95984720502462,150,34.66666666666667,9719.314936080014 +100,2.5,20,1.0,-2.831795506000053,0,18.148412034352,28,25.0,9716.820449399995 +50,3.0,20,2.5,-2.9521099371999844,0,19.83060974864327,24,41.66666666666667,9704.789006280002 +80,2.0,14,1.0,-3.0528254627999374,0,26.91263899125207,45,26.666666666666668,9694.717453720006 +100,2.5,14,2.0,-3.1388655968000236,0,19.699672439770314,23,30.434782608695656,9686.113440319998 +40,2.0,14,3.0,-3.324689946799899,0,31.590643364880304,63,34.92063492063492,9667.53100532001 +100,2.5,14,1.0,-3.3852069004001164,0,18.243773263284776,28,25.0,9661.479309959988 +30,2.5,14,1.0,-3.5083672543999094,0,31.69188425216979,64,28.125,9649.163274560009 +60,2.5,7,1.0,-3.5306231024001136,0,17.715822037288728,43,32.55813953488372,9646.937689759989 +30,2.0,7,2.5,-3.6096475380000994,0,35.4579480927799,81,34.5679012345679,9639.03524619999 +30,2.0,10,2.5,-3.6096475380000994,0,35.4579480927799,81,34.5679012345679,9639.03524619999 +30,2.0,14,2.5,-3.6096475380000994,0,35.4579480927799,81,34.5679012345679,9639.03524619999 +100,2.0,7,2.0,-3.6778170047999446,0,29.71692871698151,28,32.142857142857146,9632.218299520006 +80,1.5,7,1.0,-3.67941780239993,0,30.120707010743338,62,25.806451612903224,9632.058219760007 +100,2.5,7,1.0,-3.8817947584000283,0,16.838876286399955,25,28.000000000000004,9611.820524159997 +20,1.5,20,1.0,-3.883135562800435,0,30.73518966089445,151,34.437086092715234,9611.686443719957 +30,2.5,7,1.0,-3.936142080800018,0,31.784968200623666,64,28.125,9606.385791919998 +30,2.5,10,1.0,-4.0480327552001105,0,31.86434170884042,64,28.125,9595.196724479989 +40,2.0,20,3.0,-4.118609959200294,0,32.153082872575375,63,34.92063492063492,9588.13900407997 +80,1.5,14,1.0,-4.2108271351999065,0,30.474355845860504,63,25.396825396825395,9578.91728648001 +40,2.0,10,3.0,-4.313084602399904,0,32.288982427618635,63,34.92063492063492,9568.69153976001 +40,2.0,20,2.5,-4.34627169679985,0,31.500286980839597,64,34.375,9565.372830320015 +20,1.5,10,1.0,-4.3752090367998795,0,31.089576008770937,151,33.77483443708609,9562.479096320012 +20,1.5,7,1.0,-4.428951397599958,0,31.128370350139523,151,33.77483443708609,9557.104860240004 +50,2.5,20,1.0,-4.490973976800106,0,28.87790509163693,47,29.78723404255319,9550.90260231999 +50,3.0,10,2.0,-4.495694301600088,0,21.323383151744174,24,41.66666666666667,9550.430569839991 +100,3.0,20,2.5,-4.653278039200086,0,18.817901507200116,13,38.46153846153847,9534.672196079991 +80,2.0,20,1.0,-4.775223276000033,0,26.810816900431284,47,25.53191489361702,9522.477672399997 +50,3.0,20,3.0,-4.851272047999937,0,20.46814953352217,24,41.66666666666667,9514.872795200006 +50,3.0,14,2.5,-4.865005426800071,0,21.411195811419436,24,41.66666666666667,9513.499457319993 +20,1.5,10,1.5,-4.897015197599722,0,30.108725707493345,146,35.61643835616438,9510.298480240028 +100,2.0,14,3.0,-4.923303067999969,0,29.930876218663812,27,33.33333333333333,9507.669693200003 +100,2.0,20,3.0,-4.923303067999969,0,29.930876218663812,27,33.33333333333333,9507.669693200003 +40,2.0,7,3.0,-5.027698814400137,0,32.79578565272636,63,34.92063492063492,9497.230118559986 +100,3.0,20,3.0,-5.081818772800107,0,18.817901507200116,13,38.46153846153847,9491.81812271999 +50,3.0,20,1.0,-5.082331647200026,0,18.844472018260667,25,32.0,9491.766835279997 +100,3.0,7,2.5,-5.112314022399951,0,18.845046510799985,13,38.46153846153847,9488.768597760005 +80,1.5,10,1.0,-5.177055926399989,0,31.20797374185248,63,25.396825396825395,9482.294407360001 +20,1.5,14,1.5,-5.231912031199845,0,30.354825831044554,146,35.61643835616438,9476.808796880016 +50,3.0,7,2.0,-5.247896341599953,0,21.943090509070338,24,41.66666666666667,9475.210365840005 +50,3.0,10,1.5,-5.264801403599885,0,21.879056234633893,25,40.0,9473.519859640011 +40,2.0,7,2.5,-5.288431759199812,0,32.17475183417554,64,34.375,9471.156824080019 +40,2.0,10,2.5,-5.288431759199812,0,32.17475183417554,64,34.375,9471.156824080019 +40,2.0,14,2.5,-5.288431759199812,0,32.17475183417554,64,34.375,9471.156824080019 +50,3.0,20,2.0,-5.291857359600017,0,21.978685580765177,24,41.66666666666667,9470.814264039998 +20,1.5,20,1.5,-5.325372891599691,0,30.423730617770786,146,35.61643835616438,9467.462710840031 +100,2.0,10,3.0,-5.384280963999954,0,30.26967712249536,27,33.33333333333333,9461.571903600005 +80,1.5,20,1.0,-5.406522805199947,0,31.34237486155372,64,25.0,9459.347719480005 +100,3.0,7,3.0,-5.462218962399966,0,18.845046510799985,13,38.46153846153847,9453.778103760003 +30,3.0,20,1.5,-5.4645517604000275,0,19.725572537426597,31,29.03225806451613,9453.544823959997 +100,2.0,20,2.5,-5.630517748400089,0,31.395263967674545,28,32.142857142857146,9436.948225159991 +40,2.0,14,1.0,-5.70614604559998,0,33.42098705720269,74,25.675675675675674,9429.385395440002 +40,2.0,20,1.0,-5.70614604559998,0,33.42098705720269,74,25.675675675675674,9429.385395440002 +50,3.0,14,2.0,-5.750500425199952,0,22.357147996699094,24,41.66666666666667,9424.949957480005 +100,2.5,20,2.5,-5.802837393600021,0,21.008660220946233,23,30.434782608695656,9419.716260639998 +50,2.5,14,1.0,-5.810496523599977,0,30.109581338000456,47,29.78723404255319,9418.950347640002 +30,2.0,14,1.5,-5.815711798399916,0,36.28384820385979,84,32.142857142857146,9418.428820160008 +40,2.0,7,2.0,-5.822177615599975,0,33.046329215627495,65,32.30769230769231,9417.782238440002 +40,2.0,10,2.0,-5.822177615599975,0,33.046329215627495,65,32.30769230769231,9417.782238440002 +20,1.5,7,2.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,7,2.5,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,7,3.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,10,2.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,10,2.5,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,10,3.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,14,2.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,14,2.5,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,14,3.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,20,2.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,20,2.5,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +20,1.5,20,3.0,-5.823492653199955,0,30.35609255147,146,35.61643835616438,9417.650734680004 +30,2.5,7,1.5,-5.840160922000013,0,33.12439337604425,59,33.89830508474576,9415.983907799999 +30,3.0,14,2.0,-5.94612074559991,0,20.570429589738215,30,30.0,9405.387925440009 +100,2.5,10,2.0,-5.949344793199943,0,21.57551985242566,23,30.434782608695656,9405.065520680006 +100,2.5,14,1.5,-6.003155523599981,0,20.057292192597217,24,29.166666666666668,9399.684447640002 +20,3.0,10,1.0,-6.096669449999973,0,11.79135450334409,22,31.818181818181817,9390.333055000003 +20,3.0,14,1.0,-6.096669449999973,0,11.79135450334409,22,31.818181818181817,9390.333055000003 +20,3.0,20,1.0,-6.096669449999973,0,11.79135450334409,22,31.818181818181817,9390.333055000003 +50,2.5,7,1.0,-6.1877886188000595,0,30.38983139008586,46,30.434782608695656,9381.221138119994 +100,2.0,14,2.5,-6.197775952799947,0,31.395443427043357,28,32.142857142857146,9380.222404720005 +40,2.0,14,2.0,-6.227681929200026,0,33.334261778974835,65,32.30769230769231,9377.231807079997 +30,2.0,20,1.5,-6.306337506000091,0,36.615780993729295,84,32.142857142857146,9369.366249399991 +30,3.0,20,1.0,-6.308480033199994,0,20.331138781766676,31,25.806451612903224,9369.15199668 +40,2.5,14,2.0,-6.37254112319999,0,33.30992063204546,46,34.78260869565217,9362.745887680001 +30,3.0,20,2.0,-6.425708254800119,0,20.975581377031276,30,30.0,9357.429174519988 +40,2.5,20,2.0,-6.431148920800042,0,33.35158912359138,46,34.78260869565217,9356.885107919996 +30,2.0,10,1.5,-6.554001489199981,0,36.78318309571057,84,32.142857142857146,9344.599851080002 +20,2.5,7,2.0,-6.615406678799955,0,21.89554534146102,70,34.285714285714285,9338.459332120005 +100,3.0,10,2.0,-6.665088010800027,0,20.713640376400026,13,38.46153846153847,9333.491198919997 +30,3.0,20,2.5,-6.690011166399963,0,21.198975782549375,30,30.0,9330.998883360004 +40,2.0,20,2.0,-6.7039319296000395,0,33.67285681292863,65,32.30769230769231,9329.606807039996 +30,3.0,14,1.0,-6.732763576399993,0,20.691981170805267,31,25.806451612903224,9326.72364236 +50,3.0,10,2.5,-6.7631602567999645,0,22.978923825324966,24,41.66666666666667,9323.683974320003 +50,3.0,20,1.5,-6.7679411428001,0,19.78256760940833,25,36.0,9323.20588571999 +100,2.0,10,2.5,-6.89731006000009,0,31.906197605780775,28,32.142857142857146,9310.268993999991 +100,3.0,14,2.5,-7.041076830800029,0,20.713640376400026,13,38.46153846153847,9295.892316919997 +50,3.0,14,3.0,-7.073132745999993,0,22.32545761548444,24,41.66666666666667,9292.6867254 +20,1.5,7,1.5,-7.075312248400077,0,31.709817030971802,148,35.13513513513514,9292.468775159992 +100,2.5,10,1.5,-7.076999250800073,0,20.874373215014373,24,29.166666666666668,9292.300074919993 +100,2.5,20,2.0,-7.090610149600051,0,22.302881426674144,23,30.434782608695656,9290.938985039995 +30,2.0,7,1.5,-7.154106417599941,0,37.189106618258094,83,32.53012048192771,9284.589358240006 +100,3.0,14,3.0,-7.297370538800043,0,20.713640376400026,13,38.46153846153847,9270.262946119996 +50,2.5,10,1.0,-7.2998725988000475,0,31.214892035961597,47,29.78723404255319,9270.012740119995 +30,3.0,10,1.0,-7.3425588811999845,0,21.210304516604488,31,25.806451612903224,9265.744111880002 +50,3.0,14,1.0,-7.464554215599965,0,20.88127141298687,25,32.0,9253.544578440004 +100,3.0,7,2.0,-7.788434878800017,0,21.48812735960004,13,38.46153846153847,9221.156512119998 +20,2.5,20,2.5,-7.888289725199975,0,22.96005866557721,70,34.285714285714285,9211.171027480003 +100,3.0,10,2.5,-7.949077539200025,0,21.48812735960004,13,38.46153846153847,9205.092246079997 +30,3.0,10,1.5,-7.959173177200009,0,21.73482556620366,31,29.03225806451613,9204.082682279999 +100,2.0,7,2.5,-8.0577974636,0,32.240482519065985,28,32.142857142857146,9194.22025364 +50,3.0,10,1.0,-8.069258456400002,0,21.398206518331893,25,32.0,9193.07415436 +100,2.5,7,2.5,-8.123399294000102,0,22.364433680926364,22,31.818181818181817,9187.66007059999 +30,3.0,10,2.0,-8.143300326799963,0,22.42615059153097,30,30.0,9185.669967320004 +50,3.0,7,2.5,-8.144364030399938,0,23.53913949121797,24,41.66666666666667,9185.563596960006 +20,3.0,20,1.5,-8.152562914800036,0,13.722376357009939,22,36.36363636363637,9184.743708519996 +30,2.0,14,1.0,-8.282566478400058,0,38.808977565074215,92,28.26086956521739,9171.743352159994 +20,2.5,10,2.5,-8.306315989599806,0,23.310385119390954,70,34.285714285714285,9169.36840104002 +20,2.5,14,2.5,-8.306315989599806,0,23.310385119390954,70,34.285714285714285,9169.36840104002 +20,2.5,10,2.0,-8.624786136799848,0,23.57661178902436,70,34.285714285714285,9137.521386320015 +20,2.5,14,2.0,-8.624786136799848,0,23.57661178902436,70,34.285714285714285,9137.521386320015 +40,2.0,14,1.5,-8.680150879999966,0,34.653783018812454,68,29.411764705882355,9131.984912000004 +40,2.0,20,1.5,-8.680150879999966,0,34.653783018812454,68,29.411764705882355,9131.984912000004 +30,2.0,20,1.0,-8.701188386400135,0,39.08812906218495,92,28.26086956521739,9129.881161359986 +20,2.5,20,2.0,-8.769216534399947,0,23.697023316672492,70,34.285714285714285,9123.078346560005 +60,2.5,10,1.0,-8.80899977559995,0,21.956173209392663,44,29.545454545454547,9119.100022440005 +50,3.0,10,3.0,-8.832585123199916,0,23.796349093301266,24,41.66666666666667,9116.741487680009 +40,2.5,20,1.5,-8.878008330000013,0,32.82214737502817,50,30.0,9112.199166999999 +30,3.0,20,3.0,-8.892589266000122,0,22.52836301876685,30,30.0,9110.741073399988 +20,2.5,7,2.5,-9.003017813999795,0,23.53323622136679,70,34.285714285714285,9099.69821860002 +100,2.5,14,2.5,-9.029717024400014,0,23.713885748368803,23,30.434782608695656,9097.028297559998 +30,3.0,7,2.0,-9.040384003200069,0,23.183588256964363,30,30.0,9095.961599679993 +40,2.5,14,1.5,-9.053036640399988,0,32.89916901214793,50,30.0,9094.696335960001 +20,2.5,7,3.0,-9.126819513999854,0,23.637302734290376,70,34.285714285714285,9087.318048600015 +20,2.5,10,3.0,-9.126819513999854,0,23.637302734290376,70,34.285714285714285,9087.318048600015 +20,2.5,14,3.0,-9.126819513999854,0,23.637302734290376,70,34.285714285714285,9087.318048600015 +20,2.5,20,3.0,-9.126819513999854,0,23.637302734290376,70,34.285714285714285,9087.318048600015 +40,2.5,7,1.5,-9.177404111199849,0,33.69309239596934,48,31.25,9082.259588880015 +30,3.0,14,2.5,-9.284066319999928,0,23.389623005254517,30,30.0,9071.593368000007 +100,2.5,7,3.0,-9.430870840399965,0,23.151153132113635,22,31.818181818181817,9056.912915960003 +50,3.0,7,1.5,-9.561611717199977,0,25.339735949964222,25,40.0,9043.838828280002 +40,2.0,10,1.5,-9.590492424799978,0,35.3051020631119,68,29.411764705882355,9040.950757520002 +30,3.0,14,1.5,-9.640439117199968,0,23.164372059684215,31,29.03225806451613,9035.956088280003 +100,2.5,20,3.0,-9.669040814000054,0,23.353194705638657,23,30.434782608695656,9033.095918599995 +100,2.5,7,2.0,-9.848344122000036,0,24.16931943817946,23,30.434782608695656,9015.165587799997 +20,2.5,7,1.5,-9.885607643999847,0,24.274955658980897,71,33.80281690140845,9011.439235600015 +40,2.5,10,1.5,-10.030493758799912,0,33.42576309751357,50,30.0,8996.950624120009 +50,3.0,14,1.5,-10.254231229999913,0,19.782412671018886,25,36.0,8974.576877000009 +100,3.0,10,3.0,-10.370508419599973,0,23.05855297959999,13,38.46153846153847,8962.949158040003 +100,2.5,7,1.5,-10.495419546400061,0,23.77297211222131,24,29.166666666666668,8950.458045359994 +30,3.0,7,1.5,-10.502826345599987,0,23.897580626411774,31,29.03225806451613,8949.717365440001 +40,2.0,7,1.5,-10.560806405999974,0,35.999356404824226,67,29.850746268656714,8943.919359400003 +20,3.0,7,1.0,-10.734710424000113,0,16.14787244949817,22,31.818181818181817,8926.528957599989 +30,3.0,7,1.0,-10.807436895599984,0,24.15674977522414,31,25.806451612903224,8919.256310440001 +50,3.0,7,3.0,-10.965198641199986,0,25.57897746584053,24,41.66666666666667,8903.480135880001 +30,3.0,14,3.0,-11.02035833519998,0,24.33785015058004,30,30.0,8897.964166480002 +100,2.5,10,2.5,-11.040211981599986,0,25.400799983065603,23,30.434782608695656,8895.978801840001 +30,3.0,10,2.5,-11.093944669999964,0,24.91795642442092,30,30.0,8890.605533000004 +30,3.0,7,2.5,-11.349534465999985,0,24.617646030495,30,30.0,8865.046553400001 +20,2.5,20,1.5,-11.518145214799787,0,23.347614818473325,71,32.3943661971831,8848.185478520021 +20,2.5,10,1.5,-11.53450939279972,0,23.361747247607116,71,32.3943661971831,8846.549060720028 +20,3.0,10,1.5,-11.586581948800086,0,16.947938444491022,22,36.36363636363637,8841.341805119991 +20,3.0,14,1.5,-11.586581948800086,0,16.947938444491022,22,36.36363636363637,8841.341805119991 +20,2.5,14,1.5,-11.587155120399839,0,23.40722959655004,71,32.3943661971831,8841.284487960016 +20,2.5,14,1.0,-11.602305141199922,0,23.811684715118247,72,29.166666666666668,8839.769485880008 +30,3.0,10,3.0,-11.647572167199888,0,24.871089469201234,30,30.0,8835.242783280011 +60,3.0,20,1.0,-11.740482484000113,0,19.704559666093044,23,26.08695652173913,8825.951751599989 +50,3.0,7,1.0,-11.94682171880002,0,21.7898911644351,25,32.0,8805.317828119998 +20,3.0,20,2.5,-12.056976331599998,0,17.39027567480063,22,36.36363636363637,8794.30236684 +100,3.0,20,1.0,-12.192273718399992,0,25.651009831599996,18,22.22222222222222,8780.77262816 +20,2.5,20,1.0,-12.455971652799743,0,24.54757647528561,72,27.77777777777778,8754.402834720026 +20,3.0,20,3.0,-12.576797947200047,0,17.878177312970678,22,36.36363636363637,8742.320205279995 +60,3.0,20,2.5,-12.676076179600077,0,19.29592004200007,22,36.36363636363637,8732.392382039992 +100,3.0,14,2.0,-12.71407211760008,0,25.9331904272001,15,33.33333333333333,8728.592788239992 +100,2.5,14,3.0,-12.8108507036001,0,26.018958087960193,23,30.434782608695656,8718.91492963999 +40,3.0,10,1.5,-12.892696627999975,0,27.271016348860435,26,30.76923076923077,8710.730337200002 +20,2.5,10,1.0,-12.903754282399769,0,24.547932061421633,72,29.166666666666668,8709.624571760023 +20,2.5,7,1.0,-13.33817511959989,0,24.924108310962072,72,29.166666666666668,8666.18248804001 +100,2.5,10,3.0,-13.708039995999988,0,26.780148820940123,22,31.818181818181817,8629.196000400001 +30,3.0,7,3.0,-13.71417414319989,0,26.628323302404734,30,30.0,8628.582585680011 +100,3.0,7,1.0,-13.922974494000046,0,26.784383522800006,17,23.52941176470588,8607.702550599995 +20,3.0,14,2.0,-13.950007070799982,0,19.168395940743785,22,36.36363636363637,8604.999292920002 +20,3.0,20,2.0,-13.950007070799982,0,19.168395940743785,22,36.36363636363637,8604.999292920002 +60,3.0,14,1.0,-13.955224178800126,0,21.719593257687027,23,26.08695652173913,8604.477582119987 +100,3.0,14,1.0,-14.27699739720003,0,27.08573005440006,18,22.22222222222222,8572.300260279997 +100,3.0,7,1.5,-14.288084049200043,0,27.75522735080006,16,31.25,8571.191595079996 +60,3.0,20,3.0,-14.326780164800038,0,19.88363317360003,22,36.36363636363637,8567.321983519996 +60,3.0,20,1.5,-14.329297708400027,0,21.279677108903552,23,30.434782608695656,8567.070229159997 +80,3.0,20,1.0,-14.368082093999984,0,21.19961277689391,24,25.0,8563.191790600002 +20,3.0,7,1.5,-14.422994662799974,0,19.61282445136651,22,36.36363636363637,8557.700533720003 +60,3.0,14,2.5,-14.457400784799992,0,20.94181483200001,22,36.36363636363637,8554.25992152 +60,3.0,10,2.0,-14.493836549600072,0,20.17922124880003,22,36.36363636363637,8550.616345039993 +20,3.0,14,2.5,-14.501246316399975,0,19.68617195118629,22,36.36363636363637,8549.875368360003 +60,3.0,10,1.0,-14.51778015520009,0,22.23116913469562,23,26.08695652173913,8548.221984479991 +100,3.0,10,1.0,-14.558900104000042,0,27.32568461880004,18,22.22222222222222,8544.109989599996 +20,3.0,14,3.0,-14.617910353200077,0,19.795599550992428,22,36.36363636363637,8538.208964679992 +60,2.5,20,1.0,-14.87031383000005,0,27.609386355026142,46,26.08695652173913,8512.968616999995 +100,3.0,14,1.5,-14.949474400800044,0,28.324684669600035,16,25.0,8505.052559919995 +20,3.0,7,2.0,-14.95018575599992,0,20.107919691967407,22,36.36363636363637,8504.981424400008 +60,2.5,14,1.0,-14.953561980400154,0,27.350813303163758,46,26.08695652173913,8504.643801959985 +20,3.0,10,2.5,-15.337171317199955,0,20.47101587574727,22,36.36363636363637,8466.282868280005 +40,2.5,20,1.0,-15.343494405599815,0,37.6673890758311,55,23.636363636363637,8465.650559440019 +100,3.0,10,1.5,-15.42132083800003,0,28.722414222000044,16,25.0,8457.867916199997 +100,3.0,20,1.5,-15.577564266000007,0,28.85354009560004,17,23.52941176470588,8442.2435734 +60,3.0,7,2.0,-15.612963630800186,0,21.22477217160019,22,36.36363636363637,8438.703636919981 +40,3.0,20,1.5,-15.94724685479996,0,24.691649961349928,27,25.925925925925924,8405.275314520004 +20,3.0,10,2.0,-15.95927466519999,0,21.055590113847234,22,36.36363636363637,8404.07253348 +60,3.0,10,2.5,-16.164569615600158,0,22.51957895560018,22,36.36363636363637,8383.543038439984 +60,3.0,14,3.0,-16.328067045599983,0,21.754463975200018,22,36.36363636363637,8367.193295440002 +40,3.0,20,2.0,-16.384056791599868,0,29.93331414613299,26,30.76923076923077,8361.594320840013 +80,3.0,14,1.0,-16.4989375184,0,23.160139558273393,24,25.0,8350.10624816 +20,3.0,7,2.5,-16.70008294719999,0,21.75137648567641,22,36.36363636363637,8329.991705280001 +40,3.0,14,2.0,-16.73773496199994,0,30.229283116011167,26,30.76923076923077,8326.226503800006 +40,2.5,14,1.0,-16.809397702799835,0,38.746944088418616,55,23.636363636363637,8319.060229720017 +20,3.0,7,3.0,-16.81349397039994,0,21.857800536583685,22,36.36363636363637,8318.650602960006 +20,3.0,10,3.0,-16.81349397039994,0,21.857800536583685,22,36.36363636363637,8318.650602960006 +80,3.0,7,2.5,-16.926463007200056,0,22.421601816000056,21,33.33333333333333,8307.353699279995 +80,3.0,10,1.0,-17.044165039199978,0,23.662428738931165,24,25.0,8295.583496080002 +100,3.0,20,2.0,-17.356930655999985,0,29.873124108800003,15,26.666666666666668,8264.306934400001 +40,3.0,7,1.5,-17.44529656959994,0,31.22114811374509,26,30.76923076923077,8255.470343040006 +60,3.0,14,1.5,-17.533348797199906,0,23.56804327199993,23,30.434782608695656,8246.66512028001 +40,2.5,7,1.0,-17.747528196399944,0,39.437478170772216,55,23.636363636363637,8225.247180360006 +60,3.0,10,1.5,-17.991397474399964,0,23.99252447519999,23,30.434782608695656,8200.860252560004 +60,3.0,7,1.0,-18.12342215879991,0,24.30897422599992,23,26.08695652173913,8187.657784120009 +40,2.5,10,1.0,-18.191515023199816,0,39.76463981130189,55,23.636363636363637,8180.848497680018 +80,3.0,20,1.5,-18.212930641200018,0,24.566753483600007,23,26.08695652173913,8178.706935879998 +40,3.0,20,2.5,-18.31746995800003,0,31.55314622697699,26,30.76923076923077,8168.253004199997 +40,3.0,20,1.0,-18.41236287519997,0,27.413682918381227,29,20.689655172413794,8158.763712480003 +60,3.0,7,2.5,-18.464327826000073,0,24.068237069600073,22,36.36363636363637,8153.567217399993 +80,3.0,7,3.0,-18.469607293200006,0,24.423613480400036,21,33.33333333333333,8153.039270679999 +60,3.0,14,2.0,-18.548490634000018,0,23.964400801200018,23,34.78260869565217,8145.150936599998 +60,3.0,7,1.5,-18.687832059999966,0,24.56607287799998,23,34.78260869565217,8131.216794000004 +20,2.0,20,2.0,-18.755776719200167,0,36.754694375722046,111,34.234234234234236,8124.422328079983 +20,2.0,7,1.5,-18.76811129560003,0,36.76428524551086,111,34.234234234234236,8123.188870439997 +40,3.0,10,2.0,-18.778119465200053,0,31.939114412916823,26,30.76923076923077,8122.188053479995 +60,3.0,10,3.0,-18.80225254360007,0,24.068237069600073,22,36.36363636363637,8119.774745639993 +20,2.0,7,2.0,-18.849133541999862,0,36.826858538287716,111,34.234234234234236,8115.086645800014 +20,2.0,10,2.0,-18.849133541999862,0,36.826858538287716,111,34.234234234234236,8115.086645800014 +20,2.0,14,2.0,-18.849133541999862,0,36.826858538287716,111,34.234234234234236,8115.086645800014 +40,3.0,14,1.5,-19.152420114799963,0,27.498151154499283,27,25.925925925925924,8084.757988520004 +40,3.0,20,3.0,-19.27468067799995,0,31.837190940229647,26,30.76923076923077,8072.531932200005 +40,3.0,10,1.0,-19.425514144800026,0,28.314910958737002,29,20.689655172413794,8057.448585519997 +40,3.0,14,1.0,-19.425514144800026,0,28.314910958737002,29,20.689655172413794,8057.448585519997 +80,3.0,10,2.0,-19.476746504400037,0,25.632724876800022,22,31.818181818181817,8052.3253495599965 +20,2.0,20,2.5,-19.491964197199824,0,37.32748660283093,111,34.234234234234236,8050.803580280018 +80,3.0,20,2.5,-19.616576262799974,0,26.05274761519998,22,31.818181818181817,8038.342373720003 +20,2.0,10,2.5,-19.85822133839982,0,37.61248738659188,111,34.234234234234236,8014.177866160018 +20,2.0,14,2.5,-19.85822133839982,0,37.61248738659188,111,34.234234234234236,8014.177866160018 +60,3.0,7,3.0,-20.10350863160006,0,25.285199406000064,22,36.36363636363637,7989.649136839994 +40,3.0,7,2.0,-20.277137252399964,0,33.195436667579386,26,30.76923076923077,7972.286274760004 +80,3.0,7,2.0,-20.29382529640002,0,26.387068958000008,22,31.818181818181817,7970.617470359998 +40,3.0,14,2.5,-20.44817313399995,0,33.33838047452436,26,30.76923076923077,7955.182686600005 +80,3.0,7,1.0,-20.45954905120004,0,26.639006780400052,24,25.0,7954.045094879996 +20,2.0,7,2.5,-20.466606183599843,0,38.08644983033606,111,34.234234234234236,7953.339381640016 +20,2.0,7,3.0,-20.574630944799946,0,38.17030770337493,111,34.234234234234236,7942.536905520005 +20,2.0,10,3.0,-20.574630944799946,0,38.17030770337493,111,34.234234234234236,7942.536905520005 +20,2.0,14,3.0,-20.574630944799946,0,38.17030770337493,111,34.234234234234236,7942.536905520005 +20,2.0,20,3.0,-20.574630944799946,0,38.17030770337493,111,34.234234234234236,7942.536905520005 +80,3.0,14,1.5,-20.804375085599986,0,26.956709875199998,23,26.08695652173913,7919.562491440001 +20,2.0,14,1.0,-20.821940085599792,0,35.49252566730634,117,30.76923076923077,7917.805991440021 +40,3.0,14,3.0,-21.15989785319991,0,33.429100955016565,26,30.76923076923077,7884.010214680009 +40,3.0,10,2.5,-21.2259707623999,0,33.99028738070747,26,30.76923076923077,7877.40292376001 +80,3.0,10,1.5,-21.352742367599994,0,27.46271919679998,23,26.08695652173913,7864.725763240001 +80,3.0,20,3.0,-21.404824357200095,0,27.144031084000115,22,31.818181818181817,7859.51756427999 +60,3.0,20,2.0,-21.465791441200064,0,26.68775656200003,23,30.434782608695656,7853.420855879994 +80,3.0,14,2.5,-21.83563826440001,0,27.56061362920002,22,31.818181818181817,7816.436173559999 +40,3.0,7,2.5,-22.121670502799997,0,34.241246675875765,26,30.76923076923077,7787.83294972 +80,3.0,7,1.5,-22.145980987200044,0,28.194019324800045,23,30.434782608695656,7785.401901279995 +40,3.0,10,3.0,-22.384052029199974,0,34.46257220332865,26,30.76923076923077,7761.5947970800025 +20,2.0,7,1.0,-22.423617954400097,0,36.277350452327326,117,30.76923076923077,7757.63820455999 +20,2.0,10,1.0,-22.423617954400097,0,36.277350452327326,117,30.76923076923077,7757.63820455999 +40,3.0,7,1.0,-22.82526222079995,0,31.339778107503918,29,20.689655172413794,7717.473777920005 +80,3.0,14,2.0,-22.9531637288,0,28.84278457599999,23,30.434782608695656,7704.68362712 +40,3.0,7,3.0,-22.96496214359997,0,34.95306131309168,26,30.76923076923077,7703.503785640003 +80,3.0,14,3.0,-23.240055022800007,0,28.84534162920002,22,31.818181818181817,7675.994497719999 +20,2.0,20,1.0,-23.41975114359985,0,37.60921621281021,118,29.66101694915254,7658.024885640015 +80,3.0,10,2.5,-23.486761002000012,0,29.09039422880003,22,31.818181818181817,7651.323899799999 +20,2.0,10,1.5,-24.358935373999884,0,38.274255042029104,114,32.45614035087719,7564.106462600012 +20,2.0,14,1.5,-24.62311980080006,0,38.489682000537904,114,32.45614035087719,7537.688019919994 +20,2.0,20,1.5,-25.177544249600025,0,38.942318630303056,114,32.45614035087719,7482.245575039998 +80,3.0,10,3.0,-25.50971446280001,0,30.949297862800023,22,31.818181818181817,7449.028553719999 +80,3.0,20,2.0,-25.96951219199993,0,31.391386067199946,23,26.08695652173913,7403.048780800007 diff --git a/data/symbol_dates.json b/data/symbol_dates.json new file mode 100644 index 0000000..6669d4f --- /dev/null +++ b/data/symbol_dates.json @@ -0,0 +1,61064 @@ +{ + "spot": { + "klines": { + "ETHBTC": { + "_default": "2020-01-01" + }, + "LTCBTC": { + "_default": "2020-01-01" + }, + "BNBBTC": { + "_default": "2020-01-01" + }, + "NEOBTC": { + "_default": "2020-01-01" + }, + "QTUMETH": { + "_default": "2020-01-01" + }, + "EOSETH": { + "_default": "2020-01-01" + }, + "SNTETH": { + "_default": "2020-01-01" + }, + "BNTETH": { + "_default": "2020-01-01" + }, + "BCCBTC": { + "_default": "2020-01-01" + }, + "GASBTC": { + "_default": "2020-01-01" + }, + "BNBETH": { + "_default": "2020-01-01" + }, + "BTCUSDT": { + "_default": "2020-01-01" + }, + "ETHUSDT": { + "_default": "2020-01-01" + }, + "HSRBTC": { + "_default": "2020-01-01" + }, + "OAXETH": { + "_default": "2020-01-01" + }, + "DNTETH": { + "_default": "2020-01-01" + }, + "MCOETH": { + "_default": "2020-01-01" + }, + "ICNETH": { + "_default": "2020-01-01" + }, + "MCOBTC": { + "_default": "2020-01-01" + }, + "WTCBTC": { + "_default": "2020-01-01" + }, + "WTCETH": { + "_default": "2020-01-01" + }, + "LRCBTC": { + "_default": "2020-01-01" + }, + "LRCETH": { + "_default": "2020-01-01" + }, + "QTUMBTC": { + "_default": "2020-01-01" + }, + "YOYOBTC": { + "_default": "2020-01-01" + }, + "OMGBTC": { + "_default": "2020-01-01" + }, + "OMGETH": { + "_default": "2020-01-01" + }, + "ZRXBTC": { + "_default": "2020-01-01" + }, + "ZRXETH": { + "_default": "2020-01-01" + }, + "STRATBTC": { + "_default": "2020-01-01" + }, + "STRATETH": { + "_default": "2020-01-01" + }, + "SNGLSBTC": { + "_default": "2020-01-01" + }, + "SNGLSETH": { + "_default": "2020-01-01" + }, + "BQXBTC": { + "_default": "2020-01-01" + }, + "BQXETH": { + "_default": "2020-01-01" + }, + "KNCBTC": { + "_default": "2020-01-01" + }, + "KNCETH": { + "_default": "2020-01-01" + }, + "FUNBTC": { + "_default": "2020-01-01" + }, + "FUNETH": { + "_default": "2020-01-01" + }, + "SNMBTC": { + "_default": "2020-01-01" + }, + "SNMETH": { + "_default": "2020-01-01" + }, + "NEOETH": { + "_default": "2020-01-01" + }, + "IOTABTC": { + "_default": "2020-01-01" + }, + "IOTAETH": { + "_default": "2020-01-01" + }, + "LINKBTC": { + "_default": "2020-01-01" + }, + "LINKETH": { + "_default": "2020-01-01" + }, + "XVGBTC": { + "_default": "2020-01-01" + }, + "XVGETH": { + "_default": "2020-01-01" + }, + "SALTBTC": { + "_default": "2020-01-01" + }, + "SALTETH": { + "_default": "2020-01-01" + }, + "MDABTC": { + "_default": "2020-01-01" + }, + "MDAETH": { + "_default": "2020-01-01" + }, + "MTLBTC": { + "_default": "2020-01-01" + }, + "MTLETH": { + "_default": "2020-01-01" + }, + "SUBBTC": { + "_default": "2020-01-01" + }, + "SUBETH": { + "_default": "2020-01-01" + }, + "EOSBTC": { + "_default": "2020-01-01" + }, + "SNTBTC": { + "_default": "2020-01-01" + }, + "ETCETH": { + "_default": "2020-01-01" + }, + "ETCBTC": { + "_default": "2020-01-01" + }, + "MTHBTC": { + "_default": "2020-01-01" + }, + "MTHETH": { + "_default": "2020-01-01" + }, + "ENGBTC": { + "_default": "2020-01-01" + }, + "ENGETH": { + "_default": "2020-01-01" + }, + "DNTBTC": { + "_default": "2020-01-01" + }, + "ZECBTC": { + "_default": "2020-01-01" + }, + "ZECETH": { + "_default": "2020-01-01" + }, + "BNTBTC": { + "_default": "2020-01-01" + }, + "ASTBTC": { + "_default": "2020-01-01" + }, + "ASTETH": { + "_default": "2020-01-01" + }, + "DASHBTC": { + "_default": "2020-01-01" + }, + "DASHETH": { + "_default": "2020-01-01" + }, + "OAXBTC": { + "_default": "2020-01-01" + }, + "ICNBTC": { + "_default": "2020-01-01" + }, + "BTGBTC": { + "_default": "2020-01-01" + }, + "BTGETH": { + "_default": "2020-01-01" + }, + "EVXBTC": { + "_default": "2020-01-01" + }, + "EVXETH": { + "_default": "2020-01-01" + }, + "REQBTC": { + "_default": "2020-01-01" + }, + "REQETH": { + "_default": "2020-01-01" + }, + "VIBBTC": { + "_default": "2020-01-01" + }, + "VIBETH": { + "_default": "2020-01-01" + }, + "HSRETH": { + "_default": "2020-01-01" + }, + "TRXBTC": { + "_default": "2020-01-01" + }, + "TRXETH": { + "_default": "2020-01-01" + }, + "POWRBTC": { + "_default": "2020-01-01" + }, + "POWRETH": { + "_default": "2020-01-01" + }, + "ARKBTC": { + "_default": "2020-01-01" + }, + "ARKETH": { + "_default": "2020-01-01" + }, + "YOYOETH": { + "_default": "2020-01-01" + }, + "XRPBTC": { + "_default": "2020-01-01" + }, + "XRPETH": { + "_default": "2020-01-01" + }, + "MODBTC": { + "_default": "2020-01-01" + }, + "MODETH": { + "_default": "2020-01-01" + }, + "ENJBTC": { + "_default": "2020-01-01" + }, + "ENJETH": { + "_default": "2020-01-01" + }, + "STORJBTC": { + "_default": "2020-01-01" + }, + "STORJETH": { + "_default": "2020-01-01" + }, + "BNBUSDT": { + "_default": "2020-01-01" + }, + "VENBNB": { + "_default": "2020-01-01" + }, + "YOYOBNB": { + "_default": "2020-01-01" + }, + "POWRBNB": { + "_default": "2020-01-01" + }, + "VENBTC": { + "_default": "2020-01-01" + }, + "VENETH": { + "_default": "2020-01-01" + }, + "KMDBTC": { + "_default": "2020-01-01" + }, + "KMDETH": { + "_default": "2020-01-01" + }, + "NULSBNB": { + "_default": "2020-01-01" + }, + "RCNBTC": { + "_default": "2020-01-01" + }, + "RCNETH": { + "_default": "2020-01-01" + }, + "RCNBNB": { + "_default": "2020-01-01" + }, + "NULSBTC": { + "_default": "2020-01-01" + }, + "NULSETH": { + "_default": "2020-01-01" + }, + "RDNBTC": { + "_default": "2020-01-01" + }, + "RDNETH": { + "_default": "2020-01-01" + }, + "RDNBNB": { + "_default": "2020-01-01" + }, + "XMRBTC": { + "_default": "2020-01-01" + }, + "XMRETH": { + "_default": "2020-01-01" + }, + "DLTBNB": { + "_default": "2020-01-01" + }, + "WTCBNB": { + "_default": "2020-01-01" + }, + "DLTBTC": { + "_default": "2020-01-01" + }, + "DLTETH": { + "_default": "2020-01-01" + }, + "AMBBTC": { + "_default": "2020-01-01" + }, + "AMBETH": { + "_default": "2020-01-01" + }, + "AMBBNB": { + "_default": "2020-01-01" + }, + "BCCETH": { + "_default": "2020-01-01" + }, + "BCCUSDT": { + "_default": "2020-01-01" + }, + "BCCBNB": { + "_default": "2020-01-01" + }, + "BATBTC": { + "_default": "2020-01-01" + }, + "BATETH": { + "_default": "2020-01-01" + }, + "BATBNB": { + "_default": "2020-01-01" + }, + "BCPTBTC": { + "_default": "2020-01-01" + }, + "BCPTETH": { + "_default": "2020-01-01" + }, + "BCPTBNB": { + "_default": "2020-01-01" + }, + "ARNBTC": { + "_default": "2020-01-01" + }, + "ARNETH": { + "_default": "2020-01-01" + }, + "GVTBTC": { + "_default": "2020-01-01" + }, + "GVTETH": { + "_default": "2020-01-01" + }, + "CDTBTC": { + "_default": "2020-01-01" + }, + "CDTETH": { + "_default": "2020-01-01" + }, + "GXSBTC": { + "_default": "2020-01-01" + }, + "GXSETH": { + "_default": "2020-01-01" + }, + "NEOUSDT": { + "_default": "2020-01-01" + }, + "NEOBNB": { + "_default": "2020-01-01" + }, + "POEBTC": { + "_default": "2020-01-01" + }, + "POEETH": { + "_default": "2020-01-01" + }, + "QSPBTC": { + "_default": "2020-01-01" + }, + "QSPETH": { + "_default": "2020-01-01" + }, + "QSPBNB": { + "_default": "2020-01-01" + }, + "BTSBTC": { + "_default": "2020-01-01" + }, + "BTSETH": { + "_default": "2020-01-01" + }, + "BTSBNB": { + "_default": "2020-01-01" + }, + "XZCBTC": { + "_default": "2020-01-01" + }, + "XZCETH": { + "_default": "2020-01-01" + }, + "XZCBNB": { + "_default": "2020-01-01" + }, + "LSKBTC": { + "_default": "2020-01-01" + }, + "LSKETH": { + "_default": "2020-01-01" + }, + "LSKBNB": { + "_default": "2020-01-01" + }, + "TNTBTC": { + "_default": "2020-01-01" + }, + "TNTETH": { + "_default": "2020-01-01" + }, + "FUELBTC": { + "_default": "2020-01-01" + }, + "FUELETH": { + "_default": "2020-01-01" + }, + "MANABTC": { + "_default": "2020-01-01" + }, + "MANAETH": { + "_default": "2020-01-01" + }, + "BCDBTC": { + "_default": "2020-01-01" + }, + "BCDETH": { + "_default": "2020-01-01" + }, + "DGDBTC": { + "_default": "2020-01-01" + }, + "DGDETH": { + "_default": "2020-01-01" + }, + "IOTABNB": { + "_default": "2020-01-01" + }, + "ADXBTC": { + "_default": "2020-01-01" + }, + "ADXETH": { + "_default": "2020-01-01" + }, + "ADXBNB": { + "_default": "2020-01-01" + }, + "ADABTC": { + "_default": "2020-01-01" + }, + "ADAETH": { + "_default": "2020-01-01" + }, + "PPTBTC": { + "_default": "2020-01-01" + }, + "PPTETH": { + "_default": "2020-01-01" + }, + "CMTBTC": { + "_default": "2020-01-01" + }, + "CMTETH": { + "_default": "2020-01-01" + }, + "CMTBNB": { + "_default": "2020-01-01" + }, + "XLMBTC": { + "_default": "2020-01-01" + }, + "XLMETH": { + "_default": "2020-01-01" + }, + "XLMBNB": { + "_default": "2020-01-01" + }, + "CNDBTC": { + "_default": "2020-01-01" + }, + "CNDETH": { + "_default": "2020-01-01" + }, + "CNDBNB": { + "_default": "2020-01-01" + }, + "LENDBTC": { + "_default": "2020-01-01" + }, + "LENDETH": { + "_default": "2020-01-01" + }, + "WABIBTC": { + "_default": "2020-01-01" + }, + "WABIETH": { + "_default": "2020-01-01" + }, + "WABIBNB": { + "_default": "2020-01-01" + }, + "LTCETH": { + "_default": "2020-01-01" + }, + "LTCUSDT": { + "_default": "2020-01-01" + }, + "LTCBNB": { + "_default": "2020-01-01" + }, + "TNBBTC": { + "_default": "2020-01-01" + }, + "TNBETH": { + "_default": "2020-01-01" + }, + "WAVESBTC": { + "_default": "2020-01-01" + }, + "WAVESETH": { + "_default": "2020-01-01" + }, + "WAVESBNB": { + "_default": "2020-01-01" + }, + "GTOBTC": { + "_default": "2020-01-01" + }, + "GTOETH": { + "_default": "2020-01-01" + }, + "GTOBNB": { + "_default": "2020-01-01" + }, + "ICXBTC": { + "_default": "2020-01-01" + }, + "ICXETH": { + "_default": "2020-01-01" + }, + "ICXBNB": { + "_default": "2020-01-01" + }, + "OSTBTC": { + "_default": "2020-01-01" + }, + "OSTETH": { + "_default": "2020-01-01" + }, + "OSTBNB": { + "_default": "2020-01-01" + }, + "ELFBTC": { + "_default": "2020-01-01" + }, + "ELFETH": { + "_default": "2020-01-01" + }, + "AIONBTC": { + "_default": "2020-01-01" + }, + "AIONETH": { + "_default": "2020-01-01" + }, + "AIONBNB": { + "_default": "2020-01-01" + }, + "NEBLBTC": { + "_default": "2020-01-01" + }, + "NEBLBNB": { + "_default": "2020-01-01" + }, + "BRDBTC": { + "_default": "2020-01-01" + }, + "BRDETH": { + "_default": "2020-01-01" + }, + "BRDBNB": { + "_default": "2020-01-01" + }, + "MCOBNB": { + "_default": "2020-01-01" + }, + "EDOBTC": { + "_default": "2020-01-01" + }, + "EDOETH": { + "_default": "2020-01-01" + }, + "WINGSBTC": { + "_default": "2020-01-01" + }, + "WINGSETH": { + "_default": "2020-01-01" + }, + "NAVBTC": { + "_default": "2020-01-01" + }, + "NAVETH": { + "_default": "2020-01-01" + }, + "NAVBNB": { + "_default": "2020-01-01" + }, + "LUNBTC": { + "_default": "2020-01-01" + }, + "LUNETH": { + "_default": "2020-01-01" + }, + "TRIGBTC": { + "_default": "2020-01-01" + }, + "TRIGETH": { + "_default": "2020-01-01" + }, + "TRIGBNB": { + "_default": "2020-01-01" + }, + "APPCBTC": { + "_default": "2020-01-01" + }, + "APPCETH": { + "_default": "2020-01-01" + }, + "APPCBNB": { + "_default": "2020-01-01" + }, + "VIBEBTC": { + "_default": "2020-01-01" + }, + "VIBEETH": { + "_default": "2020-01-01" + }, + "RLCBTC": { + "_default": "2020-01-01" + }, + "RLCETH": { + "_default": "2020-01-01" + }, + "RLCBNB": { + "_default": "2020-01-01" + }, + "INSBTC": { + "_default": "2020-01-01" + }, + "INSETH": { + "_default": "2020-01-01" + }, + "PIVXBTC": { + "_default": "2020-01-01" + }, + "PIVXBNB": { + "_default": "2020-01-01" + }, + "IOSTBTC": { + "_default": "2020-01-01" + }, + "IOSTETH": { + "_default": "2020-01-01" + }, + "CHATBTC": { + "_default": "2020-01-01" + }, + "CHATETH": { + "_default": "2020-01-01" + }, + "STEEMBTC": { + "_default": "2020-01-01" + }, + "STEEMETH": { + "_default": "2020-01-01" + }, + "STEEMBNB": { + "_default": "2020-01-01" + }, + "NANOBTC": { + "_default": "2020-01-01" + }, + "NANOETH": { + "_default": "2020-01-01" + }, + "NANOBNB": { + "_default": "2020-01-01" + }, + "VIABTC": { + "_default": "2020-01-01" + }, + "VIAETH": { + "_default": "2020-01-01" + }, + "VIABNB": { + "_default": "2020-01-01" + }, + "BLZBTC": { + "_default": "2020-01-01" + }, + "BLZETH": { + "_default": "2020-01-01" + }, + "BLZBNB": { + "_default": "2020-01-01" + }, + "AEBTC": { + "_default": "2020-01-01" + }, + "AEETH": { + "_default": "2020-01-01" + }, + "AEBNB": { + "_default": "2020-01-01" + }, + "RPXBTC": { + "_default": "2020-01-01" + }, + "RPXETH": { + "_default": "2020-01-01" + }, + "RPXBNB": { + "_default": "2020-01-01" + }, + "NCASHBTC": { + "_default": "2020-01-01" + }, + "NCASHETH": { + "_default": "2020-01-01" + }, + "NCASHBNB": { + "_default": "2020-01-01" + }, + "POABTC": { + "_default": "2020-01-01" + }, + "POAETH": { + "_default": "2020-01-01" + }, + "POABNB": { + "_default": "2020-01-01" + }, + "ZILBTC": { + "_default": "2020-01-01" + }, + "ZILETH": { + "_default": "2020-01-01" + }, + "ZILBNB": { + "_default": "2020-01-01" + }, + "ONTBTC": { + "_default": "2020-01-01" + }, + "ONTETH": { + "_default": "2020-01-01" + }, + "ONTBNB": { + "_default": "2020-01-01" + }, + "STORMBTC": { + "_default": "2020-01-01" + }, + "STORMETH": { + "_default": "2020-01-01" + }, + "STORMBNB": { + "_default": "2020-01-01" + }, + "QTUMBNB": { + "_default": "2020-01-01" + }, + "QTUMUSDT": { + "_default": "2020-01-01" + }, + "XEMBTC": { + "_default": "2020-01-01" + }, + "XEMETH": { + "_default": "2020-01-01" + }, + "XEMBNB": { + "_default": "2020-01-01" + }, + "WANBTC": { + "_default": "2020-01-01" + }, + "WANETH": { + "_default": "2020-01-01" + }, + "WANBNB": { + "_default": "2020-01-01" + }, + "WPRBTC": { + "_default": "2020-01-01" + }, + "WPRETH": { + "_default": "2020-01-01" + }, + "QLCBTC": { + "_default": "2020-01-01" + }, + "QLCETH": { + "_default": "2020-01-01" + }, + "SYSBTC": { + "_default": "2020-01-01" + }, + "SYSETH": { + "_default": "2020-01-01" + }, + "SYSBNB": { + "_default": "2020-01-01" + }, + "QLCBNB": { + "_default": "2020-01-01" + }, + "GRSBTC": { + "_default": "2020-01-01" + }, + "GRSETH": { + "_default": "2020-01-01" + }, + "ADAUSDT": { + "_default": "2020-01-01" + }, + "ADABNB": { + "_default": "2020-01-01" + }, + "CLOAKBTC": { + "_default": "2020-01-01" + }, + "CLOAKETH": { + "_default": "2020-01-01" + }, + "GNTBTC": { + "_default": "2020-01-01" + }, + "GNTETH": { + "_default": "2020-01-01" + }, + "GNTBNB": { + "_default": "2020-01-01" + }, + "LOOMBTC": { + "_default": "2020-01-01" + }, + "LOOMETH": { + "_default": "2020-01-01" + }, + "LOOMBNB": { + "_default": "2020-01-01" + }, + "XRPUSDT": { + "_default": "2020-01-01" + }, + "BCNBTC": { + "_default": "2020-01-01" + }, + "BCNETH": { + "_default": "2020-01-01" + }, + "BCNBNB": { + "_default": "2020-01-01" + }, + "REPBTC": { + "_default": "2020-01-01" + }, + "REPBNB": { + "_default": "2020-01-01" + }, + "BTCTUSD": { + "_default": "2020-01-01" + }, + "TUSDBTC": { + "_default": "2020-01-01" + }, + "ETHTUSD": { + "_default": "2020-01-01" + }, + "TUSDETH": { + "_default": "2020-01-01" + }, + "TUSDBNB": { + "_default": "2020-01-01" + }, + "ZENBTC": { + "_default": "2020-01-01" + }, + "ZENETH": { + "_default": "2020-01-01" + }, + "ZENBNB": { + "_default": "2020-01-01" + }, + "SKYCOINBTC": { + "_default": "2020-01-01" + }, + "SKYCOINETH": { + "_default": "2020-01-01" + }, + "SKYCOINBNB": { + "_default": "2020-01-01" + }, + "EOSUSDT": { + "_default": "2020-01-01" + }, + "EOSBNB": { + "_default": "2020-01-01" + }, + "CVCBTC": { + "_default": "2020-01-01" + }, + "CVCETH": { + "_default": "2020-01-01" + }, + "CVCBNB": { + "_default": "2020-01-01" + }, + "THETABTC": { + "_default": "2020-01-01" + }, + "THETAETH": { + "_default": "2020-01-01" + }, + "THETABNB": { + "_default": "2020-01-01" + }, + "XRPBNB": { + "_default": "2020-01-01" + }, + "TUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDT": { + "_default": "2020-01-01" + }, + "XLMUSDT": { + "_default": "2020-01-01" + }, + "IOTXBTC": { + "_default": "2020-01-01" + }, + "IOTXETH": { + "_default": "2020-01-01" + }, + "QKCBTC": { + "_default": "2020-01-01" + }, + "QKCETH": { + "_default": "2020-01-01" + }, + "AGIBTC": { + "_default": "2020-01-01" + }, + "AGIETH": { + "_default": "2020-01-01" + }, + "AGIBNB": { + "_default": "2020-01-01" + }, + "NXSBTC": { + "_default": "2020-01-01" + }, + "NXSETH": { + "_default": "2020-01-01" + }, + "NXSBNB": { + "_default": "2020-01-01" + }, + "ENJBNB": { + "_default": "2020-01-01" + }, + "DATABTC": { + "_default": "2020-01-01" + }, + "DATAETH": { + "_default": "2020-01-01" + }, + "ONTUSDT": { + "_default": "2020-01-01" + }, + "TRXBNB": { + "_default": "2020-01-01" + }, + "TRXUSDT": { + "_default": "2020-01-01" + }, + "ETCUSDT": { + "_default": "2020-01-01" + }, + "ETCBNB": { + "_default": "2020-01-01" + }, + "ICXUSDT": { + "_default": "2020-01-01" + }, + "SCBTC": { + "_default": "2020-01-01" + }, + "SCETH": { + "_default": "2020-01-01" + }, + "NPXSBTC": { + "_default": "2020-01-01" + }, + "NPXSETH": { + "_default": "2020-01-01" + }, + "VENUSDT": { + "_default": "2020-01-01" + }, + "KEYBTC": { + "_default": "2020-01-01" + }, + "KEYETH": { + "_default": "2020-01-01" + }, + "NASBTC": { + "_default": "2020-01-01" + }, + "NASETH": { + "_default": "2020-01-01" + }, + "NASBNB": { + "_default": "2020-01-01" + }, + "MFTBTC": { + "_default": "2020-01-01" + }, + "MFTETH": { + "_default": "2020-01-01" + }, + "MFTBNB": { + "_default": "2020-01-01" + }, + "DENTBTC": { + "_default": "2020-01-01" + }, + "DENTETH": { + "_default": "2020-01-01" + }, + "ARDRBTC": { + "_default": "2020-01-01" + }, + "ARDRETH": { + "_default": "2020-01-01" + }, + "ARDRBNB": { + "_default": "2020-01-01" + }, + "NULSUSDT": { + "_default": "2020-01-01" + }, + "HOTBTC": { + "_default": "2020-01-01" + }, + "HOTETH": { + "_default": "2020-01-01" + }, + "VETBTC": { + "_default": "2020-01-01" + }, + "VETETH": { + "_default": "2020-01-01" + }, + "VETUSDT": { + "_default": "2020-01-01" + }, + "VETBNB": { + "_default": "2020-01-01" + }, + "DOCKBTC": { + "_default": "2020-01-01" + }, + "DOCKETH": { + "_default": "2020-01-01" + }, + "POLYBTC": { + "_default": "2020-01-01" + }, + "POLYBNB": { + "_default": "2020-01-01" + }, + "PHXBTC": { + "_default": "2020-01-01" + }, + "PHXETH": { + "_default": "2020-01-01" + }, + "PHXBNB": { + "_default": "2020-01-01" + }, + "HCBTC": { + "_default": "2020-01-01" + }, + "HCETH": { + "_default": "2020-01-01" + }, + "GOBTC": { + "_default": "2020-01-01" + }, + "GOBNB": { + "_default": "2020-01-01" + }, + "PAXBTC": { + "_default": "2020-01-01" + }, + "PAXBNB": { + "_default": "2020-01-01" + }, + "PAXUSDT": { + "_default": "2020-01-01" + }, + "PAXETH": { + "_default": "2020-01-01" + }, + "RVNBTC": { + "_default": "2020-01-01" + }, + "DCRBTC": { + "_default": "2020-01-01" + }, + "DCRBNB": { + "_default": "2020-01-01" + }, + "USDCBNB": { + "_default": "2020-01-01" + }, + "MITHBTC": { + "_default": "2020-01-01" + }, + "MITHBNB": { + "_default": "2020-01-01" + }, + "BCHABCBTC": { + "_default": "2020-01-01" + }, + "BCHSVBTC": { + "_default": "2020-01-01" + }, + "BCHABCUSDT": { + "_default": "2020-01-01" + }, + "BCHSVUSDT": { + "_default": "2020-01-01" + }, + "BNBPAX": { + "_default": "2020-01-01" + }, + "BTCPAX": { + "_default": "2020-01-01" + }, + "ETHPAX": { + "_default": "2020-01-01" + }, + "XRPPAX": { + "_default": "2020-01-01" + }, + "EOSPAX": { + "_default": "2020-01-01" + }, + "XLMPAX": { + "_default": "2020-01-01" + }, + "RENBTC": { + "_default": "2020-01-01" + }, + "RENBNB": { + "_default": "2020-01-01" + }, + "BNBTUSD": { + "_default": "2020-01-01" + }, + "XRPTUSD": { + "_default": "2020-01-01" + }, + "EOSTUSD": { + "_default": "2020-01-01" + }, + "XLMTUSD": { + "_default": "2020-01-01" + }, + "BNBUSDC": { + "_default": "2020-01-01" + }, + "BTCUSDC": { + "_default": "2020-01-01" + }, + "ETHUSDC": { + "_default": "2020-01-01" + }, + "XRPUSDC": { + "_default": "2020-01-01" + }, + "EOSUSDC": { + "_default": "2020-01-01" + }, + "XLMUSDC": { + "_default": "2020-01-01" + }, + "USDCUSDT": { + "_default": "2020-01-01" + }, + "ADATUSD": { + "_default": "2020-01-01" + }, + "TRXTUSD": { + "_default": "2020-01-01" + }, + "NEOTUSD": { + "_default": "2020-01-01" + }, + "TRXXRP": { + "_default": "2020-01-01" + }, + "XZCXRP": { + "_default": "2020-01-01" + }, + "PAXTUSD": { + "_default": "2020-01-01" + }, + "USDCTUSD": { + "_default": "2020-01-01" + }, + "USDCPAX": { + "_default": "2020-01-01" + }, + "LINKUSDT": { + "_default": "2020-01-01" + }, + "LINKTUSD": { + "_default": "2020-01-01" + }, + "LINKPAX": { + "_default": "2020-01-01" + }, + "LINKUSDC": { + "_default": "2020-01-01" + }, + "WAVESUSDT": { + "_default": "2020-01-01" + }, + "WAVESTUSD": { + "_default": "2020-01-01" + }, + "WAVESPAX": { + "_default": "2020-01-01" + }, + "WAVESUSDC": { + "_default": "2020-01-01" + }, + "BCHABCTUSD": { + "_default": "2020-01-01" + }, + "BCHABCPAX": { + "_default": "2020-01-01" + }, + "BCHABCUSDC": { + "_default": "2020-01-01" + }, + "BCHSVTUSD": { + "_default": "2020-01-01" + }, + "BCHSVPAX": { + "_default": "2020-01-01" + }, + "BCHSVUSDC": { + "_default": "2020-01-01" + }, + "LTCTUSD": { + "_default": "2020-01-01" + }, + "LTCPAX": { + "_default": "2020-01-01" + }, + "LTCUSDC": { + "_default": "2020-01-01" + }, + "TRXPAX": { + "_default": "2020-01-01" + }, + "TRXUSDC": { + "_default": "2020-01-01" + }, + "BTTBTC": { + "_default": "2020-01-01" + }, + "BTTBNB": { + "_default": "2020-01-01" + }, + "BTTUSDT": { + "_default": "2020-01-01" + }, + "BNBUSDS": { + "_default": "2020-01-01" + }, + "BTCUSDS": { + "_default": "2020-01-01" + }, + "USDSUSDT": { + "_default": "2020-01-01" + }, + "USDSPAX": { + "_default": "2020-01-01" + }, + "USDSTUSD": { + "_default": "2020-01-01" + }, + "USDSUSDC": { + "_default": "2020-01-01" + }, + "BTTPAX": { + "_default": "2020-01-01" + }, + "BTTTUSD": { + "_default": "2020-01-01" + }, + "BTTUSDC": { + "_default": "2020-01-01" + }, + "ONGBNB": { + "_default": "2020-01-01" + }, + "ONGBTC": { + "_default": "2020-01-01" + }, + "ONGUSDT": { + "_default": "2020-01-01" + }, + "HOTBNB": { + "_default": "2020-01-01" + }, + "HOTUSDT": { + "_default": "2020-01-01" + }, + "ZILUSDT": { + "_default": "2020-01-01" + }, + "ZRXBNB": { + "_default": "2020-01-01" + }, + "ZRXUSDT": { + "_default": "2020-01-01" + }, + "FETBNB": { + "_default": "2020-01-01" + }, + "FETBTC": { + "_default": "2020-01-01" + }, + "FETUSDT": { + "_default": "2020-01-01" + }, + "BATUSDT": { + "_default": "2020-01-01" + }, + "XMRBNB": { + "_default": "2020-01-01" + }, + "XMRUSDT": { + "_default": "2020-01-01" + }, + "ZECBNB": { + "_default": "2020-01-01" + }, + "ZECUSDT": { + "_default": "2020-01-01" + }, + "ZECPAX": { + "_default": "2020-01-01" + }, + "ZECTUSD": { + "_default": "2020-01-01" + }, + "ZECUSDC": { + "_default": "2020-01-01" + }, + "IOSTUSDT": { + "_default": "2020-01-01" + }, + "CELRBNB": { + "_default": "2020-01-01" + }, + "CELRBTC": { + "_default": "2020-01-01" + }, + "CELRUSDT": { + "_default": "2020-01-01" + }, + "ADAPAX": { + "_default": "2020-01-01" + }, + "ADAUSDC": { + "_default": "2020-01-01" + }, + "NEOPAX": { + "_default": "2020-01-01" + }, + "NEOUSDC": { + "_default": "2020-01-01" + }, + "DASHBNB": { + "_default": "2020-01-01" + }, + "DASHUSDT": { + "_default": "2020-01-01" + }, + "NANOUSDT": { + "_default": "2020-01-01" + }, + "OMGBNB": { + "_default": "2020-01-01" + }, + "OMGUSDT": { + "_default": "2020-01-01" + }, + "THETAUSDT": { + "_default": "2020-01-01" + }, + "ENJUSDT": { + "_default": "2020-01-01" + }, + "MITHUSDT": { + "_default": "2020-01-01" + }, + "MATICBNB": { + "_default": "2020-01-01" + }, + "MATICBTC": { + "_default": "2020-01-01" + }, + "MATICUSDT": { + "_default": "2020-01-01" + }, + "ATOMBNB": { + "_default": "2020-01-01" + }, + "ATOMBTC": { + "_default": "2020-01-01" + }, + "ATOMUSDT": { + "_default": "2020-01-01" + }, + "ATOMUSDC": { + "_default": "2020-01-01" + }, + "ATOMPAX": { + "_default": "2020-01-01" + }, + "ATOMTUSD": { + "_default": "2020-01-01" + }, + "ETCUSDC": { + "_default": "2020-01-01" + }, + "ETCPAX": { + "_default": "2020-01-01" + }, + "ETCTUSD": { + "_default": "2020-01-01" + }, + "BATUSDC": { + "_default": "2020-01-01" + }, + "BATPAX": { + "_default": "2020-01-01" + }, + "BATTUSD": { + "_default": "2020-01-01" + }, + "PHBBNB": { + "_default": "2020-01-01" + }, + "PHBBTC": { + "_default": "2020-01-01" + }, + "PHBUSDC": { + "_default": "2020-01-01" + }, + "PHBTUSD": { + "_default": "2020-01-01" + }, + "PHBPAX": { + "_default": "2020-01-01" + }, + "TFUELBNB": { + "_default": "2020-01-01" + }, + "TFUELBTC": { + "_default": "2020-01-01" + }, + "TFUELUSDT": { + "_default": "2020-01-01" + }, + "TFUELUSDC": { + "_default": "2020-01-01" + }, + "TFUELTUSD": { + "_default": "2020-01-01" + }, + "TFUELPAX": { + "_default": "2020-01-01" + }, + "ONEBNB": { + "_default": "2020-01-01" + }, + "ONEBTC": { + "_default": "2020-01-01" + }, + "ONEUSDT": { + "_default": "2020-01-01" + }, + "ONETUSD": { + "_default": "2020-01-01" + }, + "ONEPAX": { + "_default": "2020-01-01" + }, + "ONEUSDC": { + "_default": "2020-01-01" + }, + "FTMBNB": { + "_default": "2020-01-01" + }, + "FTMBTC": { + "_default": "2020-01-01" + }, + "FTMUSDT": { + "_default": "2020-01-01" + }, + "FTMTUSD": { + "_default": "2020-01-01" + }, + "FTMPAX": { + "_default": "2020-01-01" + }, + "FTMUSDC": { + "_default": "2020-01-01" + }, + "BTCBBTC": { + "_default": "2020-01-01" + }, + "BCPTTUSD": { + "_default": "2020-01-01" + }, + "BCPTPAX": { + "_default": "2020-01-01" + }, + "BCPTUSDC": { + "_default": "2020-01-01" + }, + "ALGOBNB": { + "_default": "2020-01-01" + }, + "ALGOBTC": { + "_default": "2020-01-01" + }, + "ALGOUSDT": { + "_default": "2020-01-01" + }, + "ALGOTUSD": { + "_default": "2020-01-01" + }, + "ALGOPAX": { + "_default": "2020-01-01" + }, + "ALGOUSDC": { + "_default": "2020-01-01" + }, + "USDSBUSDT": { + "_default": "2020-01-01" + }, + "USDSBUSDS": { + "_default": "2020-01-01" + }, + "GTOUSDT": { + "_default": "2020-01-01" + }, + "GTOPAX": { + "_default": "2020-01-01" + }, + "GTOTUSD": { + "_default": "2020-01-01" + }, + "GTOUSDC": { + "_default": "2020-01-01" + }, + "ERDBNB": { + "_default": "2020-01-01" + }, + "ERDBTC": { + "_default": "2020-01-01" + }, + "ERDUSDT": { + "_default": "2020-01-01" + }, + "ERDPAX": { + "_default": "2020-01-01" + }, + "ERDUSDC": { + "_default": "2020-01-01" + }, + "DOGEBNB": { + "_default": "2020-01-01" + }, + "DOGEBTC": { + "_default": "2020-01-01" + }, + "DOGEUSDT": { + "_default": "2020-01-01" + }, + "DOGEPAX": { + "_default": "2020-01-01" + }, + "DOGEUSDC": { + "_default": "2020-01-01" + }, + "DUSKBNB": { + "_default": "2020-01-01" + }, + "DUSKBTC": { + "_default": "2020-01-01" + }, + "DUSKUSDT": { + "_default": "2020-01-01" + }, + "DUSKUSDC": { + "_default": "2020-01-01" + }, + "DUSKPAX": { + "_default": "2020-01-01" + }, + "BGBPUSDC": { + "_default": "2020-01-01" + }, + "ANKRBNB": { + "_default": "2020-01-01" + }, + "ANKRBTC": { + "_default": "2020-01-01" + }, + "ANKRUSDT": { + "_default": "2020-01-01" + }, + "ANKRTUSD": { + "_default": "2020-01-01" + }, + "ANKRPAX": { + "_default": "2020-01-01" + }, + "ANKRUSDC": { + "_default": "2020-01-01" + }, + "ONTPAX": { + "_default": "2020-01-01" + }, + "ONTUSDC": { + "_default": "2020-01-01" + }, + "WINBNB": { + "_default": "2020-01-01" + }, + "WINBTC": { + "_default": "2020-01-01" + }, + "WINUSDT": { + "_default": "2020-01-01" + }, + "WINUSDC": { + "_default": "2020-01-01" + }, + "COSBNB": { + "_default": "2020-01-01" + }, + "COSBTC": { + "_default": "2020-01-01" + }, + "COSUSDT": { + "_default": "2020-01-01" + }, + "TUSDBTUSD": { + "_default": "2020-01-01" + }, + "NPXSUSDT": { + "_default": "2020-01-01" + }, + "NPXSUSDC": { + "_default": "2020-01-01" + }, + "COCOSBNB": { + "_default": "2020-01-01" + }, + "COCOSBTC": { + "_default": "2020-01-01" + }, + "COCOSUSDT": { + "_default": "2020-01-01" + }, + "MTLUSDT": { + "_default": "2020-01-01" + }, + "TOMOBNB": { + "_default": "2020-01-01" + }, + "TOMOBTC": { + "_default": "2020-01-01" + }, + "TOMOUSDT": { + "_default": "2020-01-01" + }, + "TOMOUSDC": { + "_default": "2020-01-01" + }, + "PERLBNB": { + "_default": "2020-01-01" + }, + "PERLBTC": { + "_default": "2020-01-01" + }, + "PERLUSDC": { + "_default": "2020-01-01" + }, + "PERLUSDT": { + "_default": "2020-01-01" + }, + "DENTUSDT": { + "_default": "2020-01-01" + }, + "MFTUSDT": { + "_default": "2020-01-01" + }, + "KEYUSDT": { + "_default": "2020-01-01" + }, + "STORMUSDT": { + "_default": "2020-01-01" + }, + "DOCKUSDT": { + "_default": "2020-01-01" + }, + "WANUSDT": { + "_default": "2020-01-01" + }, + "FUNUSDT": { + "_default": "2020-01-01" + }, + "CVCUSDT": { + "_default": "2020-01-01" + }, + "BTTTRX": { + "_default": "2020-01-01" + }, + "WINTRX": { + "_default": "2020-01-01" + }, + "CHZBNB": { + "_default": "2020-01-01" + }, + "CHZBTC": { + "_default": "2020-01-01" + }, + "CHZUSDT": { + "_default": "2020-01-01" + }, + "BANDBNB": { + "_default": "2020-01-01" + }, + "BANDBTC": { + "_default": "2020-01-01" + }, + "BANDUSDT": { + "_default": "2020-01-01" + }, + "BNBBUSD": { + "_default": "2020-01-01" + }, + "BTCBUSD": { + "_default": "2020-01-01" + }, + "BUSDUSDT": { + "_default": "2020-01-01" + }, + "BEAMBNB": { + "_default": "2020-01-01" + }, + "BEAMBTC": { + "_default": "2020-01-01" + }, + "BEAMUSDT": { + "_default": "2020-01-01" + }, + "XTZBNB": { + "_default": "2020-01-01" + }, + "XTZBTC": { + "_default": "2020-01-01" + }, + "XTZUSDT": { + "_default": "2020-01-01" + }, + "RENUSDT": { + "_default": "2020-01-01" + }, + "RVNUSDT": { + "_default": "2020-01-01" + }, + "HCUSDT": { + "_default": "2020-01-01" + }, + "HBARBNB": { + "_default": "2020-01-01" + }, + "HBARBTC": { + "_default": "2020-01-01" + }, + "HBARUSDT": { + "_default": "2020-01-01" + }, + "NKNBNB": { + "_default": "2020-01-01" + }, + "NKNBTC": { + "_default": "2020-01-01" + }, + "NKNUSDT": { + "_default": "2020-01-01" + }, + "XRPBUSD": { + "_default": "2020-01-01" + }, + "ETHBUSD": { + "_default": "2020-01-01" + }, + "BCHABCBUSD": { + "_default": "2020-01-01" + }, + "LTCBUSD": { + "_default": "2020-01-01" + }, + "LINKBUSD": { + "_default": "2020-01-01" + }, + "ETCBUSD": { + "_default": "2020-01-01" + }, + "STXBNB": { + "_default": "2020-01-01" + }, + "STXBTC": { + "_default": "2020-01-01" + }, + "STXUSDT": { + "_default": "2020-01-01" + }, + "KAVABNB": { + "_default": "2020-01-01" + }, + "KAVABTC": { + "_default": "2020-01-01" + }, + "KAVAUSDT": { + "_default": "2020-01-01" + }, + "BUSDNGN": { + "_default": "2020-01-01" + }, + "BNBNGN": { + "_default": "2020-01-01" + }, + "BTCNGN": { + "_default": "2020-01-01" + }, + "ARPABNB": { + "_default": "2020-01-01" + }, + "ARPABTC": { + "_default": "2020-01-01" + }, + "ARPAUSDT": { + "_default": "2020-01-01" + }, + "TRXBUSD": { + "_default": "2020-01-01" + }, + "EOSBUSD": { + "_default": "2020-01-01" + }, + "IOTXUSDT": { + "_default": "2020-01-01" + }, + "RLCUSDT": { + "_default": "2020-01-01" + }, + "MCOUSDT": { + "_default": "2020-01-01" + }, + "XLMBUSD": { + "_default": "2020-01-01" + }, + "ADABUSD": { + "_default": "2020-01-01" + }, + "CTXCBNB": { + "_default": "2020-01-01" + }, + "CTXCBTC": { + "_default": "2020-01-01" + }, + "CTXCUSDT": { + "_default": "2020-01-01" + }, + "BCHBNB": { + "_default": "2020-01-01" + }, + "BCHBTC": { + "_default": "2020-01-01" + }, + "BCHUSDT": { + "_default": "2020-01-01" + }, + "BCHUSDC": { + "_default": "2020-01-01" + }, + "BCHTUSD": { + "_default": "2020-01-01" + }, + "BCHPAX": { + "_default": "2020-01-01" + }, + "BCHBUSD": { + "_default": "2020-01-01" + }, + "BTCRUB": { + "_default": "2020-01-01" + }, + "ETHRUB": { + "_default": "2020-01-01" + }, + "XRPRUB": { + "_default": "2020-01-01" + }, + "BNBRUB": { + "_default": "2020-01-01" + }, + "TROYBNB": { + "_default": "2020-01-01" + }, + "TROYBTC": { + "_default": "2020-01-01" + }, + "TROYUSDT": { + "_default": "2020-01-01" + }, + "BUSDRUB": { + "_default": "2020-01-01" + }, + "QTUMBUSD": { + "_default": "2020-01-01" + }, + "VETBUSD": { + "_default": "2020-01-01" + }, + "VITEBNB": { + "_default": "2020-01-01" + }, + "VITEBTC": { + "_default": "2020-01-01" + }, + "VITEUSDT": { + "_default": "2020-01-01" + }, + "FTTBNB": { + "_default": "2020-01-01" + }, + "FTTBTC": { + "_default": "2020-01-01" + }, + "FTTUSDT": { + "_default": "2020-01-01" + }, + "BTCTRY": { + "_default": "2020-01-01" + }, + "BNBTRY": { + "_default": "2020-01-01" + }, + "BUSDTRY": { + "_default": "2020-01-01" + }, + "ETHTRY": { + "_default": "2020-01-01" + }, + "XRPTRY": { + "_default": "2020-01-01" + }, + "USDTTRY": { + "_default": "2020-01-01" + }, + "USDTRUB": { + "_default": "2020-01-01" + }, + "BTCEUR": { + "_default": "2020-01-01" + }, + "ETHEUR": { + "_default": "2020-01-01" + }, + "BNBEUR": { + "_default": "2020-01-01" + }, + "XRPEUR": { + "_default": "2020-01-01" + }, + "EURBUSD": { + "_default": "2020-01-01" + }, + "EURUSDT": { + "_default": "2020-01-01" + }, + "OGNBNB": { + "_default": "2020-01-01" + }, + "OGNBTC": { + "_default": "2020-01-01" + }, + "OGNUSDT": { + "_default": "2020-01-01" + }, + "DREPBNB": { + "_default": "2020-01-01" + }, + "DREPBTC": { + "_default": "2020-01-01" + }, + "DREPUSDT": { + "_default": "2020-01-01" + }, + "BULLUSDT": { + "_default": "2020-01-01" + }, + "BULLBUSD": { + "_default": "2020-01-01" + }, + "BEARUSDT": { + "_default": "2020-01-01" + }, + "BEARBUSD": { + "_default": "2020-01-01" + }, + "ETHBULLUSDT": { + "_default": "2020-01-01" + }, + "ETHBULLBUSD": { + "_default": "2020-01-01" + }, + "ETHBEARUSDT": { + "_default": "2020-01-01" + }, + "ETHBEARBUSD": { + "_default": "2020-01-01" + }, + "TCTBNB": { + "_default": "2020-01-01" + }, + "TCTBTC": { + "_default": "2020-01-01" + }, + "TCTUSDT": { + "_default": "2020-01-01" + }, + "WRXBNB": { + "_default": "2020-01-01" + }, + "WRXBTC": { + "_default": "2020-01-01" + }, + "WRXUSDT": { + "_default": "2020-01-01" + }, + "ICXBUSD": { + "_default": "2020-01-01" + }, + "BTSUSDT": { + "_default": "2020-01-01" + }, + "BTSBUSD": { + "_default": "2020-01-01" + }, + "LSKUSDT": { + "_default": "2020-01-01" + }, + "BNTUSDT": { + "_default": "2020-01-01" + }, + "BNTBUSD": { + "_default": "2020-01-01" + }, + "LTOBNB": { + "_default": "2020-01-01" + }, + "LTOBTC": { + "_default": "2020-01-01" + }, + "LTOUSDT": { + "_default": "2020-01-01" + }, + "ATOMBUSD": { + "_default": "2020-01-01" + }, + "DASHBUSD": { + "_default": "2020-01-01" + }, + "NEOBUSD": { + "_default": "2020-01-01" + }, + "WAVESBUSD": { + "_default": "2020-01-01" + }, + "XTZBUSD": { + "_default": "2020-01-01" + }, + "EOSBULLUSDT": { + "_default": "2020-01-01" + }, + "EOSBULLBUSD": { + "_default": "2020-01-01" + }, + "EOSBEARUSDT": { + "_default": "2020-01-01" + }, + "EOSBEARBUSD": { + "_default": "2020-01-01" + }, + "XRPBULLUSDT": { + "_default": "2020-01-01" + }, + "XRPBULLBUSD": { + "_default": "2020-01-01" + }, + "XRPBEARUSDT": { + "_default": "2020-01-01" + }, + "XRPBEARBUSD": { + "_default": "2020-01-01" + }, + "BATBUSD": { + "_default": "2020-01-01" + }, + "ENJBUSD": { + "_default": "2020-01-01" + }, + "NANOBUSD": { + "_default": "2020-01-01" + }, + "ONTBUSD": { + "_default": "2020-01-01" + }, + "RVNBUSD": { + "_default": "2020-01-01" + }, + "STRATBUSD": { + "_default": "2020-01-01" + }, + "STRATBNB": { + "_default": "2020-01-01" + }, + "STRATUSDT": { + "_default": "2020-01-01" + }, + "AIONBUSD": { + "_default": "2020-01-01" + }, + "AIONUSDT": { + "_default": "2020-01-01" + }, + "MBLBNB": { + "_default": "2020-01-01" + }, + "MBLBTC": { + "_default": "2020-01-01" + }, + "MBLUSDT": { + "_default": "2020-01-01" + }, + "COTIBNB": { + "_default": "2020-01-01" + }, + "COTIBTC": { + "_default": "2020-01-01" + }, + "COTIUSDT": { + "_default": "2020-01-01" + }, + "ALGOBUSD": { + "_default": "2020-01-01" + }, + "BTTBUSD": { + "_default": "2020-01-01" + }, + "TOMOBUSD": { + "_default": "2020-01-01" + }, + "XMRBUSD": { + "_default": "2020-01-01" + }, + "ZECBUSD": { + "_default": "2020-01-01" + }, + "BNBBULLUSDT": { + "_default": "2020-01-01" + }, + "BNBBULLBUSD": { + "_default": "2020-01-01" + }, + "BNBBEARUSDT": { + "_default": "2020-01-01" + }, + "BNBBEARBUSD": { + "_default": "2020-01-01" + }, + "STPTBNB": { + "_default": "2020-01-01" + }, + "STPTBTC": { + "_default": "2020-01-01" + }, + "STPTUSDT": { + "_default": "2020-01-01" + }, + "BTCZAR": { + "_default": "2020-01-01" + }, + "ETHZAR": { + "_default": "2020-01-01" + }, + "BNBZAR": { + "_default": "2020-01-01" + }, + "USDTZAR": { + "_default": "2020-01-01" + }, + "BUSDZAR": { + "_default": "2020-01-01" + }, + "BTCBKRW": { + "_default": "2020-01-01" + }, + "ETHBKRW": { + "_default": "2020-01-01" + }, + "BNBBKRW": { + "_default": "2020-01-01" + }, + "WTCUSDT": { + "_default": "2020-01-01" + }, + "DATABUSD": { + "_default": "2020-01-01" + }, + "DATAUSDT": { + "_default": "2020-01-01" + }, + "XZCUSDT": { + "_default": "2020-01-01" + }, + "SOLBNB": { + "_default": "2020-01-01" + }, + "SOLBTC": { + "_default": "2020-01-01" + }, + "SOLUSDT": { + "_default": "2020-01-01" + }, + "SOLBUSD": { + "_default": "2020-01-01" + }, + "BTCIDRT": { + "_default": "2020-01-01" + }, + "BNBIDRT": { + "_default": "2020-01-01" + }, + "USDTIDRT": { + "_default": "2020-01-01" + }, + "BUSDIDRT": { + "_default": "2020-01-01" + }, + "CTSIBTC": { + "_default": "2020-01-01" + }, + "CTSIUSDT": { + "_default": "2020-01-01" + }, + "CTSIBNB": { + "_default": "2020-01-01" + }, + "CTSIBUSD": { + "_default": "2020-01-01" + }, + "HIVEBNB": { + "_default": "2020-01-01" + }, + "HIVEBTC": { + "_default": "2020-01-01" + }, + "HIVEUSDT": { + "_default": "2020-01-01" + }, + "CHRBNB": { + "_default": "2020-01-01" + }, + "CHRBTC": { + "_default": "2020-01-01" + }, + "CHRUSDT": { + "_default": "2020-01-01" + }, + "BTCUPUSDT": { + "_default": "2020-01-01" + }, + "BTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "GXSUSDT": { + "_default": "2020-01-01" + }, + "ARDRUSDT": { + "_default": "2020-01-01" + }, + "ERDBUSD": { + "_default": "2020-01-01" + }, + "LENDUSDT": { + "_default": "2020-01-01" + }, + "HBARBUSD": { + "_default": "2020-01-01" + }, + "MATICBUSD": { + "_default": "2020-01-01" + }, + "WRXBUSD": { + "_default": "2020-01-01" + }, + "ZILBUSD": { + "_default": "2020-01-01" + }, + "MDTBNB": { + "_default": "2020-01-01" + }, + "MDTBTC": { + "_default": "2020-01-01" + }, + "MDTUSDT": { + "_default": "2020-01-01" + }, + "STMXBTC": { + "_default": "2020-01-01" + }, + "STMXETH": { + "_default": "2020-01-01" + }, + "STMXUSDT": { + "_default": "2020-01-01" + }, + "KNCBUSD": { + "_default": "2020-01-01" + }, + "KNCUSDT": { + "_default": "2020-01-01" + }, + "REPBUSD": { + "_default": "2020-01-01" + }, + "REPUSDT": { + "_default": "2020-01-01" + }, + "LRCBUSD": { + "_default": "2020-01-01" + }, + "LRCUSDT": { + "_default": "2020-01-01" + }, + "IQBNB": { + "_default": "2020-01-01" + }, + "IQBUSD": { + "_default": "2020-01-01" + }, + "PNTBTC": { + "_default": "2020-01-01" + }, + "PNTUSDT": { + "_default": "2020-01-01" + }, + "BTCGBP": { + "_default": "2020-01-01" + }, + "ETHGBP": { + "_default": "2020-01-01" + }, + "XRPGBP": { + "_default": "2020-01-01" + }, + "BNBGBP": { + "_default": "2020-01-01" + }, + "GBPBUSD": { + "_default": "2020-01-01" + }, + "DGBBTC": { + "_default": "2020-01-01" + }, + "DGBBUSD": { + "_default": "2020-01-01" + }, + "BTCUAH": { + "_default": "2020-01-01" + }, + "USDTUAH": { + "_default": "2020-01-01" + }, + "COMPBTC": { + "_default": "2020-01-01" + }, + "COMPBNB": { + "_default": "2020-01-01" + }, + "COMPBUSD": { + "_default": "2020-01-01" + }, + "COMPUSDT": { + "_default": "2020-01-01" + }, + "BTCBIDR": { + "_default": "2020-01-01" + }, + "ETHBIDR": { + "_default": "2020-01-01" + }, + "BNBBIDR": { + "_default": "2020-01-01" + }, + "BUSDBIDR": { + "_default": "2020-01-01" + }, + "USDTBIDR": { + "_default": "2020-01-01" + }, + "BKRWUSDT": { + "_default": "2020-01-01" + }, + "BKRWBUSD": { + "_default": "2020-01-01" + }, + "SCUSDT": { + "_default": "2020-01-01" + }, + "ZENUSDT": { + "_default": "2020-01-01" + }, + "SXPBTC": { + "_default": "2020-01-01" + }, + "SXPBNB": { + "_default": "2020-01-01" + }, + "SXPBUSD": { + "_default": "2020-01-01" + }, + "SNXBTC": { + "_default": "2020-01-01" + }, + "SNXBNB": { + "_default": "2020-01-01" + }, + "SNXBUSD": { + "_default": "2020-01-01" + }, + "SNXUSDT": { + "_default": "2020-01-01" + }, + "ETHUPUSDT": { + "_default": "2020-01-01" + }, + "ETHDOWNUSDT": { + "_default": "2020-01-01" + }, + "ADAUPUSDT": { + "_default": "2020-01-01" + }, + "ADADOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKUPUSDT": { + "_default": "2020-01-01" + }, + "LINKDOWNUSDT": { + "_default": "2020-01-01" + }, + "VTHOBNB": { + "_default": "2020-01-01" + }, + "VTHOBUSD": { + "_default": "2020-01-01" + }, + "VTHOUSDT": { + "_default": "2020-01-01" + }, + "DCRBUSD": { + "_default": "2020-01-01" + }, + "DGBUSDT": { + "_default": "2020-01-01" + }, + "GBPUSDT": { + "_default": "2020-01-01" + }, + "STORJBUSD": { + "_default": "2020-01-01" + }, + "SXPUSDT": { + "_default": "2020-01-01" + }, + "IRISBNB": { + "_default": "2020-01-01" + }, + "IRISBTC": { + "_default": "2020-01-01" + }, + "IRISBUSD": { + "_default": "2020-01-01" + }, + "MKRBNB": { + "_default": "2020-01-01" + }, + "MKRBTC": { + "_default": "2020-01-01" + }, + "MKRUSDT": { + "_default": "2020-01-01" + }, + "MKRBUSD": { + "_default": "2020-01-01" + }, + "DAIBNB": { + "_default": "2020-01-01" + }, + "DAIBTC": { + "_default": "2020-01-01" + }, + "DAIUSDT": { + "_default": "2020-01-01" + }, + "DAIBUSD": { + "_default": "2020-01-01" + }, + "RUNEBNB": { + "_default": "2020-01-01" + }, + "RUNEBTC": { + "_default": "2020-01-01" + }, + "RUNEBUSD": { + "_default": "2020-01-01" + }, + "MANABUSD": { + "_default": "2020-01-01" + }, + "DOGEBUSD": { + "_default": "2020-01-01" + }, + "LENDBUSD": { + "_default": "2020-01-01" + }, + "ZRXBUSD": { + "_default": "2020-01-01" + }, + "DCRUSDT": { + "_default": "2020-01-01" + }, + "STORJUSDT": { + "_default": "2020-01-01" + }, + "XRPBKRW": { + "_default": "2020-01-01" + }, + "ADABKRW": { + "_default": "2020-01-01" + }, + "BTCAUD": { + "_default": "2020-01-01" + }, + "ETHAUD": { + "_default": "2020-01-01" + }, + "AUDBUSD": { + "_default": "2020-01-01" + }, + "FIOBNB": { + "_default": "2020-01-01" + }, + "FIOBTC": { + "_default": "2020-01-01" + }, + "FIOBUSD": { + "_default": "2020-01-01" + }, + "BNBUPUSDT": { + "_default": "2020-01-01" + }, + "BNBDOWNUSDT": { + "_default": "2020-01-01" + }, + "XTZUPUSDT": { + "_default": "2020-01-01" + }, + "XTZDOWNUSDT": { + "_default": "2020-01-01" + }, + "AVABNB": { + "_default": "2020-01-01" + }, + "AVABTC": { + "_default": "2020-01-01" + }, + "AVABUSD": { + "_default": "2020-01-01" + }, + "USDTBKRW": { + "_default": "2020-01-01" + }, + "BUSDBKRW": { + "_default": "2020-01-01" + }, + "IOTABUSD": { + "_default": "2020-01-01" + }, + "MANAUSDT": { + "_default": "2020-01-01" + }, + "XRPAUD": { + "_default": "2020-01-01" + }, + "BNBAUD": { + "_default": "2020-01-01" + }, + "AUDUSDT": { + "_default": "2020-01-01" + }, + "BALBNB": { + "_default": "2020-01-01" + }, + "BALBTC": { + "_default": "2020-01-01" + }, + "BALBUSD": { + "_default": "2020-01-01" + }, + "YFIBNB": { + "_default": "2020-01-01" + }, + "YFIBTC": { + "_default": "2020-01-01" + }, + "YFIBUSD": { + "_default": "2020-01-01" + }, + "YFIUSDT": { + "_default": "2020-01-01" + }, + "BLZBUSD": { + "_default": "2020-01-01" + }, + "KMDBUSD": { + "_default": "2020-01-01" + }, + "BALUSDT": { + "_default": "2020-01-01" + }, + "BLZUSDT": { + "_default": "2020-01-01" + }, + "IRISUSDT": { + "_default": "2020-01-01" + }, + "KMDUSDT": { + "_default": "2020-01-01" + }, + "BTCDAI": { + "_default": "2020-01-01" + }, + "ETHDAI": { + "_default": "2020-01-01" + }, + "BNBDAI": { + "_default": "2020-01-01" + }, + "USDTDAI": { + "_default": "2020-01-01" + }, + "BUSDDAI": { + "_default": "2020-01-01" + }, + "JSTBNB": { + "_default": "2020-01-01" + }, + "JSTBTC": { + "_default": "2020-01-01" + }, + "JSTBUSD": { + "_default": "2020-01-01" + }, + "JSTUSDT": { + "_default": "2020-01-01" + }, + "SRMBNB": { + "_default": "2020-01-01" + }, + "SRMBTC": { + "_default": "2020-01-01" + }, + "SRMBUSD": { + "_default": "2020-01-01" + }, + "SRMUSDT": { + "_default": "2020-01-01" + }, + "ANTBNB": { + "_default": "2020-01-01" + }, + "ANTBTC": { + "_default": "2020-01-01" + }, + "ANTBUSD": { + "_default": "2020-01-01" + }, + "ANTUSDT": { + "_default": "2020-01-01" + }, + "CRVBNB": { + "_default": "2020-01-01" + }, + "CRVBTC": { + "_default": "2020-01-01" + }, + "CRVBUSD": { + "_default": "2020-01-01" + }, + "CRVUSDT": { + "_default": "2020-01-01" + }, + "SANDBNB": { + "_default": "2020-01-01" + }, + "SANDBTC": { + "_default": "2020-01-01" + }, + "SANDUSDT": { + "_default": "2020-01-01" + }, + "SANDBUSD": { + "_default": "2020-01-01" + }, + "OCEANBNB": { + "_default": "2020-01-01" + }, + "OCEANBTC": { + "_default": "2020-01-01" + }, + "OCEANBUSD": { + "_default": "2020-01-01" + }, + "OCEANUSDT": { + "_default": "2020-01-01" + }, + "NMRBTC": { + "_default": "2020-01-01" + }, + "NMRBUSD": { + "_default": "2020-01-01" + }, + "NMRUSDT": { + "_default": "2020-01-01" + }, + "DOTBNB": { + "_default": "2020-01-01" + }, + "DOTBTC": { + "_default": "2020-01-01" + }, + "DOTBUSD": { + "_default": "2020-01-01" + }, + "DOTUSDT": { + "_default": "2020-01-01" + }, + "LUNABNB": { + "_default": "2020-01-01" + }, + "LUNABTC": { + "_default": "2020-01-01" + }, + "LUNABUSD": { + "_default": "2020-01-01" + }, + "LUNAUSDT": { + "_default": "2020-01-01" + }, + "IDEXBTC": { + "_default": "2020-01-01" + }, + "IDEXBUSD": { + "_default": "2020-01-01" + }, + "RSRBNB": { + "_default": "2020-01-01" + }, + "RSRBTC": { + "_default": "2020-01-01" + }, + "RSRBUSD": { + "_default": "2020-01-01" + }, + "RSRUSDT": { + "_default": "2020-01-01" + }, + "PAXGBNB": { + "_default": "2020-01-01" + }, + "PAXGBTC": { + "_default": "2020-01-01" + }, + "PAXGBUSD": { + "_default": "2020-01-01" + }, + "PAXGUSDT": { + "_default": "2020-01-01" + }, + "WNXMBNB": { + "_default": "2020-01-01" + }, + "WNXMBTC": { + "_default": "2020-01-01" + }, + "WNXMBUSD": { + "_default": "2020-01-01" + }, + "WNXMUSDT": { + "_default": "2020-01-01" + }, + "TRBBNB": { + "_default": "2020-01-01" + }, + "TRBBTC": { + "_default": "2020-01-01" + }, + "TRBBUSD": { + "_default": "2020-01-01" + }, + "TRBUSDT": { + "_default": "2020-01-01" + }, + "ETHNGN": { + "_default": "2020-01-01" + }, + "DOTBIDR": { + "_default": "2020-01-01" + }, + "LINKAUD": { + "_default": "2020-01-01" + }, + "SXPAUD": { + "_default": "2020-01-01" + }, + "BZRXBNB": { + "_default": "2020-01-01" + }, + "BZRXBTC": { + "_default": "2020-01-01" + }, + "BZRXBUSD": { + "_default": "2020-01-01" + }, + "BZRXUSDT": { + "_default": "2020-01-01" + }, + "WBTCBTC": { + "_default": "2020-01-01" + }, + "WBTCETH": { + "_default": "2020-01-01" + }, + "SUSHIBNB": { + "_default": "2020-01-01" + }, + "SUSHIBTC": { + "_default": "2020-01-01" + }, + "SUSHIBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUSDT": { + "_default": "2020-01-01" + }, + "YFIIBNB": { + "_default": "2020-01-01" + }, + "YFIIBTC": { + "_default": "2020-01-01" + }, + "YFIIBUSD": { + "_default": "2020-01-01" + }, + "YFIIUSDT": { + "_default": "2020-01-01" + }, + "KSMBNB": { + "_default": "2020-01-01" + }, + "KSMBTC": { + "_default": "2020-01-01" + }, + "KSMBUSD": { + "_default": "2020-01-01" + }, + "KSMUSDT": { + "_default": "2020-01-01" + }, + "EGLDBNB": { + "_default": "2020-01-01" + }, + "EGLDBTC": { + "_default": "2020-01-01" + }, + "EGLDBUSD": { + "_default": "2020-01-01" + }, + "EGLDUSDT": { + "_default": "2020-01-01" + }, + "DIABNB": { + "_default": "2020-01-01" + }, + "DIABTC": { + "_default": "2020-01-01" + }, + "DIABUSD": { + "_default": "2020-01-01" + }, + "DIAUSDT": { + "_default": "2020-01-01" + }, + "RUNEUSDT": { + "_default": "2020-01-01" + }, + "FIOUSDT": { + "_default": "2020-01-01" + }, + "UMABTC": { + "_default": "2020-01-01" + }, + "UMAUSDT": { + "_default": "2020-01-01" + }, + "EOSUPUSDT": { + "_default": "2020-01-01" + }, + "EOSDOWNUSDT": { + "_default": "2020-01-01" + }, + "TRXUPUSDT": { + "_default": "2020-01-01" + }, + "TRXDOWNUSDT": { + "_default": "2020-01-01" + }, + "XRPUPUSDT": { + "_default": "2020-01-01" + }, + "XRPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTUPUSDT": { + "_default": "2020-01-01" + }, + "DOTDOWNUSDT": { + "_default": "2020-01-01" + }, + "SRMBIDR": { + "_default": "2020-01-01" + }, + "ONEBIDR": { + "_default": "2020-01-01" + }, + "LINKTRY": { + "_default": "2020-01-01" + }, + "USDTNGN": { + "_default": "2020-01-01" + }, + "BELBNB": { + "_default": "2020-01-01" + }, + "BELBTC": { + "_default": "2020-01-01" + }, + "BELBUSD": { + "_default": "2020-01-01" + }, + "BELUSDT": { + "_default": "2020-01-01" + }, + "WINGBNB": { + "_default": "2020-01-01" + }, + "WINGBTC": { + "_default": "2020-01-01" + }, + "SWRVBNB": { + "_default": "2020-01-01" + }, + "SWRVBUSD": { + "_default": "2020-01-01" + }, + "WINGBUSD": { + "_default": "2020-01-01" + }, + "WINGUSDT": { + "_default": "2020-01-01" + }, + "LTCUPUSDT": { + "_default": "2020-01-01" + }, + "LTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "LENDBKRW": { + "_default": "2020-01-01" + }, + "SXPEUR": { + "_default": "2020-01-01" + }, + "CREAMBNB": { + "_default": "2020-01-01" + }, + "CREAMBUSD": { + "_default": "2020-01-01" + }, + "UNIBNB": { + "_default": "2020-01-01" + }, + "UNIBTC": { + "_default": "2020-01-01" + }, + "UNIBUSD": { + "_default": "2020-01-01" + }, + "UNIUSDT": { + "_default": "2020-01-01" + }, + "NBSBTC": { + "_default": "2020-01-01" + }, + "NBSUSDT": { + "_default": "2020-01-01" + }, + "OXTBTC": { + "_default": "2020-01-01" + }, + "OXTUSDT": { + "_default": "2020-01-01" + }, + "SUNBTC": { + "_default": "2020-01-01" + }, + "SUNUSDT": { + "_default": "2020-01-01" + }, + "AVAXBNB": { + "_default": "2020-01-01" + }, + "AVAXBTC": { + "_default": "2020-01-01" + }, + "AVAXBUSD": { + "_default": "2020-01-01" + }, + "AVAXUSDT": { + "_default": "2020-01-01" + }, + "HNTBTC": { + "_default": "2020-01-01" + }, + "HNTUSDT": { + "_default": "2020-01-01" + }, + "BAKEBNB": { + "_default": "2020-01-01" + }, + "BURGERBNB": { + "_default": "2020-01-01" + }, + "SXPBIDR": { + "_default": "2020-01-01" + }, + "LINKBKRW": { + "_default": "2020-01-01" + }, + "FLMBNB": { + "_default": "2020-01-01" + }, + "FLMBTC": { + "_default": "2020-01-01" + }, + "FLMBUSD": { + "_default": "2020-01-01" + }, + "FLMUSDT": { + "_default": "2020-01-01" + }, + "SCRTBTC": { + "_default": "2020-01-01" + }, + "SCRTETH": { + "_default": "2020-01-01" + }, + "CAKEBNB": { + "_default": "2020-01-01" + }, + "CAKEBUSD": { + "_default": "2020-01-01" + }, + "SPARTABNB": { + "_default": "2020-01-01" + }, + "UNIUPUSDT": { + "_default": "2020-01-01" + }, + "UNIDOWNUSDT": { + "_default": "2020-01-01" + }, + "ORNBTC": { + "_default": "2020-01-01" + }, + "ORNUSDT": { + "_default": "2020-01-01" + }, + "TRXNGN": { + "_default": "2020-01-01" + }, + "SXPTRY": { + "_default": "2020-01-01" + }, + "UTKBTC": { + "_default": "2020-01-01" + }, + "UTKUSDT": { + "_default": "2020-01-01" + }, + "XVSBNB": { + "_default": "2020-01-01" + }, + "XVSBTC": { + "_default": "2020-01-01" + }, + "XVSBUSD": { + "_default": "2020-01-01" + }, + "XVSUSDT": { + "_default": "2020-01-01" + }, + "ALPHABNB": { + "_default": "2020-01-01" + }, + "ALPHABTC": { + "_default": "2020-01-01" + }, + "ALPHABUSD": { + "_default": "2020-01-01" + }, + "ALPHAUSDT": { + "_default": "2020-01-01" + }, + "VIDTBTC": { + "_default": "2020-01-01" + }, + "VIDTBUSD": { + "_default": "2020-01-01" + }, + "AAVEBNB": { + "_default": "2020-01-01" + }, + "BTCBRL": { + "_default": "2020-01-01" + }, + "USDTBRL": { + "_default": "2020-01-01" + }, + "AAVEBTC": { + "_default": "2020-01-01" + }, + "AAVEETH": { + "_default": "2020-01-01" + }, + "AAVEBUSD": { + "_default": "2020-01-01" + }, + "AAVEUSDT": { + "_default": "2020-01-01" + }, + "AAVEBKRW": { + "_default": "2020-01-01" + }, + "NEARBNB": { + "_default": "2020-01-01" + }, + "NEARBTC": { + "_default": "2020-01-01" + }, + "NEARBUSD": { + "_default": "2020-01-01" + }, + "NEARUSDT": { + "_default": "2020-01-01" + }, + "SXPUPUSDT": { + "_default": "2020-01-01" + }, + "SXPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTBKRW": { + "_default": "2020-01-01" + }, + "SXPGBP": { + "_default": "2020-01-01" + }, + "FILBNB": { + "_default": "2020-01-01" + }, + "FILBTC": { + "_default": "2020-01-01" + }, + "FILBUSD": { + "_default": "2020-01-01" + }, + "FILUSDT": { + "_default": "2020-01-01" + }, + "FILUPUSDT": { + "_default": "2020-01-01" + }, + "FILDOWNUSDT": { + "_default": "2020-01-01" + }, + "YFIUPUSDT": { + "_default": "2020-01-01" + }, + "YFIDOWNUSDT": { + "_default": "2020-01-01" + }, + "INJBNB": { + "_default": "2020-01-01" + }, + "INJBTC": { + "_default": "2020-01-01" + }, + "INJBUSD": { + "_default": "2020-01-01" + }, + "INJUSDT": { + "_default": "2020-01-01" + }, + "AERGOBTC": { + "_default": "2020-01-01" + }, + "AERGOBUSD": { + "_default": "2020-01-01" + }, + "LINKEUR": { + "_default": "2020-01-01" + }, + "ONEBUSD": { + "_default": "2020-01-01" + }, + "EASYETH": { + "_default": "2020-01-01" + }, + "AUDIOBTC": { + "_default": "2020-01-01" + }, + "AUDIOBUSD": { + "_default": "2020-01-01" + }, + "AUDIOUSDT": { + "_default": "2020-01-01" + }, + "CTKBNB": { + "_default": "2020-01-01" + }, + "CTKBTC": { + "_default": "2020-01-01" + }, + "CTKBUSD": { + "_default": "2020-01-01" + }, + "CTKUSDT": { + "_default": "2020-01-01" + }, + "BCHUPUSDT": { + "_default": "2020-01-01" + }, + "BCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BOTBTC": { + "_default": "2020-01-01" + }, + "BOTBUSD": { + "_default": "2020-01-01" + }, + "ETHBRL": { + "_default": "2020-01-01" + }, + "DOTEUR": { + "_default": "2020-01-01" + }, + "AKROBTC": { + "_default": "2020-01-01" + }, + "AKROUSDT": { + "_default": "2020-01-01" + }, + "KP3RBNB": { + "_default": "2020-01-01" + }, + "KP3RBUSD": { + "_default": "2020-01-01" + }, + "AXSBNB": { + "_default": "2020-01-01" + }, + "AXSBTC": { + "_default": "2020-01-01" + }, + "AXSBUSD": { + "_default": "2020-01-01" + }, + "AXSUSDT": { + "_default": "2020-01-01" + }, + "HARDBNB": { + "_default": "2020-01-01" + }, + "HARDBTC": { + "_default": "2020-01-01" + }, + "HARDBUSD": { + "_default": "2020-01-01" + }, + "HARDUSDT": { + "_default": "2020-01-01" + }, + "BNBBRL": { + "_default": "2020-01-01" + }, + "LTCEUR": { + "_default": "2020-01-01" + }, + "RENBTCBTC": { + "_default": "2020-01-01" + }, + "RENBTCETH": { + "_default": "2020-01-01" + }, + "DNTBUSD": { + "_default": "2020-01-01" + }, + "DNTUSDT": { + "_default": "2020-01-01" + }, + "SLPETH": { + "_default": "2020-01-01" + }, + "ADAEUR": { + "_default": "2020-01-01" + }, + "LTCNGN": { + "_default": "2020-01-01" + }, + "CVPETH": { + "_default": "2020-01-01" + }, + "CVPBUSD": { + "_default": "2020-01-01" + }, + "STRAXBTC": { + "_default": "2020-01-01" + }, + "STRAXETH": { + "_default": "2020-01-01" + }, + "STRAXBUSD": { + "_default": "2020-01-01" + }, + "STRAXUSDT": { + "_default": "2020-01-01" + }, + "FORBTC": { + "_default": "2020-01-01" + }, + "FORBUSD": { + "_default": "2020-01-01" + }, + "UNFIBNB": { + "_default": "2020-01-01" + }, + "UNFIBTC": { + "_default": "2020-01-01" + }, + "UNFIBUSD": { + "_default": "2020-01-01" + }, + "UNFIUSDT": { + "_default": "2020-01-01" + }, + "FRONTETH": { + "_default": "2020-01-01" + }, + "FRONTBUSD": { + "_default": "2020-01-01" + }, + "BCHABUSD": { + "_default": "2020-01-01" + }, + "ROSEBTC": { + "_default": "2020-01-01" + }, + "ROSEBUSD": { + "_default": "2020-01-01" + }, + "ROSEUSDT": { + "_default": "2020-01-01" + }, + "AVAXTRY": { + "_default": "2020-01-01" + }, + "BUSDBRL": { + "_default": "2020-01-01" + }, + "AVAUSDT": { + "_default": "2020-01-01" + }, + "SYSBUSD": { + "_default": "2020-01-01" + }, + "XEMUSDT": { + "_default": "2020-01-01" + }, + "HEGICETH": { + "_default": "2020-01-01" + }, + "HEGICBUSD": { + "_default": "2020-01-01" + }, + "AAVEUPUSDT": { + "_default": "2020-01-01" + }, + "AAVEDOWNUSDT": { + "_default": "2020-01-01" + }, + "PROMBNB": { + "_default": "2020-01-01" + }, + "PROMBUSD": { + "_default": "2020-01-01" + }, + "XRPBRL": { + "_default": "2020-01-01" + }, + "XRPNGN": { + "_default": "2020-01-01" + }, + "SKLBTC": { + "_default": "2020-01-01" + }, + "SKLBUSD": { + "_default": "2020-01-01" + }, + "SKLUSDT": { + "_default": "2020-01-01" + }, + "BCHEUR": { + "_default": "2020-01-01" + }, + "YFIEUR": { + "_default": "2020-01-01" + }, + "ZILBIDR": { + "_default": "2020-01-01" + }, + "SUSDBTC": { + "_default": "2020-01-01" + }, + "SUSDETH": { + "_default": "2020-01-01" + }, + "SUSDUSDT": { + "_default": "2020-01-01" + }, + "COVERETH": { + "_default": "2020-01-01" + }, + "COVERBUSD": { + "_default": "2020-01-01" + }, + "GLMBTC": { + "_default": "2020-01-01" + }, + "GLMETH": { + "_default": "2020-01-01" + }, + "GHSTETH": { + "_default": "2020-01-01" + }, + "GHSTBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUPUSDT": { + "_default": "2020-01-01" + }, + "SUSHIDOWNUSDT": { + "_default": "2020-01-01" + }, + "XLMUPUSDT": { + "_default": "2020-01-01" + }, + "XLMDOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKBRL": { + "_default": "2020-01-01" + }, + "LINKNGN": { + "_default": "2020-01-01" + }, + "LTCRUB": { + "_default": "2020-01-01" + }, + "TRXTRY": { + "_default": "2020-01-01" + }, + "XLMEUR": { + "_default": "2020-01-01" + }, + "DFETH": { + "_default": "2020-01-01" + }, + "DFBUSD": { + "_default": "2020-01-01" + }, + "GRTBTC": { + "_default": "2020-01-01" + }, + "GRTETH": { + "_default": "2020-01-01" + }, + "GRTUSDT": { + "_default": "2020-01-01" + }, + "JUVBTC": { + "_default": "2020-01-01" + }, + "JUVBUSD": { + "_default": "2020-01-01" + }, + "JUVUSDT": { + "_default": "2020-01-01" + }, + "PSGBTC": { + "_default": "2020-01-01" + }, + "PSGBUSD": { + "_default": "2020-01-01" + }, + "PSGUSDT": { + "_default": "2020-01-01" + }, + "BUSDBVND": { + "_default": "2020-01-01" + }, + "USDTBVND": { + "_default": "2020-01-01" + }, + "1INCHBTC": { + "_default": "2020-01-01" + }, + "1INCHUSDT": { + "_default": "2020-01-01" + }, + "REEFBTC": { + "_default": "2020-01-01" + }, + "REEFUSDT": { + "_default": "2020-01-01" + }, + "OGBTC": { + "_default": "2020-01-01" + }, + "OGUSDT": { + "_default": "2020-01-01" + }, + "ATMBTC": { + "_default": "2020-01-01" + }, + "ATMUSDT": { + "_default": "2020-01-01" + }, + "ASRBTC": { + "_default": "2020-01-01" + }, + "ASRUSDT": { + "_default": "2020-01-01" + }, + "CELOBTC": { + "_default": "2020-01-01" + }, + "CELOUSDT": { + "_default": "2020-01-01" + }, + "RIFBTC": { + "_default": "2020-01-01" + }, + "RIFUSDT": { + "_default": "2020-01-01" + }, + "CHZTRY": { + "_default": "2020-01-01" + }, + "XLMTRY": { + "_default": "2020-01-01" + }, + "LINKGBP": { + "_default": "2020-01-01" + }, + "GRTEUR": { + "_default": "2020-01-01" + }, + "BTCSTBTC": { + "_default": "2020-01-01" + }, + "BTCSTBUSD": { + "_default": "2020-01-01" + }, + "BTCSTUSDT": { + "_default": "2020-01-01" + }, + "TRUBTC": { + "_default": "2020-01-01" + }, + "TRUBUSD": { + "_default": "2020-01-01" + }, + "TRUUSDT": { + "_default": "2020-01-01" + }, + "DEXEETH": { + "_default": "2020-01-01" + }, + "DEXEBUSD": { + "_default": "2020-01-01" + }, + "EOSEUR": { + "_default": "2020-01-01" + }, + "LTCBRL": { + "_default": "2020-01-01" + }, + "USDCBUSD": { + "_default": "2020-01-01" + }, + "TUSDBUSD": { + "_default": "2020-01-01" + }, + "PAXBUSD": { + "_default": "2020-01-01" + }, + "CKBBTC": { + "_default": "2020-01-01" + }, + "CKBBUSD": { + "_default": "2020-01-01" + }, + "CKBUSDT": { + "_default": "2020-01-01" + }, + "TWTBTC": { + "_default": "2020-01-01" + }, + "TWTBUSD": { + "_default": "2020-01-01" + }, + "TWTUSDT": { + "_default": "2020-01-01" + }, + "FIROBTC": { + "_default": "2020-01-01" + }, + "FIROETH": { + "_default": "2020-01-01" + }, + "FIROUSDT": { + "_default": "2020-01-01" + }, + "BETHETH": { + "_default": "2020-01-01" + }, + "DOGEEUR": { + "_default": "2020-01-01" + }, + "DOGETRY": { + "_default": "2020-01-01" + }, + "DOGEAUD": { + "_default": "2020-01-01" + }, + "DOGEBRL": { + "_default": "2020-01-01" + }, + "DOTNGN": { + "_default": "2020-01-01" + }, + "PROSETH": { + "_default": "2020-01-01" + }, + "LITBTC": { + "_default": "2020-01-01" + }, + "LITBUSD": { + "_default": "2020-01-01" + }, + "LITUSDT": { + "_default": "2020-01-01" + }, + "BTCVAI": { + "_default": "2020-01-01" + }, + "BUSDVAI": { + "_default": "2020-01-01" + }, + "SFPBTC": { + "_default": "2020-01-01" + }, + "SFPBUSD": { + "_default": "2020-01-01" + }, + "SFPUSDT": { + "_default": "2020-01-01" + }, + "DOGEGBP": { + "_default": "2020-01-01" + }, + "DOTTRY": { + "_default": "2020-01-01" + }, + "FXSBTC": { + "_default": "2020-01-01" + }, + "FXSBUSD": { + "_default": "2020-01-01" + }, + "DODOBTC": { + "_default": "2020-01-01" + }, + "DODOBUSD": { + "_default": "2020-01-01" + }, + "DODOUSDT": { + "_default": "2020-01-01" + }, + "FRONTBTC": { + "_default": "2020-01-01" + }, + "EASYBTC": { + "_default": "2020-01-01" + }, + "CAKEBTC": { + "_default": "2020-01-01" + }, + "CAKEUSDT": { + "_default": "2020-01-01" + }, + "BAKEBUSD": { + "_default": "2020-01-01" + }, + "UFTETH": { + "_default": "2020-01-01" + }, + "UFTBUSD": { + "_default": "2020-01-01" + }, + "1INCHBUSD": { + "_default": "2020-01-01" + }, + "BANDBUSD": { + "_default": "2020-01-01" + }, + "GRTBUSD": { + "_default": "2020-01-01" + }, + "IOSTBUSD": { + "_default": "2020-01-01" + }, + "OMGBUSD": { + "_default": "2020-01-01" + }, + "REEFBUSD": { + "_default": "2020-01-01" + }, + "ACMBTC": { + "_default": "2020-01-01" + }, + "ACMBUSD": { + "_default": "2020-01-01" + }, + "ACMUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONBTC": { + "_default": "2020-01-01" + }, + "AUCTIONBUSD": { + "_default": "2020-01-01" + }, + "PHABTC": { + "_default": "2020-01-01" + }, + "PHABUSD": { + "_default": "2020-01-01" + }, + "DOTGBP": { + "_default": "2020-01-01" + }, + "ADATRY": { + "_default": "2020-01-01" + }, + "ADABRL": { + "_default": "2020-01-01" + }, + "ADAGBP": { + "_default": "2020-01-01" + }, + "TVKBTC": { + "_default": "2020-01-01" + }, + "TVKBUSD": { + "_default": "2020-01-01" + }, + "BADGERBTC": { + "_default": "2020-01-01" + }, + "BADGERBUSD": { + "_default": "2020-01-01" + }, + "BADGERUSDT": { + "_default": "2020-01-01" + }, + "FISBTC": { + "_default": "2020-01-01" + }, + "FISBUSD": { + "_default": "2020-01-01" + }, + "FISUSDT": { + "_default": "2020-01-01" + }, + "DOTBRL": { + "_default": "2020-01-01" + }, + "ADAAUD": { + "_default": "2020-01-01" + }, + "HOTTRY": { + "_default": "2020-01-01" + }, + "EGLDEUR": { + "_default": "2020-01-01" + }, + "OMBTC": { + "_default": "2020-01-01" + }, + "OMBUSD": { + "_default": "2020-01-01" + }, + "OMUSDT": { + "_default": "2020-01-01" + }, + "PONDBTC": { + "_default": "2020-01-01" + }, + "PONDBUSD": { + "_default": "2020-01-01" + }, + "PONDUSDT": { + "_default": "2020-01-01" + }, + "DEGOBTC": { + "_default": "2020-01-01" + }, + "DEGOBUSD": { + "_default": "2020-01-01" + }, + "DEGOUSDT": { + "_default": "2020-01-01" + }, + "AVAXEUR": { + "_default": "2020-01-01" + }, + "BTTTRY": { + "_default": "2020-01-01" + }, + "CHZBRL": { + "_default": "2020-01-01" + }, + "UNIEUR": { + "_default": "2020-01-01" + }, + "ALICEBTC": { + "_default": "2020-01-01" + }, + "ALICEBUSD": { + "_default": "2020-01-01" + }, + "ALICEUSDT": { + "_default": "2020-01-01" + }, + "CHZBUSD": { + "_default": "2020-01-01" + }, + "CHZEUR": { + "_default": "2020-01-01" + }, + "CHZGBP": { + "_default": "2020-01-01" + }, + "BIFIBNB": { + "_default": "2020-01-01" + }, + "BIFIBUSD": { + "_default": "2020-01-01" + }, + "LINABTC": { + "_default": "2020-01-01" + }, + "LINABUSD": { + "_default": "2020-01-01" + }, + "LINAUSDT": { + "_default": "2020-01-01" + }, + "ADARUB": { + "_default": "2020-01-01" + }, + "ENJBRL": { + "_default": "2020-01-01" + }, + "ENJEUR": { + "_default": "2020-01-01" + }, + "MATICEUR": { + "_default": "2020-01-01" + }, + "NEOTRY": { + "_default": "2020-01-01" + }, + "PERPBTC": { + "_default": "2020-01-01" + }, + "PERPBUSD": { + "_default": "2020-01-01" + }, + "PERPUSDT": { + "_default": "2020-01-01" + }, + "RAMPBTC": { + "_default": "2020-01-01" + }, + "RAMPBUSD": { + "_default": "2020-01-01" + }, + "RAMPUSDT": { + "_default": "2020-01-01" + }, + "SUPERBTC": { + "_default": "2020-01-01" + }, + "SUPERBUSD": { + "_default": "2020-01-01" + }, + "SUPERUSDT": { + "_default": "2020-01-01" + }, + "CFXBTC": { + "_default": "2020-01-01" + }, + "CFXBUSD": { + "_default": "2020-01-01" + }, + "CFXUSDT": { + "_default": "2020-01-01" + }, + "ENJGBP": { + "_default": "2020-01-01" + }, + "EOSTRY": { + "_default": "2020-01-01" + }, + "LTCGBP": { + "_default": "2020-01-01" + }, + "LUNAEUR": { + "_default": "2020-01-01" + }, + "RVNTRY": { + "_default": "2020-01-01" + }, + "THETAEUR": { + "_default": "2020-01-01" + }, + "XVGBUSD": { + "_default": "2020-01-01" + }, + "EPSBTC": { + "_default": "2020-01-01" + }, + "EPSBUSD": { + "_default": "2020-01-01" + }, + "EPSUSDT": { + "_default": "2020-01-01" + }, + "AUTOBTC": { + "_default": "2020-01-01" + }, + "AUTOBUSD": { + "_default": "2020-01-01" + }, + "AUTOUSDT": { + "_default": "2020-01-01" + }, + "TKOBTC": { + "_default": "2020-01-01" + }, + "TKOBIDR": { + "_default": "2020-01-01" + }, + "TKOBUSD": { + "_default": "2020-01-01" + }, + "TKOUSDT": { + "_default": "2020-01-01" + }, + "PUNDIXETH": { + "_default": "2020-01-01" + }, + "PUNDIXUSDT": { + "_default": "2020-01-01" + }, + "BTTBRL": { + "_default": "2020-01-01" + }, + "BTTEUR": { + "_default": "2020-01-01" + }, + "HOTEUR": { + "_default": "2020-01-01" + }, + "WINEUR": { + "_default": "2020-01-01" + }, + "TLMBTC": { + "_default": "2020-01-01" + }, + "TLMBUSD": { + "_default": "2020-01-01" + }, + "TLMUSDT": { + "_default": "2020-01-01" + }, + "1INCHUPUSDT": { + "_default": "2020-01-01" + }, + "1INCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BTGBUSD": { + "_default": "2020-01-01" + }, + "BTGUSDT": { + "_default": "2020-01-01" + }, + "HOTBUSD": { + "_default": "2020-01-01" + }, + "BNBUAH": { + "_default": "2020-01-01" + }, + "ONTTRY": { + "_default": "2020-01-01" + }, + "VETEUR": { + "_default": "2020-01-01" + }, + "VETGBP": { + "_default": "2020-01-01" + }, + "WINBRL": { + "_default": "2020-01-01" + }, + "MIRBTC": { + "_default": "2020-01-01" + }, + "MIRBUSD": { + "_default": "2020-01-01" + }, + "MIRUSDT": { + "_default": "2020-01-01" + }, + "BARBTC": { + "_default": "2020-01-01" + }, + "BARBUSD": { + "_default": "2020-01-01" + }, + "BARUSDT": { + "_default": "2020-01-01" + }, + "FORTHBTC": { + "_default": "2020-01-01" + }, + "FORTHBUSD": { + "_default": "2020-01-01" + }, + "FORTHUSDT": { + "_default": "2020-01-01" + }, + "CAKEGBP": { + "_default": "2020-01-01" + }, + "DOGERUB": { + "_default": "2020-01-01" + }, + "HOTBRL": { + "_default": "2020-01-01" + }, + "WRXEUR": { + "_default": "2020-01-01" + }, + "EZBTC": { + "_default": "2020-01-01" + }, + "EZETH": { + "_default": "2020-01-01" + }, + "BAKEUSDT": { + "_default": "2020-01-01" + }, + "BURGERBUSD": { + "_default": "2020-01-01" + }, + "BURGERUSDT": { + "_default": "2020-01-01" + }, + "SLPBUSD": { + "_default": "2020-01-01" + }, + "SLPUSDT": { + "_default": "2020-01-01" + }, + "TRXAUD": { + "_default": "2020-01-01" + }, + "TRXEUR": { + "_default": "2020-01-01" + }, + "VETTRY": { + "_default": "2020-01-01" + }, + "SHIBUSDT": { + "_default": "2020-01-01" + }, + "SHIBBUSD": { + "_default": "2020-01-01" + }, + "ICPBTC": { + "_default": "2020-01-01" + }, + "ICPBNB": { + "_default": "2020-01-01" + }, + "ICPBUSD": { + "_default": "2020-01-01" + }, + "ICPUSDT": { + "_default": "2020-01-01" + }, + "SHIBEUR": { + "_default": "2020-01-01" + }, + "SHIBRUB": { + "_default": "2020-01-01" + }, + "ETCEUR": { + "_default": "2020-01-01" + }, + "ETCBRL": { + "_default": "2020-01-01" + }, + "DOGEBIDR": { + "_default": "2020-01-01" + }, + "ARBTC": { + "_default": "2020-01-01" + }, + "ARBNB": { + "_default": "2020-01-01" + }, + "ARBUSD": { + "_default": "2020-01-01" + }, + "ARUSDT": { + "_default": "2020-01-01" + }, + "POLSBTC": { + "_default": "2020-01-01" + }, + "POLSBNB": { + "_default": "2020-01-01" + }, + "POLSBUSD": { + "_default": "2020-01-01" + }, + "POLSUSDT": { + "_default": "2020-01-01" + }, + "MDXBTC": { + "_default": "2020-01-01" + }, + "MDXBNB": { + "_default": "2020-01-01" + }, + "MDXBUSD": { + "_default": "2020-01-01" + }, + "MDXUSDT": { + "_default": "2020-01-01" + }, + "MASKBNB": { + "_default": "2020-01-01" + }, + "MASKBUSD": { + "_default": "2020-01-01" + }, + "MASKUSDT": { + "_default": "2020-01-01" + }, + "LPTBTC": { + "_default": "2020-01-01" + }, + "LPTBNB": { + "_default": "2020-01-01" + }, + "LPTBUSD": { + "_default": "2020-01-01" + }, + "LPTUSDT": { + "_default": "2020-01-01" + }, + "ETHUAH": { + "_default": "2020-01-01" + }, + "MATICBRL": { + "_default": "2020-01-01" + }, + "SOLEUR": { + "_default": "2020-01-01" + }, + "SHIBBRL": { + "_default": "2020-01-01" + }, + "AGIXBTC": { + "_default": "2020-01-01" + }, + "ICPEUR": { + "_default": "2020-01-01" + }, + "MATICGBP": { + "_default": "2020-01-01" + }, + "SHIBTRY": { + "_default": "2020-01-01" + }, + "MATICBIDR": { + "_default": "2020-01-01" + }, + "MATICRUB": { + "_default": "2020-01-01" + }, + "NUBTC": { + "_default": "2020-01-01" + }, + "NUBNB": { + "_default": "2020-01-01" + }, + "NUBUSD": { + "_default": "2020-01-01" + }, + "NUUSDT": { + "_default": "2020-01-01" + }, + "XVGUSDT": { + "_default": "2020-01-01" + }, + "RLCBUSD": { + "_default": "2020-01-01" + }, + "CELRBUSD": { + "_default": "2020-01-01" + }, + "ATMBUSD": { + "_default": "2020-01-01" + }, + "ZENBUSD": { + "_default": "2020-01-01" + }, + "FTMBUSD": { + "_default": "2020-01-01" + }, + "THETABUSD": { + "_default": "2020-01-01" + }, + "WINBUSD": { + "_default": "2020-01-01" + }, + "KAVABUSD": { + "_default": "2020-01-01" + }, + "XEMBUSD": { + "_default": "2020-01-01" + }, + "ATABTC": { + "_default": "2020-01-01" + }, + "ATABNB": { + "_default": "2020-01-01" + }, + "ATABUSD": { + "_default": "2020-01-01" + }, + "ATAUSDT": { + "_default": "2020-01-01" + }, + "GTCBTC": { + "_default": "2020-01-01" + }, + "GTCBNB": { + "_default": "2020-01-01" + }, + "GTCBUSD": { + "_default": "2020-01-01" + }, + "GTCUSDT": { + "_default": "2020-01-01" + }, + "TORNBTC": { + "_default": "2020-01-01" + }, + "TORNBNB": { + "_default": "2020-01-01" + }, + "TORNBUSD": { + "_default": "2020-01-01" + }, + "TORNUSDT": { + "_default": "2020-01-01" + }, + "MATICTRY": { + "_default": "2020-01-01" + }, + "ETCGBP": { + "_default": "2020-01-01" + }, + "SOLGBP": { + "_default": "2020-01-01" + }, + "BAKEBTC": { + "_default": "2020-01-01" + }, + "COTIBUSD": { + "_default": "2020-01-01" + }, + "KEEPBTC": { + "_default": "2020-01-01" + }, + "KEEPBNB": { + "_default": "2020-01-01" + }, + "KEEPBUSD": { + "_default": "2020-01-01" + }, + "KEEPUSDT": { + "_default": "2020-01-01" + }, + "SOLTRY": { + "_default": "2020-01-01" + }, + "RUNEGBP": { + "_default": "2020-01-01" + }, + "SOLBRL": { + "_default": "2020-01-01" + }, + "SCBUSD": { + "_default": "2020-01-01" + }, + "CHRBUSD": { + "_default": "2020-01-01" + }, + "STMXBUSD": { + "_default": "2020-01-01" + }, + "HNTBUSD": { + "_default": "2020-01-01" + }, + "FTTBUSD": { + "_default": "2020-01-01" + }, + "DOCKBUSD": { + "_default": "2020-01-01" + }, + "ADABIDR": { + "_default": "2020-01-01" + }, + "ERNBNB": { + "_default": "2020-01-01" + }, + "ERNBUSD": { + "_default": "2020-01-01" + }, + "ERNUSDT": { + "_default": "2020-01-01" + }, + "KLAYBTC": { + "_default": "2020-01-01" + }, + "KLAYBNB": { + "_default": "2020-01-01" + }, + "KLAYBUSD": { + "_default": "2020-01-01" + }, + "KLAYUSDT": { + "_default": "2020-01-01" + }, + "RUNEEUR": { + "_default": "2020-01-01" + }, + "MATICAUD": { + "_default": "2020-01-01" + }, + "DOTRUB": { + "_default": "2020-01-01" + }, + "UTKBUSD": { + "_default": "2020-01-01" + }, + "IOTXBUSD": { + "_default": "2020-01-01" + }, + "PHAUSDT": { + "_default": "2020-01-01" + }, + "SOLRUB": { + "_default": "2020-01-01" + }, + "RUNEAUD": { + "_default": "2020-01-01" + }, + "BUSDUAH": { + "_default": "2020-01-01" + }, + "BONDBTC": { + "_default": "2020-01-01" + }, + "BONDBNB": { + "_default": "2020-01-01" + }, + "BONDBUSD": { + "_default": "2020-01-01" + }, + "BONDUSDT": { + "_default": "2020-01-01" + }, + "MLNBTC": { + "_default": "2020-01-01" + }, + "MLNBNB": { + "_default": "2020-01-01" + }, + "MLNBUSD": { + "_default": "2020-01-01" + }, + "MLNUSDT": { + "_default": "2020-01-01" + }, + "GRTTRY": { + "_default": "2020-01-01" + }, + "CAKEBRL": { + "_default": "2020-01-01" + }, + "ICPRUB": { + "_default": "2020-01-01" + }, + "DOTAUD": { + "_default": "2020-01-01" + }, + "AAVEBRL": { + "_default": "2020-01-01" + }, + "EOSAUD": { + "_default": "2020-01-01" + }, + "DEXEUSDT": { + "_default": "2020-01-01" + }, + "LTOBUSD": { + "_default": "2020-01-01" + }, + "ADXBUSD": { + "_default": "2020-01-01" + }, + "QUICKBTC": { + "_default": "2020-01-01" + }, + "QUICKBNB": { + "_default": "2020-01-01" + }, + "QUICKBUSD": { + "_default": "2020-01-01" + }, + "C98USDT": { + "_default": "2020-01-01" + }, + "C98BUSD": { + "_default": "2020-01-01" + }, + "C98BNB": { + "_default": "2020-01-01" + }, + "C98BTC": { + "_default": "2020-01-01" + }, + "CLVBTC": { + "_default": "2020-01-01" + }, + "CLVBNB": { + "_default": "2020-01-01" + }, + "CLVBUSD": { + "_default": "2020-01-01" + }, + "CLVUSDT": { + "_default": "2020-01-01" + }, + "QNTBTC": { + "_default": "2020-01-01" + }, + "QNTBNB": { + "_default": "2020-01-01" + }, + "QNTBUSD": { + "_default": "2020-01-01" + }, + "QNTUSDT": { + "_default": "2020-01-01" + }, + "FLOWBTC": { + "_default": "2020-01-01" + }, + "FLOWBNB": { + "_default": "2020-01-01" + }, + "FLOWBUSD": { + "_default": "2020-01-01" + }, + "FLOWUSDT": { + "_default": "2020-01-01" + }, + "XECBUSD": { + "_default": "2020-01-01" + }, + "AXSBRL": { + "_default": "2020-01-01" + }, + "AXSAUD": { + "_default": "2020-01-01" + }, + "TVKUSDT": { + "_default": "2020-01-01" + }, + "MINABTC": { + "_default": "2020-01-01" + }, + "MINABNB": { + "_default": "2020-01-01" + }, + "MINABUSD": { + "_default": "2020-01-01" + }, + "MINAUSDT": { + "_default": "2020-01-01" + }, + "RAYBNB": { + "_default": "2020-01-01" + }, + "RAYBUSD": { + "_default": "2020-01-01" + }, + "RAYUSDT": { + "_default": "2020-01-01" + }, + "FARMBTC": { + "_default": "2020-01-01" + }, + "FARMBNB": { + "_default": "2020-01-01" + }, + "FARMBUSD": { + "_default": "2020-01-01" + }, + "FARMUSDT": { + "_default": "2020-01-01" + }, + "ALPACABTC": { + "_default": "2020-01-01" + }, + "ALPACABNB": { + "_default": "2020-01-01" + }, + "ALPACABUSD": { + "_default": "2020-01-01" + }, + "ALPACAUSDT": { + "_default": "2020-01-01" + }, + "TLMTRY": { + "_default": "2020-01-01" + }, + "QUICKUSDT": { + "_default": "2020-01-01" + }, + "ORNBUSD": { + "_default": "2020-01-01" + }, + "MBOXBTC": { + "_default": "2020-01-01" + }, + "MBOXBNB": { + "_default": "2020-01-01" + }, + "MBOXBUSD": { + "_default": "2020-01-01" + }, + "MBOXUSDT": { + "_default": "2020-01-01" + }, + "VGXBTC": { + "_default": "2020-01-01" + }, + "VGXETH": { + "_default": "2020-01-01" + }, + "FORUSDT": { + "_default": "2020-01-01" + }, + "REQUSDT": { + "_default": "2020-01-01" + }, + "GHSTUSDT": { + "_default": "2020-01-01" + }, + "TRURUB": { + "_default": "2020-01-01" + }, + "FISBRL": { + "_default": "2020-01-01" + }, + "WAXPUSDT": { + "_default": "2020-01-01" + }, + "WAXPBUSD": { + "_default": "2020-01-01" + }, + "WAXPBNB": { + "_default": "2020-01-01" + }, + "WAXPBTC": { + "_default": "2020-01-01" + }, + "TRIBEBTC": { + "_default": "2020-01-01" + }, + "TRIBEBNB": { + "_default": "2020-01-01" + }, + "TRIBEBUSD": { + "_default": "2020-01-01" + }, + "TRIBEUSDT": { + "_default": "2020-01-01" + }, + "GNOUSDT": { + "_default": "2020-01-01" + }, + "GNOBUSD": { + "_default": "2020-01-01" + }, + "GNOBNB": { + "_default": "2020-01-01" + }, + "GNOBTC": { + "_default": "2020-01-01" + }, + "ARPATRY": { + "_default": "2020-01-01" + }, + "PROMBTC": { + "_default": "2020-01-01" + }, + "MTLBUSD": { + "_default": "2020-01-01" + }, + "OGNBUSD": { + "_default": "2020-01-01" + }, + "XECUSDT": { + "_default": "2020-01-01" + }, + "C98BRL": { + "_default": "2020-01-01" + }, + "SOLAUD": { + "_default": "2020-01-01" + }, + "XRPBIDR": { + "_default": "2020-01-01" + }, + "POLYBUSD": { + "_default": "2020-01-01" + }, + "ELFUSDT": { + "_default": "2020-01-01" + }, + "DYDXUSDT": { + "_default": "2020-01-01" + }, + "DYDXBUSD": { + "_default": "2020-01-01" + }, + "DYDXBNB": { + "_default": "2020-01-01" + }, + "DYDXBTC": { + "_default": "2020-01-01" + }, + "ELFBUSD": { + "_default": "2020-01-01" + }, + "POLYUSDT": { + "_default": "2020-01-01" + }, + "IDEXUSDT": { + "_default": "2020-01-01" + }, + "VIDTUSDT": { + "_default": "2020-01-01" + }, + "SOLBIDR": { + "_default": "2020-01-01" + }, + "BTCUSDP": { + "_default": "2020-01-01" + }, + "ETHUSDP": { + "_default": "2020-01-01" + }, + "BNBUSDP": { + "_default": "2020-01-01" + }, + "USDPBUSD": { + "_default": "2020-01-01" + }, + "USDPUSDT": { + "_default": "2020-01-01" + }, + "GALAUSDT": { + "_default": "2020-01-01" + }, + "GALABUSD": { + "_default": "2020-01-01" + }, + "GALABNB": { + "_default": "2020-01-01" + }, + "GALABTC": { + "_default": "2020-01-01" + }, + "FTMBIDR": { + "_default": "2020-01-01" + }, + "ALGOBIDR": { + "_default": "2020-01-01" + }, + "CAKEAUD": { + "_default": "2020-01-01" + }, + "KSMAUD": { + "_default": "2020-01-01" + }, + "WAVESRUB": { + "_default": "2020-01-01" + }, + "SUNBUSD": { + "_default": "2020-01-01" + }, + "ILVUSDT": { + "_default": "2020-01-01" + }, + "ILVBUSD": { + "_default": "2020-01-01" + }, + "ILVBNB": { + "_default": "2020-01-01" + }, + "ILVBTC": { + "_default": "2020-01-01" + }, + "RENBUSD": { + "_default": "2020-01-01" + }, + "YGGUSDT": { + "_default": "2020-01-01" + }, + "YGGBUSD": { + "_default": "2020-01-01" + }, + "YGGBNB": { + "_default": "2020-01-01" + }, + "YGGBTC": { + "_default": "2020-01-01" + }, + "STXBUSD": { + "_default": "2020-01-01" + }, + "SYSUSDT": { + "_default": "2020-01-01" + }, + "DFUSDT": { + "_default": "2020-01-01" + }, + "SOLUSDC": { + "_default": "2020-01-01" + }, + "ARPARUB": { + "_default": "2020-01-01" + }, + "LTCUAH": { + "_default": "2020-01-01" + }, + "FETBUSD": { + "_default": "2020-01-01" + }, + "ARPABUSD": { + "_default": "2020-01-01" + }, + "LSKBUSD": { + "_default": "2020-01-01" + }, + "AVAXBIDR": { + "_default": "2020-01-01" + }, + "ALICEBIDR": { + "_default": "2020-01-01" + }, + "FIDAUSDT": { + "_default": "2020-01-01" + }, + "FIDABUSD": { + "_default": "2020-01-01" + }, + "FIDABNB": { + "_default": "2020-01-01" + }, + "FIDABTC": { + "_default": "2020-01-01" + }, + "DENTBUSD": { + "_default": "2020-01-01" + }, + "FRONTUSDT": { + "_default": "2020-01-01" + }, + "CVPUSDT": { + "_default": "2020-01-01" + }, + "AGLDBTC": { + "_default": "2020-01-01" + }, + "AGLDBNB": { + "_default": "2020-01-01" + }, + "AGLDBUSD": { + "_default": "2020-01-01" + }, + "AGLDUSDT": { + "_default": "2020-01-01" + }, + "RADBTC": { + "_default": "2020-01-01" + }, + "RADBNB": { + "_default": "2020-01-01" + }, + "RADBUSD": { + "_default": "2020-01-01" + }, + "RADUSDT": { + "_default": "2020-01-01" + }, + "UNIAUD": { + "_default": "2020-01-01" + }, + "HIVEBUSD": { + "_default": "2020-01-01" + }, + "STPTBUSD": { + "_default": "2020-01-01" + }, + "BETABTC": { + "_default": "2020-01-01" + }, + "BETABNB": { + "_default": "2020-01-01" + }, + "BETABUSD": { + "_default": "2020-01-01" + }, + "BETAUSDT": { + "_default": "2020-01-01" + }, + "SHIBAUD": { + "_default": "2020-01-01" + }, + "RAREBTC": { + "_default": "2020-01-01" + }, + "RAREBNB": { + "_default": "2020-01-01" + }, + "RAREBUSD": { + "_default": "2020-01-01" + }, + "RAREUSDT": { + "_default": "2020-01-01" + }, + "AVAXBRL": { + "_default": "2020-01-01" + }, + "AVAXAUD": { + "_default": "2020-01-01" + }, + "LUNAAUD": { + "_default": "2020-01-01" + }, + "TROYBUSD": { + "_default": "2020-01-01" + }, + "AXSETH": { + "_default": "2020-01-01" + }, + "FTMETH": { + "_default": "2020-01-01" + }, + "SOLETH": { + "_default": "2020-01-01" + }, + "SSVBTC": { + "_default": "2020-01-01" + }, + "SSVETH": { + "_default": "2020-01-01" + }, + "LAZIOTRY": { + "_default": "2020-01-01" + }, + "LAZIOEUR": { + "_default": "2020-01-01" + }, + "LAZIOBTC": { + "_default": "2020-01-01" + }, + "LAZIOUSDT": { + "_default": "2020-01-01" + }, + "CHESSBTC": { + "_default": "2020-01-01" + }, + "CHESSBNB": { + "_default": "2020-01-01" + }, + "CHESSBUSD": { + "_default": "2020-01-01" + }, + "CHESSUSDT": { + "_default": "2020-01-01" + }, + "FTMAUD": { + "_default": "2020-01-01" + }, + "FTMBRL": { + "_default": "2020-01-01" + }, + "SCRTBUSD": { + "_default": "2020-01-01" + }, + "ADXUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONUSDT": { + "_default": "2020-01-01" + }, + "CELOBUSD": { + "_default": "2020-01-01" + }, + "FTMRUB": { + "_default": "2020-01-01" + }, + "NUAUD": { + "_default": "2020-01-01" + }, + "NURUB": { + "_default": "2020-01-01" + }, + "REEFTRY": { + "_default": "2020-01-01" + }, + "REEFBIDR": { + "_default": "2020-01-01" + }, + "SHIBDOGE": { + "_default": "2020-01-01" + }, + "DARUSDT": { + "_default": "2020-01-01" + }, + "DARBUSD": { + "_default": "2020-01-01" + }, + "DARBNB": { + "_default": "2020-01-01" + }, + "DARBTC": { + "_default": "2020-01-01" + }, + "BNXBTC": { + "_default": "2020-01-01" + }, + "BNXBNB": { + "_default": "2020-01-01" + }, + "BNXBUSD": { + "_default": "2020-01-01" + }, + "BNXUSDT": { + "_default": "2020-01-01" + }, + "RGTUSDT": { + "_default": "2020-01-01" + }, + "RGTBTC": { + "_default": "2020-01-01" + }, + "RGTBUSD": { + "_default": "2020-01-01" + }, + "RGTBNB": { + "_default": "2020-01-01" + }, + "LAZIOBUSD": { + "_default": "2020-01-01" + }, + "OXTBUSD": { + "_default": "2020-01-01" + }, + "MANATRY": { + "_default": "2020-01-01" + }, + "ALGORUB": { + "_default": "2020-01-01" + }, + "SHIBUAH": { + "_default": "2020-01-01" + }, + "LUNABIDR": { + "_default": "2020-01-01" + }, + "AUDUSDC": { + "_default": "2020-01-01" + }, + "MOVRBTC": { + "_default": "2020-01-01" + }, + "MOVRBNB": { + "_default": "2020-01-01" + }, + "MOVRBUSD": { + "_default": "2020-01-01" + }, + "MOVRUSDT": { + "_default": "2020-01-01" + }, + "CITYBTC": { + "_default": "2020-01-01" + }, + "CITYBNB": { + "_default": "2020-01-01" + }, + "CITYBUSD": { + "_default": "2020-01-01" + }, + "CITYUSDT": { + "_default": "2020-01-01" + }, + "ENSBTC": { + "_default": "2020-01-01" + }, + "ENSBNB": { + "_default": "2020-01-01" + }, + "ENSBUSD": { + "_default": "2020-01-01" + }, + "ENSUSDT": { + "_default": "2020-01-01" + }, + "SANDETH": { + "_default": "2020-01-01" + }, + "DOTETH": { + "_default": "2020-01-01" + }, + "MATICETH": { + "_default": "2020-01-01" + }, + "ANKRBUSD": { + "_default": "2020-01-01" + }, + "SANDTRY": { + "_default": "2020-01-01" + }, + "MANABRL": { + "_default": "2020-01-01" + }, + "KP3RUSDT": { + "_default": "2020-01-01" + }, + "QIUSDT": { + "_default": "2020-01-01" + }, + "QIBUSD": { + "_default": "2020-01-01" + }, + "QIBNB": { + "_default": "2020-01-01" + }, + "QIBTC": { + "_default": "2020-01-01" + }, + "PORTOBTC": { + "_default": "2020-01-01" + }, + "PORTOUSDT": { + "_default": "2020-01-01" + }, + "PORTOTRY": { + "_default": "2020-01-01" + }, + "PORTOEUR": { + "_default": "2020-01-01" + }, + "POWRUSDT": { + "_default": "2020-01-01" + }, + "POWRBUSD": { + "_default": "2020-01-01" + }, + "AVAXETH": { + "_default": "2020-01-01" + }, + "SLPTRY": { + "_default": "2020-01-01" + }, + "FISTRY": { + "_default": "2020-01-01" + }, + "LRCTRY": { + "_default": "2020-01-01" + }, + "CHRETH": { + "_default": "2020-01-01" + }, + "FISBIDR": { + "_default": "2020-01-01" + }, + "VGXUSDT": { + "_default": "2020-01-01" + }, + "GALAETH": { + "_default": "2020-01-01" + }, + "JASMYUSDT": { + "_default": "2020-01-01" + }, + "JASMYBUSD": { + "_default": "2020-01-01" + }, + "JASMYBNB": { + "_default": "2020-01-01" + }, + "JASMYBTC": { + "_default": "2020-01-01" + }, + "AMPBTC": { + "_default": "2020-01-01" + }, + "AMPBNB": { + "_default": "2020-01-01" + }, + "AMPBUSD": { + "_default": "2020-01-01" + }, + "AMPUSDT": { + "_default": "2020-01-01" + }, + "PLABTC": { + "_default": "2020-01-01" + }, + "PLABNB": { + "_default": "2020-01-01" + }, + "PLABUSD": { + "_default": "2020-01-01" + }, + "PLAUSDT": { + "_default": "2020-01-01" + }, + "PYRBTC": { + "_default": "2020-01-01" + }, + "PYRBUSD": { + "_default": "2020-01-01" + }, + "PYRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBTC": { + "_default": "2020-01-01" + }, + "RNDRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBUSD": { + "_default": "2020-01-01" + }, + "ALCXBTC": { + "_default": "2020-01-01" + }, + "ALCXBUSD": { + "_default": "2020-01-01" + }, + "ALCXUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBTC": { + "_default": "2020-01-01" + }, + "SANTOSUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBRL": { + "_default": "2020-01-01" + }, + "SANTOSTRY": { + "_default": "2020-01-01" + }, + "MCBTC": { + "_default": "2020-01-01" + }, + "MCBUSD": { + "_default": "2020-01-01" + }, + "MCUSDT": { + "_default": "2020-01-01" + }, + "BELTRY": { + "_default": "2020-01-01" + }, + "COCOSBUSD": { + "_default": "2020-01-01" + }, + "DENTTRY": { + "_default": "2020-01-01" + }, + "ENJTRY": { + "_default": "2020-01-01" + }, + "NEORUB": { + "_default": "2020-01-01" + }, + "SANDAUD": { + "_default": "2020-01-01" + }, + "SLPBIDR": { + "_default": "2020-01-01" + }, + "ANYBTC": { + "_default": "2020-01-01" + }, + "ANYBUSD": { + "_default": "2020-01-01" + }, + "ANYUSDT": { + "_default": "2020-01-01" + }, + "BICOBTC": { + "_default": "2020-01-01" + }, + "BICOBUSD": { + "_default": "2020-01-01" + }, + "BICOUSDT": { + "_default": "2020-01-01" + }, + "FLUXBTC": { + "_default": "2020-01-01" + }, + "FLUXBUSD": { + "_default": "2020-01-01" + }, + "FLUXUSDT": { + "_default": "2020-01-01" + }, + "ALICETRY": { + "_default": "2020-01-01" + }, + "FXSUSDT": { + "_default": "2020-01-01" + }, + "GALABRL": { + "_default": "2020-01-01" + }, + "GALATRY": { + "_default": "2020-01-01" + }, + "LUNATRY": { + "_default": "2020-01-01" + }, + "REQBUSD": { + "_default": "2020-01-01" + }, + "SANDBRL": { + "_default": "2020-01-01" + }, + "MANABIDR": { + "_default": "2020-01-01" + }, + "SANDBIDR": { + "_default": "2020-01-01" + }, + "VOXELBTC": { + "_default": "2020-01-01" + }, + "VOXELBNB": { + "_default": "2020-01-01" + }, + "VOXELBUSD": { + "_default": "2020-01-01" + }, + "VOXELUSDT": { + "_default": "2020-01-01" + }, + "COSBUSD": { + "_default": "2020-01-01" + }, + "CTXCBUSD": { + "_default": "2020-01-01" + }, + "FTMTRY": { + "_default": "2020-01-01" + }, + "MANABNB": { + "_default": "2020-01-01" + }, + "MINATRY": { + "_default": "2020-01-01" + }, + "XTZTRY": { + "_default": "2020-01-01" + }, + "HIGHBTC": { + "_default": "2020-01-01" + }, + "HIGHBUSD": { + "_default": "2020-01-01" + }, + "HIGHUSDT": { + "_default": "2020-01-01" + }, + "CVXBTC": { + "_default": "2020-01-01" + }, + "CVXBUSD": { + "_default": "2020-01-01" + }, + "CVXUSDT": { + "_default": "2020-01-01" + }, + "PEOPLEBTC": { + "_default": "2020-01-01" + }, + "PEOPLEBUSD": { + "_default": "2020-01-01" + }, + "PEOPLEUSDT": { + "_default": "2020-01-01" + }, + "OOKIBUSD": { + "_default": "2020-01-01" + }, + "OOKIUSDT": { + "_default": "2020-01-01" + }, + "COCOSTRY": { + "_default": "2020-01-01" + }, + "GXSBNB": { + "_default": "2020-01-01" + }, + "LINKBNB": { + "_default": "2020-01-01" + }, + "LUNAETH": { + "_default": "2020-01-01" + }, + "MDTBUSD": { + "_default": "2020-01-01" + }, + "NULSBUSD": { + "_default": "2020-01-01" + }, + "SPELLBTC": { + "_default": "2020-01-01" + }, + "SPELLUSDT": { + "_default": "2020-01-01" + }, + "SPELLBUSD": { + "_default": "2020-01-01" + }, + "USTBTC": { + "_default": "2020-01-01" + }, + "USTBUSD": { + "_default": "2020-01-01" + }, + "USTUSDT": { + "_default": "2020-01-01" + }, + "JOEBTC": { + "_default": "2020-01-01" + }, + "JOEBUSD": { + "_default": "2020-01-01" + }, + "JOEUSDT": { + "_default": "2020-01-01" + }, + "ATOMETH": { + "_default": "2020-01-01" + }, + "DUSKBUSD": { + "_default": "2020-01-01" + }, + "EGLDETH": { + "_default": "2020-01-01" + }, + "ICPETH": { + "_default": "2020-01-01" + }, + "LUNABRL": { + "_default": "2020-01-01" + }, + "LUNAUST": { + "_default": "2020-01-01" + }, + "NEARETH": { + "_default": "2020-01-01" + }, + "ROSEBNB": { + "_default": "2020-01-01" + }, + "VOXELETH": { + "_default": "2020-01-01" + }, + "ALICEBNB": { + "_default": "2020-01-01" + }, + "ATOMTRY": { + "_default": "2020-01-01" + }, + "ETHUST": { + "_default": "2020-01-01" + }, + "GALAAUD": { + "_default": "2020-01-01" + }, + "LRCBNB": { + "_default": "2020-01-01" + }, + "ONEETH": { + "_default": "2020-01-01" + }, + "OOKIBNB": { + "_default": "2020-01-01" + }, + "ACHBTC": { + "_default": "2020-01-01" + }, + "ACHBUSD": { + "_default": "2020-01-01" + }, + "ACHUSDT": { + "_default": "2020-01-01" + }, + "IMXBTC": { + "_default": "2020-01-01" + }, + "IMXBUSD": { + "_default": "2020-01-01" + }, + "IMXUSDT": { + "_default": "2020-01-01" + }, + "GLMRBTC": { + "_default": "2020-01-01" + }, + "GLMRBUSD": { + "_default": "2020-01-01" + }, + "GLMRUSDT": { + "_default": "2020-01-01" + }, + "ATOMBIDR": { + "_default": "2020-01-01" + }, + "DYDXETH": { + "_default": "2020-01-01" + }, + "FARMETH": { + "_default": "2020-01-01" + }, + "FORBNB": { + "_default": "2020-01-01" + }, + "ICPTRY": { + "_default": "2020-01-01" + }, + "JASMYETH": { + "_default": "2020-01-01" + }, + "LINABNB": { + "_default": "2020-01-01" + }, + "OOKIETH": { + "_default": "2020-01-01" + }, + "ROSEETH": { + "_default": "2020-01-01" + }, + "UMABUSD": { + "_default": "2020-01-01" + }, + "UNIETH": { + "_default": "2020-01-01" + }, + "XTZETH": { + "_default": "2020-01-01" + }, + "LOKABTC": { + "_default": "2020-01-01" + }, + "LOKABNB": { + "_default": "2020-01-01" + }, + "LOKABUSD": { + "_default": "2020-01-01" + }, + "LOKAUSDT": { + "_default": "2020-01-01" + }, + "ATOMBRL": { + "_default": "2020-01-01" + }, + "BNBUST": { + "_default": "2020-01-01" + }, + "CRVETH": { + "_default": "2020-01-01" + }, + "HIGHBNB": { + "_default": "2020-01-01" + }, + "NEARRUB": { + "_default": "2020-01-01" + }, + "ROSETRY": { + "_default": "2020-01-01" + }, + "SCRTUSDT": { + "_default": "2020-01-01" + }, + "API3BTC": { + "_default": "2020-01-01" + }, + "API3BUSD": { + "_default": "2020-01-01" + }, + "API3USDT": { + "_default": "2020-01-01" + }, + "BTTCUSDT": { + "_default": "2020-01-01" + }, + "BTTCUSDC": { + "_default": "2020-01-01" + }, + "BTTCTRY": { + "_default": "2020-01-01" + }, + "ACABTC": { + "_default": "2020-01-01" + }, + "ACABUSD": { + "_default": "2020-01-01" + }, + "ACAUSDT": { + "_default": "2020-01-01" + }, + "ANCBTC": { + "_default": "2020-01-01" + }, + "ANCBUSD": { + "_default": "2020-01-01" + }, + "ANCUSDT": { + "_default": "2020-01-01" + }, + "BDOTDOT": { + "_default": "2020-01-01" + }, + "XNOBTC": { + "_default": "2020-01-01" + }, + "XNOETH": { + "_default": "2020-01-01" + }, + "XNOBUSD": { + "_default": "2020-01-01" + }, + "XNOUSDT": { + "_default": "2020-01-01" + }, + "COSTRY": { + "_default": "2020-01-01" + }, + "KAVAETH": { + "_default": "2020-01-01" + }, + "MCBNB": { + "_default": "2020-01-01" + }, + "ONETRY": { + "_default": "2020-01-01" + }, + "WOOBTC": { + "_default": "2020-01-01" + }, + "WOOBNB": { + "_default": "2020-01-01" + }, + "WOOBUSD": { + "_default": "2020-01-01" + }, + "WOOUSDT": { + "_default": "2020-01-01" + }, + "CELRETH": { + "_default": "2020-01-01" + }, + "PEOPLEBNB": { + "_default": "2020-01-01" + }, + "SLPBNB": { + "_default": "2020-01-01" + }, + "SPELLBNB": { + "_default": "2020-01-01" + }, + "SPELLTRY": { + "_default": "2020-01-01" + }, + "TFUELBUSD": { + "_default": "2020-01-01" + }, + "AXSTRY": { + "_default": "2020-01-01" + }, + "DARTRY": { + "_default": "2020-01-01" + }, + "NEARTRY": { + "_default": "2020-01-01" + }, + "IDEXBNB": { + "_default": "2020-01-01" + }, + "ALPINEEUR": { + "_default": "2020-01-01" + }, + "ALPINETRY": { + "_default": "2020-01-01" + }, + "ALPINEUSDT": { + "_default": "2020-01-01" + }, + "ALPINEBTC": { + "_default": "2020-01-01" + }, + "TUSDT": { + "_default": "2020-01-01" + }, + "TBUSD": { + "_default": "2020-01-01" + }, + "API3BNB": { + "_default": "2020-01-01" + }, + "BETAETH": { + "_default": "2020-01-01" + }, + "INJTRY": { + "_default": "2020-01-01" + }, + "TLMBNB": { + "_default": "2020-01-01" + }, + "ASTRBUSD": { + "_default": "2020-01-01" + }, + "ASTRUSDT": { + "_default": "2020-01-01" + }, + "API3TRY": { + "_default": "2020-01-01" + }, + "GLMRBNB": { + "_default": "2020-01-01" + }, + "MBOXTRY": { + "_default": "2020-01-01" + }, + "GMTBTC": { + "_default": "2020-01-01" + }, + "GMTBNB": { + "_default": "2020-01-01" + }, + "GMTBUSD": { + "_default": "2020-01-01" + }, + "GMTUSDT": { + "_default": "2020-01-01" + }, + "ANCBNB": { + "_default": "2020-01-01" + }, + "ATOMEUR": { + "_default": "2020-01-01" + }, + "GALAEUR": { + "_default": "2020-01-01" + }, + "KSMETH": { + "_default": "2020-01-01" + }, + "UMATRY": { + "_default": "2020-01-01" + }, + "KDABTC": { + "_default": "2020-01-01" + }, + "KDABUSD": { + "_default": "2020-01-01" + }, + "KDAUSDT": { + "_default": "2020-01-01" + }, + "APEUSDT": { + "_default": "2020-01-01" + }, + "APEBUSD": { + "_default": "2020-01-01" + }, + "APEBTC": { + "_default": "2020-01-01" + }, + "ALPINEBUSD": { + "_default": "2020-01-01" + }, + "LUNAGBP": { + "_default": "2020-01-01" + }, + "NEAREUR": { + "_default": "2020-01-01" + }, + "TWTTRY": { + "_default": "2020-01-01" + }, + "WAVESEUR": { + "_default": "2020-01-01" + }, + "APEEUR": { + "_default": "2020-01-01" + }, + "APEGBP": { + "_default": "2020-01-01" + }, + "APETRY": { + "_default": "2020-01-01" + }, + "BSWUSDT": { + "_default": "2020-01-01" + }, + "BSWBUSD": { + "_default": "2020-01-01" + }, + "BSWBNB": { + "_default": "2020-01-01" + }, + "APEBNB": { + "_default": "2020-01-01" + }, + "GMTBRL": { + "_default": "2020-01-01" + }, + "GMTETH": { + "_default": "2020-01-01" + }, + "JASMYTRY": { + "_default": "2020-01-01" + }, + "SANTOSBUSD": { + "_default": "2020-01-01" + }, + "APEAUD": { + "_default": "2020-01-01" + }, + "BIFIUSDT": { + "_default": "2020-01-01" + }, + "GMTEUR": { + "_default": "2020-01-01" + }, + "IMXBNB": { + "_default": "2020-01-01" + }, + "RUNEETH": { + "_default": "2020-01-01" + }, + "AVAXGBP": { + "_default": "2020-01-01" + }, + "MULTIBTC": { + "_default": "2020-01-01" + }, + "MULTIBUSD": { + "_default": "2020-01-01" + }, + "MULTIUSDT": { + "_default": "2020-01-01" + }, + "APEETH": { + "_default": "2020-01-01" + }, + "BSWETH": { + "_default": "2020-01-01" + }, + "FILTRY": { + "_default": "2020-01-01" + }, + "FTMEUR": { + "_default": "2020-01-01" + }, + "GMTGBP": { + "_default": "2020-01-01" + }, + "ZILTRY": { + "_default": "2020-01-01" + }, + "GMTTRY": { + "_default": "2020-01-01" + }, + "WAVESTRY": { + "_default": "2020-01-01" + }, + "BTCUST": { + "_default": "2020-01-01" + }, + "ASTRBTC": { + "_default": "2020-01-01" + }, + "ASTRETH": { + "_default": "2020-01-01" + }, + "BSWTRY": { + "_default": "2020-01-01" + }, + "FTTETH": { + "_default": "2020-01-01" + }, + "FUNBNB": { + "_default": "2020-01-01" + }, + "PORTOBUSD": { + "_default": "2020-01-01" + }, + "STEEMUSDT": { + "_default": "2020-01-01" + }, + "ZILEUR": { + "_default": "2020-01-01" + }, + "APEBRL": { + "_default": "2020-01-01" + }, + "AUDIOTRY": { + "_default": "2020-01-01" + }, + "BTTCBUSD": { + "_default": "2020-01-01" + }, + "GMTAUD": { + "_default": "2020-01-01" + }, + "MBLBUSD": { + "_default": "2020-01-01" + }, + "MOBUSDT": { + "_default": "2020-01-01" + }, + "MOBBUSD": { + "_default": "2020-01-01" + }, + "MOBBTC": { + "_default": "2020-01-01" + }, + "NEXOUSDT": { + "_default": "2020-01-01" + }, + "NEXOBUSD": { + "_default": "2020-01-01" + }, + "NEXOBTC": { + "_default": "2020-01-01" + }, + "REIUSDT": { + "_default": "2020-01-01" + }, + "REIBNB": { + "_default": "2020-01-01" + }, + "REIETH": { + "_default": "2020-01-01" + }, + "GALUSDT": { + "_default": "2020-01-01" + }, + "GALBUSD": { + "_default": "2020-01-01" + }, + "GALBNB": { + "_default": "2020-01-01" + }, + "GALBTC": { + "_default": "2020-01-01" + }, + "JASMYEUR": { + "_default": "2020-01-01" + }, + "KNCBNB": { + "_default": "2020-01-01" + }, + "SHIBGBP": { + "_default": "2020-01-01" + }, + "GALEUR": { + "_default": "2020-01-01" + }, + "GALTRY": { + "_default": "2020-01-01" + }, + "LDOBUSD": { + "_default": "2020-01-01" + }, + "LDOUSDT": { + "_default": "2020-01-01" + }, + "LDOBTC": { + "_default": "2020-01-01" + }, + "ENSTRY": { + "_default": "2020-01-01" + }, + "DAREUR": { + "_default": "2020-01-01" + }, + "DARETH": { + "_default": "2020-01-01" + }, + "ALGOETH": { + "_default": "2020-01-01" + }, + "ALGOTRY": { + "_default": "2020-01-01" + }, + "GALETH": { + "_default": "2020-01-01" + }, + "EPXUSDT": { + "_default": "2020-01-01" + }, + "EPXBUSD": { + "_default": "2020-01-01" + }, + "RUNETRY": { + "_default": "2020-01-01" + }, + "GALBRL": { + "_default": "2020-01-01" + }, + "STEEMBUSD": { + "_default": "2020-01-01" + }, + "CVCBUSD": { + "_default": "2020-01-01" + }, + "REIBUSD": { + "_default": "2020-01-01" + }, + "DREPBUSD": { + "_default": "2020-01-01" + }, + "AKROBUSD": { + "_default": "2020-01-01" + }, + "PUNDIXBUSD": { + "_default": "2020-01-01" + }, + "LUNCBUSD": { + "_default": "2020-01-01" + }, + "USTCBUSD": { + "_default": "2020-01-01" + }, + "OPBTC": { + "_default": "2020-01-01" + }, + "OPBUSD": { + "_default": "2020-01-01" + }, + "OPUSDT": { + "_default": "2020-01-01" + }, + "OGBUSD": { + "_default": "2020-01-01" + }, + "KEYBUSD": { + "_default": "2020-01-01" + }, + "ASRBUSD": { + "_default": "2020-01-01" + }, + "FIROBUSD": { + "_default": "2020-01-01" + }, + "NKNBUSD": { + "_default": "2020-01-01" + }, + "OPBNB": { + "_default": "2020-01-01" + }, + "OPEUR": { + "_default": "2020-01-01" + }, + "GTOBUSD": { + "_default": "2020-01-01" + }, + "SNXETH": { + "_default": "2020-01-01" + }, + "WBTCBUSD": { + "_default": "2020-01-01" + }, + "BELETH": { + "_default": "2020-01-01" + }, + "LITETH": { + "_default": "2020-01-01" + }, + "LEVERUSDT": { + "_default": "2020-01-01" + }, + "LEVERBUSD": { + "_default": "2020-01-01" + }, + "BURGERETH": { + "_default": "2020-01-01" + }, + "PEOPLEETH": { + "_default": "2020-01-01" + }, + "UNFIETH": { + "_default": "2020-01-01" + }, + "BONDETH": { + "_default": "2020-01-01" + }, + "STORJTRY": { + "_default": "2020-01-01" + }, + "OPETH": { + "_default": "2020-01-01" + }, + "ETCTRY": { + "_default": "2020-01-01" + }, + "WINGETH": { + "_default": "2020-01-01" + }, + "FILETH": { + "_default": "2020-01-01" + }, + "GLMBUSD": { + "_default": "2020-01-01" + }, + "SSVBUSD": { + "_default": "2020-01-01" + }, + "STGBTC": { + "_default": "2020-01-01" + }, + "STGBUSD": { + "_default": "2020-01-01" + }, + "STGUSDT": { + "_default": "2020-01-01" + }, + "ANKRTRY": { + "_default": "2020-01-01" + }, + "ARKBUSD": { + "_default": "2020-01-01" + }, + "BETHBUSD": { + "_default": "2020-01-01" + }, + "LOOMBUSD": { + "_default": "2020-01-01" + }, + "SNMBUSD": { + "_default": "2020-01-01" + }, + "AMBBUSD": { + "_default": "2020-01-01" + }, + "LUNCUSDT": { + "_default": "2020-01-01" + }, + "PHBBUSD": { + "_default": "2020-01-01" + }, + "GASBUSD": { + "_default": "2020-01-01" + }, + "NEBLBUSD": { + "_default": "2020-01-01" + }, + "PROSBUSD": { + "_default": "2020-01-01" + }, + "VIBBUSD": { + "_default": "2020-01-01" + }, + "GMXBTC": { + "_default": "2020-01-01" + }, + "GMXBUSD": { + "_default": "2020-01-01" + }, + "GMXUSDT": { + "_default": "2020-01-01" + }, + "AGIXBUSD": { + "_default": "2020-01-01" + }, + "NEBLUSDT": { + "_default": "2020-01-01" + }, + "SNTBUSD": { + "_default": "2020-01-01" + }, + "POLYXBTC": { + "_default": "2020-01-01" + }, + "POLYXBUSD": { + "_default": "2020-01-01" + }, + "POLYXUSDT": { + "_default": "2020-01-01" + }, + "APTBTC": { + "_default": "2020-01-01" + }, + "APTUSDT": { + "_default": "2020-01-01" + }, + "APTBUSD": { + "_default": "2020-01-01" + }, + "BTCPLN": { + "_default": "2020-01-01" + }, + "ETHPLN": { + "_default": "2020-01-01" + }, + "BUSDPLN": { + "_default": "2020-01-01" + }, + "APTEUR": { + "_default": "2020-01-01" + }, + "APTTRY": { + "_default": "2020-01-01" + }, + "APTBRL": { + "_default": "2020-01-01" + }, + "QKCBUSD": { + "_default": "2020-01-01" + }, + "OSMOBTC": { + "_default": "2020-01-01" + }, + "OSMOUSDT": { + "_default": "2020-01-01" + }, + "OSMOBUSD": { + "_default": "2020-01-01" + }, + "HFTBTC": { + "_default": "2020-01-01" + }, + "HFTBUSD": { + "_default": "2020-01-01" + }, + "HFTUSDT": { + "_default": "2020-01-01" + }, + "ARPAETH": { + "_default": "2020-01-01" + }, + "PHBUSDT": { + "_default": "2020-01-01" + }, + "VITEBUSD": { + "_default": "2020-01-01" + }, + "HOOKBTC": { + "_default": "2020-01-01" + }, + "HOOKUSDT": { + "_default": "2020-01-01" + }, + "HOOKBUSD": { + "_default": "2020-01-01" + }, + "HOOKBNB": { + "_default": "2020-01-01" + }, + "MAGICBTC": { + "_default": "2020-01-01" + }, + "MAGICBUSD": { + "_default": "2020-01-01" + }, + "MAGICUSDT": { + "_default": "2020-01-01" + }, + "BUSDRON": { + "_default": "2020-01-01" + }, + "HIFIETH": { + "_default": "2020-01-01" + }, + "HIFIUSDT": { + "_default": "2020-01-01" + }, + "RPLBTC": { + "_default": "2020-01-01" + }, + "RPLBUSD": { + "_default": "2020-01-01" + }, + "RPLUSDT": { + "_default": "2020-01-01" + }, + "PROSUSDT": { + "_default": "2020-01-01" + }, + "FETTRY": { + "_default": "2020-01-01" + }, + "GFTBUSD": { + "_default": "2020-01-01" + }, + "AGIXUSDT": { + "_default": "2020-01-01" + }, + "APTETH": { + "_default": "2020-01-01" + }, + "BTCRON": { + "_default": "2020-01-01" + }, + "GNSUSDT": { + "_default": "2020-01-01" + }, + "GNSBTC": { + "_default": "2020-01-01" + }, + "SYNBTC": { + "_default": "2020-01-01" + }, + "SYNUSDT": { + "_default": "2020-01-01" + }, + "VIBUSDT": { + "_default": "2020-01-01" + }, + "SSVUSDT": { + "_default": "2020-01-01" + }, + "LQTYUSDT": { + "_default": "2020-01-01" + }, + "LQTYBTC": { + "_default": "2020-01-01" + }, + "AMBUSDT": { + "_default": "2020-01-01" + }, + "BETHUSDT": { + "_default": "2020-01-01" + }, + "CFXTRY": { + "_default": "2020-01-01" + }, + "STXTRY": { + "_default": "2020-01-01" + }, + "USTCUSDT": { + "_default": "2020-01-01" + }, + "GASUSDT": { + "_default": "2020-01-01" + }, + "GLMUSDT": { + "_default": "2020-01-01" + }, + "PROMUSDT": { + "_default": "2020-01-01" + }, + "QKCUSDT": { + "_default": "2020-01-01" + }, + "UFTUSDT": { + "_default": "2020-01-01" + }, + "IDBTC": { + "_default": "2020-01-01" + }, + "IDBNB": { + "_default": "2020-01-01" + }, + "IDUSDT": { + "_default": "2020-01-01" + }, + "ARBBTC": { + "_default": "2020-01-01" + }, + "ARBUSDT": { + "_default": "2020-01-01" + }, + "AGIXTRY": { + "_default": "2020-01-01" + }, + "LOOMUSDT": { + "_default": "2020-01-01" + }, + "OAXUSDT": { + "_default": "2020-01-01" + }, + "ARBTUSD": { + "_default": "2020-01-01" + }, + "ARBTRY": { + "_default": "2020-01-01" + }, + "ARBEUR": { + "_default": "2020-01-01" + }, + "IDTUSD": { + "_default": "2020-01-01" + }, + "IDTRY": { + "_default": "2020-01-01" + }, + "IDEUR": { + "_default": "2020-01-01" + }, + "LDOTUSD": { + "_default": "2020-01-01" + }, + "MATICTUSD": { + "_default": "2020-01-01" + }, + "OPTUSD": { + "_default": "2020-01-01" + }, + "SOLTUSD": { + "_default": "2020-01-01" + }, + "SSVTUSD": { + "_default": "2020-01-01" + }, + "RDNTBTC": { + "_default": "2020-01-01" + }, + "RDNTUSDT": { + "_default": "2020-01-01" + }, + "RDNTTUSD": { + "_default": "2020-01-01" + }, + "ARBRUB": { + "_default": "2020-01-01" + }, + "JOETRY": { + "_default": "2020-01-01" + }, + "MAGICTRY": { + "_default": "2020-01-01" + }, + "USDTPLN": { + "_default": "2020-01-01" + }, + "ACHTRY": { + "_default": "2020-01-01" + }, + "XVSTRY": { + "_default": "2020-01-01" + }, + "EGLDRON": { + "_default": "2020-01-01" + }, + "USDTRON": { + "_default": "2020-01-01" + }, + "USDTARS": { + "_default": "2020-01-01" + }, + "DOGETUSD": { + "_default": "2020-01-01" + }, + "WBTCUSDT": { + "_default": "2020-01-01" + }, + "EDUUSDT": { + "_default": "2020-01-01" + }, + "EDUTUSD": { + "_default": "2020-01-01" + }, + "EDUBNB": { + "_default": "2020-01-01" + }, + "EDUBTC": { + "_default": "2020-01-01" + }, + "EDUEUR": { + "_default": "2020-01-01" + }, + "EDUTRY": { + "_default": "2020-01-01" + }, + "SUIUSDT": { + "_default": "2020-01-01" + }, + "SUITUSD": { + "_default": "2020-01-01" + }, + "SUIBTC": { + "_default": "2020-01-01" + }, + "SUIBNB": { + "_default": "2020-01-01" + }, + "SUIEUR": { + "_default": "2020-01-01" + }, + "SUITRY": { + "_default": "2020-01-01" + }, + "AERGOUSDT": { + "_default": "2020-01-01" + }, + "RNDRTRY": { + "_default": "2020-01-01" + }, + "PEPEUSDT": { + "_default": "2020-01-01" + }, + "PEPETUSD": { + "_default": "2020-01-01" + }, + "FLOKIUSDT": { + "_default": "2020-01-01" + }, + "FLOKITUSD": { + "_default": "2020-01-01" + }, + "OGTRY": { + "_default": "2020-01-01" + }, + "PEPETRY": { + "_default": "2020-01-01" + }, + "WBETHETH": { + "_default": "2020-01-01" + }, + "ASTUSDT": { + "_default": "2020-01-01" + }, + "SNTUSDT": { + "_default": "2020-01-01" + }, + "FLOKITRY": { + "_default": "2020-01-01" + }, + "CITYTRY": { + "_default": "2020-01-01" + }, + "COMBOUSDT": { + "_default": "2020-01-01" + }, + "COMBOBNB": { + "_default": "2020-01-01" + }, + "COMBOTRY": { + "_default": "2020-01-01" + }, + "LTCTRY": { + "_default": "2020-01-01" + }, + "RADTRY": { + "_default": "2020-01-01" + }, + "BTCARS": { + "_default": "2020-01-01" + }, + "OPTRY": { + "_default": "2020-01-01" + }, + "PAXGTRY": { + "_default": "2020-01-01" + }, + "MAVBTC": { + "_default": "2020-01-01" + }, + "MAVUSDT": { + "_default": "2020-01-01" + }, + "MAVTUSD": { + "_default": "2020-01-01" + }, + "CFXTUSD": { + "_default": "2020-01-01" + }, + "PENDLEBTC": { + "_default": "2020-01-01" + }, + "PENDLEUSDT": { + "_default": "2020-01-01" + }, + "PENDLETUSD": { + "_default": "2020-01-01" + }, + "MAVTRY": { + "_default": "2020-01-01" + }, + "OCEANTRY": { + "_default": "2020-01-01" + }, + "TUSDTRY": { + "_default": "2020-01-01" + }, + "ARBETH": { + "_default": "2020-01-01" + }, + "BCHTRY": { + "_default": "2020-01-01" + }, + "XVGTRY": { + "_default": "2020-01-01" + }, + "XVGTUSD": { + "_default": "2020-01-01" + }, + "ARKMUSDT": { + "_default": "2020-01-01" + }, + "ARKMTUSD": { + "_default": "2020-01-01" + }, + "ARKMTRY": { + "_default": "2020-01-01" + }, + "ARKMBNB": { + "_default": "2020-01-01" + }, + "ARKMBTC": { + "_default": "2020-01-01" + }, + "WBETHUSDT": { + "_default": "2020-01-01" + }, + "ACATRY": { + "_default": "2020-01-01" + }, + "AVAXTUSD": { + "_default": "2020-01-01" + }, + "COMPTUSD": { + "_default": "2020-01-01" + }, + "COMPTRY": { + "_default": "2020-01-01" + }, + "XECTRY": { + "_default": "2020-01-01" + }, + "QUICKTUSD": { + "_default": "2020-01-01" + }, + "WLDUSDT": { + "_default": "2020-01-01" + }, + "WLDBTC": { + "_default": "2020-01-01" + }, + "BNBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDBUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDT": { + "_default": "2020-01-01" + }, + "ARKMRUB": { + "_default": "2020-01-01" + }, + "WLDTRY": { + "_default": "2020-01-01" + }, + "WLDRUB": { + "_default": "2020-01-01" + }, + "AMPTRY": { + "_default": "2020-01-01" + }, + "OGNTRY": { + "_default": "2020-01-01" + }, + "BTCFDUSD": { + "_default": "2020-01-01" + }, + "ETHFDUSD": { + "_default": "2020-01-01" + }, + "ASRTRY": { + "_default": "2020-01-01" + }, + "ATMTRY": { + "_default": "2020-01-01" + }, + "ACMTRY": { + "_default": "2020-01-01" + }, + "BARTRY": { + "_default": "2020-01-01" + }, + "JUVTRY": { + "_default": "2020-01-01" + }, + "PSGTRY": { + "_default": "2020-01-01" + }, + "SEIBNB": { + "_default": "2020-01-01" + }, + "SEIBTC": { + "_default": "2020-01-01" + }, + "SEIFDUSD": { + "_default": "2020-01-01" + }, + "SEITRY": { + "_default": "2020-01-01" + }, + "SEIUSDT": { + "_default": "2020-01-01" + }, + "CYBERBNB": { + "_default": "2020-01-01" + }, + "CYBERBTC": { + "_default": "2020-01-01" + }, + "CYBERFDUSD": { + "_default": "2020-01-01" + }, + "CYBERTRY": { + "_default": "2020-01-01" + }, + "CYBERUSDT": { + "_default": "2020-01-01" + }, + "CYBERTUSD": { + "_default": "2020-01-01" + }, + "SEITUSD": { + "_default": "2020-01-01" + }, + "LPTTRY": { + "_default": "2020-01-01" + }, + "UNITRY": { + "_default": "2020-01-01" + }, + "SOLFDUSD": { + "_default": "2020-01-01" + }, + "TOMOTRY": { + "_default": "2020-01-01" + }, + "UNFITRY": { + "_default": "2020-01-01" + }, + "XRPFDUSD": { + "_default": "2020-01-01" + }, + "DOGEFDUSD": { + "_default": "2020-01-01" + }, + "CYBERETH": { + "_default": "2020-01-01" + }, + "MTLTRY": { + "_default": "2020-01-01" + }, + "ARKUSDT": { + "_default": "2020-01-01" + }, + "CREAMUSDT": { + "_default": "2020-01-01" + }, + "GFTUSDT": { + "_default": "2020-01-01" + }, + "IQUSDT": { + "_default": "2020-01-01" + }, + "USDTVAI": { + "_default": "2020-01-01" + }, + "ARBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDTRY": { + "_default": "2020-01-01" + }, + "FRONTTRY": { + "_default": "2020-01-01" + }, + "SUIFDUSD": { + "_default": "2020-01-01" + }, + "NTRNBTC": { + "_default": "2020-01-01" + }, + "NTRNUSDT": { + "_default": "2020-01-01" + }, + "NTRNBNB": { + "_default": "2020-01-01" + }, + "FILFDUSD": { + "_default": "2020-01-01" + }, + "FRONTTUSD": { + "_default": "2020-01-01" + }, + "LEVERTRY": { + "_default": "2020-01-01" + }, + "LTCFDUSD": { + "_default": "2020-01-01" + }, + "ADAFDUSD": { + "_default": "2020-01-01" + }, + "RUNETUSD": { + "_default": "2020-01-01" + }, + "TRBTRY": { + "_default": "2020-01-01" + }, + "ATOMFDUSD": { + "_default": "2020-01-01" + }, + "AVAXFDUSD": { + "_default": "2020-01-01" + }, + "BANDTRY": { + "_default": "2020-01-01" + }, + "BCHFDUSD": { + "_default": "2020-01-01" + }, + "LOOMTRY": { + "_default": "2020-01-01" + }, + "MATICFDUSD": { + "_default": "2020-01-01" + }, + "ALGOFDUSD": { + "_default": "2020-01-01" + }, + "DOTFDUSD": { + "_default": "2020-01-01" + }, + "FTMFDUSD": { + "_default": "2020-01-01" + }, + "LINKFDUSD": { + "_default": "2020-01-01" + }, + "NEARFDUSD": { + "_default": "2020-01-01" + }, + "STRAXTRY": { + "_default": "2020-01-01" + }, + "TIABTC": { + "_default": "2020-01-01" + }, + "TIAUSDT": { + "_default": "2020-01-01" + }, + "TIATRY": { + "_default": "2020-01-01" + }, + "MEMEBNB": { + "_default": "2020-01-01" + }, + "MEMEUSDT": { + "_default": "2020-01-01" + }, + "MEMEFDUSD": { + "_default": "2020-01-01" + }, + "MEMETUSD": { + "_default": "2020-01-01" + }, + "MEMETRY": { + "_default": "2020-01-01" + }, + "ORDIBTC": { + "_default": "2020-01-01" + }, + "ORDIUSDT": { + "_default": "2020-01-01" + }, + "ORDITRY": { + "_default": "2020-01-01" + }, + "EGLDFDUSD": { + "_default": "2020-01-01" + }, + "FETFDUSD": { + "_default": "2020-01-01" + }, + "GASFDUSD": { + "_default": "2020-01-01" + }, + "INJETH": { + "_default": "2020-01-01" + }, + "INJTUSD": { + "_default": "2020-01-01" + }, + "OPFDUSD": { + "_default": "2020-01-01" + }, + "ORDIFDUSD": { + "_default": "2020-01-01" + }, + "ORDITUSD": { + "_default": "2020-01-01" + }, + "RNDRFDUSD": { + "_default": "2020-01-01" + }, + "SHIBTUSD": { + "_default": "2020-01-01" + }, + "BEAMXUSDT": { + "_default": "2020-01-01" + }, + "ARKTRY": { + "_default": "2020-01-01" + }, + "BEAMXTRY": { + "_default": "2020-01-01" + }, + "CAKETRY": { + "_default": "2020-01-01" + }, + "CAKETUSD": { + "_default": "2020-01-01" + }, + "DYDXFDUSD": { + "_default": "2020-01-01" + }, + "PIVXUSDT": { + "_default": "2020-01-01" + }, + "RUNEFDUSD": { + "_default": "2020-01-01" + }, + "TIATUSD": { + "_default": "2020-01-01" + }, + "DOTTUSD": { + "_default": "2020-01-01" + }, + "GALAFDUSD": { + "_default": "2020-01-01" + }, + "WLDFDUSD": { + "_default": "2020-01-01" + }, + "GASTRY": { + "_default": "2020-01-01" + }, + "NTRNTRY": { + "_default": "2020-01-01" + }, + "VICBTC": { + "_default": "2020-01-01" + }, + "VICUSDT": { + "_default": "2020-01-01" + }, + "VICTRY": { + "_default": "2020-01-01" + }, + "BLURBTC": { + "_default": "2020-01-01" + }, + "BLURUSDT": { + "_default": "2020-01-01" + }, + "BLURTRY": { + "_default": "2020-01-01" + }, + "BLURFDUSD": { + "_default": "2020-01-01" + }, + "SUPERFDUSD": { + "_default": "2020-01-01" + }, + "USTCFDUSD": { + "_default": "2020-01-01" + }, + "USTCTRY": { + "_default": "2020-01-01" + }, + "DYDXTRY": { + "_default": "2020-01-01" + }, + "VANRYUSDT": { + "_default": "2020-01-01" + }, + "VANRYBTC": { + "_default": "2020-01-01" + }, + "BTCAEUR": { + "_default": "2020-01-01" + }, + "AEURUSDT": { + "_default": "2020-01-01" + }, + "ETHAEUR": { + "_default": "2020-01-01" + }, + "EURAEUR": { + "_default": "2020-01-01" + }, + "AUCTIONFDUSD": { + "_default": "2020-01-01" + }, + "IOTAFDUSD": { + "_default": "2020-01-01" + }, + "LUNCTRY": { + "_default": "2020-01-01" + }, + "SUPERTRY": { + "_default": "2020-01-01" + }, + "JTOUSDT": { + "_default": "2020-01-01" + }, + "JTOFDUSD": { + "_default": "2020-01-01" + }, + "JTOTRY": { + "_default": "2020-01-01" + }, + "1000SATSUSDT": { + "_default": "2020-01-01" + }, + "1000SATSFDUSD": { + "_default": "2020-01-01" + }, + "1000SATSTRY": { + "_default": "2020-01-01" + }, + "SHIBFDUSD": { + "_default": "2020-01-01" + }, + "SANDFDUSD": { + "_default": "2020-01-01" + }, + "MEMEETH": { + "_default": "2020-01-01" + }, + "IOTATRY": { + "_default": "2020-01-01" + }, + "INJFDUSD": { + "_default": "2020-01-01" + }, + "FIDATRY": { + "_default": "2020-01-01" + }, + "BONKUSDT": { + "_default": "2020-01-01" + }, + "BONKFDUSD": { + "_default": "2020-01-01" + }, + "BONKTRY": { + "_default": "2020-01-01" + }, + "ACEFDUSD": { + "_default": "2020-01-01" + }, + "ACEUSDT": { + "_default": "2020-01-01" + }, + "ACEBNB": { + "_default": "2020-01-01" + }, + "ACEBTC": { + "_default": "2020-01-01" + }, + "ACETRY": { + "_default": "2020-01-01" + }, + "BLZFDUSD": { + "_default": "2020-01-01" + }, + "RARETRY": { + "_default": "2020-01-01" + }, + "VANRYTRY": { + "_default": "2020-01-01" + }, + "NFPBTC": { + "_default": "2020-01-01" + }, + "NFPUSDT": { + "_default": "2020-01-01" + }, + "NFPBNB": { + "_default": "2020-01-01" + }, + "NFPFDUSD": { + "_default": "2020-01-01" + }, + "NFPTUSD": { + "_default": "2020-01-01" + }, + "NFPTRY": { + "_default": "2020-01-01" + }, + "ARBUSDC": { + "_default": "2020-01-01" + }, + "AVAXUSDC": { + "_default": "2020-01-01" + }, + "DOTUSDC": { + "_default": "2020-01-01" + }, + "INJUSDC": { + "_default": "2020-01-01" + }, + "MATICUSDC": { + "_default": "2020-01-01" + }, + "OPUSDC": { + "_default": "2020-01-01" + }, + "ORDIUSDC": { + "_default": "2020-01-01" + }, + "AIBTC": { + "_default": "2020-01-01" + }, + "AIUSDT": { + "_default": "2020-01-01" + }, + "AIBNB": { + "_default": "2020-01-01" + }, + "AIFDUSD": { + "_default": "2020-01-01" + }, + "AITUSD": { + "_default": "2020-01-01" + }, + "AITRY": { + "_default": "2020-01-01" + }, + "ICPFDUSD": { + "_default": "2020-01-01" + }, + "LDOFDUSD": { + "_default": "2020-01-01" + }, + "MOVRTRY": { + "_default": "2020-01-01" + }, + "XAIBTC": { + "_default": "2020-01-01" + }, + "XAIUSDT": { + "_default": "2020-01-01" + }, + "XAIBNB": { + "_default": "2020-01-01" + }, + "XAIFDUSD": { + "_default": "2020-01-01" + }, + "XAITUSD": { + "_default": "2020-01-01" + }, + "XAITRY": { + "_default": "2020-01-01" + }, + "SKLTRY": { + "_default": "2020-01-01" + }, + "STXFDUSD": { + "_default": "2020-01-01" + }, + "TIAFDUSD": { + "_default": "2020-01-01" + }, + "MANTABTC": { + "_default": "2020-01-01" + }, + "MANTAUSDT": { + "_default": "2020-01-01" + }, + "MANTABNB": { + "_default": "2020-01-01" + }, + "MANTAFDUSD": { + "_default": "2020-01-01" + }, + "MANTATRY": { + "_default": "2020-01-01" + }, + "ENSFDUSD": { + "_default": "2020-01-01" + }, + "ETCFDUSD": { + "_default": "2020-01-01" + }, + "SUIUSDC": { + "_default": "2020-01-01" + }, + "TIAUSDC": { + "_default": "2020-01-01" + }, + "CHZFDUSD": { + "_default": "2020-01-01" + }, + "MANTAUSDC": { + "_default": "2020-01-01" + }, + "ALTBTC": { + "_default": "2020-01-01" + }, + "ALTUSDT": { + "_default": "2020-01-01" + }, + "ALTBNB": { + "_default": "2020-01-01" + }, + "ALTFDUSD": { + "_default": "2020-01-01" + }, + "ALTTRY": { + "_default": "2020-01-01" + }, + "APTFDUSD": { + "_default": "2020-01-01" + }, + "BLURUSDC": { + "_default": "2020-01-01" + }, + "JUPUSDT": { + "_default": "2020-01-01" + }, + "JUPFDUSD": { + "_default": "2020-01-01" + }, + "JUPTRY": { + "_default": "2020-01-01" + }, + "ALTUSDC": { + "_default": "2020-01-01" + }, + "MAGICFDUSD": { + "_default": "2020-01-01" + }, + "SEIUSDC": { + "_default": "2020-01-01" + }, + "PYTHBTC": { + "_default": "2020-01-01" + }, + "PYTHUSDT": { + "_default": "2020-01-01" + }, + "PYTHFDUSD": { + "_default": "2020-01-01" + }, + "PYTHTRY": { + "_default": "2020-01-01" + }, + "RONINBTC": { + "_default": "2020-01-01" + }, + "RONINUSDT": { + "_default": "2020-01-01" + }, + "RONINFDUSD": { + "_default": "2020-01-01" + }, + "RONINTRY": { + "_default": "2020-01-01" + }, + "DYMBTC": { + "_default": "2020-01-01" + }, + "DYMUSDT": { + "_default": "2020-01-01" + }, + "DYMFDUSD": { + "_default": "2020-01-01" + }, + "DYMTRY": { + "_default": "2020-01-01" + }, + "JUPUSDC": { + "_default": "2020-01-01" + }, + "PENDLEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELBTC": { + "_default": "2020-01-01" + }, + "PIXELBNB": { + "_default": "2020-01-01" + }, + "PIXELUSDT": { + "_default": "2020-01-01" + }, + "PIXELFDUSD": { + "_default": "2020-01-01" + }, + "PIXELTRY": { + "_default": "2020-01-01" + }, + "STRKBTC": { + "_default": "2020-01-01" + }, + "STRKUSDT": { + "_default": "2020-01-01" + }, + "STRKFDUSD": { + "_default": "2020-01-01" + }, + "STRKTRY": { + "_default": "2020-01-01" + }, + "FILUSDC": { + "_default": "2020-01-01" + }, + "HBARTRY": { + "_default": "2020-01-01" + }, + "PENDLETRY": { + "_default": "2020-01-01" + }, + "WLDUSDC": { + "_default": "2020-01-01" + }, + "CKBTRY": { + "_default": "2020-01-01" + }, + "COTITRY": { + "_default": "2020-01-01" + }, + "LDOTRY": { + "_default": "2020-01-01" + }, + "UNIUSDC": { + "_default": "2020-01-01" + }, + "PORTALBTC": { + "_default": "2020-01-01" + }, + "PORTALUSDT": { + "_default": "2020-01-01" + }, + "PORTALBNB": { + "_default": "2020-01-01" + }, + "PORTALFDUSD": { + "_default": "2020-01-01" + }, + "PORTALTRY": { + "_default": "2020-01-01" + }, + "PDABTC": { + "_default": "2020-01-01" + }, + "PDAUSDT": { + "_default": "2020-01-01" + }, + "AXLBTC": { + "_default": "2020-01-01" + }, + "AXLUSDT": { + "_default": "2020-01-01" + }, + "AXLFDUSD": { + "_default": "2020-01-01" + }, + "AXLTRY": { + "_default": "2020-01-01" + }, + "PEPEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELUSDC": { + "_default": "2020-01-01" + }, + "STRKUSDC": { + "_default": "2020-01-01" + }, + "UNIFDUSD": { + "_default": "2020-01-01" + }, + "OMTRY": { + "_default": "2020-01-01" + }, + "THETATRY": { + "_default": "2020-01-01" + }, + "WIFBTC": { + "_default": "2020-01-01" + }, + "WIFUSDT": { + "_default": "2020-01-01" + }, + "WIFFDUSD": { + "_default": "2020-01-01" + }, + "WIFTRY": { + "_default": "2020-01-01" + }, + "AGIXFDUSD": { + "_default": "2020-01-01" + }, + "PEPEUSDC": { + "_default": "2020-01-01" + }, + "SHIBUSDC": { + "_default": "2020-01-01" + }, + "THETAFDUSD": { + "_default": "2020-01-01" + }, + "ARTRY": { + "_default": "2020-01-01" + }, + "METISBTC": { + "_default": "2020-01-01" + }, + "METISUSDT": { + "_default": "2020-01-01" + }, + "METISFDUSD": { + "_default": "2020-01-01" + }, + "METISTRY": { + "_default": "2020-01-01" + }, + "BNBJPY": { + "_default": "2020-01-01" + }, + "BTCJPY": { + "_default": "2020-01-01" + }, + "ETHJPY": { + "_default": "2020-01-01" + }, + "FLOKIFDUSD": { + "_default": "2020-01-01" + }, + "GRTFDUSD": { + "_default": "2020-01-01" + }, + "NEARUSDC": { + "_default": "2020-01-01" + }, + "SNXTRY": { + "_default": "2020-01-01" + }, + "AEVOBTC": { + "_default": "2020-01-01" + }, + "AEVOUSDT": { + "_default": "2020-01-01" + }, + "AEVOBNB": { + "_default": "2020-01-01" + }, + "AEVOFDUSD": { + "_default": "2020-01-01" + }, + "AEVOTRY": { + "_default": "2020-01-01" + }, + "FETUSDC": { + "_default": "2020-01-01" + }, + "IMXTRY": { + "_default": "2020-01-01" + }, + "EURUSDC": { + "_default": "2020-01-01" + }, + "BOMETRY": { + "_default": "2020-01-01" + }, + "BOMEBTC": { + "_default": "2020-01-01" + }, + "BOMEUSDT": { + "_default": "2020-01-01" + }, + "BOMEFDUSD": { + "_default": "2020-01-01" + }, + "ETHFIBTC": { + "_default": "2020-01-01" + }, + "ETHFIUSDT": { + "_default": "2020-01-01" + }, + "ETHFIBNB": { + "_default": "2020-01-01" + }, + "ETHFIFDUSD": { + "_default": "2020-01-01" + }, + "ETHFITRY": { + "_default": "2020-01-01" + }, + "AAVETRY": { + "_default": "2020-01-01" + }, + "ARKMFDUSD": { + "_default": "2020-01-01" + }, + "CRVTRY": { + "_default": "2020-01-01" + }, + "FETBRL": { + "_default": "2020-01-01" + }, + "RAYFDUSD": { + "_default": "2020-01-01" + }, + "RNDREUR": { + "_default": "2020-01-01" + }, + "BONKUSDC": { + "_default": "2020-01-01" + }, + "FLOKIUSDC": { + "_default": "2020-01-01" + }, + "MKRTRY": { + "_default": "2020-01-01" + }, + "RAYTRY": { + "_default": "2020-01-01" + }, + "RNDRBRL": { + "_default": "2020-01-01" + }, + "ENABTC": { + "_default": "2020-01-01" + }, + "ENAUSDT": { + "_default": "2020-01-01" + }, + "ENABNB": { + "_default": "2020-01-01" + }, + "ENAFDUSD": { + "_default": "2020-01-01" + }, + "ENATRY": { + "_default": "2020-01-01" + }, + "LQTYFDUSD": { + "_default": "2020-01-01" + }, + "MASKTRY": { + "_default": "2020-01-01" + }, + "PENDLEUSDC": { + "_default": "2020-01-01" + }, + "RDNTTRY": { + "_default": "2020-01-01" + }, + "WBTC": { + "_default": "2020-01-01" + }, + "WUSDT": { + "_default": "2020-01-01" + }, + "WFDUSD": { + "_default": "2020-01-01" + }, + "WTRY": { + "_default": "2020-01-01" + }, + "BOMEUSDC": { + "_default": "2020-01-01" + }, + "JTOUSDC": { + "_default": "2020-01-01" + }, + "WIFUSDC": { + "_default": "2020-01-01" + }, + "TNSRBTC": { + "_default": "2020-01-01" + }, + "TNSRUSDT": { + "_default": "2020-01-01" + }, + "TNSRFDUSD": { + "_default": "2020-01-01" + }, + "TNSRTRY": { + "_default": "2020-01-01" + }, + "SAGABTC": { + "_default": "2020-01-01" + }, + "SAGAUSDT": { + "_default": "2020-01-01" + }, + "SAGABNB": { + "_default": "2020-01-01" + }, + "SAGAFDUSD": { + "_default": "2020-01-01" + }, + "SAGATRY": { + "_default": "2020-01-01" + }, + "USDTMXN": { + "_default": "2020-01-01" + }, + "CKBUSDC": { + "_default": "2020-01-01" + }, + "ENAUSDC": { + "_default": "2020-01-01" + }, + "ETHFIUSDC": { + "_default": "2020-01-01" + }, + "YGGUSDC": { + "_default": "2020-01-01" + }, + "USDTCZK": { + "_default": "2020-01-01" + }, + "TAOBTC": { + "_default": "2020-01-01" + }, + "TAOUSDT": { + "_default": "2020-01-01" + }, + "TAOFDUSD": { + "_default": "2020-01-01" + }, + "TAOTRY": { + "_default": "2020-01-01" + }, + "CFXUSDC": { + "_default": "2020-01-01" + }, + "RNDRUSDC": { + "_default": "2020-01-01" + }, + "RUNEUSDC": { + "_default": "2020-01-01" + }, + "SAGAUSDC": { + "_default": "2020-01-01" + }, + "POLYXTRY": { + "_default": "2020-01-01" + }, + "OMNIBTC": { + "_default": "2020-01-01" + }, + "OMNIUSDT": { + "_default": "2020-01-01" + }, + "OMNIBNB": { + "_default": "2020-01-01" + }, + "OMNIFDUSD": { + "_default": "2020-01-01" + }, + "OMNITRY": { + "_default": "2020-01-01" + }, + "APTUSDC": { + "_default": "2020-01-01" + }, + "GALAUSDC": { + "_default": "2020-01-01" + }, + "OMNIBRL": { + "_default": "2020-01-01" + }, + "STXUSDC": { + "_default": "2020-01-01" + }, + "ICPUSDC": { + "_default": "2020-01-01" + }, + "OMNIUSDC": { + "_default": "2020-01-01" + }, + "PEPEBRL": { + "_default": "2020-01-01" + }, + "YGGTRY": { + "_default": "2020-01-01" + }, + "ADAJPY": { + "_default": "2020-01-01" + }, + "SHIBJPY": { + "_default": "2020-01-01" + }, + "SOLJPY": { + "_default": "2020-01-01" + }, + "XRPJPY": { + "_default": "2020-01-01" + }, + "REZBTC": { + "_default": "2020-01-01" + }, + "REZUSDT": { + "_default": "2020-01-01" + }, + "REZBNB": { + "_default": "2020-01-01" + }, + "REZFDUSD": { + "_default": "2020-01-01" + }, + "REZTRY": { + "_default": "2020-01-01" + }, + "EGLDTRY": { + "_default": "2020-01-01" + }, + "PHBTRY": { + "_default": "2020-01-01" + }, + "RSRTRY": { + "_default": "2020-01-01" + }, + "BBBTC": { + "_default": "2020-01-01" + }, + "BBUSDT": { + "_default": "2020-01-01" + }, + "BBBNB": { + "_default": "2020-01-01" + }, + "BBFDUSD": { + "_default": "2020-01-01" + }, + "BBTRY": { + "_default": "2020-01-01" + }, + "FRONTUSDC": { + "_default": "2020-01-01" + }, + "PEOPLETRY": { + "_default": "2020-01-01" + }, + "TRBUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDT": { + "_default": "2020-01-01" + }, + "NOTBNB": { + "_default": "2020-01-01" + }, + "NOTFDUSD": { + "_default": "2020-01-01" + }, + "NOTTRY": { + "_default": "2020-01-01" + }, + "ARKMUSDC": { + "_default": "2020-01-01" + }, + "ARUSDC": { + "_default": "2020-01-01" + }, + "BBUSDC": { + "_default": "2020-01-01" + }, + "CRVUSDC": { + "_default": "2020-01-01" + }, + "PEOPLEUSDC": { + "_default": "2020-01-01" + }, + "ARFDUSD": { + "_default": "2020-01-01" + }, + "ENAEUR": { + "_default": "2020-01-01" + }, + "PEPEEUR": { + "_default": "2020-01-01" + }, + "REZUSDC": { + "_default": "2020-01-01" + }, + "TRBFDUSD": { + "_default": "2020-01-01" + }, + "USDCTRY": { + "_default": "2020-01-01" + }, + "BTCMXN": { + "_default": "2020-01-01" + }, + "XRPMXN": { + "_default": "2020-01-01" + }, + "ENSUSDC": { + "_default": "2020-01-01" + }, + "LDOUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDC": { + "_default": "2020-01-01" + }, + "NEARBRL": { + "_default": "2020-01-01" + }, + "HIGHTRY": { + "_default": "2020-01-01" + }, + "PEOPLEFDUSD": { + "_default": "2020-01-01" + }, + "TNSRUSDC": { + "_default": "2020-01-01" + }, + "USDTCOP": { + "_default": "2020-01-01" + }, + "IOBTC": { + "_default": "2020-01-01" + }, + "IOUSDT": { + "_default": "2020-01-01" + }, + "IOBNB": { + "_default": "2020-01-01" + }, + "IOFDUSD": { + "_default": "2020-01-01" + }, + "IOTRY": { + "_default": "2020-01-01" + }, + "NOTBRL": { + "_default": "2020-01-01" + }, + "TRUTRY": { + "_default": "2020-01-01" + }, + "WIFEUR": { + "_default": "2020-01-01" + }, + "ZKBTC": { + "_default": "2020-01-01" + }, + "ZKUSDT": { + "_default": "2020-01-01" + }, + "ZKFDUSD": { + "_default": "2020-01-01" + }, + "ZKTRY": { + "_default": "2020-01-01" + }, + "LISTAUSDT": { + "_default": "2020-01-01" + }, + "LISTABNB": { + "_default": "2020-01-01" + }, + "LISTAFDUSD": { + "_default": "2020-01-01" + }, + "LISTATRY": { + "_default": "2020-01-01" + }, + "ZROBTC": { + "_default": "2020-01-01" + }, + "ZROUSDT": { + "_default": "2020-01-01" + }, + "ZROFDUSD": { + "_default": "2020-01-01" + }, + "ZROTRY": { + "_default": "2020-01-01" + }, + "LISTABRL": { + "_default": "2020-01-01" + }, + "BAKETRY": { + "_default": "2020-01-01" + }, + "WIFBRL": { + "_default": "2020-01-01" + }, + "ZKUSDC": { + "_default": "2020-01-01" + }, + "ZROUSDC": { + "_default": "2020-01-01" + }, + "IOUSDC": { + "_default": "2020-01-01" + }, + "1000SATSUSDC": { + "_default": "2020-01-01" + }, + "BNXTRY": { + "_default": "2020-01-01" + }, + "ETHARS": { + "_default": "2020-01-01" + }, + "GUSDT": { + "_default": "2020-01-01" + }, + "GTRY": { + "_default": "2020-01-01" + }, + "BANANABTC": { + "_default": "2020-01-01" + }, + "BANANAUSDT": { + "_default": "2020-01-01" + }, + "BANANABNB": { + "_default": "2020-01-01" + }, + "BANANAFDUSD": { + "_default": "2020-01-01" + }, + "BANANATRY": { + "_default": "2020-01-01" + }, + "RENDERBTC": { + "_default": "2020-01-01" + }, + "RENDERUSDT": { + "_default": "2020-01-01" + }, + "RENDERFDUSD": { + "_default": "2020-01-01" + }, + "RENDERUSDC": { + "_default": "2020-01-01" + }, + "RENDERTRY": { + "_default": "2020-01-01" + }, + "RENDEREUR": { + "_default": "2020-01-01" + }, + "RENDERBRL": { + "_default": "2020-01-01" + }, + "TONBTC": { + "_default": "2020-01-01" + }, + "TONUSDT": { + "_default": "2020-01-01" + }, + "TONFDUSD": { + "_default": "2020-01-01" + }, + "TONTRY": { + "_default": "2020-01-01" + }, + "BONKBRL": { + "_default": "2020-01-01" + }, + "NOTEUR": { + "_default": "2020-01-01" + }, + "DOGEJPY": { + "_default": "2020-01-01" + }, + "MATICJPY": { + "_default": "2020-01-01" + }, + "NEARJPY": { + "_default": "2020-01-01" + }, + "TONUSDC": { + "_default": "2020-01-01" + }, + "AAVEFDUSD": { + "_default": "2020-01-01" + }, + "DOGSUSDT": { + "_default": "2020-01-01" + }, + "DOGSBNB": { + "_default": "2020-01-01" + }, + "DOGSFDUSD": { + "_default": "2020-01-01" + }, + "DOGSTRY": { + "_default": "2020-01-01" + }, + "EUREURI": { + "_default": "2020-01-01" + }, + "EURIUSDT": { + "_default": "2020-01-01" + }, + "DOGSBRL": { + "_default": "2020-01-01" + }, + "DOGSUSDC": { + "_default": "2020-01-01" + }, + "RAREBRL": { + "_default": "2020-01-01" + }, + "RAREUSDC": { + "_default": "2020-01-01" + }, + "SLFBTC": { + "_default": "2020-01-01" + }, + "SLFTRY": { + "_default": "2020-01-01" + }, + "SLFUSDC": { + "_default": "2020-01-01" + }, + "SLFUSDT": { + "_default": "2020-01-01" + }, + "AAVEUSDC": { + "_default": "2020-01-01" + }, + "SUNTRY": { + "_default": "2020-01-01" + }, + "STMXTRY": { + "_default": "2020-01-01" + }, + "POLBNB": { + "_default": "2020-01-01" + }, + "POLBRL": { + "_default": "2020-01-01" + }, + "POLBTC": { + "_default": "2020-01-01" + }, + "POLETH": { + "_default": "2020-01-01" + }, + "POLEUR": { + "_default": "2020-01-01" + }, + "POLFDUSD": { + "_default": "2020-01-01" + }, + "POLJPY": { + "_default": "2020-01-01" + }, + "POLTRY": { + "_default": "2020-01-01" + }, + "POLUSDC": { + "_default": "2020-01-01" + }, + "POLUSDT": { + "_default": "2020-01-01" + }, + "NEIROUSDT": { + "_default": "2020-01-01" + }, + "TURBOUSDT": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDT": { + "_default": "2020-01-01" + }, + "CATIUSDT": { + "_default": "2020-01-01" + }, + "CATIBNB": { + "_default": "2020-01-01" + }, + "CATIFDUSD": { + "_default": "2020-01-01" + }, + "CATITRY": { + "_default": "2020-01-01" + }, + "1MBABYDOGEFDUSD": { + "_default": "2020-01-01" + }, + "1MBABYDOGETRY": { + "_default": "2020-01-01" + }, + "CATIBRL": { + "_default": "2020-01-01" + }, + "BTCEURI": { + "_default": "2020-01-01" + }, + "NEIROFDUSD": { + "_default": "2020-01-01" + }, + "NEIROTRY": { + "_default": "2020-01-01" + }, + "HMSTRUSDT": { + "_default": "2020-01-01" + }, + "HMSTRBNB": { + "_default": "2020-01-01" + }, + "HMSTRFDUSD": { + "_default": "2020-01-01" + }, + "HMSTRTRY": { + "_default": "2020-01-01" + }, + "EIGENBTC": { + "_default": "2020-01-01" + }, + "EIGENUSDT": { + "_default": "2020-01-01" + }, + "EIGENFDUSD": { + "_default": "2020-01-01" + }, + "EIGENTRY": { + "_default": "2020-01-01" + }, + "NEIROBRL": { + "_default": "2020-01-01" + }, + "NEIROEUR": { + "_default": "2020-01-01" + }, + "BNSOLSOL": { + "_default": "2020-01-01" + }, + "SCRUSDT": { + "_default": "2020-01-01" + }, + "SUIBRL": { + "_default": "2020-01-01" + }, + "TURBOTRY": { + "_default": "2020-01-01" + }, + "BNSOLUSDT": { + "_default": "2020-01-01" + }, + "LUMIAUSDT": { + "_default": "2020-01-01" + }, + "SCRBTC": { + "_default": "2020-01-01" + }, + "SCRFDUSD": { + "_default": "2020-01-01" + }, + "SCRTRY": { + "_default": "2020-01-01" + }, + "KAIAUSDT": { + "_default": "2020-01-01" + }, + "COWUSDT": { + "_default": "2020-01-01" + }, + "CETUSUSDT": { + "_default": "2020-01-01" + }, + "PNUTUSDT": { + "_default": "2020-01-01" + }, + "ACTUSDT": { + "_default": "2020-01-01" + }, + "ACTTRY": { + "_default": "2020-01-01" + }, + "COWTRY": { + "_default": "2020-01-01" + }, + "CETUSTRY": { + "_default": "2020-01-01" + }, + "TROYTRY": { + "_default": "2020-01-01" + }, + "PNUTTRY": { + "_default": "2020-01-01" + }, + "ACTFDUSD": { + "_default": "2020-01-01" + }, + "ACTUSDC": { + "_default": "2020-01-01" + }, + "NEIROUSDC": { + "_default": "2020-01-01" + }, + "PNUTBTC": { + "_default": "2020-01-01" + }, + "PNUTFDUSD": { + "_default": "2020-01-01" + }, + "PNUTUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDT": { + "_default": "2020-01-01" + }, + "ACTBRL": { + "_default": "2020-01-01" + }, + "ACTEUR": { + "_default": "2020-01-01" + }, + "CATIUSDC": { + "_default": "2020-01-01" + }, + "ETHEURI": { + "_default": "2020-01-01" + }, + "LUMIATRY": { + "_default": "2020-01-01" + }, + "PNUTBRL": { + "_default": "2020-01-01" + }, + "PNUTEUR": { + "_default": "2020-01-01" + }, + "APEFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDC": { + "_default": "2020-01-01" + }, + "HBARUSDC": { + "_default": "2020-01-01" + }, + "OMUSDC": { + "_default": "2020-01-01" + }, + "RAYUSDC": { + "_default": "2020-01-01" + }, + "TAOUSDC": { + "_default": "2020-01-01" + }, + "TURBOFDUSD": { + "_default": "2020-01-01" + }, + "THEBTC": { + "_default": "2020-01-01" + }, + "THEBNB": { + "_default": "2020-01-01" + }, + "THEFDUSD": { + "_default": "2020-01-01" + }, + "THETRY": { + "_default": "2020-01-01" + }, + "THEUSDT": { + "_default": "2020-01-01" + }, + "APEUSDC": { + "_default": "2020-01-01" + }, + "BOMEEUR": { + "_default": "2020-01-01" + }, + "EIGENUSDC": { + "_default": "2020-01-01" + }, + "HBARFDUSD": { + "_default": "2020-01-01" + }, + "MEMEUSDC": { + "_default": "2020-01-01" + }, + "TROYUSDC": { + "_default": "2020-01-01" + }, + "WLDEUR": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDC": { + "_default": "2020-01-01" + }, + "CETUSUSDC": { + "_default": "2020-01-01" + }, + "COWUSDC": { + "_default": "2020-01-01" + }, + "DYDXUSDC": { + "_default": "2020-01-01" + }, + "HMSTRUSDC": { + "_default": "2020-01-01" + }, + "TURBOUSDC": { + "_default": "2020-01-01" + }, + "ENABRL": { + "_default": "2020-01-01" + }, + "EOSFDUSD": { + "_default": "2020-01-01" + }, + "KAIAUSDC": { + "_default": "2020-01-01" + }, + "SANDUSDC": { + "_default": "2020-01-01" + }, + "XLMFDUSD": { + "_default": "2020-01-01" + }, + "CHZUSDC": { + "_default": "2020-01-01" + }, + "PYTHUSDC": { + "_default": "2020-01-01" + }, + "RSRUSDC": { + "_default": "2020-01-01" + }, + "RSRFDUSD": { + "_default": "2020-01-01" + }, + "WUSDC": { + "_default": "2020-01-01" + }, + "XTZUSDC": { + "_default": "2020-01-01" + }, + "ACXUSDT": { + "_default": "2020-01-01" + }, + "ORCAUSDT": { + "_default": "2020-01-01" + }, + "MOVEBTC": { + "_default": "2020-01-01" + }, + "MOVEUSDT": { + "_default": "2020-01-01" + }, + "MOVEBNB": { + "_default": "2020-01-01" + }, + "MOVEFDUSD": { + "_default": "2020-01-01" + }, + "MOVETRY": { + "_default": "2020-01-01" + }, + "MEBTC": { + "_default": "2020-01-01" + }, + "MEUSDT": { + "_default": "2020-01-01" + }, + "MEFDUSD": { + "_default": "2020-01-01" + }, + "METRY": { + "_default": "2020-01-01" + }, + "ACXUSDC": { + "_default": "2020-01-01" + }, + "ORCAUSDC": { + "_default": "2020-01-01" + }, + "ACXFDUSD": { + "_default": "2020-01-01" + }, + "ORCAFDUSD": { + "_default": "2020-01-01" + }, + "ACXTRY": { + "_default": "2020-01-01" + }, + "ORCATRY": { + "_default": "2020-01-01" + }, + "KSMTRY": { + "_default": "2020-01-01" + }, + "CELOTRY": { + "_default": "2020-01-01" + }, + "HIVEFDUSD": { + "_default": "2020-01-01" + }, + "HIVEUSDC": { + "_default": "2020-01-01" + }, + "IDEXFDUSD": { + "_default": "2020-01-01" + }, + "IDEXUSDC": { + "_default": "2020-01-01" + }, + "TLMFDUSD": { + "_default": "2020-01-01" + }, + "TLMUSDC": { + "_default": "2020-01-01" + }, + "VELODROMEUSDT": { + "_default": "2020-01-01" + }, + "VANAUSDT": { + "_default": "2020-01-01" + }, + "VANABNB": { + "_default": "2020-01-01" + }, + "VANAFDUSD": { + "_default": "2020-01-01" + }, + "VANATRY": { + "_default": "2020-01-01" + }, + "1000CATUSDT": { + "_default": "2020-01-01" + }, + "1000CATBNB": { + "_default": "2020-01-01" + }, + "1000CATFDUSD": { + "_default": "2020-01-01" + }, + "1000CATTRY": { + "_default": "2020-01-01" + }, + "PENGUUSDT": { + "_default": "2020-01-01" + }, + "PENGUBNB": { + "_default": "2020-01-01" + }, + "PENGUFDUSD": { + "_default": "2020-01-01" + }, + "PENGUTRY": { + "_default": "2020-01-01" + }, + "USUALBTC": { + "_default": "2020-01-01" + }, + "USUALFDUSD": { + "_default": "2020-01-01" + }, + "USUALTRY": { + "_default": "2020-01-01" + }, + "1000CATUSDC": { + "_default": "2020-01-01" + }, + "PENGUUSDC": { + "_default": "2020-01-01" + }, + "BIOUSDT": { + "_default": "2020-01-01" + }, + "BIOBNB": { + "_default": "2020-01-01" + }, + "BIOFDUSD": { + "_default": "2020-01-01" + }, + "BIOTRY": { + "_default": "2020-01-01" + }, + "BIOUSDC": { + "_default": "2020-01-01" + }, + "HIVETRY": { + "_default": "2020-01-01" + }, + "MOVEUSDC": { + "_default": "2020-01-01" + }, + "PHATRY": { + "_default": "2020-01-01" + }, + "SUSHITRY": { + "_default": "2020-01-01" + }, + "DUSDT": { + "_default": "2020-01-01" + }, + "DTRY": { + "_default": "2020-01-01" + }, + "APTJPY": { + "_default": "2020-01-01" + }, + "SUIJPY": { + "_default": "2020-01-01" + }, + "XLMJPY": { + "_default": "2020-01-01" + }, + "PEPEJPY": { + "_default": "2020-01-01" + }, + "PHAUSDC": { + "_default": "2020-01-01" + }, + "USDCPLN": { + "_default": "2020-01-01" + }, + "STEEMUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDC": { + "_default": "2020-01-01" + }, + "AIXBTUSDT": { + "_default": "2020-01-01" + }, + "AIXBTUSDC": { + "_default": "2020-01-01" + }, + "CGPTUSDT": { + "_default": "2020-01-01" + }, + "CGPTUSDC": { + "_default": "2020-01-01" + }, + "COOKIEUSDT": { + "_default": "2020-01-01" + }, + "COOKIEUSDC": { + "_default": "2020-01-01" + }, + "SBTC": { + "_default": "2020-01-01" + }, + "SBNB": { + "_default": "2020-01-01" + }, + "SETH": { + "_default": "2020-01-01" + }, + "SEUR": { + "_default": "2020-01-01" + }, + "SFDUSD": { + "_default": "2020-01-01" + }, + "STRY": { + "_default": "2020-01-01" + }, + "SUSDC": { + "_default": "2020-01-01" + }, + "SUSDT": { + "_default": "2020-01-01" + }, + "IOTXJPY": { + "_default": "2020-01-01" + }, + "SEIJPY": { + "_default": "2020-01-01" + }, + "SOLVUSDT": { + "_default": "2020-01-01" + }, + "SOLVBNB": { + "_default": "2020-01-01" + }, + "SOLVFDUSD": { + "_default": "2020-01-01" + }, + "SOLVTRY": { + "_default": "2020-01-01" + }, + "TRUMPUSDT": { + "_default": "2020-01-01" + }, + "TRUMPUSDC": { + "_default": "2020-01-01" + }, + "AIXBTTRY": { + "_default": "2020-01-01" + }, + "TRUMPTRY": { + "_default": "2020-01-01" + }, + "ANIMEUSDT": { + "_default": "2020-01-01" + }, + "ANIMEUSDC": { + "_default": "2020-01-01" + }, + "ANIMEBNB": { + "_default": "2020-01-01" + }, + "ANIMEFDUSD": { + "_default": "2020-01-01" + }, + "ANIMETRY": { + "_default": "2020-01-01" + }, + "BERABTC": { + "_default": "2020-01-01" + }, + "BERAUSDT": { + "_default": "2020-01-01" + }, + "BERAUSDC": { + "_default": "2020-01-01" + }, + "BERAFDUSD": { + "_default": "2020-01-01" + }, + "BERABNB": { + "_default": "2020-01-01" + }, + "BERATRY": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDT": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDC": { + "_default": "2020-01-01" + }, + "TSTUSDT": { + "_default": "2020-01-01" + }, + "TSTUSDC": { + "_default": "2020-01-01" + }, + "LAYERBTC": { + "_default": "2020-01-01" + }, + "LAYERUSDT": { + "_default": "2020-01-01" + }, + "LAYERUSDC": { + "_default": "2020-01-01" + }, + "LAYERBNB": { + "_default": "2020-01-01" + }, + "LAYERFDUSD": { + "_default": "2020-01-01" + }, + "LAYERTRY": { + "_default": "2020-01-01" + }, + "QTUMTRY": { + "_default": "2020-01-01" + }, + "TRUMPEUR": { + "_default": "2020-01-01" + }, + "VTHOTRY": { + "_default": "2020-01-01" + }, + "HEIBTC": { + "_default": "2020-01-01" + }, + "HEIUSDT": { + "_default": "2020-01-01" + }, + "CAKEUSDC": { + "_default": "2020-01-01" + }, + "HEIUSDC": { + "_default": "2020-01-01" + }, + "TRUMPFDUSD": { + "_default": "2020-01-01" + }, + "TSTFDUSD": { + "_default": "2020-01-01" + }, + "BNXUSDC": { + "_default": "2020-01-01" + }, + "LTCJPY": { + "_default": "2020-01-01" + }, + "BCHJPY": { + "_default": "2020-01-01" + }, + "LINKJPY": { + "_default": "2020-01-01" + }, + "KAITOBTC": { + "_default": "2020-01-01" + }, + "KAITOUSDT": { + "_default": "2020-01-01" + }, + "KAITOUSDC": { + "_default": "2020-01-01" + }, + "KAITOBNB": { + "_default": "2020-01-01" + }, + "KAITOFDUSD": { + "_default": "2020-01-01" + }, + "KAITOTRY": { + "_default": "2020-01-01" + }, + "ETHMXN": { + "_default": "2020-01-01" + }, + "KAITOBRL": { + "_default": "2020-01-01" + }, + "SOLMXN": { + "_default": "2020-01-01" + }, + "BNBARS": { + "_default": "2020-01-01" + }, + "SOLARS": { + "_default": "2020-01-01" + }, + "TRUMPBRL": { + "_default": "2020-01-01" + }, + "TRXFDUSD": { + "_default": "2020-01-01" + }, + "TSTTRY": { + "_default": "2020-01-01" + }, + "SHELLBTC": { + "_default": "2020-01-01" + }, + "SHELLUSDT": { + "_default": "2020-01-01" + }, + "SHELLUSDC": { + "_default": "2020-01-01" + }, + "SHELLBNB": { + "_default": "2020-01-01" + }, + "SHELLFDUSD": { + "_default": "2020-01-01" + }, + "SHELLTRY": { + "_default": "2020-01-01" + }, + "REDUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDC": { + "_default": "2020-01-01" + }, + "GPSFDUSD": { + "_default": "2020-01-01" + }, + "GPSTRY": { + "_default": "2020-01-01" + }, + "GPSBNB": { + "_default": "2020-01-01" + }, + "REDBTC": { + "_default": "2020-01-01" + }, + "REDUSDC": { + "_default": "2020-01-01" + }, + "REDFDUSD": { + "_default": "2020-01-01" + }, + "REDTRY": { + "_default": "2020-01-01" + }, + "CHESSUSDC": { + "_default": "2020-01-01" + }, + "EGLDUSDC": { + "_default": "2020-01-01" + }, + "OSMOUSDC": { + "_default": "2020-01-01" + }, + "UTKUSDC": { + "_default": "2020-01-01" + }, + "TUSDC": { + "_default": "2020-01-01" + }, + "CVCUSDC": { + "_default": "2020-01-01" + }, + "EURIUSDC": { + "_default": "2020-01-01" + }, + "SYNUSDC": { + "_default": "2020-01-01" + }, + "USDCRON": { + "_default": "2020-01-01" + }, + "VELODROMEUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDT": { + "_default": "2020-01-01" + }, + "DFUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDC": { + "_default": "2020-01-01" + }, + "GMXUSDC": { + "_default": "2020-01-01" + }, + "MKRUSDC": { + "_default": "2020-01-01" + }, + "RPLUSDC": { + "_default": "2020-01-01" + }, + "BMTUSDT": { + "_default": "2020-01-01" + }, + "BMTUSDC": { + "_default": "2020-01-01" + }, + "BMTBNB": { + "_default": "2020-01-01" + }, + "BMTFDUSD": { + "_default": "2020-01-01" + }, + "BMTTRY": { + "_default": "2020-01-01" + }, + "FORMUSDC": { + "_default": "2020-01-01" + }, + "FORMUSDT": { + "_default": "2020-01-01" + }, + "FORMTRY": { + "_default": "2020-01-01" + }, + "XUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDC": { + "_default": "2020-01-01" + }, + "JUVUSDC": { + "_default": "2020-01-01" + }, + "THEUSDC": { + "_default": "2020-01-01" + }, + "VANRYUSDC": { + "_default": "2020-01-01" + }, + "USDCCZK": { + "_default": "2020-01-01" + }, + "NILUSDT": { + "_default": "2020-01-01" + }, + "NILBNB": { + "_default": "2020-01-01" + }, + "NILFDUSD": { + "_default": "2020-01-01" + }, + "NILUSDC": { + "_default": "2020-01-01" + }, + "NILTRY": { + "_default": "2020-01-01" + }, + "BEAMXUSDC": { + "_default": "2020-01-01" + }, + "VANAUSDC": { + "_default": "2020-01-01" + }, + "PARTIFDUSD": { + "_default": "2020-01-01" + }, + "PARTITRY": { + "_default": "2020-01-01" + }, + "PARTIUSDT": { + "_default": "2020-01-01" + }, + "PARTIUSDC": { + "_default": "2020-01-01" + }, + "PARTIBNB": { + "_default": "2020-01-01" + }, + "MUBARAKUSDT": { + "_default": "2020-01-01" + }, + "MUBARAKUSDC": { + "_default": "2020-01-01" + }, + "TUTUSDT": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDT": { + "_default": "2020-01-01" + }, + "TUTUSDC": { + "_default": "2020-01-01" + }, + "BANANAS31USDT": { + "_default": "2020-01-01" + }, + "BANANAS31USDC": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDC": { + "_default": "2020-01-01" + }, + "GUNUSDT": { + "_default": "2020-01-01" + }, + "GUNBNB": { + "_default": "2020-01-01" + }, + "GUNFDUSD": { + "_default": "2020-01-01" + }, + "GUNTRY": { + "_default": "2020-01-01" + }, + "THETAUSDC": { + "_default": "2020-01-01" + }, + "API3USDC": { + "_default": "2020-01-01" + }, + "AUCTIONTRY": { + "_default": "2020-01-01" + }, + "AUCTIONUSDC": { + "_default": "2020-01-01" + }, + "BANANAUSDC": { + "_default": "2020-01-01" + }, + "GUNUSDC": { + "_default": "2020-01-01" + }, + "QNTUSDC": { + "_default": "2020-01-01" + }, + "VETUSDC": { + "_default": "2020-01-01" + }, + "ZENUSDC": { + "_default": "2020-01-01" + }, + "BABYUSDT": { + "_default": "2020-01-01" + }, + "BABYUSDC": { + "_default": "2020-01-01" + }, + "BABYBNB": { + "_default": "2020-01-01" + }, + "BABYFDUSD": { + "_default": "2020-01-01" + }, + "BABYTRY": { + "_default": "2020-01-01" + }, + "ONDOUSDT": { + "_default": "2020-01-01" + }, + "ONDOUSDC": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDT": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALUSDT": { + "_default": "2020-01-01" + }, + "VIRTUALUSDC": { + "_default": "2020-01-01" + }, + "KERNELBNB": { + "_default": "2020-01-01" + }, + "KERNELFDUSD": { + "_default": "2020-01-01" + }, + "KERNELTRY": { + "_default": "2020-01-01" + }, + "KERNELUSDC": { + "_default": "2020-01-01" + }, + "KERNELUSDT": { + "_default": "2020-01-01" + }, + "WCTTRY": { + "_default": "2020-01-01" + }, + "WCTFDUSD": { + "_default": "2020-01-01" + }, + "WCTBNB": { + "_default": "2020-01-01" + }, + "WCTUSDC": { + "_default": "2020-01-01" + }, + "WCTUSDT": { + "_default": "2020-01-01" + }, + "PAXGUSDC": { + "_default": "2020-01-01" + }, + "ONDOTRY": { + "_default": "2020-01-01" + }, + "BABYEUR": { + "_default": "2020-01-01" + }, + "ACHUSDC": { + "_default": "2020-01-01" + }, + "GMTUSDC": { + "_default": "2020-01-01" + }, + "HYPERUSDT": { + "_default": "2020-01-01" + }, + "HYPERUSDC": { + "_default": "2020-01-01" + }, + "HYPERBNB": { + "_default": "2020-01-01" + }, + "HYPERFDUSD": { + "_default": "2020-01-01" + }, + "HYPERTRY": { + "_default": "2020-01-01" + }, + "INITUSDT": { + "_default": "2020-01-01" + }, + "INITUSDC": { + "_default": "2020-01-01" + }, + "INITBNB": { + "_default": "2020-01-01" + }, + "INITFDUSD": { + "_default": "2020-01-01" + }, + "INITTRY": { + "_default": "2020-01-01" + }, + "SIGNUSDT": { + "_default": "2020-01-01" + }, + "SIGNUSDC": { + "_default": "2020-01-01" + }, + "SIGNBNB": { + "_default": "2020-01-01" + }, + "SIGNFDUSD": { + "_default": "2020-01-01" + }, + "SIGNTRY": { + "_default": "2020-01-01" + }, + "STOUSDT": { + "_default": "2020-01-01" + }, + "STOUSDC": { + "_default": "2020-01-01" + }, + "STOBNB": { + "_default": "2020-01-01" + }, + "STOFDUSD": { + "_default": "2020-01-01" + }, + "STOTRY": { + "_default": "2020-01-01" + }, + "ENJUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALTRY": { + "_default": "2020-01-01" + }, + "SYRUPUSDT": { + "_default": "2020-01-01" + }, + "SYRUPUSDC": { + "_default": "2020-01-01" + }, + "KMNOUSDT": { + "_default": "2020-01-01" + }, + "KMNOUSDC": { + "_default": "2020-01-01" + }, + "SXTUSDT": { + "_default": "2020-01-01" + }, + "SXTUSDC": { + "_default": "2020-01-01" + }, + "SXTBNB": { + "_default": "2020-01-01" + }, + "SXTFDUSD": { + "_default": "2020-01-01" + }, + "SXTTRY": { + "_default": "2020-01-01" + }, + "PUNDIXUSDC": { + "_default": "2020-01-01" + }, + "SYRUPTRY": { + "_default": "2020-01-01" + }, + "NXPCUSDT": { + "_default": "2020-01-01" + }, + "NXPCUSDC": { + "_default": "2020-01-01" + }, + "NXPCBNB": { + "_default": "2020-01-01" + }, + "NXPCFDUSD": { + "_default": "2020-01-01" + }, + "NXPCTRY": { + "_default": "2020-01-01" + }, + "AWEBTC": { + "_default": "2020-01-01" + }, + "AWEUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDC": { + "_default": "2020-01-01" + }, + "HAEDALBNB": { + "_default": "2020-01-01" + }, + "HAEDALFDUSD": { + "_default": "2020-01-01" + }, + "HAEDALTRY": { + "_default": "2020-01-01" + }, + "USD1USDT": { + "_default": "2020-01-01" + }, + "HUMAUSDT": { + "_default": "2020-01-01" + }, + "HUMAUSDC": { + "_default": "2020-01-01" + }, + "HUMABNB": { + "_default": "2020-01-01" + }, + "HUMAFDUSD": { + "_default": "2020-01-01" + }, + "HUMATRY": { + "_default": "2020-01-01" + }, + "ABTC": { + "_default": "2020-01-01" + }, + "AETH": { + "_default": "2020-01-01" + }, + "AFDUSD": { + "_default": "2020-01-01" + }, + "ATRY": { + "_default": "2020-01-01" + }, + "AUSDC": { + "_default": "2020-01-01" + }, + "AUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDC": { + "_default": "2020-01-01" + }, + "SOPHBNB": { + "_default": "2020-01-01" + }, + "SOPHFDUSD": { + "_default": "2020-01-01" + }, + "SOPHTRY": { + "_default": "2020-01-01" + }, + "MUBARAKTRY": { + "_default": "2020-01-01" + }, + "TRXJPY": { + "_default": "2020-01-01" + }, + "DAIJPY": { + "_default": "2020-01-01" + }, + "RESOLVUSDT": { + "_default": "2020-01-01" + }, + "RESOLVUSDC": { + "_default": "2020-01-01" + }, + "RESOLVBNB": { + "_default": "2020-01-01" + }, + "RESOLVFDUSD": { + "_default": "2020-01-01" + }, + "RESOLVTRY": { + "_default": "2020-01-01" + }, + "HOMEUSDT": { + "_default": "2020-01-01" + }, + "HOMEUSDC": { + "_default": "2020-01-01" + }, + "HOMEBNB": { + "_default": "2020-01-01" + }, + "HOMEFDUSD": { + "_default": "2020-01-01" + }, + "HOMETRY": { + "_default": "2020-01-01" + }, + "FLUXUSDC": { + "_default": "2020-01-01" + }, + "MASKUSDC": { + "_default": "2020-01-01" + }, + "SUSHIUSDC": { + "_default": "2020-01-01" + }, + "SPKUSDT": { + "_default": "2020-01-01" + }, + "SPKUSDC": { + "_default": "2020-01-01" + }, + "SPKBNB": { + "_default": "2020-01-01" + }, + "SPKFDUSD": { + "_default": "2020-01-01" + }, + "SPKTRY": { + "_default": "2020-01-01" + }, + "NEWTUSDT": { + "_default": "2020-01-01" + }, + "NEWTUSDC": { + "_default": "2020-01-01" + }, + "NEWTBNB": { + "_default": "2020-01-01" + }, + "NEWTFDUSD": { + "_default": "2020-01-01" + }, + "NEWTTRY": { + "_default": "2020-01-01" + }, + "NEIROJPY": { + "_default": "2020-01-01" + }, + "SAHARAUSDT": { + "_default": "2020-01-01" + }, + "SAHARAUSDC": { + "_default": "2020-01-01" + }, + "SAHARABNB": { + "_default": "2020-01-01" + }, + "SAHARAFDUSD": { + "_default": "2020-01-01" + }, + "SAHARATRY": { + "_default": "2020-01-01" + }, + "LPTUSDC": { + "_default": "2020-01-01" + }, + "RVNUSDC": { + "_default": "2020-01-01" + }, + "LAUSDT": { + "_default": "2020-01-01" + }, + "LAUSDC": { + "_default": "2020-01-01" + }, + "LABNB": { + "_default": "2020-01-01" + }, + "LAFDUSD": { + "_default": "2020-01-01" + }, + "LATRY": { + "_default": "2020-01-01" + }, + "LPTJPY": { + "_default": "2020-01-01" + }, + "XAIUSDC": { + "_default": "2020-01-01" + }, + "AXSUSDC": { + "_default": "2020-01-01" + }, + "COMPUSDC": { + "_default": "2020-01-01" + }, + "ERAUSDT": { + "_default": "2020-01-01" + }, + "ERAUSDC": { + "_default": "2020-01-01" + }, + "ERABNB": { + "_default": "2020-01-01" + }, + "ERAFDUSD": { + "_default": "2020-01-01" + }, + "ERATRY": { + "_default": "2020-01-01" + }, + "CUSDT": { + "_default": "2020-01-01" + }, + "CUSDC": { + "_default": "2020-01-01" + }, + "CBNB": { + "_default": "2020-01-01" + }, + "CFDUSD": { + "_default": "2020-01-01" + }, + "CTRY": { + "_default": "2020-01-01" + }, + "GRTUSDC": { + "_default": "2020-01-01" + }, + "ROSEUSDC": { + "_default": "2020-01-01" + }, + "CVXUSDC": { + "_default": "2020-01-01" + }, + "FUNUSDC": { + "_default": "2020-01-01" + }, + "LISTAUSDC": { + "_default": "2020-01-01" + }, + "TREEUSDT": { + "_default": "2020-01-01" + }, + "TREEUSDC": { + "_default": "2020-01-01" + }, + "TREEBNB": { + "_default": "2020-01-01" + }, + "TREEFDUSD": { + "_default": "2020-01-01" + }, + "TREETRY": { + "_default": "2020-01-01" + }, + "A2ZUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDC": { + "_default": "2020-01-01" + }, + "TOWNSBNB": { + "_default": "2020-01-01" + }, + "TOWNSFDUSD": { + "_default": "2020-01-01" + }, + "TOWNSTRY": { + "_default": "2020-01-01" + }, + "PROVEUSDT": { + "_default": "2020-01-01" + }, + "PROVEUSDC": { + "_default": "2020-01-01" + }, + "PROVEBNB": { + "_default": "2020-01-01" + }, + "PROVEFDUSD": { + "_default": "2020-01-01" + }, + "PROVETRY": { + "_default": "2020-01-01" + }, + "ILVUSDC": { + "_default": "2020-01-01" + }, + "MAGICUSDC": { + "_default": "2020-01-01" + }, + "USDCBRL": { + "_default": "2020-01-01" + }, + "BFUSDUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDC": { + "_default": "2020-01-01" + }, + "PLUMEBNB": { + "_default": "2020-01-01" + }, + "PLUMEFDUSD": { + "_default": "2020-01-01" + }, + "PLUMETRY": { + "_default": "2020-01-01" + }, + "CYBERUSDC": { + "_default": "2020-01-01" + }, + "MAVUSDC": { + "_default": "2020-01-01" + }, + "SKLUSDC": { + "_default": "2020-01-01" + }, + "A2ZUSDC": { + "_default": "2020-01-01" + }, + "SSVUSDC": { + "_default": "2020-01-01" + }, + "UMAUSDC": { + "_default": "2020-01-01" + }, + "DOLOUSDT": { + "_default": "2020-01-01" + }, + "DOLOUSDC": { + "_default": "2020-01-01" + }, + "DOLOBNB": { + "_default": "2020-01-01" + }, + "DOLOFDUSD": { + "_default": "2020-01-01" + }, + "DOLOTRY": { + "_default": "2020-01-01" + }, + "MITOUSDT": { + "_default": "2020-01-01" + }, + "MITOUSDC": { + "_default": "2020-01-01" + }, + "MITOBNB": { + "_default": "2020-01-01" + }, + "MITOFDUSD": { + "_default": "2020-01-01" + }, + "MITOTRY": { + "_default": "2020-01-01" + }, + "WLFIUSDT": { + "_default": "2020-01-01" + }, + "WLFIUSDC": { + "_default": "2020-01-01" + }, + "WLFITRY": { + "_default": "2020-01-01" + }, + "BFUSDUSDC": { + "_default": "2020-01-01" + }, + "NMRUSDC": { + "_default": "2020-01-01" + }, + "QTUMUSDC": { + "_default": "2020-01-01" + }, + "SOMIUSDT": { + "_default": "2020-01-01" + }, + "SOMIUSDC": { + "_default": "2020-01-01" + }, + "SOMIBNB": { + "_default": "2020-01-01" + }, + "SOMIFDUSD": { + "_default": "2020-01-01" + }, + "SOMITRY": { + "_default": "2020-01-01" + }, + "WLFIBRL": { + "_default": "2020-01-01" + }, + "WLFIEUR": { + "_default": "2020-01-01" + }, + "OPENUSDT": { + "_default": "2020-01-01" + }, + "OPENUSDC": { + "_default": "2020-01-01" + }, + "OPENBNB": { + "_default": "2020-01-01" + }, + "OPENFDUSD": { + "_default": "2020-01-01" + }, + "OPENTRY": { + "_default": "2020-01-01" + }, + "USDEUSDC": { + "_default": "2020-01-01" + }, + "USDEUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDC": { + "_default": "2020-01-01" + }, + "LINEABNB": { + "_default": "2020-01-01" + }, + "LINEAFDUSD": { + "_default": "2020-01-01" + }, + "LINEATRY": { + "_default": "2020-01-01" + }, + "HOLOUSDT": { + "_default": "2020-01-01" + }, + "HOLOUSDC": { + "_default": "2020-01-01" + }, + "HOLOBNB": { + "_default": "2020-01-01" + }, + "HOLOFDUSD": { + "_default": "2020-01-01" + }, + "HOLOTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDT": { + "_default": "2020-01-01" + }, + "PUMPTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDC": { + "_default": "2020-01-01" + }, + "AVNTUSDT": { + "_default": "2020-01-01" + }, + "AVNTUSDC": { + "_default": "2020-01-01" + }, + "AVNTTRY": { + "_default": "2020-01-01" + }, + "ZKCUSDT": { + "_default": "2020-01-01" + }, + "ZKCUSDC": { + "_default": "2020-01-01" + }, + "ZKCFDUSD": { + "_default": "2020-01-01" + }, + "ZKCBNB": { + "_default": "2020-01-01" + }, + "ZKCTRY": { + "_default": "2020-01-01" + }, + "SKYBTC": { + "_default": "2020-01-01" + }, + "SKYTRY": { + "_default": "2020-01-01" + }, + "SKYUSDC": { + "_default": "2020-01-01" + }, + "SKYUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDC": { + "_default": "2020-01-01" + }, + "BARDFDUSD": { + "_default": "2020-01-01" + }, + "BARDTRY": { + "_default": "2020-01-01" + }, + "BARDBNB": { + "_default": "2020-01-01" + }, + "0GUSDT": { + "_default": "2020-01-01" + }, + "0GUSDC": { + "_default": "2020-01-01" + }, + "0GBNB": { + "_default": "2020-01-01" + }, + "0GFDUSD": { + "_default": "2020-01-01" + }, + "0GTRY": { + "_default": "2020-01-01" + }, + "IMXUSDC": { + "_default": "2020-01-01" + }, + "NMRTRY": { + "_default": "2020-01-01" + }, + "TWTUSDC": { + "_default": "2020-01-01" + }, + "HEMIBNB": { + "_default": "2020-01-01" + }, + "HEMITRY": { + "_default": "2020-01-01" + }, + "HEMIUSDT": { + "_default": "2020-01-01" + }, + "HEMIUSDC": { + "_default": "2020-01-01" + }, + "HEMIFDUSD": { + "_default": "2020-01-01" + }, + "XPLUSDT": { + "_default": "2020-01-01" + }, + "XPLUSDC": { + "_default": "2020-01-01" + }, + "XPLBNB": { + "_default": "2020-01-01" + }, + "XPLFDUSD": { + "_default": "2020-01-01" + }, + "XPLTRY": { + "_default": "2020-01-01" + }, + "MIRAUSDT": { + "_default": "2020-01-01" + }, + "MIRAUSDC": { + "_default": "2020-01-01" + }, + "MIRABNB": { + "_default": "2020-01-01" + }, + "MIRAFDUSD": { + "_default": "2020-01-01" + }, + "MIRATRY": { + "_default": "2020-01-01" + }, + "FFUSDT": { + "_default": "2020-01-01" + }, + "FFUSDC": { + "_default": "2020-01-01" + }, + "FFBNB": { + "_default": "2020-01-01" + }, + "FFFDUSD": { + "_default": "2020-01-01" + }, + "FFTRY": { + "_default": "2020-01-01" + }, + "AEVOUSDC": { + "_default": "2020-01-01" + }, + "MEUSDC": { + "_default": "2020-01-01" + }, + "SNXUSDC": { + "_default": "2020-01-01" + }, + "EDENUSDT": { + "_default": "2020-01-01" + }, + "EDENUSDC": { + "_default": "2020-01-01" + }, + "EDENBNB": { + "_default": "2020-01-01" + }, + "EDENFDUSD": { + "_default": "2020-01-01" + }, + "EDENTRY": { + "_default": "2020-01-01" + }, + "NOMFDUSD": { + "_default": "2020-01-01" + }, + "NOMTRY": { + "_default": "2020-01-01" + }, + "NOMUSDC": { + "_default": "2020-01-01" + }, + "NOMUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDC": { + "_default": "2020-01-01" + }, + "2ZBNB": { + "_default": "2020-01-01" + }, + "2ZFDUSD": { + "_default": "2020-01-01" + }, + "2ZTRY": { + "_default": "2020-01-01" + }, + "TRUMPJPY": { + "_default": "2020-01-01" + }, + "MORPHOUSDT": { + "_default": "2020-01-01" + }, + "MORPHOUSDC": { + "_default": "2020-01-01" + }, + "MORPHOBNB": { + "_default": "2020-01-01" + }, + "MORPHOFDUSD": { + "_default": "2020-01-01" + }, + "MORPHOTRY": { + "_default": "2020-01-01" + }, + "ASTERUSDT": { + "_default": "2020-01-01" + }, + "ASTERUSDC": { + "_default": "2020-01-01" + }, + "ASTERTRY": { + "_default": "2020-01-01" + }, + "WALUSDT": { + "_default": "2020-01-01" + }, + "WALUSDC": { + "_default": "2020-01-01" + }, + "WALBNB": { + "_default": "2020-01-01" + }, + "WALFDUSD": { + "_default": "2020-01-01" + }, + "WALTRY": { + "_default": "2020-01-01" + }, + "EULUSDT": { + "_default": "2020-01-01" + }, + "EULUSDC": { + "_default": "2020-01-01" + }, + "EULFDUSD": { + "_default": "2020-01-01" + }, + "EULBNB": { + "_default": "2020-01-01" + }, + "EULTRY": { + "_default": "2020-01-01" + }, + "ENSOUSDT": { + "_default": "2020-01-01" + }, + "ENSOUSDC": { + "_default": "2020-01-01" + }, + "ENSOFDUSD": { + "_default": "2020-01-01" + }, + "ENSOBNB": { + "_default": "2020-01-01" + }, + "ENSOTRY": { + "_default": "2020-01-01" + }, + "YBUSDT": { + "_default": "2020-01-01" + }, + "YBUSDC": { + "_default": "2020-01-01" + }, + "YBBNB": { + "_default": "2020-01-01" + }, + "YBFDUSD": { + "_default": "2020-01-01" + }, + "YBTRY": { + "_default": "2020-01-01" + }, + "ZBTUSDT": { + "_default": "2020-01-01" + }, + "ZBTUSDC": { + "_default": "2020-01-01" + }, + "ZBTBNB": { + "_default": "2020-01-01" + }, + "ZBTFDUSD": { + "_default": "2020-01-01" + }, + "ZBTTRY": { + "_default": "2020-01-01" + }, + "TURTLEUSDT": { + "_default": "2020-01-01" + }, + "TURTLEUSDC": { + "_default": "2020-01-01" + }, + "TURTLEBNB": { + "_default": "2020-01-01" + }, + "TURTLEFDUSD": { + "_default": "2020-01-01" + }, + "TURTLETRY": { + "_default": "2020-01-01" + }, + "GIGGLEUSDT": { + "_default": "2020-01-01" + }, + "GIGGLEUSDC": { + "_default": "2020-01-01" + }, + "GIGGLETRY": { + "_default": "2020-01-01" + }, + "FUSDT": { + "_default": "2020-01-01" + }, + "FUSDC": { + "_default": "2020-01-01" + }, + "FTRY": { + "_default": "2020-01-01" + }, + "KITEUSDT": { + "_default": "2020-01-01" + }, + "KITEUSDC": { + "_default": "2020-01-01" + }, + "KITEBNB": { + "_default": "2020-01-01" + }, + "KITETRY": { + "_default": "2020-01-01" + }, + "MMTUSDT": { + "_default": "2020-01-01" + }, + "MMTUSDC": { + "_default": "2020-01-01" + }, + "MMTBNB": { + "_default": "2020-01-01" + }, + "MMTTRY": { + "_default": "2020-01-01" + }, + "DASHUSDC": { + "_default": "2020-01-01" + }, + "SAPIENUSDT": { + "_default": "2020-01-01" + }, + "SAPIENUSDC": { + "_default": "2020-01-01" + }, + "SAPIENBNB": { + "_default": "2020-01-01" + }, + "SAPIENTRY": { + "_default": "2020-01-01" + }, + "MINAUSDC": { + "_default": "2020-01-01" + }, + "XVGUSDC": { + "_default": "2020-01-01" + }, + "ALLOUSDT": { + "_default": "2020-01-01" + }, + "ALLOUSDC": { + "_default": "2020-01-01" + }, + "ALLOBNB": { + "_default": "2020-01-01" + }, + "ALLOTRY": { + "_default": "2020-01-01" + }, + "SOLVUSDC": { + "_default": "2020-01-01" + }, + "USD1USDC": { + "_default": "2020-01-01" + }, + "WLFIUSD1": { + "_default": "2020-01-01" + }, + "BANKUSDT": { + "_default": "2020-01-01" + }, + "BANKUSDC": { + "_default": "2020-01-01" + }, + "BANKTRY": { + "_default": "2020-01-01" + }, + "METUSDT": { + "_default": "2020-01-01" + }, + "METUSDC": { + "_default": "2020-01-01" + }, + "METTRY": { + "_default": "2020-01-01" + }, + "1INCHUSDC": { + "_default": "2020-01-01" + }, + "COTIUSDC": { + "_default": "2020-01-01" + }, + "LSKUSDC": { + "_default": "2020-01-01" + }, + "USDTUSD": { + "_default": "2020-01-01" + }, + "USDCUSD": { + "_default": "2020-01-01" + }, + "DODOTRY": { + "_default": "2020-01-01" + }, + "HEITRY": { + "_default": "2020-01-01" + }, + "MANTAIDR": { + "_default": "2020-01-01" + }, + "SCRIDR": { + "_default": "2020-01-01" + }, + "WLDIDR": { + "_default": "2020-01-01" + }, + "HBARIDR": { + "_default": "2020-01-01" + }, + "ATUSDT": { + "_default": "2020-01-01" + }, + "ATUSDC": { + "_default": "2020-01-01" + }, + "ATBNB": { + "_default": "2020-01-01" + }, + "ATTRY": { + "_default": "2020-01-01" + }, + "ASTERIDR": { + "_default": "2020-01-01" + }, + "AVAXIDR": { + "_default": "2020-01-01" + }, + "BOMEIDR": { + "_default": "2020-01-01" + }, + "DOGSIDR": { + "_default": "2020-01-01" + }, + "FLOKIIDR": { + "_default": "2020-01-01" + }, + "POLIDR": { + "_default": "2020-01-01" + }, + "RENDERIDR": { + "_default": "2020-01-01" + }, + "TAOIDR": { + "_default": "2020-01-01" + }, + "TIAIDR": { + "_default": "2020-01-01" + }, + "TONIDR": { + "_default": "2020-01-01" + }, + "VIRTUALIDR": { + "_default": "2020-01-01" + }, + "WIFIDR": { + "_default": "2020-01-01" + }, + "ZILIDR": { + "_default": "2020-01-01" + }, + "ARBIDR": { + "_default": "2020-01-01" + }, + "ADAIDR": { + "_default": "2020-01-01" + }, + "BNBIDR": { + "_default": "2020-01-01" + }, + "BTCIDR": { + "_default": "2020-01-01" + }, + "DOGEIDR": { + "_default": "2020-01-01" + }, + "ETHIDR": { + "_default": "2020-01-01" + }, + "NEIROIDR": { + "_default": "2020-01-01" + }, + "ONDOIDR": { + "_default": "2020-01-01" + }, + "SUIIDR": { + "_default": "2020-01-01" + }, + "TKOIDR": { + "_default": "2020-01-01" + }, + "XRPIDR": { + "_default": "2020-01-01" + }, + "USDTIDR": { + "_default": "2020-01-01" + }, + "USDCIDR": { + "_default": "2020-01-01" + }, + "SOLIDR": { + "_default": "2020-01-01" + }, + "BTCUSD": { + "_default": "2020-01-01" + }, + "BTCUSD1": { + "_default": "2020-01-01" + }, + "DYMUSDC": { + "_default": "2020-01-01" + }, + "BNBUSD1": { + "_default": "2020-01-01" + }, + "ETHUSD1": { + "_default": "2020-01-01" + }, + "SOLUSD1": { + "_default": "2020-01-01" + }, + "DASHTRY": { + "_default": "2020-01-01" + }, + "DOGEUSD1": { + "_default": "2020-01-01" + }, + "SUIUSD1": { + "_default": "2020-01-01" + }, + "XRPUSD1": { + "_default": "2020-01-01" + }, + "KGSTUSDT": { + "_default": "2020-01-01" + }, + "ADAUSD1": { + "_default": "2020-01-01" + }, + "ASTERUSD1": { + "_default": "2020-01-01" + }, + "LUNAUSDC": { + "_default": "2020-01-01" + }, + "LUNCUSDC": { + "_default": "2020-01-01" + }, + "ZECUSD1": { + "_default": "2020-01-01" + }, + "AVAXUSD1": { + "_default": "2020-01-01" + }, + "BCHUSD1": { + "_default": "2020-01-01" + }, + "UNIUSD1": { + "_default": "2020-01-01" + }, + "BREVUSDT": { + "_default": "2020-01-01" + }, + "BREVUSDC": { + "_default": "2020-01-01" + }, + "BREVBNB": { + "_default": "2020-01-01" + }, + "BREVTRY": { + "_default": "2020-01-01" + }, + "币安人生USDT": { + "_default": "2020-01-01" + }, + "币安人生USDC": { + "_default": "2020-01-01" + }, + "币安人生TRY": { + "_default": "2020-01-01" + }, + "ZKPUSDT": { + "_default": "2020-01-01" + }, + "ZKPUSDC": { + "_default": "2020-01-01" + }, + "ZKPTRY": { + "_default": "2020-01-01" + }, + "FETJPY": { + "_default": "2020-01-01" + }, + "TAOJPY": { + "_default": "2020-01-01" + }, + "LINKUSD1": { + "_default": "2020-01-01" + }, + "USDCMXN": { + "_default": "2020-01-01" + }, + "PEPEUSD1": { + "_default": "2020-01-01" + }, + "UUSDT": { + "_default": "2020-01-01" + }, + "UUSDC": { + "_default": "2020-01-01" + }, + "FRAXUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDC": { + "_default": "2020-01-01" + }, + "FOGOTRY": { + "_default": "2020-01-01" + }, + "BTCU": { + "_default": "2020-01-01" + }, + "LTCUSD1": { + "_default": "2020-01-01" + }, + "UTRY": { + "_default": "2020-01-01" + }, + "XRPRLUSD": { + "_default": "2020-01-01" + }, + "RLUSDUSDT": { + "_default": "2020-01-01" + }, + "RLUSDU": { + "_default": "2020-01-01" + }, + "SENTUSDT": { + "_default": "2020-01-01" + }, + "SENTUSDC": { + "_default": "2020-01-01" + }, + "SENTTRY": { + "_default": "2020-01-01" + }, + "BNBU": { + "_default": "2020-01-01" + }, + "KGSTU": { + "_default": "2020-01-01" + }, + "SOLU": { + "_default": "2020-01-01" + }, + "TRXUSD1": { + "_default": "2020-01-01" + }, + "USD1U": { + "_default": "2020-01-01" + }, + "ETHU": { + "_default": "2020-01-01" + } + }, + "trades": { + "ETHBTC": { + "_default": "2020-01-01" + }, + "LTCBTC": { + "_default": "2020-01-01" + }, + "BNBBTC": { + "_default": "2020-01-01" + }, + "NEOBTC": { + "_default": "2020-01-01" + }, + "QTUMETH": { + "_default": "2020-01-01" + }, + "EOSETH": { + "_default": "2020-01-01" + }, + "SNTETH": { + "_default": "2020-01-01" + }, + "BNTETH": { + "_default": "2020-01-01" + }, + "BCCBTC": { + "_default": "2020-01-01" + }, + "GASBTC": { + "_default": "2020-01-01" + }, + "BNBETH": { + "_default": "2020-01-01" + }, + "BTCUSDT": { + "_default": "2020-01-01" + }, + "ETHUSDT": { + "_default": "2020-01-01" + }, + "HSRBTC": { + "_default": "2020-01-01" + }, + "OAXETH": { + "_default": "2020-01-01" + }, + "DNTETH": { + "_default": "2020-01-01" + }, + "MCOETH": { + "_default": "2020-01-01" + }, + "ICNETH": { + "_default": "2020-01-01" + }, + "MCOBTC": { + "_default": "2020-01-01" + }, + "WTCBTC": { + "_default": "2020-01-01" + }, + "WTCETH": { + "_default": "2020-01-01" + }, + "LRCBTC": { + "_default": "2020-01-01" + }, + "LRCETH": { + "_default": "2020-01-01" + }, + "QTUMBTC": { + "_default": "2020-01-01" + }, + "YOYOBTC": { + "_default": "2020-01-01" + }, + "OMGBTC": { + "_default": "2020-01-01" + }, + "OMGETH": { + "_default": "2020-01-01" + }, + "ZRXBTC": { + "_default": "2020-01-01" + }, + "ZRXETH": { + "_default": "2020-01-01" + }, + "STRATBTC": { + "_default": "2020-01-01" + }, + "STRATETH": { + "_default": "2020-01-01" + }, + "SNGLSBTC": { + "_default": "2020-01-01" + }, + "SNGLSETH": { + "_default": "2020-01-01" + }, + "BQXBTC": { + "_default": "2020-01-01" + }, + "BQXETH": { + "_default": "2020-01-01" + }, + "KNCBTC": { + "_default": "2020-01-01" + }, + "KNCETH": { + "_default": "2020-01-01" + }, + "FUNBTC": { + "_default": "2020-01-01" + }, + "FUNETH": { + "_default": "2020-01-01" + }, + "SNMBTC": { + "_default": "2020-01-01" + }, + "SNMETH": { + "_default": "2020-01-01" + }, + "NEOETH": { + "_default": "2020-01-01" + }, + "IOTABTC": { + "_default": "2020-01-01" + }, + "IOTAETH": { + "_default": "2020-01-01" + }, + "LINKBTC": { + "_default": "2020-01-01" + }, + "LINKETH": { + "_default": "2020-01-01" + }, + "XVGBTC": { + "_default": "2020-01-01" + }, + "XVGETH": { + "_default": "2020-01-01" + }, + "SALTBTC": { + "_default": "2020-01-01" + }, + "SALTETH": { + "_default": "2020-01-01" + }, + "MDABTC": { + "_default": "2020-01-01" + }, + "MDAETH": { + "_default": "2020-01-01" + }, + "MTLBTC": { + "_default": "2020-01-01" + }, + "MTLETH": { + "_default": "2020-01-01" + }, + "SUBBTC": { + "_default": "2020-01-01" + }, + "SUBETH": { + "_default": "2020-01-01" + }, + "EOSBTC": { + "_default": "2020-01-01" + }, + "SNTBTC": { + "_default": "2020-01-01" + }, + "ETCETH": { + "_default": "2020-01-01" + }, + "ETCBTC": { + "_default": "2020-01-01" + }, + "MTHBTC": { + "_default": "2020-01-01" + }, + "MTHETH": { + "_default": "2020-01-01" + }, + "ENGBTC": { + "_default": "2020-01-01" + }, + "ENGETH": { + "_default": "2020-01-01" + }, + "DNTBTC": { + "_default": "2020-01-01" + }, + "ZECBTC": { + "_default": "2020-01-01" + }, + "ZECETH": { + "_default": "2020-01-01" + }, + "BNTBTC": { + "_default": "2020-01-01" + }, + "ASTBTC": { + "_default": "2020-01-01" + }, + "ASTETH": { + "_default": "2020-01-01" + }, + "DASHBTC": { + "_default": "2020-01-01" + }, + "DASHETH": { + "_default": "2020-01-01" + }, + "OAXBTC": { + "_default": "2020-01-01" + }, + "ICNBTC": { + "_default": "2020-01-01" + }, + "BTGBTC": { + "_default": "2020-01-01" + }, + "BTGETH": { + "_default": "2020-01-01" + }, + "EVXBTC": { + "_default": "2020-01-01" + }, + "EVXETH": { + "_default": "2020-01-01" + }, + "REQBTC": { + "_default": "2020-01-01" + }, + "REQETH": { + "_default": "2020-01-01" + }, + "VIBBTC": { + "_default": "2020-01-01" + }, + "VIBETH": { + "_default": "2020-01-01" + }, + "HSRETH": { + "_default": "2020-01-01" + }, + "TRXBTC": { + "_default": "2020-01-01" + }, + "TRXETH": { + "_default": "2020-01-01" + }, + "POWRBTC": { + "_default": "2020-01-01" + }, + "POWRETH": { + "_default": "2020-01-01" + }, + "ARKBTC": { + "_default": "2020-01-01" + }, + "ARKETH": { + "_default": "2020-01-01" + }, + "YOYOETH": { + "_default": "2020-01-01" + }, + "XRPBTC": { + "_default": "2020-01-01" + }, + "XRPETH": { + "_default": "2020-01-01" + }, + "MODBTC": { + "_default": "2020-01-01" + }, + "MODETH": { + "_default": "2020-01-01" + }, + "ENJBTC": { + "_default": "2020-01-01" + }, + "ENJETH": { + "_default": "2020-01-01" + }, + "STORJBTC": { + "_default": "2020-01-01" + }, + "STORJETH": { + "_default": "2020-01-01" + }, + "BNBUSDT": { + "_default": "2020-01-01" + }, + "VENBNB": { + "_default": "2020-01-01" + }, + "YOYOBNB": { + "_default": "2020-01-01" + }, + "POWRBNB": { + "_default": "2020-01-01" + }, + "VENBTC": { + "_default": "2020-01-01" + }, + "VENETH": { + "_default": "2020-01-01" + }, + "KMDBTC": { + "_default": "2020-01-01" + }, + "KMDETH": { + "_default": "2020-01-01" + }, + "NULSBNB": { + "_default": "2020-01-01" + }, + "RCNBTC": { + "_default": "2020-01-01" + }, + "RCNETH": { + "_default": "2020-01-01" + }, + "RCNBNB": { + "_default": "2020-01-01" + }, + "NULSBTC": { + "_default": "2020-01-01" + }, + "NULSETH": { + "_default": "2020-01-01" + }, + "RDNBTC": { + "_default": "2020-01-01" + }, + "RDNETH": { + "_default": "2020-01-01" + }, + "RDNBNB": { + "_default": "2020-01-01" + }, + "XMRBTC": { + "_default": "2020-01-01" + }, + "XMRETH": { + "_default": "2020-01-01" + }, + "DLTBNB": { + "_default": "2020-01-01" + }, + "WTCBNB": { + "_default": "2020-01-01" + }, + "DLTBTC": { + "_default": "2020-01-01" + }, + "DLTETH": { + "_default": "2020-01-01" + }, + "AMBBTC": { + "_default": "2020-01-01" + }, + "AMBETH": { + "_default": "2020-01-01" + }, + "AMBBNB": { + "_default": "2020-01-01" + }, + "BCCETH": { + "_default": "2020-01-01" + }, + "BCCUSDT": { + "_default": "2020-01-01" + }, + "BCCBNB": { + "_default": "2020-01-01" + }, + "BATBTC": { + "_default": "2020-01-01" + }, + "BATETH": { + "_default": "2020-01-01" + }, + "BATBNB": { + "_default": "2020-01-01" + }, + "BCPTBTC": { + "_default": "2020-01-01" + }, + "BCPTETH": { + "_default": "2020-01-01" + }, + "BCPTBNB": { + "_default": "2020-01-01" + }, + "ARNBTC": { + "_default": "2020-01-01" + }, + "ARNETH": { + "_default": "2020-01-01" + }, + "GVTBTC": { + "_default": "2020-01-01" + }, + "GVTETH": { + "_default": "2020-01-01" + }, + "CDTBTC": { + "_default": "2020-01-01" + }, + "CDTETH": { + "_default": "2020-01-01" + }, + "GXSBTC": { + "_default": "2020-01-01" + }, + "GXSETH": { + "_default": "2020-01-01" + }, + "NEOUSDT": { + "_default": "2020-01-01" + }, + "NEOBNB": { + "_default": "2020-01-01" + }, + "POEBTC": { + "_default": "2020-01-01" + }, + "POEETH": { + "_default": "2020-01-01" + }, + "QSPBTC": { + "_default": "2020-01-01" + }, + "QSPETH": { + "_default": "2020-01-01" + }, + "QSPBNB": { + "_default": "2020-01-01" + }, + "BTSBTC": { + "_default": "2020-01-01" + }, + "BTSETH": { + "_default": "2020-01-01" + }, + "BTSBNB": { + "_default": "2020-01-01" + }, + "XZCBTC": { + "_default": "2020-01-01" + }, + "XZCETH": { + "_default": "2020-01-01" + }, + "XZCBNB": { + "_default": "2020-01-01" + }, + "LSKBTC": { + "_default": "2020-01-01" + }, + "LSKETH": { + "_default": "2020-01-01" + }, + "LSKBNB": { + "_default": "2020-01-01" + }, + "TNTBTC": { + "_default": "2020-01-01" + }, + "TNTETH": { + "_default": "2020-01-01" + }, + "FUELBTC": { + "_default": "2020-01-01" + }, + "FUELETH": { + "_default": "2020-01-01" + }, + "MANABTC": { + "_default": "2020-01-01" + }, + "MANAETH": { + "_default": "2020-01-01" + }, + "BCDBTC": { + "_default": "2020-01-01" + }, + "BCDETH": { + "_default": "2020-01-01" + }, + "DGDBTC": { + "_default": "2020-01-01" + }, + "DGDETH": { + "_default": "2020-01-01" + }, + "IOTABNB": { + "_default": "2020-01-01" + }, + "ADXBTC": { + "_default": "2020-01-01" + }, + "ADXETH": { + "_default": "2020-01-01" + }, + "ADXBNB": { + "_default": "2020-01-01" + }, + "ADABTC": { + "_default": "2020-01-01" + }, + "ADAETH": { + "_default": "2020-01-01" + }, + "PPTBTC": { + "_default": "2020-01-01" + }, + "PPTETH": { + "_default": "2020-01-01" + }, + "CMTBTC": { + "_default": "2020-01-01" + }, + "CMTETH": { + "_default": "2020-01-01" + }, + "CMTBNB": { + "_default": "2020-01-01" + }, + "XLMBTC": { + "_default": "2020-01-01" + }, + "XLMETH": { + "_default": "2020-01-01" + }, + "XLMBNB": { + "_default": "2020-01-01" + }, + "CNDBTC": { + "_default": "2020-01-01" + }, + "CNDETH": { + "_default": "2020-01-01" + }, + "CNDBNB": { + "_default": "2020-01-01" + }, + "LENDBTC": { + "_default": "2020-01-01" + }, + "LENDETH": { + "_default": "2020-01-01" + }, + "WABIBTC": { + "_default": "2020-01-01" + }, + "WABIETH": { + "_default": "2020-01-01" + }, + "WABIBNB": { + "_default": "2020-01-01" + }, + "LTCETH": { + "_default": "2020-01-01" + }, + "LTCUSDT": { + "_default": "2020-01-01" + }, + "LTCBNB": { + "_default": "2020-01-01" + }, + "TNBBTC": { + "_default": "2020-01-01" + }, + "TNBETH": { + "_default": "2020-01-01" + }, + "WAVESBTC": { + "_default": "2020-01-01" + }, + "WAVESETH": { + "_default": "2020-01-01" + }, + "WAVESBNB": { + "_default": "2020-01-01" + }, + "GTOBTC": { + "_default": "2020-01-01" + }, + "GTOETH": { + "_default": "2020-01-01" + }, + "GTOBNB": { + "_default": "2020-01-01" + }, + "ICXBTC": { + "_default": "2020-01-01" + }, + "ICXETH": { + "_default": "2020-01-01" + }, + "ICXBNB": { + "_default": "2020-01-01" + }, + "OSTBTC": { + "_default": "2020-01-01" + }, + "OSTETH": { + "_default": "2020-01-01" + }, + "OSTBNB": { + "_default": "2020-01-01" + }, + "ELFBTC": { + "_default": "2020-01-01" + }, + "ELFETH": { + "_default": "2020-01-01" + }, + "AIONBTC": { + "_default": "2020-01-01" + }, + "AIONETH": { + "_default": "2020-01-01" + }, + "AIONBNB": { + "_default": "2020-01-01" + }, + "NEBLBTC": { + "_default": "2020-01-01" + }, + "NEBLBNB": { + "_default": "2020-01-01" + }, + "BRDBTC": { + "_default": "2020-01-01" + }, + "BRDETH": { + "_default": "2020-01-01" + }, + "BRDBNB": { + "_default": "2020-01-01" + }, + "MCOBNB": { + "_default": "2020-01-01" + }, + "EDOBTC": { + "_default": "2020-01-01" + }, + "EDOETH": { + "_default": "2020-01-01" + }, + "WINGSBTC": { + "_default": "2020-01-01" + }, + "WINGSETH": { + "_default": "2020-01-01" + }, + "NAVBTC": { + "_default": "2020-01-01" + }, + "NAVETH": { + "_default": "2020-01-01" + }, + "NAVBNB": { + "_default": "2020-01-01" + }, + "LUNBTC": { + "_default": "2020-01-01" + }, + "LUNETH": { + "_default": "2020-01-01" + }, + "TRIGBTC": { + "_default": "2020-01-01" + }, + "TRIGETH": { + "_default": "2020-01-01" + }, + "TRIGBNB": { + "_default": "2020-01-01" + }, + "APPCBTC": { + "_default": "2020-01-01" + }, + "APPCETH": { + "_default": "2020-01-01" + }, + "APPCBNB": { + "_default": "2020-01-01" + }, + "VIBEBTC": { + "_default": "2020-01-01" + }, + "VIBEETH": { + "_default": "2020-01-01" + }, + "RLCBTC": { + "_default": "2020-01-01" + }, + "RLCETH": { + "_default": "2020-01-01" + }, + "RLCBNB": { + "_default": "2020-01-01" + }, + "INSBTC": { + "_default": "2020-01-01" + }, + "INSETH": { + "_default": "2020-01-01" + }, + "PIVXBTC": { + "_default": "2020-01-01" + }, + "PIVXBNB": { + "_default": "2020-01-01" + }, + "IOSTBTC": { + "_default": "2020-01-01" + }, + "IOSTETH": { + "_default": "2020-01-01" + }, + "CHATBTC": { + "_default": "2020-01-01" + }, + "CHATETH": { + "_default": "2020-01-01" + }, + "STEEMBTC": { + "_default": "2020-01-01" + }, + "STEEMETH": { + "_default": "2020-01-01" + }, + "STEEMBNB": { + "_default": "2020-01-01" + }, + "NANOBTC": { + "_default": "2020-01-01" + }, + "NANOETH": { + "_default": "2020-01-01" + }, + "NANOBNB": { + "_default": "2020-01-01" + }, + "VIABTC": { + "_default": "2020-01-01" + }, + "VIAETH": { + "_default": "2020-01-01" + }, + "VIABNB": { + "_default": "2020-01-01" + }, + "BLZBTC": { + "_default": "2020-01-01" + }, + "BLZETH": { + "_default": "2020-01-01" + }, + "BLZBNB": { + "_default": "2020-01-01" + }, + "AEBTC": { + "_default": "2020-01-01" + }, + "AEETH": { + "_default": "2020-01-01" + }, + "AEBNB": { + "_default": "2020-01-01" + }, + "RPXBTC": { + "_default": "2020-01-01" + }, + "RPXETH": { + "_default": "2020-01-01" + }, + "RPXBNB": { + "_default": "2020-01-01" + }, + "NCASHBTC": { + "_default": "2020-01-01" + }, + "NCASHETH": { + "_default": "2020-01-01" + }, + "NCASHBNB": { + "_default": "2020-01-01" + }, + "POABTC": { + "_default": "2020-01-01" + }, + "POAETH": { + "_default": "2020-01-01" + }, + "POABNB": { + "_default": "2020-01-01" + }, + "ZILBTC": { + "_default": "2020-01-01" + }, + "ZILETH": { + "_default": "2020-01-01" + }, + "ZILBNB": { + "_default": "2020-01-01" + }, + "ONTBTC": { + "_default": "2020-01-01" + }, + "ONTETH": { + "_default": "2020-01-01" + }, + "ONTBNB": { + "_default": "2020-01-01" + }, + "STORMBTC": { + "_default": "2020-01-01" + }, + "STORMETH": { + "_default": "2020-01-01" + }, + "STORMBNB": { + "_default": "2020-01-01" + }, + "QTUMBNB": { + "_default": "2020-01-01" + }, + "QTUMUSDT": { + "_default": "2020-01-01" + }, + "XEMBTC": { + "_default": "2020-01-01" + }, + "XEMETH": { + "_default": "2020-01-01" + }, + "XEMBNB": { + "_default": "2020-01-01" + }, + "WANBTC": { + "_default": "2020-01-01" + }, + "WANETH": { + "_default": "2020-01-01" + }, + "WANBNB": { + "_default": "2020-01-01" + }, + "WPRBTC": { + "_default": "2020-01-01" + }, + "WPRETH": { + "_default": "2020-01-01" + }, + "QLCBTC": { + "_default": "2020-01-01" + }, + "QLCETH": { + "_default": "2020-01-01" + }, + "SYSBTC": { + "_default": "2020-01-01" + }, + "SYSETH": { + "_default": "2020-01-01" + }, + "SYSBNB": { + "_default": "2020-01-01" + }, + "QLCBNB": { + "_default": "2020-01-01" + }, + "GRSBTC": { + "_default": "2020-01-01" + }, + "GRSETH": { + "_default": "2020-01-01" + }, + "ADAUSDT": { + "_default": "2020-01-01" + }, + "ADABNB": { + "_default": "2020-01-01" + }, + "CLOAKBTC": { + "_default": "2020-01-01" + }, + "CLOAKETH": { + "_default": "2020-01-01" + }, + "GNTBTC": { + "_default": "2020-01-01" + }, + "GNTETH": { + "_default": "2020-01-01" + }, + "GNTBNB": { + "_default": "2020-01-01" + }, + "LOOMBTC": { + "_default": "2020-01-01" + }, + "LOOMETH": { + "_default": "2020-01-01" + }, + "LOOMBNB": { + "_default": "2020-01-01" + }, + "XRPUSDT": { + "_default": "2020-01-01" + }, + "BCNBTC": { + "_default": "2020-01-01" + }, + "BCNETH": { + "_default": "2020-01-01" + }, + "BCNBNB": { + "_default": "2020-01-01" + }, + "REPBTC": { + "_default": "2020-01-01" + }, + "REPBNB": { + "_default": "2020-01-01" + }, + "BTCTUSD": { + "_default": "2020-01-01" + }, + "TUSDBTC": { + "_default": "2020-01-01" + }, + "ETHTUSD": { + "_default": "2020-01-01" + }, + "TUSDETH": { + "_default": "2020-01-01" + }, + "TUSDBNB": { + "_default": "2020-01-01" + }, + "ZENBTC": { + "_default": "2020-01-01" + }, + "ZENETH": { + "_default": "2020-01-01" + }, + "ZENBNB": { + "_default": "2020-01-01" + }, + "SKYCOINBTC": { + "_default": "2020-01-01" + }, + "SKYCOINETH": { + "_default": "2020-01-01" + }, + "SKYCOINBNB": { + "_default": "2020-01-01" + }, + "EOSUSDT": { + "_default": "2020-01-01" + }, + "EOSBNB": { + "_default": "2020-01-01" + }, + "CVCBTC": { + "_default": "2020-01-01" + }, + "CVCETH": { + "_default": "2020-01-01" + }, + "CVCBNB": { + "_default": "2020-01-01" + }, + "THETABTC": { + "_default": "2020-01-01" + }, + "THETAETH": { + "_default": "2020-01-01" + }, + "THETABNB": { + "_default": "2020-01-01" + }, + "XRPBNB": { + "_default": "2020-01-01" + }, + "TUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDT": { + "_default": "2020-01-01" + }, + "XLMUSDT": { + "_default": "2020-01-01" + }, + "IOTXBTC": { + "_default": "2020-01-01" + }, + "IOTXETH": { + "_default": "2020-01-01" + }, + "QKCBTC": { + "_default": "2020-01-01" + }, + "QKCETH": { + "_default": "2020-01-01" + }, + "AGIBTC": { + "_default": "2020-01-01" + }, + "AGIETH": { + "_default": "2020-01-01" + }, + "AGIBNB": { + "_default": "2020-01-01" + }, + "NXSBTC": { + "_default": "2020-01-01" + }, + "NXSETH": { + "_default": "2020-01-01" + }, + "NXSBNB": { + "_default": "2020-01-01" + }, + "ENJBNB": { + "_default": "2020-01-01" + }, + "DATABTC": { + "_default": "2020-01-01" + }, + "DATAETH": { + "_default": "2020-01-01" + }, + "ONTUSDT": { + "_default": "2020-01-01" + }, + "TRXBNB": { + "_default": "2020-01-01" + }, + "TRXUSDT": { + "_default": "2020-01-01" + }, + "ETCUSDT": { + "_default": "2020-01-01" + }, + "ETCBNB": { + "_default": "2020-01-01" + }, + "ICXUSDT": { + "_default": "2020-01-01" + }, + "SCBTC": { + "_default": "2020-01-01" + }, + "SCETH": { + "_default": "2020-01-01" + }, + "NPXSBTC": { + "_default": "2020-01-01" + }, + "NPXSETH": { + "_default": "2020-01-01" + }, + "VENUSDT": { + "_default": "2020-01-01" + }, + "KEYBTC": { + "_default": "2020-01-01" + }, + "KEYETH": { + "_default": "2020-01-01" + }, + "NASBTC": { + "_default": "2020-01-01" + }, + "NASETH": { + "_default": "2020-01-01" + }, + "NASBNB": { + "_default": "2020-01-01" + }, + "MFTBTC": { + "_default": "2020-01-01" + }, + "MFTETH": { + "_default": "2020-01-01" + }, + "MFTBNB": { + "_default": "2020-01-01" + }, + "DENTBTC": { + "_default": "2020-01-01" + }, + "DENTETH": { + "_default": "2020-01-01" + }, + "ARDRBTC": { + "_default": "2020-01-01" + }, + "ARDRETH": { + "_default": "2020-01-01" + }, + "ARDRBNB": { + "_default": "2020-01-01" + }, + "NULSUSDT": { + "_default": "2020-01-01" + }, + "HOTBTC": { + "_default": "2020-01-01" + }, + "HOTETH": { + "_default": "2020-01-01" + }, + "VETBTC": { + "_default": "2020-01-01" + }, + "VETETH": { + "_default": "2020-01-01" + }, + "VETUSDT": { + "_default": "2020-01-01" + }, + "VETBNB": { + "_default": "2020-01-01" + }, + "DOCKBTC": { + "_default": "2020-01-01" + }, + "DOCKETH": { + "_default": "2020-01-01" + }, + "POLYBTC": { + "_default": "2020-01-01" + }, + "POLYBNB": { + "_default": "2020-01-01" + }, + "PHXBTC": { + "_default": "2020-01-01" + }, + "PHXETH": { + "_default": "2020-01-01" + }, + "PHXBNB": { + "_default": "2020-01-01" + }, + "HCBTC": { + "_default": "2020-01-01" + }, + "HCETH": { + "_default": "2020-01-01" + }, + "GOBTC": { + "_default": "2020-01-01" + }, + "GOBNB": { + "_default": "2020-01-01" + }, + "PAXBTC": { + "_default": "2020-01-01" + }, + "PAXBNB": { + "_default": "2020-01-01" + }, + "PAXUSDT": { + "_default": "2020-01-01" + }, + "PAXETH": { + "_default": "2020-01-01" + }, + "RVNBTC": { + "_default": "2020-01-01" + }, + "DCRBTC": { + "_default": "2020-01-01" + }, + "DCRBNB": { + "_default": "2020-01-01" + }, + "USDCBNB": { + "_default": "2020-01-01" + }, + "MITHBTC": { + "_default": "2020-01-01" + }, + "MITHBNB": { + "_default": "2020-01-01" + }, + "BCHABCBTC": { + "_default": "2020-01-01" + }, + "BCHSVBTC": { + "_default": "2020-01-01" + }, + "BCHABCUSDT": { + "_default": "2020-01-01" + }, + "BCHSVUSDT": { + "_default": "2020-01-01" + }, + "BNBPAX": { + "_default": "2020-01-01" + }, + "BTCPAX": { + "_default": "2020-01-01" + }, + "ETHPAX": { + "_default": "2020-01-01" + }, + "XRPPAX": { + "_default": "2020-01-01" + }, + "EOSPAX": { + "_default": "2020-01-01" + }, + "XLMPAX": { + "_default": "2020-01-01" + }, + "RENBTC": { + "_default": "2020-01-01" + }, + "RENBNB": { + "_default": "2020-01-01" + }, + "BNBTUSD": { + "_default": "2020-01-01" + }, + "XRPTUSD": { + "_default": "2020-01-01" + }, + "EOSTUSD": { + "_default": "2020-01-01" + }, + "XLMTUSD": { + "_default": "2020-01-01" + }, + "BNBUSDC": { + "_default": "2020-01-01" + }, + "BTCUSDC": { + "_default": "2020-01-01" + }, + "ETHUSDC": { + "_default": "2020-01-01" + }, + "XRPUSDC": { + "_default": "2020-01-01" + }, + "EOSUSDC": { + "_default": "2020-01-01" + }, + "XLMUSDC": { + "_default": "2020-01-01" + }, + "USDCUSDT": { + "_default": "2020-01-01" + }, + "ADATUSD": { + "_default": "2020-01-01" + }, + "TRXTUSD": { + "_default": "2020-01-01" + }, + "NEOTUSD": { + "_default": "2020-01-01" + }, + "TRXXRP": { + "_default": "2020-01-01" + }, + "XZCXRP": { + "_default": "2020-01-01" + }, + "PAXTUSD": { + "_default": "2020-01-01" + }, + "USDCTUSD": { + "_default": "2020-01-01" + }, + "USDCPAX": { + "_default": "2020-01-01" + }, + "LINKUSDT": { + "_default": "2020-01-01" + }, + "LINKTUSD": { + "_default": "2020-01-01" + }, + "LINKPAX": { + "_default": "2020-01-01" + }, + "LINKUSDC": { + "_default": "2020-01-01" + }, + "WAVESUSDT": { + "_default": "2020-01-01" + }, + "WAVESTUSD": { + "_default": "2020-01-01" + }, + "WAVESPAX": { + "_default": "2020-01-01" + }, + "WAVESUSDC": { + "_default": "2020-01-01" + }, + "BCHABCTUSD": { + "_default": "2020-01-01" + }, + "BCHABCPAX": { + "_default": "2020-01-01" + }, + "BCHABCUSDC": { + "_default": "2020-01-01" + }, + "BCHSVTUSD": { + "_default": "2020-01-01" + }, + "BCHSVPAX": { + "_default": "2020-01-01" + }, + "BCHSVUSDC": { + "_default": "2020-01-01" + }, + "LTCTUSD": { + "_default": "2020-01-01" + }, + "LTCPAX": { + "_default": "2020-01-01" + }, + "LTCUSDC": { + "_default": "2020-01-01" + }, + "TRXPAX": { + "_default": "2020-01-01" + }, + "TRXUSDC": { + "_default": "2020-01-01" + }, + "BTTBTC": { + "_default": "2020-01-01" + }, + "BTTBNB": { + "_default": "2020-01-01" + }, + "BTTUSDT": { + "_default": "2020-01-01" + }, + "BNBUSDS": { + "_default": "2020-01-01" + }, + "BTCUSDS": { + "_default": "2020-01-01" + }, + "USDSUSDT": { + "_default": "2020-01-01" + }, + "USDSPAX": { + "_default": "2020-01-01" + }, + "USDSTUSD": { + "_default": "2020-01-01" + }, + "USDSUSDC": { + "_default": "2020-01-01" + }, + "BTTPAX": { + "_default": "2020-01-01" + }, + "BTTTUSD": { + "_default": "2020-01-01" + }, + "BTTUSDC": { + "_default": "2020-01-01" + }, + "ONGBNB": { + "_default": "2020-01-01" + }, + "ONGBTC": { + "_default": "2020-01-01" + }, + "ONGUSDT": { + "_default": "2020-01-01" + }, + "HOTBNB": { + "_default": "2020-01-01" + }, + "HOTUSDT": { + "_default": "2020-01-01" + }, + "ZILUSDT": { + "_default": "2020-01-01" + }, + "ZRXBNB": { + "_default": "2020-01-01" + }, + "ZRXUSDT": { + "_default": "2020-01-01" + }, + "FETBNB": { + "_default": "2020-01-01" + }, + "FETBTC": { + "_default": "2020-01-01" + }, + "FETUSDT": { + "_default": "2020-01-01" + }, + "BATUSDT": { + "_default": "2020-01-01" + }, + "XMRBNB": { + "_default": "2020-01-01" + }, + "XMRUSDT": { + "_default": "2020-01-01" + }, + "ZECBNB": { + "_default": "2020-01-01" + }, + "ZECUSDT": { + "_default": "2020-01-01" + }, + "ZECPAX": { + "_default": "2020-01-01" + }, + "ZECTUSD": { + "_default": "2020-01-01" + }, + "ZECUSDC": { + "_default": "2020-01-01" + }, + "IOSTUSDT": { + "_default": "2020-01-01" + }, + "CELRBNB": { + "_default": "2020-01-01" + }, + "CELRBTC": { + "_default": "2020-01-01" + }, + "CELRUSDT": { + "_default": "2020-01-01" + }, + "ADAPAX": { + "_default": "2020-01-01" + }, + "ADAUSDC": { + "_default": "2020-01-01" + }, + "NEOPAX": { + "_default": "2020-01-01" + }, + "NEOUSDC": { + "_default": "2020-01-01" + }, + "DASHBNB": { + "_default": "2020-01-01" + }, + "DASHUSDT": { + "_default": "2020-01-01" + }, + "NANOUSDT": { + "_default": "2020-01-01" + }, + "OMGBNB": { + "_default": "2020-01-01" + }, + "OMGUSDT": { + "_default": "2020-01-01" + }, + "THETAUSDT": { + "_default": "2020-01-01" + }, + "ENJUSDT": { + "_default": "2020-01-01" + }, + "MITHUSDT": { + "_default": "2020-01-01" + }, + "MATICBNB": { + "_default": "2020-01-01" + }, + "MATICBTC": { + "_default": "2020-01-01" + }, + "MATICUSDT": { + "_default": "2020-01-01" + }, + "ATOMBNB": { + "_default": "2020-01-01" + }, + "ATOMBTC": { + "_default": "2020-01-01" + }, + "ATOMUSDT": { + "_default": "2020-01-01" + }, + "ATOMUSDC": { + "_default": "2020-01-01" + }, + "ATOMPAX": { + "_default": "2020-01-01" + }, + "ATOMTUSD": { + "_default": "2020-01-01" + }, + "ETCUSDC": { + "_default": "2020-01-01" + }, + "ETCPAX": { + "_default": "2020-01-01" + }, + "ETCTUSD": { + "_default": "2020-01-01" + }, + "BATUSDC": { + "_default": "2020-01-01" + }, + "BATPAX": { + "_default": "2020-01-01" + }, + "BATTUSD": { + "_default": "2020-01-01" + }, + "PHBBNB": { + "_default": "2020-01-01" + }, + "PHBBTC": { + "_default": "2020-01-01" + }, + "PHBUSDC": { + "_default": "2020-01-01" + }, + "PHBTUSD": { + "_default": "2020-01-01" + }, + "PHBPAX": { + "_default": "2020-01-01" + }, + "TFUELBNB": { + "_default": "2020-01-01" + }, + "TFUELBTC": { + "_default": "2020-01-01" + }, + "TFUELUSDT": { + "_default": "2020-01-01" + }, + "TFUELUSDC": { + "_default": "2020-01-01" + }, + "TFUELTUSD": { + "_default": "2020-01-01" + }, + "TFUELPAX": { + "_default": "2020-01-01" + }, + "ONEBNB": { + "_default": "2020-01-01" + }, + "ONEBTC": { + "_default": "2020-01-01" + }, + "ONEUSDT": { + "_default": "2020-01-01" + }, + "ONETUSD": { + "_default": "2020-01-01" + }, + "ONEPAX": { + "_default": "2020-01-01" + }, + "ONEUSDC": { + "_default": "2020-01-01" + }, + "FTMBNB": { + "_default": "2020-01-01" + }, + "FTMBTC": { + "_default": "2020-01-01" + }, + "FTMUSDT": { + "_default": "2020-01-01" + }, + "FTMTUSD": { + "_default": "2020-01-01" + }, + "FTMPAX": { + "_default": "2020-01-01" + }, + "FTMUSDC": { + "_default": "2020-01-01" + }, + "BTCBBTC": { + "_default": "2020-01-01" + }, + "BCPTTUSD": { + "_default": "2020-01-01" + }, + "BCPTPAX": { + "_default": "2020-01-01" + }, + "BCPTUSDC": { + "_default": "2020-01-01" + }, + "ALGOBNB": { + "_default": "2020-01-01" + }, + "ALGOBTC": { + "_default": "2020-01-01" + }, + "ALGOUSDT": { + "_default": "2020-01-01" + }, + "ALGOTUSD": { + "_default": "2020-01-01" + }, + "ALGOPAX": { + "_default": "2020-01-01" + }, + "ALGOUSDC": { + "_default": "2020-01-01" + }, + "USDSBUSDT": { + "_default": "2020-01-01" + }, + "USDSBUSDS": { + "_default": "2020-01-01" + }, + "GTOUSDT": { + "_default": "2020-01-01" + }, + "GTOPAX": { + "_default": "2020-01-01" + }, + "GTOTUSD": { + "_default": "2020-01-01" + }, + "GTOUSDC": { + "_default": "2020-01-01" + }, + "ERDBNB": { + "_default": "2020-01-01" + }, + "ERDBTC": { + "_default": "2020-01-01" + }, + "ERDUSDT": { + "_default": "2020-01-01" + }, + "ERDPAX": { + "_default": "2020-01-01" + }, + "ERDUSDC": { + "_default": "2020-01-01" + }, + "DOGEBNB": { + "_default": "2020-01-01" + }, + "DOGEBTC": { + "_default": "2020-01-01" + }, + "DOGEUSDT": { + "_default": "2020-01-01" + }, + "DOGEPAX": { + "_default": "2020-01-01" + }, + "DOGEUSDC": { + "_default": "2020-01-01" + }, + "DUSKBNB": { + "_default": "2020-01-01" + }, + "DUSKBTC": { + "_default": "2020-01-01" + }, + "DUSKUSDT": { + "_default": "2020-01-01" + }, + "DUSKUSDC": { + "_default": "2020-01-01" + }, + "DUSKPAX": { + "_default": "2020-01-01" + }, + "BGBPUSDC": { + "_default": "2020-01-01" + }, + "ANKRBNB": { + "_default": "2020-01-01" + }, + "ANKRBTC": { + "_default": "2020-01-01" + }, + "ANKRUSDT": { + "_default": "2020-01-01" + }, + "ANKRTUSD": { + "_default": "2020-01-01" + }, + "ANKRPAX": { + "_default": "2020-01-01" + }, + "ANKRUSDC": { + "_default": "2020-01-01" + }, + "ONTPAX": { + "_default": "2020-01-01" + }, + "ONTUSDC": { + "_default": "2020-01-01" + }, + "WINBNB": { + "_default": "2020-01-01" + }, + "WINBTC": { + "_default": "2020-01-01" + }, + "WINUSDT": { + "_default": "2020-01-01" + }, + "WINUSDC": { + "_default": "2020-01-01" + }, + "COSBNB": { + "_default": "2020-01-01" + }, + "COSBTC": { + "_default": "2020-01-01" + }, + "COSUSDT": { + "_default": "2020-01-01" + }, + "TUSDBTUSD": { + "_default": "2020-01-01" + }, + "NPXSUSDT": { + "_default": "2020-01-01" + }, + "NPXSUSDC": { + "_default": "2020-01-01" + }, + "COCOSBNB": { + "_default": "2020-01-01" + }, + "COCOSBTC": { + "_default": "2020-01-01" + }, + "COCOSUSDT": { + "_default": "2020-01-01" + }, + "MTLUSDT": { + "_default": "2020-01-01" + }, + "TOMOBNB": { + "_default": "2020-01-01" + }, + "TOMOBTC": { + "_default": "2020-01-01" + }, + "TOMOUSDT": { + "_default": "2020-01-01" + }, + "TOMOUSDC": { + "_default": "2020-01-01" + }, + "PERLBNB": { + "_default": "2020-01-01" + }, + "PERLBTC": { + "_default": "2020-01-01" + }, + "PERLUSDC": { + "_default": "2020-01-01" + }, + "PERLUSDT": { + "_default": "2020-01-01" + }, + "DENTUSDT": { + "_default": "2020-01-01" + }, + "MFTUSDT": { + "_default": "2020-01-01" + }, + "KEYUSDT": { + "_default": "2020-01-01" + }, + "STORMUSDT": { + "_default": "2020-01-01" + }, + "DOCKUSDT": { + "_default": "2020-01-01" + }, + "WANUSDT": { + "_default": "2020-01-01" + }, + "FUNUSDT": { + "_default": "2020-01-01" + }, + "CVCUSDT": { + "_default": "2020-01-01" + }, + "BTTTRX": { + "_default": "2020-01-01" + }, + "WINTRX": { + "_default": "2020-01-01" + }, + "CHZBNB": { + "_default": "2020-01-01" + }, + "CHZBTC": { + "_default": "2020-01-01" + }, + "CHZUSDT": { + "_default": "2020-01-01" + }, + "BANDBNB": { + "_default": "2020-01-01" + }, + "BANDBTC": { + "_default": "2020-01-01" + }, + "BANDUSDT": { + "_default": "2020-01-01" + }, + "BNBBUSD": { + "_default": "2020-01-01" + }, + "BTCBUSD": { + "_default": "2020-01-01" + }, + "BUSDUSDT": { + "_default": "2020-01-01" + }, + "BEAMBNB": { + "_default": "2020-01-01" + }, + "BEAMBTC": { + "_default": "2020-01-01" + }, + "BEAMUSDT": { + "_default": "2020-01-01" + }, + "XTZBNB": { + "_default": "2020-01-01" + }, + "XTZBTC": { + "_default": "2020-01-01" + }, + "XTZUSDT": { + "_default": "2020-01-01" + }, + "RENUSDT": { + "_default": "2020-01-01" + }, + "RVNUSDT": { + "_default": "2020-01-01" + }, + "HCUSDT": { + "_default": "2020-01-01" + }, + "HBARBNB": { + "_default": "2020-01-01" + }, + "HBARBTC": { + "_default": "2020-01-01" + }, + "HBARUSDT": { + "_default": "2020-01-01" + }, + "NKNBNB": { + "_default": "2020-01-01" + }, + "NKNBTC": { + "_default": "2020-01-01" + }, + "NKNUSDT": { + "_default": "2020-01-01" + }, + "XRPBUSD": { + "_default": "2020-01-01" + }, + "ETHBUSD": { + "_default": "2020-01-01" + }, + "BCHABCBUSD": { + "_default": "2020-01-01" + }, + "LTCBUSD": { + "_default": "2020-01-01" + }, + "LINKBUSD": { + "_default": "2020-01-01" + }, + "ETCBUSD": { + "_default": "2020-01-01" + }, + "STXBNB": { + "_default": "2020-01-01" + }, + "STXBTC": { + "_default": "2020-01-01" + }, + "STXUSDT": { + "_default": "2020-01-01" + }, + "KAVABNB": { + "_default": "2020-01-01" + }, + "KAVABTC": { + "_default": "2020-01-01" + }, + "KAVAUSDT": { + "_default": "2020-01-01" + }, + "BUSDNGN": { + "_default": "2020-01-01" + }, + "BNBNGN": { + "_default": "2020-01-01" + }, + "BTCNGN": { + "_default": "2020-01-01" + }, + "ARPABNB": { + "_default": "2020-01-01" + }, + "ARPABTC": { + "_default": "2020-01-01" + }, + "ARPAUSDT": { + "_default": "2020-01-01" + }, + "TRXBUSD": { + "_default": "2020-01-01" + }, + "EOSBUSD": { + "_default": "2020-01-01" + }, + "IOTXUSDT": { + "_default": "2020-01-01" + }, + "RLCUSDT": { + "_default": "2020-01-01" + }, + "MCOUSDT": { + "_default": "2020-01-01" + }, + "XLMBUSD": { + "_default": "2020-01-01" + }, + "ADABUSD": { + "_default": "2020-01-01" + }, + "CTXCBNB": { + "_default": "2020-01-01" + }, + "CTXCBTC": { + "_default": "2020-01-01" + }, + "CTXCUSDT": { + "_default": "2020-01-01" + }, + "BCHBNB": { + "_default": "2020-01-01" + }, + "BCHBTC": { + "_default": "2020-01-01" + }, + "BCHUSDT": { + "_default": "2020-01-01" + }, + "BCHUSDC": { + "_default": "2020-01-01" + }, + "BCHTUSD": { + "_default": "2020-01-01" + }, + "BCHPAX": { + "_default": "2020-01-01" + }, + "BCHBUSD": { + "_default": "2020-01-01" + }, + "BTCRUB": { + "_default": "2020-01-01" + }, + "ETHRUB": { + "_default": "2020-01-01" + }, + "XRPRUB": { + "_default": "2020-01-01" + }, + "BNBRUB": { + "_default": "2020-01-01" + }, + "TROYBNB": { + "_default": "2020-01-01" + }, + "TROYBTC": { + "_default": "2020-01-01" + }, + "TROYUSDT": { + "_default": "2020-01-01" + }, + "BUSDRUB": { + "_default": "2020-01-01" + }, + "QTUMBUSD": { + "_default": "2020-01-01" + }, + "VETBUSD": { + "_default": "2020-01-01" + }, + "VITEBNB": { + "_default": "2020-01-01" + }, + "VITEBTC": { + "_default": "2020-01-01" + }, + "VITEUSDT": { + "_default": "2020-01-01" + }, + "FTTBNB": { + "_default": "2020-01-01" + }, + "FTTBTC": { + "_default": "2020-01-01" + }, + "FTTUSDT": { + "_default": "2020-01-01" + }, + "BTCTRY": { + "_default": "2020-01-01" + }, + "BNBTRY": { + "_default": "2020-01-01" + }, + "BUSDTRY": { + "_default": "2020-01-01" + }, + "ETHTRY": { + "_default": "2020-01-01" + }, + "XRPTRY": { + "_default": "2020-01-01" + }, + "USDTTRY": { + "_default": "2020-01-01" + }, + "USDTRUB": { + "_default": "2020-01-01" + }, + "BTCEUR": { + "_default": "2020-01-01" + }, + "ETHEUR": { + "_default": "2020-01-01" + }, + "BNBEUR": { + "_default": "2020-01-01" + }, + "XRPEUR": { + "_default": "2020-01-01" + }, + "EURBUSD": { + "_default": "2020-01-01" + }, + "EURUSDT": { + "_default": "2020-01-01" + }, + "OGNBNB": { + "_default": "2020-01-01" + }, + "OGNBTC": { + "_default": "2020-01-01" + }, + "OGNUSDT": { + "_default": "2020-01-01" + }, + "DREPBNB": { + "_default": "2020-01-01" + }, + "DREPBTC": { + "_default": "2020-01-01" + }, + "DREPUSDT": { + "_default": "2020-01-01" + }, + "BULLUSDT": { + "_default": "2020-01-01" + }, + "BULLBUSD": { + "_default": "2020-01-01" + }, + "BEARUSDT": { + "_default": "2020-01-01" + }, + "BEARBUSD": { + "_default": "2020-01-01" + }, + "ETHBULLUSDT": { + "_default": "2020-01-01" + }, + "ETHBULLBUSD": { + "_default": "2020-01-01" + }, + "ETHBEARUSDT": { + "_default": "2020-01-01" + }, + "ETHBEARBUSD": { + "_default": "2020-01-01" + }, + "TCTBNB": { + "_default": "2020-01-01" + }, + "TCTBTC": { + "_default": "2020-01-01" + }, + "TCTUSDT": { + "_default": "2020-01-01" + }, + "WRXBNB": { + "_default": "2020-01-01" + }, + "WRXBTC": { + "_default": "2020-01-01" + }, + "WRXUSDT": { + "_default": "2020-01-01" + }, + "ICXBUSD": { + "_default": "2020-01-01" + }, + "BTSUSDT": { + "_default": "2020-01-01" + }, + "BTSBUSD": { + "_default": "2020-01-01" + }, + "LSKUSDT": { + "_default": "2020-01-01" + }, + "BNTUSDT": { + "_default": "2020-01-01" + }, + "BNTBUSD": { + "_default": "2020-01-01" + }, + "LTOBNB": { + "_default": "2020-01-01" + }, + "LTOBTC": { + "_default": "2020-01-01" + }, + "LTOUSDT": { + "_default": "2020-01-01" + }, + "ATOMBUSD": { + "_default": "2020-01-01" + }, + "DASHBUSD": { + "_default": "2020-01-01" + }, + "NEOBUSD": { + "_default": "2020-01-01" + }, + "WAVESBUSD": { + "_default": "2020-01-01" + }, + "XTZBUSD": { + "_default": "2020-01-01" + }, + "EOSBULLUSDT": { + "_default": "2020-01-01" + }, + "EOSBULLBUSD": { + "_default": "2020-01-01" + }, + "EOSBEARUSDT": { + "_default": "2020-01-01" + }, + "EOSBEARBUSD": { + "_default": "2020-01-01" + }, + "XRPBULLUSDT": { + "_default": "2020-01-01" + }, + "XRPBULLBUSD": { + "_default": "2020-01-01" + }, + "XRPBEARUSDT": { + "_default": "2020-01-01" + }, + "XRPBEARBUSD": { + "_default": "2020-01-01" + }, + "BATBUSD": { + "_default": "2020-01-01" + }, + "ENJBUSD": { + "_default": "2020-01-01" + }, + "NANOBUSD": { + "_default": "2020-01-01" + }, + "ONTBUSD": { + "_default": "2020-01-01" + }, + "RVNBUSD": { + "_default": "2020-01-01" + }, + "STRATBUSD": { + "_default": "2020-01-01" + }, + "STRATBNB": { + "_default": "2020-01-01" + }, + "STRATUSDT": { + "_default": "2020-01-01" + }, + "AIONBUSD": { + "_default": "2020-01-01" + }, + "AIONUSDT": { + "_default": "2020-01-01" + }, + "MBLBNB": { + "_default": "2020-01-01" + }, + "MBLBTC": { + "_default": "2020-01-01" + }, + "MBLUSDT": { + "_default": "2020-01-01" + }, + "COTIBNB": { + "_default": "2020-01-01" + }, + "COTIBTC": { + "_default": "2020-01-01" + }, + "COTIUSDT": { + "_default": "2020-01-01" + }, + "ALGOBUSD": { + "_default": "2020-01-01" + }, + "BTTBUSD": { + "_default": "2020-01-01" + }, + "TOMOBUSD": { + "_default": "2020-01-01" + }, + "XMRBUSD": { + "_default": "2020-01-01" + }, + "ZECBUSD": { + "_default": "2020-01-01" + }, + "BNBBULLUSDT": { + "_default": "2020-01-01" + }, + "BNBBULLBUSD": { + "_default": "2020-01-01" + }, + "BNBBEARUSDT": { + "_default": "2020-01-01" + }, + "BNBBEARBUSD": { + "_default": "2020-01-01" + }, + "STPTBNB": { + "_default": "2020-01-01" + }, + "STPTBTC": { + "_default": "2020-01-01" + }, + "STPTUSDT": { + "_default": "2020-01-01" + }, + "BTCZAR": { + "_default": "2020-01-01" + }, + "ETHZAR": { + "_default": "2020-01-01" + }, + "BNBZAR": { + "_default": "2020-01-01" + }, + "USDTZAR": { + "_default": "2020-01-01" + }, + "BUSDZAR": { + "_default": "2020-01-01" + }, + "BTCBKRW": { + "_default": "2020-01-01" + }, + "ETHBKRW": { + "_default": "2020-01-01" + }, + "BNBBKRW": { + "_default": "2020-01-01" + }, + "WTCUSDT": { + "_default": "2020-01-01" + }, + "DATABUSD": { + "_default": "2020-01-01" + }, + "DATAUSDT": { + "_default": "2020-01-01" + }, + "XZCUSDT": { + "_default": "2020-01-01" + }, + "SOLBNB": { + "_default": "2020-01-01" + }, + "SOLBTC": { + "_default": "2020-01-01" + }, + "SOLUSDT": { + "_default": "2020-01-01" + }, + "SOLBUSD": { + "_default": "2020-01-01" + }, + "BTCIDRT": { + "_default": "2020-01-01" + }, + "BNBIDRT": { + "_default": "2020-01-01" + }, + "USDTIDRT": { + "_default": "2020-01-01" + }, + "BUSDIDRT": { + "_default": "2020-01-01" + }, + "CTSIBTC": { + "_default": "2020-01-01" + }, + "CTSIUSDT": { + "_default": "2020-01-01" + }, + "CTSIBNB": { + "_default": "2020-01-01" + }, + "CTSIBUSD": { + "_default": "2020-01-01" + }, + "HIVEBNB": { + "_default": "2020-01-01" + }, + "HIVEBTC": { + "_default": "2020-01-01" + }, + "HIVEUSDT": { + "_default": "2020-01-01" + }, + "CHRBNB": { + "_default": "2020-01-01" + }, + "CHRBTC": { + "_default": "2020-01-01" + }, + "CHRUSDT": { + "_default": "2020-01-01" + }, + "BTCUPUSDT": { + "_default": "2020-01-01" + }, + "BTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "GXSUSDT": { + "_default": "2020-01-01" + }, + "ARDRUSDT": { + "_default": "2020-01-01" + }, + "ERDBUSD": { + "_default": "2020-01-01" + }, + "LENDUSDT": { + "_default": "2020-01-01" + }, + "HBARBUSD": { + "_default": "2020-01-01" + }, + "MATICBUSD": { + "_default": "2020-01-01" + }, + "WRXBUSD": { + "_default": "2020-01-01" + }, + "ZILBUSD": { + "_default": "2020-01-01" + }, + "MDTBNB": { + "_default": "2020-01-01" + }, + "MDTBTC": { + "_default": "2020-01-01" + }, + "MDTUSDT": { + "_default": "2020-01-01" + }, + "STMXBTC": { + "_default": "2020-01-01" + }, + "STMXETH": { + "_default": "2020-01-01" + }, + "STMXUSDT": { + "_default": "2020-01-01" + }, + "KNCBUSD": { + "_default": "2020-01-01" + }, + "KNCUSDT": { + "_default": "2020-01-01" + }, + "REPBUSD": { + "_default": "2020-01-01" + }, + "REPUSDT": { + "_default": "2020-01-01" + }, + "LRCBUSD": { + "_default": "2020-01-01" + }, + "LRCUSDT": { + "_default": "2020-01-01" + }, + "IQBNB": { + "_default": "2020-01-01" + }, + "IQBUSD": { + "_default": "2020-01-01" + }, + "PNTBTC": { + "_default": "2020-01-01" + }, + "PNTUSDT": { + "_default": "2020-01-01" + }, + "BTCGBP": { + "_default": "2020-01-01" + }, + "ETHGBP": { + "_default": "2020-01-01" + }, + "XRPGBP": { + "_default": "2020-01-01" + }, + "BNBGBP": { + "_default": "2020-01-01" + }, + "GBPBUSD": { + "_default": "2020-01-01" + }, + "DGBBTC": { + "_default": "2020-01-01" + }, + "DGBBUSD": { + "_default": "2020-01-01" + }, + "BTCUAH": { + "_default": "2020-01-01" + }, + "USDTUAH": { + "_default": "2020-01-01" + }, + "COMPBTC": { + "_default": "2020-01-01" + }, + "COMPBNB": { + "_default": "2020-01-01" + }, + "COMPBUSD": { + "_default": "2020-01-01" + }, + "COMPUSDT": { + "_default": "2020-01-01" + }, + "BTCBIDR": { + "_default": "2020-01-01" + }, + "ETHBIDR": { + "_default": "2020-01-01" + }, + "BNBBIDR": { + "_default": "2020-01-01" + }, + "BUSDBIDR": { + "_default": "2020-01-01" + }, + "USDTBIDR": { + "_default": "2020-01-01" + }, + "BKRWUSDT": { + "_default": "2020-01-01" + }, + "BKRWBUSD": { + "_default": "2020-01-01" + }, + "SCUSDT": { + "_default": "2020-01-01" + }, + "ZENUSDT": { + "_default": "2020-01-01" + }, + "SXPBTC": { + "_default": "2020-01-01" + }, + "SXPBNB": { + "_default": "2020-01-01" + }, + "SXPBUSD": { + "_default": "2020-01-01" + }, + "SNXBTC": { + "_default": "2020-01-01" + }, + "SNXBNB": { + "_default": "2020-01-01" + }, + "SNXBUSD": { + "_default": "2020-01-01" + }, + "SNXUSDT": { + "_default": "2020-01-01" + }, + "ETHUPUSDT": { + "_default": "2020-01-01" + }, + "ETHDOWNUSDT": { + "_default": "2020-01-01" + }, + "ADAUPUSDT": { + "_default": "2020-01-01" + }, + "ADADOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKUPUSDT": { + "_default": "2020-01-01" + }, + "LINKDOWNUSDT": { + "_default": "2020-01-01" + }, + "VTHOBNB": { + "_default": "2020-01-01" + }, + "VTHOBUSD": { + "_default": "2020-01-01" + }, + "VTHOUSDT": { + "_default": "2020-01-01" + }, + "DCRBUSD": { + "_default": "2020-01-01" + }, + "DGBUSDT": { + "_default": "2020-01-01" + }, + "GBPUSDT": { + "_default": "2020-01-01" + }, + "STORJBUSD": { + "_default": "2020-01-01" + }, + "SXPUSDT": { + "_default": "2020-01-01" + }, + "IRISBNB": { + "_default": "2020-01-01" + }, + "IRISBTC": { + "_default": "2020-01-01" + }, + "IRISBUSD": { + "_default": "2020-01-01" + }, + "MKRBNB": { + "_default": "2020-01-01" + }, + "MKRBTC": { + "_default": "2020-01-01" + }, + "MKRUSDT": { + "_default": "2020-01-01" + }, + "MKRBUSD": { + "_default": "2020-01-01" + }, + "DAIBNB": { + "_default": "2020-01-01" + }, + "DAIBTC": { + "_default": "2020-01-01" + }, + "DAIUSDT": { + "_default": "2020-01-01" + }, + "DAIBUSD": { + "_default": "2020-01-01" + }, + "RUNEBNB": { + "_default": "2020-01-01" + }, + "RUNEBTC": { + "_default": "2020-01-01" + }, + "RUNEBUSD": { + "_default": "2020-01-01" + }, + "MANABUSD": { + "_default": "2020-01-01" + }, + "DOGEBUSD": { + "_default": "2020-01-01" + }, + "LENDBUSD": { + "_default": "2020-01-01" + }, + "ZRXBUSD": { + "_default": "2020-01-01" + }, + "DCRUSDT": { + "_default": "2020-01-01" + }, + "STORJUSDT": { + "_default": "2020-01-01" + }, + "XRPBKRW": { + "_default": "2020-01-01" + }, + "ADABKRW": { + "_default": "2020-01-01" + }, + "BTCAUD": { + "_default": "2020-01-01" + }, + "ETHAUD": { + "_default": "2020-01-01" + }, + "AUDBUSD": { + "_default": "2020-01-01" + }, + "FIOBNB": { + "_default": "2020-01-01" + }, + "FIOBTC": { + "_default": "2020-01-01" + }, + "FIOBUSD": { + "_default": "2020-01-01" + }, + "BNBUPUSDT": { + "_default": "2020-01-01" + }, + "BNBDOWNUSDT": { + "_default": "2020-01-01" + }, + "XTZUPUSDT": { + "_default": "2020-01-01" + }, + "XTZDOWNUSDT": { + "_default": "2020-01-01" + }, + "AVABNB": { + "_default": "2020-01-01" + }, + "AVABTC": { + "_default": "2020-01-01" + }, + "AVABUSD": { + "_default": "2020-01-01" + }, + "USDTBKRW": { + "_default": "2020-01-01" + }, + "BUSDBKRW": { + "_default": "2020-01-01" + }, + "IOTABUSD": { + "_default": "2020-01-01" + }, + "MANAUSDT": { + "_default": "2020-01-01" + }, + "XRPAUD": { + "_default": "2020-01-01" + }, + "BNBAUD": { + "_default": "2020-01-01" + }, + "AUDUSDT": { + "_default": "2020-01-01" + }, + "BALBNB": { + "_default": "2020-01-01" + }, + "BALBTC": { + "_default": "2020-01-01" + }, + "BALBUSD": { + "_default": "2020-01-01" + }, + "YFIBNB": { + "_default": "2020-01-01" + }, + "YFIBTC": { + "_default": "2020-01-01" + }, + "YFIBUSD": { + "_default": "2020-01-01" + }, + "YFIUSDT": { + "_default": "2020-01-01" + }, + "BLZBUSD": { + "_default": "2020-01-01" + }, + "KMDBUSD": { + "_default": "2020-01-01" + }, + "BALUSDT": { + "_default": "2020-01-01" + }, + "BLZUSDT": { + "_default": "2020-01-01" + }, + "IRISUSDT": { + "_default": "2020-01-01" + }, + "KMDUSDT": { + "_default": "2020-01-01" + }, + "BTCDAI": { + "_default": "2020-01-01" + }, + "ETHDAI": { + "_default": "2020-01-01" + }, + "BNBDAI": { + "_default": "2020-01-01" + }, + "USDTDAI": { + "_default": "2020-01-01" + }, + "BUSDDAI": { + "_default": "2020-01-01" + }, + "JSTBNB": { + "_default": "2020-01-01" + }, + "JSTBTC": { + "_default": "2020-01-01" + }, + "JSTBUSD": { + "_default": "2020-01-01" + }, + "JSTUSDT": { + "_default": "2020-01-01" + }, + "SRMBNB": { + "_default": "2020-01-01" + }, + "SRMBTC": { + "_default": "2020-01-01" + }, + "SRMBUSD": { + "_default": "2020-01-01" + }, + "SRMUSDT": { + "_default": "2020-01-01" + }, + "ANTBNB": { + "_default": "2020-01-01" + }, + "ANTBTC": { + "_default": "2020-01-01" + }, + "ANTBUSD": { + "_default": "2020-01-01" + }, + "ANTUSDT": { + "_default": "2020-01-01" + }, + "CRVBNB": { + "_default": "2020-01-01" + }, + "CRVBTC": { + "_default": "2020-01-01" + }, + "CRVBUSD": { + "_default": "2020-01-01" + }, + "CRVUSDT": { + "_default": "2020-01-01" + }, + "SANDBNB": { + "_default": "2020-01-01" + }, + "SANDBTC": { + "_default": "2020-01-01" + }, + "SANDUSDT": { + "_default": "2020-01-01" + }, + "SANDBUSD": { + "_default": "2020-01-01" + }, + "OCEANBNB": { + "_default": "2020-01-01" + }, + "OCEANBTC": { + "_default": "2020-01-01" + }, + "OCEANBUSD": { + "_default": "2020-01-01" + }, + "OCEANUSDT": { + "_default": "2020-01-01" + }, + "NMRBTC": { + "_default": "2020-01-01" + }, + "NMRBUSD": { + "_default": "2020-01-01" + }, + "NMRUSDT": { + "_default": "2020-01-01" + }, + "DOTBNB": { + "_default": "2020-01-01" + }, + "DOTBTC": { + "_default": "2020-01-01" + }, + "DOTBUSD": { + "_default": "2020-01-01" + }, + "DOTUSDT": { + "_default": "2020-01-01" + }, + "LUNABNB": { + "_default": "2020-01-01" + }, + "LUNABTC": { + "_default": "2020-01-01" + }, + "LUNABUSD": { + "_default": "2020-01-01" + }, + "LUNAUSDT": { + "_default": "2020-01-01" + }, + "IDEXBTC": { + "_default": "2020-01-01" + }, + "IDEXBUSD": { + "_default": "2020-01-01" + }, + "RSRBNB": { + "_default": "2020-01-01" + }, + "RSRBTC": { + "_default": "2020-01-01" + }, + "RSRBUSD": { + "_default": "2020-01-01" + }, + "RSRUSDT": { + "_default": "2020-01-01" + }, + "PAXGBNB": { + "_default": "2020-01-01" + }, + "PAXGBTC": { + "_default": "2020-01-01" + }, + "PAXGBUSD": { + "_default": "2020-01-01" + }, + "PAXGUSDT": { + "_default": "2020-01-01" + }, + "WNXMBNB": { + "_default": "2020-01-01" + }, + "WNXMBTC": { + "_default": "2020-01-01" + }, + "WNXMBUSD": { + "_default": "2020-01-01" + }, + "WNXMUSDT": { + "_default": "2020-01-01" + }, + "TRBBNB": { + "_default": "2020-01-01" + }, + "TRBBTC": { + "_default": "2020-01-01" + }, + "TRBBUSD": { + "_default": "2020-01-01" + }, + "TRBUSDT": { + "_default": "2020-01-01" + }, + "ETHNGN": { + "_default": "2020-01-01" + }, + "DOTBIDR": { + "_default": "2020-01-01" + }, + "LINKAUD": { + "_default": "2020-01-01" + }, + "SXPAUD": { + "_default": "2020-01-01" + }, + "BZRXBNB": { + "_default": "2020-01-01" + }, + "BZRXBTC": { + "_default": "2020-01-01" + }, + "BZRXBUSD": { + "_default": "2020-01-01" + }, + "BZRXUSDT": { + "_default": "2020-01-01" + }, + "WBTCBTC": { + "_default": "2020-01-01" + }, + "WBTCETH": { + "_default": "2020-01-01" + }, + "SUSHIBNB": { + "_default": "2020-01-01" + }, + "SUSHIBTC": { + "_default": "2020-01-01" + }, + "SUSHIBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUSDT": { + "_default": "2020-01-01" + }, + "YFIIBNB": { + "_default": "2020-01-01" + }, + "YFIIBTC": { + "_default": "2020-01-01" + }, + "YFIIBUSD": { + "_default": "2020-01-01" + }, + "YFIIUSDT": { + "_default": "2020-01-01" + }, + "KSMBNB": { + "_default": "2020-01-01" + }, + "KSMBTC": { + "_default": "2020-01-01" + }, + "KSMBUSD": { + "_default": "2020-01-01" + }, + "KSMUSDT": { + "_default": "2020-01-01" + }, + "EGLDBNB": { + "_default": "2020-01-01" + }, + "EGLDBTC": { + "_default": "2020-01-01" + }, + "EGLDBUSD": { + "_default": "2020-01-01" + }, + "EGLDUSDT": { + "_default": "2020-01-01" + }, + "DIABNB": { + "_default": "2020-01-01" + }, + "DIABTC": { + "_default": "2020-01-01" + }, + "DIABUSD": { + "_default": "2020-01-01" + }, + "DIAUSDT": { + "_default": "2020-01-01" + }, + "RUNEUSDT": { + "_default": "2020-01-01" + }, + "FIOUSDT": { + "_default": "2020-01-01" + }, + "UMABTC": { + "_default": "2020-01-01" + }, + "UMAUSDT": { + "_default": "2020-01-01" + }, + "EOSUPUSDT": { + "_default": "2020-01-01" + }, + "EOSDOWNUSDT": { + "_default": "2020-01-01" + }, + "TRXUPUSDT": { + "_default": "2020-01-01" + }, + "TRXDOWNUSDT": { + "_default": "2020-01-01" + }, + "XRPUPUSDT": { + "_default": "2020-01-01" + }, + "XRPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTUPUSDT": { + "_default": "2020-01-01" + }, + "DOTDOWNUSDT": { + "_default": "2020-01-01" + }, + "SRMBIDR": { + "_default": "2020-01-01" + }, + "ONEBIDR": { + "_default": "2020-01-01" + }, + "LINKTRY": { + "_default": "2020-01-01" + }, + "USDTNGN": { + "_default": "2020-01-01" + }, + "BELBNB": { + "_default": "2020-01-01" + }, + "BELBTC": { + "_default": "2020-01-01" + }, + "BELBUSD": { + "_default": "2020-01-01" + }, + "BELUSDT": { + "_default": "2020-01-01" + }, + "WINGBNB": { + "_default": "2020-01-01" + }, + "WINGBTC": { + "_default": "2020-01-01" + }, + "SWRVBNB": { + "_default": "2020-01-01" + }, + "SWRVBUSD": { + "_default": "2020-01-01" + }, + "WINGBUSD": { + "_default": "2020-01-01" + }, + "WINGUSDT": { + "_default": "2020-01-01" + }, + "LTCUPUSDT": { + "_default": "2020-01-01" + }, + "LTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "LENDBKRW": { + "_default": "2020-01-01" + }, + "SXPEUR": { + "_default": "2020-01-01" + }, + "CREAMBNB": { + "_default": "2020-01-01" + }, + "CREAMBUSD": { + "_default": "2020-01-01" + }, + "UNIBNB": { + "_default": "2020-01-01" + }, + "UNIBTC": { + "_default": "2020-01-01" + }, + "UNIBUSD": { + "_default": "2020-01-01" + }, + "UNIUSDT": { + "_default": "2020-01-01" + }, + "NBSBTC": { + "_default": "2020-01-01" + }, + "NBSUSDT": { + "_default": "2020-01-01" + }, + "OXTBTC": { + "_default": "2020-01-01" + }, + "OXTUSDT": { + "_default": "2020-01-01" + }, + "SUNBTC": { + "_default": "2020-01-01" + }, + "SUNUSDT": { + "_default": "2020-01-01" + }, + "AVAXBNB": { + "_default": "2020-01-01" + }, + "AVAXBTC": { + "_default": "2020-01-01" + }, + "AVAXBUSD": { + "_default": "2020-01-01" + }, + "AVAXUSDT": { + "_default": "2020-01-01" + }, + "HNTBTC": { + "_default": "2020-01-01" + }, + "HNTUSDT": { + "_default": "2020-01-01" + }, + "BAKEBNB": { + "_default": "2020-01-01" + }, + "BURGERBNB": { + "_default": "2020-01-01" + }, + "SXPBIDR": { + "_default": "2020-01-01" + }, + "LINKBKRW": { + "_default": "2020-01-01" + }, + "FLMBNB": { + "_default": "2020-01-01" + }, + "FLMBTC": { + "_default": "2020-01-01" + }, + "FLMBUSD": { + "_default": "2020-01-01" + }, + "FLMUSDT": { + "_default": "2020-01-01" + }, + "SCRTBTC": { + "_default": "2020-01-01" + }, + "SCRTETH": { + "_default": "2020-01-01" + }, + "CAKEBNB": { + "_default": "2020-01-01" + }, + "CAKEBUSD": { + "_default": "2020-01-01" + }, + "SPARTABNB": { + "_default": "2020-01-01" + }, + "UNIUPUSDT": { + "_default": "2020-01-01" + }, + "UNIDOWNUSDT": { + "_default": "2020-01-01" + }, + "ORNBTC": { + "_default": "2020-01-01" + }, + "ORNUSDT": { + "_default": "2020-01-01" + }, + "TRXNGN": { + "_default": "2020-01-01" + }, + "SXPTRY": { + "_default": "2020-01-01" + }, + "UTKBTC": { + "_default": "2020-01-01" + }, + "UTKUSDT": { + "_default": "2020-01-01" + }, + "XVSBNB": { + "_default": "2020-01-01" + }, + "XVSBTC": { + "_default": "2020-01-01" + }, + "XVSBUSD": { + "_default": "2020-01-01" + }, + "XVSUSDT": { + "_default": "2020-01-01" + }, + "ALPHABNB": { + "_default": "2020-01-01" + }, + "ALPHABTC": { + "_default": "2020-01-01" + }, + "ALPHABUSD": { + "_default": "2020-01-01" + }, + "ALPHAUSDT": { + "_default": "2020-01-01" + }, + "VIDTBTC": { + "_default": "2020-01-01" + }, + "VIDTBUSD": { + "_default": "2020-01-01" + }, + "AAVEBNB": { + "_default": "2020-01-01" + }, + "BTCBRL": { + "_default": "2020-01-01" + }, + "USDTBRL": { + "_default": "2020-01-01" + }, + "AAVEBTC": { + "_default": "2020-01-01" + }, + "AAVEETH": { + "_default": "2020-01-01" + }, + "AAVEBUSD": { + "_default": "2020-01-01" + }, + "AAVEUSDT": { + "_default": "2020-01-01" + }, + "AAVEBKRW": { + "_default": "2020-01-01" + }, + "NEARBNB": { + "_default": "2020-01-01" + }, + "NEARBTC": { + "_default": "2020-01-01" + }, + "NEARBUSD": { + "_default": "2020-01-01" + }, + "NEARUSDT": { + "_default": "2020-01-01" + }, + "SXPUPUSDT": { + "_default": "2020-01-01" + }, + "SXPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTBKRW": { + "_default": "2020-01-01" + }, + "SXPGBP": { + "_default": "2020-01-01" + }, + "FILBNB": { + "_default": "2020-01-01" + }, + "FILBTC": { + "_default": "2020-01-01" + }, + "FILBUSD": { + "_default": "2020-01-01" + }, + "FILUSDT": { + "_default": "2020-01-01" + }, + "FILUPUSDT": { + "_default": "2020-01-01" + }, + "FILDOWNUSDT": { + "_default": "2020-01-01" + }, + "YFIUPUSDT": { + "_default": "2020-01-01" + }, + "YFIDOWNUSDT": { + "_default": "2020-01-01" + }, + "INJBNB": { + "_default": "2020-01-01" + }, + "INJBTC": { + "_default": "2020-01-01" + }, + "INJBUSD": { + "_default": "2020-01-01" + }, + "INJUSDT": { + "_default": "2020-01-01" + }, + "AERGOBTC": { + "_default": "2020-01-01" + }, + "AERGOBUSD": { + "_default": "2020-01-01" + }, + "LINKEUR": { + "_default": "2020-01-01" + }, + "ONEBUSD": { + "_default": "2020-01-01" + }, + "EASYETH": { + "_default": "2020-01-01" + }, + "AUDIOBTC": { + "_default": "2020-01-01" + }, + "AUDIOBUSD": { + "_default": "2020-01-01" + }, + "AUDIOUSDT": { + "_default": "2020-01-01" + }, + "CTKBNB": { + "_default": "2020-01-01" + }, + "CTKBTC": { + "_default": "2020-01-01" + }, + "CTKBUSD": { + "_default": "2020-01-01" + }, + "CTKUSDT": { + "_default": "2020-01-01" + }, + "BCHUPUSDT": { + "_default": "2020-01-01" + }, + "BCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BOTBTC": { + "_default": "2020-01-01" + }, + "BOTBUSD": { + "_default": "2020-01-01" + }, + "ETHBRL": { + "_default": "2020-01-01" + }, + "DOTEUR": { + "_default": "2020-01-01" + }, + "AKROBTC": { + "_default": "2020-01-01" + }, + "AKROUSDT": { + "_default": "2020-01-01" + }, + "KP3RBNB": { + "_default": "2020-01-01" + }, + "KP3RBUSD": { + "_default": "2020-01-01" + }, + "AXSBNB": { + "_default": "2020-01-01" + }, + "AXSBTC": { + "_default": "2020-01-01" + }, + "AXSBUSD": { + "_default": "2020-01-01" + }, + "AXSUSDT": { + "_default": "2020-01-01" + }, + "HARDBNB": { + "_default": "2020-01-01" + }, + "HARDBTC": { + "_default": "2020-01-01" + }, + "HARDBUSD": { + "_default": "2020-01-01" + }, + "HARDUSDT": { + "_default": "2020-01-01" + }, + "BNBBRL": { + "_default": "2020-01-01" + }, + "LTCEUR": { + "_default": "2020-01-01" + }, + "RENBTCBTC": { + "_default": "2020-01-01" + }, + "RENBTCETH": { + "_default": "2020-01-01" + }, + "DNTBUSD": { + "_default": "2020-01-01" + }, + "DNTUSDT": { + "_default": "2020-01-01" + }, + "SLPETH": { + "_default": "2020-01-01" + }, + "ADAEUR": { + "_default": "2020-01-01" + }, + "LTCNGN": { + "_default": "2020-01-01" + }, + "CVPETH": { + "_default": "2020-01-01" + }, + "CVPBUSD": { + "_default": "2020-01-01" + }, + "STRAXBTC": { + "_default": "2020-01-01" + }, + "STRAXETH": { + "_default": "2020-01-01" + }, + "STRAXBUSD": { + "_default": "2020-01-01" + }, + "STRAXUSDT": { + "_default": "2020-01-01" + }, + "FORBTC": { + "_default": "2020-01-01" + }, + "FORBUSD": { + "_default": "2020-01-01" + }, + "UNFIBNB": { + "_default": "2020-01-01" + }, + "UNFIBTC": { + "_default": "2020-01-01" + }, + "UNFIBUSD": { + "_default": "2020-01-01" + }, + "UNFIUSDT": { + "_default": "2020-01-01" + }, + "FRONTETH": { + "_default": "2020-01-01" + }, + "FRONTBUSD": { + "_default": "2020-01-01" + }, + "BCHABUSD": { + "_default": "2020-01-01" + }, + "ROSEBTC": { + "_default": "2020-01-01" + }, + "ROSEBUSD": { + "_default": "2020-01-01" + }, + "ROSEUSDT": { + "_default": "2020-01-01" + }, + "AVAXTRY": { + "_default": "2020-01-01" + }, + "BUSDBRL": { + "_default": "2020-01-01" + }, + "AVAUSDT": { + "_default": "2020-01-01" + }, + "SYSBUSD": { + "_default": "2020-01-01" + }, + "XEMUSDT": { + "_default": "2020-01-01" + }, + "HEGICETH": { + "_default": "2020-01-01" + }, + "HEGICBUSD": { + "_default": "2020-01-01" + }, + "AAVEUPUSDT": { + "_default": "2020-01-01" + }, + "AAVEDOWNUSDT": { + "_default": "2020-01-01" + }, + "PROMBNB": { + "_default": "2020-01-01" + }, + "PROMBUSD": { + "_default": "2020-01-01" + }, + "XRPBRL": { + "_default": "2020-01-01" + }, + "XRPNGN": { + "_default": "2020-01-01" + }, + "SKLBTC": { + "_default": "2020-01-01" + }, + "SKLBUSD": { + "_default": "2020-01-01" + }, + "SKLUSDT": { + "_default": "2020-01-01" + }, + "BCHEUR": { + "_default": "2020-01-01" + }, + "YFIEUR": { + "_default": "2020-01-01" + }, + "ZILBIDR": { + "_default": "2020-01-01" + }, + "SUSDBTC": { + "_default": "2020-01-01" + }, + "SUSDETH": { + "_default": "2020-01-01" + }, + "SUSDUSDT": { + "_default": "2020-01-01" + }, + "COVERETH": { + "_default": "2020-01-01" + }, + "COVERBUSD": { + "_default": "2020-01-01" + }, + "GLMBTC": { + "_default": "2020-01-01" + }, + "GLMETH": { + "_default": "2020-01-01" + }, + "GHSTETH": { + "_default": "2020-01-01" + }, + "GHSTBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUPUSDT": { + "_default": "2020-01-01" + }, + "SUSHIDOWNUSDT": { + "_default": "2020-01-01" + }, + "XLMUPUSDT": { + "_default": "2020-01-01" + }, + "XLMDOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKBRL": { + "_default": "2020-01-01" + }, + "LINKNGN": { + "_default": "2020-01-01" + }, + "LTCRUB": { + "_default": "2020-01-01" + }, + "TRXTRY": { + "_default": "2020-01-01" + }, + "XLMEUR": { + "_default": "2020-01-01" + }, + "DFETH": { + "_default": "2020-01-01" + }, + "DFBUSD": { + "_default": "2020-01-01" + }, + "GRTBTC": { + "_default": "2020-01-01" + }, + "GRTETH": { + "_default": "2020-01-01" + }, + "GRTUSDT": { + "_default": "2020-01-01" + }, + "JUVBTC": { + "_default": "2020-01-01" + }, + "JUVBUSD": { + "_default": "2020-01-01" + }, + "JUVUSDT": { + "_default": "2020-01-01" + }, + "PSGBTC": { + "_default": "2020-01-01" + }, + "PSGBUSD": { + "_default": "2020-01-01" + }, + "PSGUSDT": { + "_default": "2020-01-01" + }, + "BUSDBVND": { + "_default": "2020-01-01" + }, + "USDTBVND": { + "_default": "2020-01-01" + }, + "1INCHBTC": { + "_default": "2020-01-01" + }, + "1INCHUSDT": { + "_default": "2020-01-01" + }, + "REEFBTC": { + "_default": "2020-01-01" + }, + "REEFUSDT": { + "_default": "2020-01-01" + }, + "OGBTC": { + "_default": "2020-01-01" + }, + "OGUSDT": { + "_default": "2020-01-01" + }, + "ATMBTC": { + "_default": "2020-01-01" + }, + "ATMUSDT": { + "_default": "2020-01-01" + }, + "ASRBTC": { + "_default": "2020-01-01" + }, + "ASRUSDT": { + "_default": "2020-01-01" + }, + "CELOBTC": { + "_default": "2020-01-01" + }, + "CELOUSDT": { + "_default": "2020-01-01" + }, + "RIFBTC": { + "_default": "2020-01-01" + }, + "RIFUSDT": { + "_default": "2020-01-01" + }, + "CHZTRY": { + "_default": "2020-01-01" + }, + "XLMTRY": { + "_default": "2020-01-01" + }, + "LINKGBP": { + "_default": "2020-01-01" + }, + "GRTEUR": { + "_default": "2020-01-01" + }, + "BTCSTBTC": { + "_default": "2020-01-01" + }, + "BTCSTBUSD": { + "_default": "2020-01-01" + }, + "BTCSTUSDT": { + "_default": "2020-01-01" + }, + "TRUBTC": { + "_default": "2020-01-01" + }, + "TRUBUSD": { + "_default": "2020-01-01" + }, + "TRUUSDT": { + "_default": "2020-01-01" + }, + "DEXEETH": { + "_default": "2020-01-01" + }, + "DEXEBUSD": { + "_default": "2020-01-01" + }, + "EOSEUR": { + "_default": "2020-01-01" + }, + "LTCBRL": { + "_default": "2020-01-01" + }, + "USDCBUSD": { + "_default": "2020-01-01" + }, + "TUSDBUSD": { + "_default": "2020-01-01" + }, + "PAXBUSD": { + "_default": "2020-01-01" + }, + "CKBBTC": { + "_default": "2020-01-01" + }, + "CKBBUSD": { + "_default": "2020-01-01" + }, + "CKBUSDT": { + "_default": "2020-01-01" + }, + "TWTBTC": { + "_default": "2020-01-01" + }, + "TWTBUSD": { + "_default": "2020-01-01" + }, + "TWTUSDT": { + "_default": "2020-01-01" + }, + "FIROBTC": { + "_default": "2020-01-01" + }, + "FIROETH": { + "_default": "2020-01-01" + }, + "FIROUSDT": { + "_default": "2020-01-01" + }, + "BETHETH": { + "_default": "2020-01-01" + }, + "DOGEEUR": { + "_default": "2020-01-01" + }, + "DOGETRY": { + "_default": "2020-01-01" + }, + "DOGEAUD": { + "_default": "2020-01-01" + }, + "DOGEBRL": { + "_default": "2020-01-01" + }, + "DOTNGN": { + "_default": "2020-01-01" + }, + "PROSETH": { + "_default": "2020-01-01" + }, + "LITBTC": { + "_default": "2020-01-01" + }, + "LITBUSD": { + "_default": "2020-01-01" + }, + "LITUSDT": { + "_default": "2020-01-01" + }, + "BTCVAI": { + "_default": "2020-01-01" + }, + "BUSDVAI": { + "_default": "2020-01-01" + }, + "SFPBTC": { + "_default": "2020-01-01" + }, + "SFPBUSD": { + "_default": "2020-01-01" + }, + "SFPUSDT": { + "_default": "2020-01-01" + }, + "DOGEGBP": { + "_default": "2020-01-01" + }, + "DOTTRY": { + "_default": "2020-01-01" + }, + "FXSBTC": { + "_default": "2020-01-01" + }, + "FXSBUSD": { + "_default": "2020-01-01" + }, + "DODOBTC": { + "_default": "2020-01-01" + }, + "DODOBUSD": { + "_default": "2020-01-01" + }, + "DODOUSDT": { + "_default": "2020-01-01" + }, + "FRONTBTC": { + "_default": "2020-01-01" + }, + "EASYBTC": { + "_default": "2020-01-01" + }, + "CAKEBTC": { + "_default": "2020-01-01" + }, + "CAKEUSDT": { + "_default": "2020-01-01" + }, + "BAKEBUSD": { + "_default": "2020-01-01" + }, + "UFTETH": { + "_default": "2020-01-01" + }, + "UFTBUSD": { + "_default": "2020-01-01" + }, + "1INCHBUSD": { + "_default": "2020-01-01" + }, + "BANDBUSD": { + "_default": "2020-01-01" + }, + "GRTBUSD": { + "_default": "2020-01-01" + }, + "IOSTBUSD": { + "_default": "2020-01-01" + }, + "OMGBUSD": { + "_default": "2020-01-01" + }, + "REEFBUSD": { + "_default": "2020-01-01" + }, + "ACMBTC": { + "_default": "2020-01-01" + }, + "ACMBUSD": { + "_default": "2020-01-01" + }, + "ACMUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONBTC": { + "_default": "2020-01-01" + }, + "AUCTIONBUSD": { + "_default": "2020-01-01" + }, + "PHABTC": { + "_default": "2020-01-01" + }, + "PHABUSD": { + "_default": "2020-01-01" + }, + "DOTGBP": { + "_default": "2020-01-01" + }, + "ADATRY": { + "_default": "2020-01-01" + }, + "ADABRL": { + "_default": "2020-01-01" + }, + "ADAGBP": { + "_default": "2020-01-01" + }, + "TVKBTC": { + "_default": "2020-01-01" + }, + "TVKBUSD": { + "_default": "2020-01-01" + }, + "BADGERBTC": { + "_default": "2020-01-01" + }, + "BADGERBUSD": { + "_default": "2020-01-01" + }, + "BADGERUSDT": { + "_default": "2020-01-01" + }, + "FISBTC": { + "_default": "2020-01-01" + }, + "FISBUSD": { + "_default": "2020-01-01" + }, + "FISUSDT": { + "_default": "2020-01-01" + }, + "DOTBRL": { + "_default": "2020-01-01" + }, + "ADAAUD": { + "_default": "2020-01-01" + }, + "HOTTRY": { + "_default": "2020-01-01" + }, + "EGLDEUR": { + "_default": "2020-01-01" + }, + "OMBTC": { + "_default": "2020-01-01" + }, + "OMBUSD": { + "_default": "2020-01-01" + }, + "OMUSDT": { + "_default": "2020-01-01" + }, + "PONDBTC": { + "_default": "2020-01-01" + }, + "PONDBUSD": { + "_default": "2020-01-01" + }, + "PONDUSDT": { + "_default": "2020-01-01" + }, + "DEGOBTC": { + "_default": "2020-01-01" + }, + "DEGOBUSD": { + "_default": "2020-01-01" + }, + "DEGOUSDT": { + "_default": "2020-01-01" + }, + "AVAXEUR": { + "_default": "2020-01-01" + }, + "BTTTRY": { + "_default": "2020-01-01" + }, + "CHZBRL": { + "_default": "2020-01-01" + }, + "UNIEUR": { + "_default": "2020-01-01" + }, + "ALICEBTC": { + "_default": "2020-01-01" + }, + "ALICEBUSD": { + "_default": "2020-01-01" + }, + "ALICEUSDT": { + "_default": "2020-01-01" + }, + "CHZBUSD": { + "_default": "2020-01-01" + }, + "CHZEUR": { + "_default": "2020-01-01" + }, + "CHZGBP": { + "_default": "2020-01-01" + }, + "BIFIBNB": { + "_default": "2020-01-01" + }, + "BIFIBUSD": { + "_default": "2020-01-01" + }, + "LINABTC": { + "_default": "2020-01-01" + }, + "LINABUSD": { + "_default": "2020-01-01" + }, + "LINAUSDT": { + "_default": "2020-01-01" + }, + "ADARUB": { + "_default": "2020-01-01" + }, + "ENJBRL": { + "_default": "2020-01-01" + }, + "ENJEUR": { + "_default": "2020-01-01" + }, + "MATICEUR": { + "_default": "2020-01-01" + }, + "NEOTRY": { + "_default": "2020-01-01" + }, + "PERPBTC": { + "_default": "2020-01-01" + }, + "PERPBUSD": { + "_default": "2020-01-01" + }, + "PERPUSDT": { + "_default": "2020-01-01" + }, + "RAMPBTC": { + "_default": "2020-01-01" + }, + "RAMPBUSD": { + "_default": "2020-01-01" + }, + "RAMPUSDT": { + "_default": "2020-01-01" + }, + "SUPERBTC": { + "_default": "2020-01-01" + }, + "SUPERBUSD": { + "_default": "2020-01-01" + }, + "SUPERUSDT": { + "_default": "2020-01-01" + }, + "CFXBTC": { + "_default": "2020-01-01" + }, + "CFXBUSD": { + "_default": "2020-01-01" + }, + "CFXUSDT": { + "_default": "2020-01-01" + }, + "ENJGBP": { + "_default": "2020-01-01" + }, + "EOSTRY": { + "_default": "2020-01-01" + }, + "LTCGBP": { + "_default": "2020-01-01" + }, + "LUNAEUR": { + "_default": "2020-01-01" + }, + "RVNTRY": { + "_default": "2020-01-01" + }, + "THETAEUR": { + "_default": "2020-01-01" + }, + "XVGBUSD": { + "_default": "2020-01-01" + }, + "EPSBTC": { + "_default": "2020-01-01" + }, + "EPSBUSD": { + "_default": "2020-01-01" + }, + "EPSUSDT": { + "_default": "2020-01-01" + }, + "AUTOBTC": { + "_default": "2020-01-01" + }, + "AUTOBUSD": { + "_default": "2020-01-01" + }, + "AUTOUSDT": { + "_default": "2020-01-01" + }, + "TKOBTC": { + "_default": "2020-01-01" + }, + "TKOBIDR": { + "_default": "2020-01-01" + }, + "TKOBUSD": { + "_default": "2020-01-01" + }, + "TKOUSDT": { + "_default": "2020-01-01" + }, + "PUNDIXETH": { + "_default": "2020-01-01" + }, + "PUNDIXUSDT": { + "_default": "2020-01-01" + }, + "BTTBRL": { + "_default": "2020-01-01" + }, + "BTTEUR": { + "_default": "2020-01-01" + }, + "HOTEUR": { + "_default": "2020-01-01" + }, + "WINEUR": { + "_default": "2020-01-01" + }, + "TLMBTC": { + "_default": "2020-01-01" + }, + "TLMBUSD": { + "_default": "2020-01-01" + }, + "TLMUSDT": { + "_default": "2020-01-01" + }, + "1INCHUPUSDT": { + "_default": "2020-01-01" + }, + "1INCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BTGBUSD": { + "_default": "2020-01-01" + }, + "BTGUSDT": { + "_default": "2020-01-01" + }, + "HOTBUSD": { + "_default": "2020-01-01" + }, + "BNBUAH": { + "_default": "2020-01-01" + }, + "ONTTRY": { + "_default": "2020-01-01" + }, + "VETEUR": { + "_default": "2020-01-01" + }, + "VETGBP": { + "_default": "2020-01-01" + }, + "WINBRL": { + "_default": "2020-01-01" + }, + "MIRBTC": { + "_default": "2020-01-01" + }, + "MIRBUSD": { + "_default": "2020-01-01" + }, + "MIRUSDT": { + "_default": "2020-01-01" + }, + "BARBTC": { + "_default": "2020-01-01" + }, + "BARBUSD": { + "_default": "2020-01-01" + }, + "BARUSDT": { + "_default": "2020-01-01" + }, + "FORTHBTC": { + "_default": "2020-01-01" + }, + "FORTHBUSD": { + "_default": "2020-01-01" + }, + "FORTHUSDT": { + "_default": "2020-01-01" + }, + "CAKEGBP": { + "_default": "2020-01-01" + }, + "DOGERUB": { + "_default": "2020-01-01" + }, + "HOTBRL": { + "_default": "2020-01-01" + }, + "WRXEUR": { + "_default": "2020-01-01" + }, + "EZBTC": { + "_default": "2020-01-01" + }, + "EZETH": { + "_default": "2020-01-01" + }, + "BAKEUSDT": { + "_default": "2020-01-01" + }, + "BURGERBUSD": { + "_default": "2020-01-01" + }, + "BURGERUSDT": { + "_default": "2020-01-01" + }, + "SLPBUSD": { + "_default": "2020-01-01" + }, + "SLPUSDT": { + "_default": "2020-01-01" + }, + "TRXAUD": { + "_default": "2020-01-01" + }, + "TRXEUR": { + "_default": "2020-01-01" + }, + "VETTRY": { + "_default": "2020-01-01" + }, + "SHIBUSDT": { + "_default": "2020-01-01" + }, + "SHIBBUSD": { + "_default": "2020-01-01" + }, + "ICPBTC": { + "_default": "2020-01-01" + }, + "ICPBNB": { + "_default": "2020-01-01" + }, + "ICPBUSD": { + "_default": "2020-01-01" + }, + "ICPUSDT": { + "_default": "2020-01-01" + }, + "SHIBEUR": { + "_default": "2020-01-01" + }, + "SHIBRUB": { + "_default": "2020-01-01" + }, + "ETCEUR": { + "_default": "2020-01-01" + }, + "ETCBRL": { + "_default": "2020-01-01" + }, + "DOGEBIDR": { + "_default": "2020-01-01" + }, + "ARBTC": { + "_default": "2020-01-01" + }, + "ARBNB": { + "_default": "2020-01-01" + }, + "ARBUSD": { + "_default": "2020-01-01" + }, + "ARUSDT": { + "_default": "2020-01-01" + }, + "POLSBTC": { + "_default": "2020-01-01" + }, + "POLSBNB": { + "_default": "2020-01-01" + }, + "POLSBUSD": { + "_default": "2020-01-01" + }, + "POLSUSDT": { + "_default": "2020-01-01" + }, + "MDXBTC": { + "_default": "2020-01-01" + }, + "MDXBNB": { + "_default": "2020-01-01" + }, + "MDXBUSD": { + "_default": "2020-01-01" + }, + "MDXUSDT": { + "_default": "2020-01-01" + }, + "MASKBNB": { + "_default": "2020-01-01" + }, + "MASKBUSD": { + "_default": "2020-01-01" + }, + "MASKUSDT": { + "_default": "2020-01-01" + }, + "LPTBTC": { + "_default": "2020-01-01" + }, + "LPTBNB": { + "_default": "2020-01-01" + }, + "LPTBUSD": { + "_default": "2020-01-01" + }, + "LPTUSDT": { + "_default": "2020-01-01" + }, + "ETHUAH": { + "_default": "2020-01-01" + }, + "MATICBRL": { + "_default": "2020-01-01" + }, + "SOLEUR": { + "_default": "2020-01-01" + }, + "SHIBBRL": { + "_default": "2020-01-01" + }, + "AGIXBTC": { + "_default": "2020-01-01" + }, + "ICPEUR": { + "_default": "2020-01-01" + }, + "MATICGBP": { + "_default": "2020-01-01" + }, + "SHIBTRY": { + "_default": "2020-01-01" + }, + "MATICBIDR": { + "_default": "2020-01-01" + }, + "MATICRUB": { + "_default": "2020-01-01" + }, + "NUBTC": { + "_default": "2020-01-01" + }, + "NUBNB": { + "_default": "2020-01-01" + }, + "NUBUSD": { + "_default": "2020-01-01" + }, + "NUUSDT": { + "_default": "2020-01-01" + }, + "XVGUSDT": { + "_default": "2020-01-01" + }, + "RLCBUSD": { + "_default": "2020-01-01" + }, + "CELRBUSD": { + "_default": "2020-01-01" + }, + "ATMBUSD": { + "_default": "2020-01-01" + }, + "ZENBUSD": { + "_default": "2020-01-01" + }, + "FTMBUSD": { + "_default": "2020-01-01" + }, + "THETABUSD": { + "_default": "2020-01-01" + }, + "WINBUSD": { + "_default": "2020-01-01" + }, + "KAVABUSD": { + "_default": "2020-01-01" + }, + "XEMBUSD": { + "_default": "2020-01-01" + }, + "ATABTC": { + "_default": "2020-01-01" + }, + "ATABNB": { + "_default": "2020-01-01" + }, + "ATABUSD": { + "_default": "2020-01-01" + }, + "ATAUSDT": { + "_default": "2020-01-01" + }, + "GTCBTC": { + "_default": "2020-01-01" + }, + "GTCBNB": { + "_default": "2020-01-01" + }, + "GTCBUSD": { + "_default": "2020-01-01" + }, + "GTCUSDT": { + "_default": "2020-01-01" + }, + "TORNBTC": { + "_default": "2020-01-01" + }, + "TORNBNB": { + "_default": "2020-01-01" + }, + "TORNBUSD": { + "_default": "2020-01-01" + }, + "TORNUSDT": { + "_default": "2020-01-01" + }, + "MATICTRY": { + "_default": "2020-01-01" + }, + "ETCGBP": { + "_default": "2020-01-01" + }, + "SOLGBP": { + "_default": "2020-01-01" + }, + "BAKEBTC": { + "_default": "2020-01-01" + }, + "COTIBUSD": { + "_default": "2020-01-01" + }, + "KEEPBTC": { + "_default": "2020-01-01" + }, + "KEEPBNB": { + "_default": "2020-01-01" + }, + "KEEPBUSD": { + "_default": "2020-01-01" + }, + "KEEPUSDT": { + "_default": "2020-01-01" + }, + "SOLTRY": { + "_default": "2020-01-01" + }, + "RUNEGBP": { + "_default": "2020-01-01" + }, + "SOLBRL": { + "_default": "2020-01-01" + }, + "SCBUSD": { + "_default": "2020-01-01" + }, + "CHRBUSD": { + "_default": "2020-01-01" + }, + "STMXBUSD": { + "_default": "2020-01-01" + }, + "HNTBUSD": { + "_default": "2020-01-01" + }, + "FTTBUSD": { + "_default": "2020-01-01" + }, + "DOCKBUSD": { + "_default": "2020-01-01" + }, + "ADABIDR": { + "_default": "2020-01-01" + }, + "ERNBNB": { + "_default": "2020-01-01" + }, + "ERNBUSD": { + "_default": "2020-01-01" + }, + "ERNUSDT": { + "_default": "2020-01-01" + }, + "KLAYBTC": { + "_default": "2020-01-01" + }, + "KLAYBNB": { + "_default": "2020-01-01" + }, + "KLAYBUSD": { + "_default": "2020-01-01" + }, + "KLAYUSDT": { + "_default": "2020-01-01" + }, + "RUNEEUR": { + "_default": "2020-01-01" + }, + "MATICAUD": { + "_default": "2020-01-01" + }, + "DOTRUB": { + "_default": "2020-01-01" + }, + "UTKBUSD": { + "_default": "2020-01-01" + }, + "IOTXBUSD": { + "_default": "2020-01-01" + }, + "PHAUSDT": { + "_default": "2020-01-01" + }, + "SOLRUB": { + "_default": "2020-01-01" + }, + "RUNEAUD": { + "_default": "2020-01-01" + }, + "BUSDUAH": { + "_default": "2020-01-01" + }, + "BONDBTC": { + "_default": "2020-01-01" + }, + "BONDBNB": { + "_default": "2020-01-01" + }, + "BONDBUSD": { + "_default": "2020-01-01" + }, + "BONDUSDT": { + "_default": "2020-01-01" + }, + "MLNBTC": { + "_default": "2020-01-01" + }, + "MLNBNB": { + "_default": "2020-01-01" + }, + "MLNBUSD": { + "_default": "2020-01-01" + }, + "MLNUSDT": { + "_default": "2020-01-01" + }, + "GRTTRY": { + "_default": "2020-01-01" + }, + "CAKEBRL": { + "_default": "2020-01-01" + }, + "ICPRUB": { + "_default": "2020-01-01" + }, + "DOTAUD": { + "_default": "2020-01-01" + }, + "AAVEBRL": { + "_default": "2020-01-01" + }, + "EOSAUD": { + "_default": "2020-01-01" + }, + "DEXEUSDT": { + "_default": "2020-01-01" + }, + "LTOBUSD": { + "_default": "2020-01-01" + }, + "ADXBUSD": { + "_default": "2020-01-01" + }, + "QUICKBTC": { + "_default": "2020-01-01" + }, + "QUICKBNB": { + "_default": "2020-01-01" + }, + "QUICKBUSD": { + "_default": "2020-01-01" + }, + "C98USDT": { + "_default": "2020-01-01" + }, + "C98BUSD": { + "_default": "2020-01-01" + }, + "C98BNB": { + "_default": "2020-01-01" + }, + "C98BTC": { + "_default": "2020-01-01" + }, + "CLVBTC": { + "_default": "2020-01-01" + }, + "CLVBNB": { + "_default": "2020-01-01" + }, + "CLVBUSD": { + "_default": "2020-01-01" + }, + "CLVUSDT": { + "_default": "2020-01-01" + }, + "QNTBTC": { + "_default": "2020-01-01" + }, + "QNTBNB": { + "_default": "2020-01-01" + }, + "QNTBUSD": { + "_default": "2020-01-01" + }, + "QNTUSDT": { + "_default": "2020-01-01" + }, + "FLOWBTC": { + "_default": "2020-01-01" + }, + "FLOWBNB": { + "_default": "2020-01-01" + }, + "FLOWBUSD": { + "_default": "2020-01-01" + }, + "FLOWUSDT": { + "_default": "2020-01-01" + }, + "XECBUSD": { + "_default": "2020-01-01" + }, + "AXSBRL": { + "_default": "2020-01-01" + }, + "AXSAUD": { + "_default": "2020-01-01" + }, + "TVKUSDT": { + "_default": "2020-01-01" + }, + "MINABTC": { + "_default": "2020-01-01" + }, + "MINABNB": { + "_default": "2020-01-01" + }, + "MINABUSD": { + "_default": "2020-01-01" + }, + "MINAUSDT": { + "_default": "2020-01-01" + }, + "RAYBNB": { + "_default": "2020-01-01" + }, + "RAYBUSD": { + "_default": "2020-01-01" + }, + "RAYUSDT": { + "_default": "2020-01-01" + }, + "FARMBTC": { + "_default": "2020-01-01" + }, + "FARMBNB": { + "_default": "2020-01-01" + }, + "FARMBUSD": { + "_default": "2020-01-01" + }, + "FARMUSDT": { + "_default": "2020-01-01" + }, + "ALPACABTC": { + "_default": "2020-01-01" + }, + "ALPACABNB": { + "_default": "2020-01-01" + }, + "ALPACABUSD": { + "_default": "2020-01-01" + }, + "ALPACAUSDT": { + "_default": "2020-01-01" + }, + "TLMTRY": { + "_default": "2020-01-01" + }, + "QUICKUSDT": { + "_default": "2020-01-01" + }, + "ORNBUSD": { + "_default": "2020-01-01" + }, + "MBOXBTC": { + "_default": "2020-01-01" + }, + "MBOXBNB": { + "_default": "2020-01-01" + }, + "MBOXBUSD": { + "_default": "2020-01-01" + }, + "MBOXUSDT": { + "_default": "2020-01-01" + }, + "VGXBTC": { + "_default": "2020-01-01" + }, + "VGXETH": { + "_default": "2020-01-01" + }, + "FORUSDT": { + "_default": "2020-01-01" + }, + "REQUSDT": { + "_default": "2020-01-01" + }, + "GHSTUSDT": { + "_default": "2020-01-01" + }, + "TRURUB": { + "_default": "2020-01-01" + }, + "FISBRL": { + "_default": "2020-01-01" + }, + "WAXPUSDT": { + "_default": "2020-01-01" + }, + "WAXPBUSD": { + "_default": "2020-01-01" + }, + "WAXPBNB": { + "_default": "2020-01-01" + }, + "WAXPBTC": { + "_default": "2020-01-01" + }, + "TRIBEBTC": { + "_default": "2020-01-01" + }, + "TRIBEBNB": { + "_default": "2020-01-01" + }, + "TRIBEBUSD": { + "_default": "2020-01-01" + }, + "TRIBEUSDT": { + "_default": "2020-01-01" + }, + "GNOUSDT": { + "_default": "2020-01-01" + }, + "GNOBUSD": { + "_default": "2020-01-01" + }, + "GNOBNB": { + "_default": "2020-01-01" + }, + "GNOBTC": { + "_default": "2020-01-01" + }, + "ARPATRY": { + "_default": "2020-01-01" + }, + "PROMBTC": { + "_default": "2020-01-01" + }, + "MTLBUSD": { + "_default": "2020-01-01" + }, + "OGNBUSD": { + "_default": "2020-01-01" + }, + "XECUSDT": { + "_default": "2020-01-01" + }, + "C98BRL": { + "_default": "2020-01-01" + }, + "SOLAUD": { + "_default": "2020-01-01" + }, + "XRPBIDR": { + "_default": "2020-01-01" + }, + "POLYBUSD": { + "_default": "2020-01-01" + }, + "ELFUSDT": { + "_default": "2020-01-01" + }, + "DYDXUSDT": { + "_default": "2020-01-01" + }, + "DYDXBUSD": { + "_default": "2020-01-01" + }, + "DYDXBNB": { + "_default": "2020-01-01" + }, + "DYDXBTC": { + "_default": "2020-01-01" + }, + "ELFBUSD": { + "_default": "2020-01-01" + }, + "POLYUSDT": { + "_default": "2020-01-01" + }, + "IDEXUSDT": { + "_default": "2020-01-01" + }, + "VIDTUSDT": { + "_default": "2020-01-01" + }, + "SOLBIDR": { + "_default": "2020-01-01" + }, + "BTCUSDP": { + "_default": "2020-01-01" + }, + "ETHUSDP": { + "_default": "2020-01-01" + }, + "BNBUSDP": { + "_default": "2020-01-01" + }, + "USDPBUSD": { + "_default": "2020-01-01" + }, + "USDPUSDT": { + "_default": "2020-01-01" + }, + "GALAUSDT": { + "_default": "2020-01-01" + }, + "GALABUSD": { + "_default": "2020-01-01" + }, + "GALABNB": { + "_default": "2020-01-01" + }, + "GALABTC": { + "_default": "2020-01-01" + }, + "FTMBIDR": { + "_default": "2020-01-01" + }, + "ALGOBIDR": { + "_default": "2020-01-01" + }, + "CAKEAUD": { + "_default": "2020-01-01" + }, + "KSMAUD": { + "_default": "2020-01-01" + }, + "WAVESRUB": { + "_default": "2020-01-01" + }, + "SUNBUSD": { + "_default": "2020-01-01" + }, + "ILVUSDT": { + "_default": "2020-01-01" + }, + "ILVBUSD": { + "_default": "2020-01-01" + }, + "ILVBNB": { + "_default": "2020-01-01" + }, + "ILVBTC": { + "_default": "2020-01-01" + }, + "RENBUSD": { + "_default": "2020-01-01" + }, + "YGGUSDT": { + "_default": "2020-01-01" + }, + "YGGBUSD": { + "_default": "2020-01-01" + }, + "YGGBNB": { + "_default": "2020-01-01" + }, + "YGGBTC": { + "_default": "2020-01-01" + }, + "STXBUSD": { + "_default": "2020-01-01" + }, + "SYSUSDT": { + "_default": "2020-01-01" + }, + "DFUSDT": { + "_default": "2020-01-01" + }, + "SOLUSDC": { + "_default": "2020-01-01" + }, + "ARPARUB": { + "_default": "2020-01-01" + }, + "LTCUAH": { + "_default": "2020-01-01" + }, + "FETBUSD": { + "_default": "2020-01-01" + }, + "ARPABUSD": { + "_default": "2020-01-01" + }, + "LSKBUSD": { + "_default": "2020-01-01" + }, + "AVAXBIDR": { + "_default": "2020-01-01" + }, + "ALICEBIDR": { + "_default": "2020-01-01" + }, + "FIDAUSDT": { + "_default": "2020-01-01" + }, + "FIDABUSD": { + "_default": "2020-01-01" + }, + "FIDABNB": { + "_default": "2020-01-01" + }, + "FIDABTC": { + "_default": "2020-01-01" + }, + "DENTBUSD": { + "_default": "2020-01-01" + }, + "FRONTUSDT": { + "_default": "2020-01-01" + }, + "CVPUSDT": { + "_default": "2020-01-01" + }, + "AGLDBTC": { + "_default": "2020-01-01" + }, + "AGLDBNB": { + "_default": "2020-01-01" + }, + "AGLDBUSD": { + "_default": "2020-01-01" + }, + "AGLDUSDT": { + "_default": "2020-01-01" + }, + "RADBTC": { + "_default": "2020-01-01" + }, + "RADBNB": { + "_default": "2020-01-01" + }, + "RADBUSD": { + "_default": "2020-01-01" + }, + "RADUSDT": { + "_default": "2020-01-01" + }, + "UNIAUD": { + "_default": "2020-01-01" + }, + "HIVEBUSD": { + "_default": "2020-01-01" + }, + "STPTBUSD": { + "_default": "2020-01-01" + }, + "BETABTC": { + "_default": "2020-01-01" + }, + "BETABNB": { + "_default": "2020-01-01" + }, + "BETABUSD": { + "_default": "2020-01-01" + }, + "BETAUSDT": { + "_default": "2020-01-01" + }, + "SHIBAUD": { + "_default": "2020-01-01" + }, + "RAREBTC": { + "_default": "2020-01-01" + }, + "RAREBNB": { + "_default": "2020-01-01" + }, + "RAREBUSD": { + "_default": "2020-01-01" + }, + "RAREUSDT": { + "_default": "2020-01-01" + }, + "AVAXBRL": { + "_default": "2020-01-01" + }, + "AVAXAUD": { + "_default": "2020-01-01" + }, + "LUNAAUD": { + "_default": "2020-01-01" + }, + "TROYBUSD": { + "_default": "2020-01-01" + }, + "AXSETH": { + "_default": "2020-01-01" + }, + "FTMETH": { + "_default": "2020-01-01" + }, + "SOLETH": { + "_default": "2020-01-01" + }, + "SSVBTC": { + "_default": "2020-01-01" + }, + "SSVETH": { + "_default": "2020-01-01" + }, + "LAZIOTRY": { + "_default": "2020-01-01" + }, + "LAZIOEUR": { + "_default": "2020-01-01" + }, + "LAZIOBTC": { + "_default": "2020-01-01" + }, + "LAZIOUSDT": { + "_default": "2020-01-01" + }, + "CHESSBTC": { + "_default": "2020-01-01" + }, + "CHESSBNB": { + "_default": "2020-01-01" + }, + "CHESSBUSD": { + "_default": "2020-01-01" + }, + "CHESSUSDT": { + "_default": "2020-01-01" + }, + "FTMAUD": { + "_default": "2020-01-01" + }, + "FTMBRL": { + "_default": "2020-01-01" + }, + "SCRTBUSD": { + "_default": "2020-01-01" + }, + "ADXUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONUSDT": { + "_default": "2020-01-01" + }, + "CELOBUSD": { + "_default": "2020-01-01" + }, + "FTMRUB": { + "_default": "2020-01-01" + }, + "NUAUD": { + "_default": "2020-01-01" + }, + "NURUB": { + "_default": "2020-01-01" + }, + "REEFTRY": { + "_default": "2020-01-01" + }, + "REEFBIDR": { + "_default": "2020-01-01" + }, + "SHIBDOGE": { + "_default": "2020-01-01" + }, + "DARUSDT": { + "_default": "2020-01-01" + }, + "DARBUSD": { + "_default": "2020-01-01" + }, + "DARBNB": { + "_default": "2020-01-01" + }, + "DARBTC": { + "_default": "2020-01-01" + }, + "BNXBTC": { + "_default": "2020-01-01" + }, + "BNXBNB": { + "_default": "2020-01-01" + }, + "BNXBUSD": { + "_default": "2020-01-01" + }, + "BNXUSDT": { + "_default": "2020-01-01" + }, + "RGTUSDT": { + "_default": "2020-01-01" + }, + "RGTBTC": { + "_default": "2020-01-01" + }, + "RGTBUSD": { + "_default": "2020-01-01" + }, + "RGTBNB": { + "_default": "2020-01-01" + }, + "LAZIOBUSD": { + "_default": "2020-01-01" + }, + "OXTBUSD": { + "_default": "2020-01-01" + }, + "MANATRY": { + "_default": "2020-01-01" + }, + "ALGORUB": { + "_default": "2020-01-01" + }, + "SHIBUAH": { + "_default": "2020-01-01" + }, + "LUNABIDR": { + "_default": "2020-01-01" + }, + "AUDUSDC": { + "_default": "2020-01-01" + }, + "MOVRBTC": { + "_default": "2020-01-01" + }, + "MOVRBNB": { + "_default": "2020-01-01" + }, + "MOVRBUSD": { + "_default": "2020-01-01" + }, + "MOVRUSDT": { + "_default": "2020-01-01" + }, + "CITYBTC": { + "_default": "2020-01-01" + }, + "CITYBNB": { + "_default": "2020-01-01" + }, + "CITYBUSD": { + "_default": "2020-01-01" + }, + "CITYUSDT": { + "_default": "2020-01-01" + }, + "ENSBTC": { + "_default": "2020-01-01" + }, + "ENSBNB": { + "_default": "2020-01-01" + }, + "ENSBUSD": { + "_default": "2020-01-01" + }, + "ENSUSDT": { + "_default": "2020-01-01" + }, + "SANDETH": { + "_default": "2020-01-01" + }, + "DOTETH": { + "_default": "2020-01-01" + }, + "MATICETH": { + "_default": "2020-01-01" + }, + "ANKRBUSD": { + "_default": "2020-01-01" + }, + "SANDTRY": { + "_default": "2020-01-01" + }, + "MANABRL": { + "_default": "2020-01-01" + }, + "KP3RUSDT": { + "_default": "2020-01-01" + }, + "QIUSDT": { + "_default": "2020-01-01" + }, + "QIBUSD": { + "_default": "2020-01-01" + }, + "QIBNB": { + "_default": "2020-01-01" + }, + "QIBTC": { + "_default": "2020-01-01" + }, + "PORTOBTC": { + "_default": "2020-01-01" + }, + "PORTOUSDT": { + "_default": "2020-01-01" + }, + "PORTOTRY": { + "_default": "2020-01-01" + }, + "PORTOEUR": { + "_default": "2020-01-01" + }, + "POWRUSDT": { + "_default": "2020-01-01" + }, + "POWRBUSD": { + "_default": "2020-01-01" + }, + "AVAXETH": { + "_default": "2020-01-01" + }, + "SLPTRY": { + "_default": "2020-01-01" + }, + "FISTRY": { + "_default": "2020-01-01" + }, + "LRCTRY": { + "_default": "2020-01-01" + }, + "CHRETH": { + "_default": "2020-01-01" + }, + "FISBIDR": { + "_default": "2020-01-01" + }, + "VGXUSDT": { + "_default": "2020-01-01" + }, + "GALAETH": { + "_default": "2020-01-01" + }, + "JASMYUSDT": { + "_default": "2020-01-01" + }, + "JASMYBUSD": { + "_default": "2020-01-01" + }, + "JASMYBNB": { + "_default": "2020-01-01" + }, + "JASMYBTC": { + "_default": "2020-01-01" + }, + "AMPBTC": { + "_default": "2020-01-01" + }, + "AMPBNB": { + "_default": "2020-01-01" + }, + "AMPBUSD": { + "_default": "2020-01-01" + }, + "AMPUSDT": { + "_default": "2020-01-01" + }, + "PLABTC": { + "_default": "2020-01-01" + }, + "PLABNB": { + "_default": "2020-01-01" + }, + "PLABUSD": { + "_default": "2020-01-01" + }, + "PLAUSDT": { + "_default": "2020-01-01" + }, + "PYRBTC": { + "_default": "2020-01-01" + }, + "PYRBUSD": { + "_default": "2020-01-01" + }, + "PYRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBTC": { + "_default": "2020-01-01" + }, + "RNDRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBUSD": { + "_default": "2020-01-01" + }, + "ALCXBTC": { + "_default": "2020-01-01" + }, + "ALCXBUSD": { + "_default": "2020-01-01" + }, + "ALCXUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBTC": { + "_default": "2020-01-01" + }, + "SANTOSUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBRL": { + "_default": "2020-01-01" + }, + "SANTOSTRY": { + "_default": "2020-01-01" + }, + "MCBTC": { + "_default": "2020-01-01" + }, + "MCBUSD": { + "_default": "2020-01-01" + }, + "MCUSDT": { + "_default": "2020-01-01" + }, + "BELTRY": { + "_default": "2020-01-01" + }, + "COCOSBUSD": { + "_default": "2020-01-01" + }, + "DENTTRY": { + "_default": "2020-01-01" + }, + "ENJTRY": { + "_default": "2020-01-01" + }, + "NEORUB": { + "_default": "2020-01-01" + }, + "SANDAUD": { + "_default": "2020-01-01" + }, + "SLPBIDR": { + "_default": "2020-01-01" + }, + "ANYBTC": { + "_default": "2020-01-01" + }, + "ANYBUSD": { + "_default": "2020-01-01" + }, + "ANYUSDT": { + "_default": "2020-01-01" + }, + "BICOBTC": { + "_default": "2020-01-01" + }, + "BICOBUSD": { + "_default": "2020-01-01" + }, + "BICOUSDT": { + "_default": "2020-01-01" + }, + "FLUXBTC": { + "_default": "2020-01-01" + }, + "FLUXBUSD": { + "_default": "2020-01-01" + }, + "FLUXUSDT": { + "_default": "2020-01-01" + }, + "ALICETRY": { + "_default": "2020-01-01" + }, + "FXSUSDT": { + "_default": "2020-01-01" + }, + "GALABRL": { + "_default": "2020-01-01" + }, + "GALATRY": { + "_default": "2020-01-01" + }, + "LUNATRY": { + "_default": "2020-01-01" + }, + "REQBUSD": { + "_default": "2020-01-01" + }, + "SANDBRL": { + "_default": "2020-01-01" + }, + "MANABIDR": { + "_default": "2020-01-01" + }, + "SANDBIDR": { + "_default": "2020-01-01" + }, + "VOXELBTC": { + "_default": "2020-01-01" + }, + "VOXELBNB": { + "_default": "2020-01-01" + }, + "VOXELBUSD": { + "_default": "2020-01-01" + }, + "VOXELUSDT": { + "_default": "2020-01-01" + }, + "COSBUSD": { + "_default": "2020-01-01" + }, + "CTXCBUSD": { + "_default": "2020-01-01" + }, + "FTMTRY": { + "_default": "2020-01-01" + }, + "MANABNB": { + "_default": "2020-01-01" + }, + "MINATRY": { + "_default": "2020-01-01" + }, + "XTZTRY": { + "_default": "2020-01-01" + }, + "HIGHBTC": { + "_default": "2020-01-01" + }, + "HIGHBUSD": { + "_default": "2020-01-01" + }, + "HIGHUSDT": { + "_default": "2020-01-01" + }, + "CVXBTC": { + "_default": "2020-01-01" + }, + "CVXBUSD": { + "_default": "2020-01-01" + }, + "CVXUSDT": { + "_default": "2020-01-01" + }, + "PEOPLEBTC": { + "_default": "2020-01-01" + }, + "PEOPLEBUSD": { + "_default": "2020-01-01" + }, + "PEOPLEUSDT": { + "_default": "2020-01-01" + }, + "OOKIBUSD": { + "_default": "2020-01-01" + }, + "OOKIUSDT": { + "_default": "2020-01-01" + }, + "COCOSTRY": { + "_default": "2020-01-01" + }, + "GXSBNB": { + "_default": "2020-01-01" + }, + "LINKBNB": { + "_default": "2020-01-01" + }, + "LUNAETH": { + "_default": "2020-01-01" + }, + "MDTBUSD": { + "_default": "2020-01-01" + }, + "NULSBUSD": { + "_default": "2020-01-01" + }, + "SPELLBTC": { + "_default": "2020-01-01" + }, + "SPELLUSDT": { + "_default": "2020-01-01" + }, + "SPELLBUSD": { + "_default": "2020-01-01" + }, + "USTBTC": { + "_default": "2020-01-01" + }, + "USTBUSD": { + "_default": "2020-01-01" + }, + "USTUSDT": { + "_default": "2020-01-01" + }, + "JOEBTC": { + "_default": "2020-01-01" + }, + "JOEBUSD": { + "_default": "2020-01-01" + }, + "JOEUSDT": { + "_default": "2020-01-01" + }, + "ATOMETH": { + "_default": "2020-01-01" + }, + "DUSKBUSD": { + "_default": "2020-01-01" + }, + "EGLDETH": { + "_default": "2020-01-01" + }, + "ICPETH": { + "_default": "2020-01-01" + }, + "LUNABRL": { + "_default": "2020-01-01" + }, + "LUNAUST": { + "_default": "2020-01-01" + }, + "NEARETH": { + "_default": "2020-01-01" + }, + "ROSEBNB": { + "_default": "2020-01-01" + }, + "VOXELETH": { + "_default": "2020-01-01" + }, + "ALICEBNB": { + "_default": "2020-01-01" + }, + "ATOMTRY": { + "_default": "2020-01-01" + }, + "ETHUST": { + "_default": "2020-01-01" + }, + "GALAAUD": { + "_default": "2020-01-01" + }, + "LRCBNB": { + "_default": "2020-01-01" + }, + "ONEETH": { + "_default": "2020-01-01" + }, + "OOKIBNB": { + "_default": "2020-01-01" + }, + "ACHBTC": { + "_default": "2020-01-01" + }, + "ACHBUSD": { + "_default": "2020-01-01" + }, + "ACHUSDT": { + "_default": "2020-01-01" + }, + "IMXBTC": { + "_default": "2020-01-01" + }, + "IMXBUSD": { + "_default": "2020-01-01" + }, + "IMXUSDT": { + "_default": "2020-01-01" + }, + "GLMRBTC": { + "_default": "2020-01-01" + }, + "GLMRBUSD": { + "_default": "2020-01-01" + }, + "GLMRUSDT": { + "_default": "2020-01-01" + }, + "ATOMBIDR": { + "_default": "2020-01-01" + }, + "DYDXETH": { + "_default": "2020-01-01" + }, + "FARMETH": { + "_default": "2020-01-01" + }, + "FORBNB": { + "_default": "2020-01-01" + }, + "ICPTRY": { + "_default": "2020-01-01" + }, + "JASMYETH": { + "_default": "2020-01-01" + }, + "LINABNB": { + "_default": "2020-01-01" + }, + "OOKIETH": { + "_default": "2020-01-01" + }, + "ROSEETH": { + "_default": "2020-01-01" + }, + "UMABUSD": { + "_default": "2020-01-01" + }, + "UNIETH": { + "_default": "2020-01-01" + }, + "XTZETH": { + "_default": "2020-01-01" + }, + "LOKABTC": { + "_default": "2020-01-01" + }, + "LOKABNB": { + "_default": "2020-01-01" + }, + "LOKABUSD": { + "_default": "2020-01-01" + }, + "LOKAUSDT": { + "_default": "2020-01-01" + }, + "ATOMBRL": { + "_default": "2020-01-01" + }, + "BNBUST": { + "_default": "2020-01-01" + }, + "CRVETH": { + "_default": "2020-01-01" + }, + "HIGHBNB": { + "_default": "2020-01-01" + }, + "NEARRUB": { + "_default": "2020-01-01" + }, + "ROSETRY": { + "_default": "2020-01-01" + }, + "SCRTUSDT": { + "_default": "2020-01-01" + }, + "API3BTC": { + "_default": "2020-01-01" + }, + "API3BUSD": { + "_default": "2020-01-01" + }, + "API3USDT": { + "_default": "2020-01-01" + }, + "BTTCUSDT": { + "_default": "2020-01-01" + }, + "BTTCUSDC": { + "_default": "2020-01-01" + }, + "BTTCTRY": { + "_default": "2020-01-01" + }, + "ACABTC": { + "_default": "2020-01-01" + }, + "ACABUSD": { + "_default": "2020-01-01" + }, + "ACAUSDT": { + "_default": "2020-01-01" + }, + "ANCBTC": { + "_default": "2020-01-01" + }, + "ANCBUSD": { + "_default": "2020-01-01" + }, + "ANCUSDT": { + "_default": "2020-01-01" + }, + "BDOTDOT": { + "_default": "2020-01-01" + }, + "XNOBTC": { + "_default": "2020-01-01" + }, + "XNOETH": { + "_default": "2020-01-01" + }, + "XNOBUSD": { + "_default": "2020-01-01" + }, + "XNOUSDT": { + "_default": "2020-01-01" + }, + "COSTRY": { + "_default": "2020-01-01" + }, + "KAVAETH": { + "_default": "2020-01-01" + }, + "MCBNB": { + "_default": "2020-01-01" + }, + "ONETRY": { + "_default": "2020-01-01" + }, + "WOOBTC": { + "_default": "2020-01-01" + }, + "WOOBNB": { + "_default": "2020-01-01" + }, + "WOOBUSD": { + "_default": "2020-01-01" + }, + "WOOUSDT": { + "_default": "2020-01-01" + }, + "CELRETH": { + "_default": "2020-01-01" + }, + "PEOPLEBNB": { + "_default": "2020-01-01" + }, + "SLPBNB": { + "_default": "2020-01-01" + }, + "SPELLBNB": { + "_default": "2020-01-01" + }, + "SPELLTRY": { + "_default": "2020-01-01" + }, + "TFUELBUSD": { + "_default": "2020-01-01" + }, + "AXSTRY": { + "_default": "2020-01-01" + }, + "DARTRY": { + "_default": "2020-01-01" + }, + "NEARTRY": { + "_default": "2020-01-01" + }, + "IDEXBNB": { + "_default": "2020-01-01" + }, + "ALPINEEUR": { + "_default": "2020-01-01" + }, + "ALPINETRY": { + "_default": "2020-01-01" + }, + "ALPINEUSDT": { + "_default": "2020-01-01" + }, + "ALPINEBTC": { + "_default": "2020-01-01" + }, + "TUSDT": { + "_default": "2020-01-01" + }, + "TBUSD": { + "_default": "2020-01-01" + }, + "API3BNB": { + "_default": "2020-01-01" + }, + "BETAETH": { + "_default": "2020-01-01" + }, + "INJTRY": { + "_default": "2020-01-01" + }, + "TLMBNB": { + "_default": "2020-01-01" + }, + "ASTRBUSD": { + "_default": "2020-01-01" + }, + "ASTRUSDT": { + "_default": "2020-01-01" + }, + "API3TRY": { + "_default": "2020-01-01" + }, + "GLMRBNB": { + "_default": "2020-01-01" + }, + "MBOXTRY": { + "_default": "2020-01-01" + }, + "GMTBTC": { + "_default": "2020-01-01" + }, + "GMTBNB": { + "_default": "2020-01-01" + }, + "GMTBUSD": { + "_default": "2020-01-01" + }, + "GMTUSDT": { + "_default": "2020-01-01" + }, + "ANCBNB": { + "_default": "2020-01-01" + }, + "ATOMEUR": { + "_default": "2020-01-01" + }, + "GALAEUR": { + "_default": "2020-01-01" + }, + "KSMETH": { + "_default": "2020-01-01" + }, + "UMATRY": { + "_default": "2020-01-01" + }, + "KDABTC": { + "_default": "2020-01-01" + }, + "KDABUSD": { + "_default": "2020-01-01" + }, + "KDAUSDT": { + "_default": "2020-01-01" + }, + "APEUSDT": { + "_default": "2020-01-01" + }, + "APEBUSD": { + "_default": "2020-01-01" + }, + "APEBTC": { + "_default": "2020-01-01" + }, + "ALPINEBUSD": { + "_default": "2020-01-01" + }, + "LUNAGBP": { + "_default": "2020-01-01" + }, + "NEAREUR": { + "_default": "2020-01-01" + }, + "TWTTRY": { + "_default": "2020-01-01" + }, + "WAVESEUR": { + "_default": "2020-01-01" + }, + "APEEUR": { + "_default": "2020-01-01" + }, + "APEGBP": { + "_default": "2020-01-01" + }, + "APETRY": { + "_default": "2020-01-01" + }, + "BSWUSDT": { + "_default": "2020-01-01" + }, + "BSWBUSD": { + "_default": "2020-01-01" + }, + "BSWBNB": { + "_default": "2020-01-01" + }, + "APEBNB": { + "_default": "2020-01-01" + }, + "GMTBRL": { + "_default": "2020-01-01" + }, + "GMTETH": { + "_default": "2020-01-01" + }, + "JASMYTRY": { + "_default": "2020-01-01" + }, + "SANTOSBUSD": { + "_default": "2020-01-01" + }, + "APEAUD": { + "_default": "2020-01-01" + }, + "BIFIUSDT": { + "_default": "2020-01-01" + }, + "GMTEUR": { + "_default": "2020-01-01" + }, + "IMXBNB": { + "_default": "2020-01-01" + }, + "RUNEETH": { + "_default": "2020-01-01" + }, + "AVAXGBP": { + "_default": "2020-01-01" + }, + "MULTIBTC": { + "_default": "2020-01-01" + }, + "MULTIBUSD": { + "_default": "2020-01-01" + }, + "MULTIUSDT": { + "_default": "2020-01-01" + }, + "APEETH": { + "_default": "2020-01-01" + }, + "BSWETH": { + "_default": "2020-01-01" + }, + "FILTRY": { + "_default": "2020-01-01" + }, + "FTMEUR": { + "_default": "2020-01-01" + }, + "GMTGBP": { + "_default": "2020-01-01" + }, + "ZILTRY": { + "_default": "2020-01-01" + }, + "GMTTRY": { + "_default": "2020-01-01" + }, + "WAVESTRY": { + "_default": "2020-01-01" + }, + "BTCUST": { + "_default": "2020-01-01" + }, + "ASTRBTC": { + "_default": "2020-01-01" + }, + "ASTRETH": { + "_default": "2020-01-01" + }, + "BSWTRY": { + "_default": "2020-01-01" + }, + "FTTETH": { + "_default": "2020-01-01" + }, + "FUNBNB": { + "_default": "2020-01-01" + }, + "PORTOBUSD": { + "_default": "2020-01-01" + }, + "STEEMUSDT": { + "_default": "2020-01-01" + }, + "ZILEUR": { + "_default": "2020-01-01" + }, + "APEBRL": { + "_default": "2020-01-01" + }, + "AUDIOTRY": { + "_default": "2020-01-01" + }, + "BTTCBUSD": { + "_default": "2020-01-01" + }, + "GMTAUD": { + "_default": "2020-01-01" + }, + "MBLBUSD": { + "_default": "2020-01-01" + }, + "MOBUSDT": { + "_default": "2020-01-01" + }, + "MOBBUSD": { + "_default": "2020-01-01" + }, + "MOBBTC": { + "_default": "2020-01-01" + }, + "NEXOUSDT": { + "_default": "2020-01-01" + }, + "NEXOBUSD": { + "_default": "2020-01-01" + }, + "NEXOBTC": { + "_default": "2020-01-01" + }, + "REIUSDT": { + "_default": "2020-01-01" + }, + "REIBNB": { + "_default": "2020-01-01" + }, + "REIETH": { + "_default": "2020-01-01" + }, + "GALUSDT": { + "_default": "2020-01-01" + }, + "GALBUSD": { + "_default": "2020-01-01" + }, + "GALBNB": { + "_default": "2020-01-01" + }, + "GALBTC": { + "_default": "2020-01-01" + }, + "JASMYEUR": { + "_default": "2020-01-01" + }, + "KNCBNB": { + "_default": "2020-01-01" + }, + "SHIBGBP": { + "_default": "2020-01-01" + }, + "GALEUR": { + "_default": "2020-01-01" + }, + "GALTRY": { + "_default": "2020-01-01" + }, + "LDOBUSD": { + "_default": "2020-01-01" + }, + "LDOUSDT": { + "_default": "2020-01-01" + }, + "LDOBTC": { + "_default": "2020-01-01" + }, + "ENSTRY": { + "_default": "2020-01-01" + }, + "DAREUR": { + "_default": "2020-01-01" + }, + "DARETH": { + "_default": "2020-01-01" + }, + "ALGOETH": { + "_default": "2020-01-01" + }, + "ALGOTRY": { + "_default": "2020-01-01" + }, + "GALETH": { + "_default": "2020-01-01" + }, + "EPXUSDT": { + "_default": "2020-01-01" + }, + "EPXBUSD": { + "_default": "2020-01-01" + }, + "RUNETRY": { + "_default": "2020-01-01" + }, + "GALBRL": { + "_default": "2020-01-01" + }, + "STEEMBUSD": { + "_default": "2020-01-01" + }, + "CVCBUSD": { + "_default": "2020-01-01" + }, + "REIBUSD": { + "_default": "2020-01-01" + }, + "DREPBUSD": { + "_default": "2020-01-01" + }, + "AKROBUSD": { + "_default": "2020-01-01" + }, + "PUNDIXBUSD": { + "_default": "2020-01-01" + }, + "LUNCBUSD": { + "_default": "2020-01-01" + }, + "USTCBUSD": { + "_default": "2020-01-01" + }, + "OPBTC": { + "_default": "2020-01-01" + }, + "OPBUSD": { + "_default": "2020-01-01" + }, + "OPUSDT": { + "_default": "2020-01-01" + }, + "OGBUSD": { + "_default": "2020-01-01" + }, + "KEYBUSD": { + "_default": "2020-01-01" + }, + "ASRBUSD": { + "_default": "2020-01-01" + }, + "FIROBUSD": { + "_default": "2020-01-01" + }, + "NKNBUSD": { + "_default": "2020-01-01" + }, + "OPBNB": { + "_default": "2020-01-01" + }, + "OPEUR": { + "_default": "2020-01-01" + }, + "GTOBUSD": { + "_default": "2020-01-01" + }, + "SNXETH": { + "_default": "2020-01-01" + }, + "WBTCBUSD": { + "_default": "2020-01-01" + }, + "BELETH": { + "_default": "2020-01-01" + }, + "LITETH": { + "_default": "2020-01-01" + }, + "LEVERUSDT": { + "_default": "2020-01-01" + }, + "LEVERBUSD": { + "_default": "2020-01-01" + }, + "BURGERETH": { + "_default": "2020-01-01" + }, + "PEOPLEETH": { + "_default": "2020-01-01" + }, + "UNFIETH": { + "_default": "2020-01-01" + }, + "BONDETH": { + "_default": "2020-01-01" + }, + "STORJTRY": { + "_default": "2020-01-01" + }, + "OPETH": { + "_default": "2020-01-01" + }, + "ETCTRY": { + "_default": "2020-01-01" + }, + "WINGETH": { + "_default": "2020-01-01" + }, + "FILETH": { + "_default": "2020-01-01" + }, + "GLMBUSD": { + "_default": "2020-01-01" + }, + "SSVBUSD": { + "_default": "2020-01-01" + }, + "STGBTC": { + "_default": "2020-01-01" + }, + "STGBUSD": { + "_default": "2020-01-01" + }, + "STGUSDT": { + "_default": "2020-01-01" + }, + "ANKRTRY": { + "_default": "2020-01-01" + }, + "ARKBUSD": { + "_default": "2020-01-01" + }, + "BETHBUSD": { + "_default": "2020-01-01" + }, + "LOOMBUSD": { + "_default": "2020-01-01" + }, + "SNMBUSD": { + "_default": "2020-01-01" + }, + "AMBBUSD": { + "_default": "2020-01-01" + }, + "LUNCUSDT": { + "_default": "2020-01-01" + }, + "PHBBUSD": { + "_default": "2020-01-01" + }, + "GASBUSD": { + "_default": "2020-01-01" + }, + "NEBLBUSD": { + "_default": "2020-01-01" + }, + "PROSBUSD": { + "_default": "2020-01-01" + }, + "VIBBUSD": { + "_default": "2020-01-01" + }, + "GMXBTC": { + "_default": "2020-01-01" + }, + "GMXBUSD": { + "_default": "2020-01-01" + }, + "GMXUSDT": { + "_default": "2020-01-01" + }, + "AGIXBUSD": { + "_default": "2020-01-01" + }, + "NEBLUSDT": { + "_default": "2020-01-01" + }, + "SNTBUSD": { + "_default": "2020-01-01" + }, + "POLYXBTC": { + "_default": "2020-01-01" + }, + "POLYXBUSD": { + "_default": "2020-01-01" + }, + "POLYXUSDT": { + "_default": "2020-01-01" + }, + "APTBTC": { + "_default": "2020-01-01" + }, + "APTUSDT": { + "_default": "2020-01-01" + }, + "APTBUSD": { + "_default": "2020-01-01" + }, + "BTCPLN": { + "_default": "2020-01-01" + }, + "ETHPLN": { + "_default": "2020-01-01" + }, + "BUSDPLN": { + "_default": "2020-01-01" + }, + "APTEUR": { + "_default": "2020-01-01" + }, + "APTTRY": { + "_default": "2020-01-01" + }, + "APTBRL": { + "_default": "2020-01-01" + }, + "QKCBUSD": { + "_default": "2020-01-01" + }, + "OSMOBTC": { + "_default": "2020-01-01" + }, + "OSMOUSDT": { + "_default": "2020-01-01" + }, + "OSMOBUSD": { + "_default": "2020-01-01" + }, + "HFTBTC": { + "_default": "2020-01-01" + }, + "HFTBUSD": { + "_default": "2020-01-01" + }, + "HFTUSDT": { + "_default": "2020-01-01" + }, + "ARPAETH": { + "_default": "2020-01-01" + }, + "PHBUSDT": { + "_default": "2020-01-01" + }, + "VITEBUSD": { + "_default": "2020-01-01" + }, + "HOOKBTC": { + "_default": "2020-01-01" + }, + "HOOKUSDT": { + "_default": "2020-01-01" + }, + "HOOKBUSD": { + "_default": "2020-01-01" + }, + "HOOKBNB": { + "_default": "2020-01-01" + }, + "MAGICBTC": { + "_default": "2020-01-01" + }, + "MAGICBUSD": { + "_default": "2020-01-01" + }, + "MAGICUSDT": { + "_default": "2020-01-01" + }, + "BUSDRON": { + "_default": "2020-01-01" + }, + "HIFIETH": { + "_default": "2020-01-01" + }, + "HIFIUSDT": { + "_default": "2020-01-01" + }, + "RPLBTC": { + "_default": "2020-01-01" + }, + "RPLBUSD": { + "_default": "2020-01-01" + }, + "RPLUSDT": { + "_default": "2020-01-01" + }, + "PROSUSDT": { + "_default": "2020-01-01" + }, + "FETTRY": { + "_default": "2020-01-01" + }, + "GFTBUSD": { + "_default": "2020-01-01" + }, + "AGIXUSDT": { + "_default": "2020-01-01" + }, + "APTETH": { + "_default": "2020-01-01" + }, + "BTCRON": { + "_default": "2020-01-01" + }, + "GNSUSDT": { + "_default": "2020-01-01" + }, + "GNSBTC": { + "_default": "2020-01-01" + }, + "SYNBTC": { + "_default": "2020-01-01" + }, + "SYNUSDT": { + "_default": "2020-01-01" + }, + "VIBUSDT": { + "_default": "2020-01-01" + }, + "SSVUSDT": { + "_default": "2020-01-01" + }, + "LQTYUSDT": { + "_default": "2020-01-01" + }, + "LQTYBTC": { + "_default": "2020-01-01" + }, + "AMBUSDT": { + "_default": "2020-01-01" + }, + "BETHUSDT": { + "_default": "2020-01-01" + }, + "CFXTRY": { + "_default": "2020-01-01" + }, + "STXTRY": { + "_default": "2020-01-01" + }, + "USTCUSDT": { + "_default": "2020-01-01" + }, + "GASUSDT": { + "_default": "2020-01-01" + }, + "GLMUSDT": { + "_default": "2020-01-01" + }, + "PROMUSDT": { + "_default": "2020-01-01" + }, + "QKCUSDT": { + "_default": "2020-01-01" + }, + "UFTUSDT": { + "_default": "2020-01-01" + }, + "IDBTC": { + "_default": "2020-01-01" + }, + "IDBNB": { + "_default": "2020-01-01" + }, + "IDUSDT": { + "_default": "2020-01-01" + }, + "ARBBTC": { + "_default": "2020-01-01" + }, + "ARBUSDT": { + "_default": "2020-01-01" + }, + "AGIXTRY": { + "_default": "2020-01-01" + }, + "LOOMUSDT": { + "_default": "2020-01-01" + }, + "OAXUSDT": { + "_default": "2020-01-01" + }, + "ARBTUSD": { + "_default": "2020-01-01" + }, + "ARBTRY": { + "_default": "2020-01-01" + }, + "ARBEUR": { + "_default": "2020-01-01" + }, + "IDTUSD": { + "_default": "2020-01-01" + }, + "IDTRY": { + "_default": "2020-01-01" + }, + "IDEUR": { + "_default": "2020-01-01" + }, + "LDOTUSD": { + "_default": "2020-01-01" + }, + "MATICTUSD": { + "_default": "2020-01-01" + }, + "OPTUSD": { + "_default": "2020-01-01" + }, + "SOLTUSD": { + "_default": "2020-01-01" + }, + "SSVTUSD": { + "_default": "2020-01-01" + }, + "RDNTBTC": { + "_default": "2020-01-01" + }, + "RDNTUSDT": { + "_default": "2020-01-01" + }, + "RDNTTUSD": { + "_default": "2020-01-01" + }, + "ARBRUB": { + "_default": "2020-01-01" + }, + "JOETRY": { + "_default": "2020-01-01" + }, + "MAGICTRY": { + "_default": "2020-01-01" + }, + "USDTPLN": { + "_default": "2020-01-01" + }, + "ACHTRY": { + "_default": "2020-01-01" + }, + "XVSTRY": { + "_default": "2020-01-01" + }, + "EGLDRON": { + "_default": "2020-01-01" + }, + "USDTRON": { + "_default": "2020-01-01" + }, + "USDTARS": { + "_default": "2020-01-01" + }, + "DOGETUSD": { + "_default": "2020-01-01" + }, + "WBTCUSDT": { + "_default": "2020-01-01" + }, + "EDUUSDT": { + "_default": "2020-01-01" + }, + "EDUTUSD": { + "_default": "2020-01-01" + }, + "EDUBNB": { + "_default": "2020-01-01" + }, + "EDUBTC": { + "_default": "2020-01-01" + }, + "EDUEUR": { + "_default": "2020-01-01" + }, + "EDUTRY": { + "_default": "2020-01-01" + }, + "SUIUSDT": { + "_default": "2020-01-01" + }, + "SUITUSD": { + "_default": "2020-01-01" + }, + "SUIBTC": { + "_default": "2020-01-01" + }, + "SUIBNB": { + "_default": "2020-01-01" + }, + "SUIEUR": { + "_default": "2020-01-01" + }, + "SUITRY": { + "_default": "2020-01-01" + }, + "AERGOUSDT": { + "_default": "2020-01-01" + }, + "RNDRTRY": { + "_default": "2020-01-01" + }, + "PEPEUSDT": { + "_default": "2020-01-01" + }, + "PEPETUSD": { + "_default": "2020-01-01" + }, + "FLOKIUSDT": { + "_default": "2020-01-01" + }, + "FLOKITUSD": { + "_default": "2020-01-01" + }, + "OGTRY": { + "_default": "2020-01-01" + }, + "PEPETRY": { + "_default": "2020-01-01" + }, + "WBETHETH": { + "_default": "2020-01-01" + }, + "ASTUSDT": { + "_default": "2020-01-01" + }, + "SNTUSDT": { + "_default": "2020-01-01" + }, + "FLOKITRY": { + "_default": "2020-01-01" + }, + "CITYTRY": { + "_default": "2020-01-01" + }, + "COMBOUSDT": { + "_default": "2020-01-01" + }, + "COMBOBNB": { + "_default": "2020-01-01" + }, + "COMBOTRY": { + "_default": "2020-01-01" + }, + "LTCTRY": { + "_default": "2020-01-01" + }, + "RADTRY": { + "_default": "2020-01-01" + }, + "BTCARS": { + "_default": "2020-01-01" + }, + "OPTRY": { + "_default": "2020-01-01" + }, + "PAXGTRY": { + "_default": "2020-01-01" + }, + "MAVBTC": { + "_default": "2020-01-01" + }, + "MAVUSDT": { + "_default": "2020-01-01" + }, + "MAVTUSD": { + "_default": "2020-01-01" + }, + "CFXTUSD": { + "_default": "2020-01-01" + }, + "PENDLEBTC": { + "_default": "2020-01-01" + }, + "PENDLEUSDT": { + "_default": "2020-01-01" + }, + "PENDLETUSD": { + "_default": "2020-01-01" + }, + "MAVTRY": { + "_default": "2020-01-01" + }, + "OCEANTRY": { + "_default": "2020-01-01" + }, + "TUSDTRY": { + "_default": "2020-01-01" + }, + "ARBETH": { + "_default": "2020-01-01" + }, + "BCHTRY": { + "_default": "2020-01-01" + }, + "XVGTRY": { + "_default": "2020-01-01" + }, + "XVGTUSD": { + "_default": "2020-01-01" + }, + "ARKMUSDT": { + "_default": "2020-01-01" + }, + "ARKMTUSD": { + "_default": "2020-01-01" + }, + "ARKMTRY": { + "_default": "2020-01-01" + }, + "ARKMBNB": { + "_default": "2020-01-01" + }, + "ARKMBTC": { + "_default": "2020-01-01" + }, + "WBETHUSDT": { + "_default": "2020-01-01" + }, + "ACATRY": { + "_default": "2020-01-01" + }, + "AVAXTUSD": { + "_default": "2020-01-01" + }, + "COMPTUSD": { + "_default": "2020-01-01" + }, + "COMPTRY": { + "_default": "2020-01-01" + }, + "XECTRY": { + "_default": "2020-01-01" + }, + "QUICKTUSD": { + "_default": "2020-01-01" + }, + "WLDUSDT": { + "_default": "2020-01-01" + }, + "WLDBTC": { + "_default": "2020-01-01" + }, + "BNBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDBUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDT": { + "_default": "2020-01-01" + }, + "ARKMRUB": { + "_default": "2020-01-01" + }, + "WLDTRY": { + "_default": "2020-01-01" + }, + "WLDRUB": { + "_default": "2020-01-01" + }, + "AMPTRY": { + "_default": "2020-01-01" + }, + "OGNTRY": { + "_default": "2020-01-01" + }, + "BTCFDUSD": { + "_default": "2020-01-01" + }, + "ETHFDUSD": { + "_default": "2020-01-01" + }, + "ASRTRY": { + "_default": "2020-01-01" + }, + "ATMTRY": { + "_default": "2020-01-01" + }, + "ACMTRY": { + "_default": "2020-01-01" + }, + "BARTRY": { + "_default": "2020-01-01" + }, + "JUVTRY": { + "_default": "2020-01-01" + }, + "PSGTRY": { + "_default": "2020-01-01" + }, + "SEIBNB": { + "_default": "2020-01-01" + }, + "SEIBTC": { + "_default": "2020-01-01" + }, + "SEIFDUSD": { + "_default": "2020-01-01" + }, + "SEITRY": { + "_default": "2020-01-01" + }, + "SEIUSDT": { + "_default": "2020-01-01" + }, + "CYBERBNB": { + "_default": "2020-01-01" + }, + "CYBERBTC": { + "_default": "2020-01-01" + }, + "CYBERFDUSD": { + "_default": "2020-01-01" + }, + "CYBERTRY": { + "_default": "2020-01-01" + }, + "CYBERUSDT": { + "_default": "2020-01-01" + }, + "CYBERTUSD": { + "_default": "2020-01-01" + }, + "SEITUSD": { + "_default": "2020-01-01" + }, + "LPTTRY": { + "_default": "2020-01-01" + }, + "UNITRY": { + "_default": "2020-01-01" + }, + "SOLFDUSD": { + "_default": "2020-01-01" + }, + "TOMOTRY": { + "_default": "2020-01-01" + }, + "UNFITRY": { + "_default": "2020-01-01" + }, + "XRPFDUSD": { + "_default": "2020-01-01" + }, + "DOGEFDUSD": { + "_default": "2020-01-01" + }, + "CYBERETH": { + "_default": "2020-01-01" + }, + "MTLTRY": { + "_default": "2020-01-01" + }, + "ARKUSDT": { + "_default": "2020-01-01" + }, + "CREAMUSDT": { + "_default": "2020-01-01" + }, + "GFTUSDT": { + "_default": "2020-01-01" + }, + "IQUSDT": { + "_default": "2020-01-01" + }, + "USDTVAI": { + "_default": "2020-01-01" + }, + "ARBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDTRY": { + "_default": "2020-01-01" + }, + "FRONTTRY": { + "_default": "2020-01-01" + }, + "SUIFDUSD": { + "_default": "2020-01-01" + }, + "NTRNBTC": { + "_default": "2020-01-01" + }, + "NTRNUSDT": { + "_default": "2020-01-01" + }, + "NTRNBNB": { + "_default": "2020-01-01" + }, + "FILFDUSD": { + "_default": "2020-01-01" + }, + "FRONTTUSD": { + "_default": "2020-01-01" + }, + "LEVERTRY": { + "_default": "2020-01-01" + }, + "LTCFDUSD": { + "_default": "2020-01-01" + }, + "ADAFDUSD": { + "_default": "2020-01-01" + }, + "RUNETUSD": { + "_default": "2020-01-01" + }, + "TRBTRY": { + "_default": "2020-01-01" + }, + "ATOMFDUSD": { + "_default": "2020-01-01" + }, + "AVAXFDUSD": { + "_default": "2020-01-01" + }, + "BANDTRY": { + "_default": "2020-01-01" + }, + "BCHFDUSD": { + "_default": "2020-01-01" + }, + "LOOMTRY": { + "_default": "2020-01-01" + }, + "MATICFDUSD": { + "_default": "2020-01-01" + }, + "ALGOFDUSD": { + "_default": "2020-01-01" + }, + "DOTFDUSD": { + "_default": "2020-01-01" + }, + "FTMFDUSD": { + "_default": "2020-01-01" + }, + "LINKFDUSD": { + "_default": "2020-01-01" + }, + "NEARFDUSD": { + "_default": "2020-01-01" + }, + "STRAXTRY": { + "_default": "2020-01-01" + }, + "TIABTC": { + "_default": "2020-01-01" + }, + "TIAUSDT": { + "_default": "2020-01-01" + }, + "TIATRY": { + "_default": "2020-01-01" + }, + "MEMEBNB": { + "_default": "2020-01-01" + }, + "MEMEUSDT": { + "_default": "2020-01-01" + }, + "MEMEFDUSD": { + "_default": "2020-01-01" + }, + "MEMETUSD": { + "_default": "2020-01-01" + }, + "MEMETRY": { + "_default": "2020-01-01" + }, + "ORDIBTC": { + "_default": "2020-01-01" + }, + "ORDIUSDT": { + "_default": "2020-01-01" + }, + "ORDITRY": { + "_default": "2020-01-01" + }, + "EGLDFDUSD": { + "_default": "2020-01-01" + }, + "FETFDUSD": { + "_default": "2020-01-01" + }, + "GASFDUSD": { + "_default": "2020-01-01" + }, + "INJETH": { + "_default": "2020-01-01" + }, + "INJTUSD": { + "_default": "2020-01-01" + }, + "OPFDUSD": { + "_default": "2020-01-01" + }, + "ORDIFDUSD": { + "_default": "2020-01-01" + }, + "ORDITUSD": { + "_default": "2020-01-01" + }, + "RNDRFDUSD": { + "_default": "2020-01-01" + }, + "SHIBTUSD": { + "_default": "2020-01-01" + }, + "BEAMXUSDT": { + "_default": "2020-01-01" + }, + "ARKTRY": { + "_default": "2020-01-01" + }, + "BEAMXTRY": { + "_default": "2020-01-01" + }, + "CAKETRY": { + "_default": "2020-01-01" + }, + "CAKETUSD": { + "_default": "2020-01-01" + }, + "DYDXFDUSD": { + "_default": "2020-01-01" + }, + "PIVXUSDT": { + "_default": "2020-01-01" + }, + "RUNEFDUSD": { + "_default": "2020-01-01" + }, + "TIATUSD": { + "_default": "2020-01-01" + }, + "DOTTUSD": { + "_default": "2020-01-01" + }, + "GALAFDUSD": { + "_default": "2020-01-01" + }, + "WLDFDUSD": { + "_default": "2020-01-01" + }, + "GASTRY": { + "_default": "2020-01-01" + }, + "NTRNTRY": { + "_default": "2020-01-01" + }, + "VICBTC": { + "_default": "2020-01-01" + }, + "VICUSDT": { + "_default": "2020-01-01" + }, + "VICTRY": { + "_default": "2020-01-01" + }, + "BLURBTC": { + "_default": "2020-01-01" + }, + "BLURUSDT": { + "_default": "2020-01-01" + }, + "BLURTRY": { + "_default": "2020-01-01" + }, + "BLURFDUSD": { + "_default": "2020-01-01" + }, + "SUPERFDUSD": { + "_default": "2020-01-01" + }, + "USTCFDUSD": { + "_default": "2020-01-01" + }, + "USTCTRY": { + "_default": "2020-01-01" + }, + "DYDXTRY": { + "_default": "2020-01-01" + }, + "VANRYUSDT": { + "_default": "2020-01-01" + }, + "VANRYBTC": { + "_default": "2020-01-01" + }, + "BTCAEUR": { + "_default": "2020-01-01" + }, + "AEURUSDT": { + "_default": "2020-01-01" + }, + "ETHAEUR": { + "_default": "2020-01-01" + }, + "EURAEUR": { + "_default": "2020-01-01" + }, + "AUCTIONFDUSD": { + "_default": "2020-01-01" + }, + "IOTAFDUSD": { + "_default": "2020-01-01" + }, + "LUNCTRY": { + "_default": "2020-01-01" + }, + "SUPERTRY": { + "_default": "2020-01-01" + }, + "JTOUSDT": { + "_default": "2020-01-01" + }, + "JTOFDUSD": { + "_default": "2020-01-01" + }, + "JTOTRY": { + "_default": "2020-01-01" + }, + "1000SATSUSDT": { + "_default": "2020-01-01" + }, + "1000SATSFDUSD": { + "_default": "2020-01-01" + }, + "1000SATSTRY": { + "_default": "2020-01-01" + }, + "SHIBFDUSD": { + "_default": "2020-01-01" + }, + "SANDFDUSD": { + "_default": "2020-01-01" + }, + "MEMEETH": { + "_default": "2020-01-01" + }, + "IOTATRY": { + "_default": "2020-01-01" + }, + "INJFDUSD": { + "_default": "2020-01-01" + }, + "FIDATRY": { + "_default": "2020-01-01" + }, + "BONKUSDT": { + "_default": "2020-01-01" + }, + "BONKFDUSD": { + "_default": "2020-01-01" + }, + "BONKTRY": { + "_default": "2020-01-01" + }, + "ACEFDUSD": { + "_default": "2020-01-01" + }, + "ACEUSDT": { + "_default": "2020-01-01" + }, + "ACEBNB": { + "_default": "2020-01-01" + }, + "ACEBTC": { + "_default": "2020-01-01" + }, + "ACETRY": { + "_default": "2020-01-01" + }, + "BLZFDUSD": { + "_default": "2020-01-01" + }, + "RARETRY": { + "_default": "2020-01-01" + }, + "VANRYTRY": { + "_default": "2020-01-01" + }, + "NFPBTC": { + "_default": "2020-01-01" + }, + "NFPUSDT": { + "_default": "2020-01-01" + }, + "NFPBNB": { + "_default": "2020-01-01" + }, + "NFPFDUSD": { + "_default": "2020-01-01" + }, + "NFPTUSD": { + "_default": "2020-01-01" + }, + "NFPTRY": { + "_default": "2020-01-01" + }, + "ARBUSDC": { + "_default": "2020-01-01" + }, + "AVAXUSDC": { + "_default": "2020-01-01" + }, + "DOTUSDC": { + "_default": "2020-01-01" + }, + "INJUSDC": { + "_default": "2020-01-01" + }, + "MATICUSDC": { + "_default": "2020-01-01" + }, + "OPUSDC": { + "_default": "2020-01-01" + }, + "ORDIUSDC": { + "_default": "2020-01-01" + }, + "AIBTC": { + "_default": "2020-01-01" + }, + "AIUSDT": { + "_default": "2020-01-01" + }, + "AIBNB": { + "_default": "2020-01-01" + }, + "AIFDUSD": { + "_default": "2020-01-01" + }, + "AITUSD": { + "_default": "2020-01-01" + }, + "AITRY": { + "_default": "2020-01-01" + }, + "ICPFDUSD": { + "_default": "2020-01-01" + }, + "LDOFDUSD": { + "_default": "2020-01-01" + }, + "MOVRTRY": { + "_default": "2020-01-01" + }, + "XAIBTC": { + "_default": "2020-01-01" + }, + "XAIUSDT": { + "_default": "2020-01-01" + }, + "XAIBNB": { + "_default": "2020-01-01" + }, + "XAIFDUSD": { + "_default": "2020-01-01" + }, + "XAITUSD": { + "_default": "2020-01-01" + }, + "XAITRY": { + "_default": "2020-01-01" + }, + "SKLTRY": { + "_default": "2020-01-01" + }, + "STXFDUSD": { + "_default": "2020-01-01" + }, + "TIAFDUSD": { + "_default": "2020-01-01" + }, + "MANTABTC": { + "_default": "2020-01-01" + }, + "MANTAUSDT": { + "_default": "2020-01-01" + }, + "MANTABNB": { + "_default": "2020-01-01" + }, + "MANTAFDUSD": { + "_default": "2020-01-01" + }, + "MANTATRY": { + "_default": "2020-01-01" + }, + "ENSFDUSD": { + "_default": "2020-01-01" + }, + "ETCFDUSD": { + "_default": "2020-01-01" + }, + "SUIUSDC": { + "_default": "2020-01-01" + }, + "TIAUSDC": { + "_default": "2020-01-01" + }, + "CHZFDUSD": { + "_default": "2020-01-01" + }, + "MANTAUSDC": { + "_default": "2020-01-01" + }, + "ALTBTC": { + "_default": "2020-01-01" + }, + "ALTUSDT": { + "_default": "2020-01-01" + }, + "ALTBNB": { + "_default": "2020-01-01" + }, + "ALTFDUSD": { + "_default": "2020-01-01" + }, + "ALTTRY": { + "_default": "2020-01-01" + }, + "APTFDUSD": { + "_default": "2020-01-01" + }, + "BLURUSDC": { + "_default": "2020-01-01" + }, + "JUPUSDT": { + "_default": "2020-01-01" + }, + "JUPFDUSD": { + "_default": "2020-01-01" + }, + "JUPTRY": { + "_default": "2020-01-01" + }, + "ALTUSDC": { + "_default": "2020-01-01" + }, + "MAGICFDUSD": { + "_default": "2020-01-01" + }, + "SEIUSDC": { + "_default": "2020-01-01" + }, + "PYTHBTC": { + "_default": "2020-01-01" + }, + "PYTHUSDT": { + "_default": "2020-01-01" + }, + "PYTHFDUSD": { + "_default": "2020-01-01" + }, + "PYTHTRY": { + "_default": "2020-01-01" + }, + "RONINBTC": { + "_default": "2020-01-01" + }, + "RONINUSDT": { + "_default": "2020-01-01" + }, + "RONINFDUSD": { + "_default": "2020-01-01" + }, + "RONINTRY": { + "_default": "2020-01-01" + }, + "DYMBTC": { + "_default": "2020-01-01" + }, + "DYMUSDT": { + "_default": "2020-01-01" + }, + "DYMFDUSD": { + "_default": "2020-01-01" + }, + "DYMTRY": { + "_default": "2020-01-01" + }, + "JUPUSDC": { + "_default": "2020-01-01" + }, + "PENDLEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELBTC": { + "_default": "2020-01-01" + }, + "PIXELBNB": { + "_default": "2020-01-01" + }, + "PIXELUSDT": { + "_default": "2020-01-01" + }, + "PIXELFDUSD": { + "_default": "2020-01-01" + }, + "PIXELTRY": { + "_default": "2020-01-01" + }, + "STRKBTC": { + "_default": "2020-01-01" + }, + "STRKUSDT": { + "_default": "2020-01-01" + }, + "STRKFDUSD": { + "_default": "2020-01-01" + }, + "STRKTRY": { + "_default": "2020-01-01" + }, + "FILUSDC": { + "_default": "2020-01-01" + }, + "HBARTRY": { + "_default": "2020-01-01" + }, + "PENDLETRY": { + "_default": "2020-01-01" + }, + "WLDUSDC": { + "_default": "2020-01-01" + }, + "CKBTRY": { + "_default": "2020-01-01" + }, + "COTITRY": { + "_default": "2020-01-01" + }, + "LDOTRY": { + "_default": "2020-01-01" + }, + "UNIUSDC": { + "_default": "2020-01-01" + }, + "PORTALBTC": { + "_default": "2020-01-01" + }, + "PORTALUSDT": { + "_default": "2020-01-01" + }, + "PORTALBNB": { + "_default": "2020-01-01" + }, + "PORTALFDUSD": { + "_default": "2020-01-01" + }, + "PORTALTRY": { + "_default": "2020-01-01" + }, + "PDABTC": { + "_default": "2020-01-01" + }, + "PDAUSDT": { + "_default": "2020-01-01" + }, + "AXLBTC": { + "_default": "2020-01-01" + }, + "AXLUSDT": { + "_default": "2020-01-01" + }, + "AXLFDUSD": { + "_default": "2020-01-01" + }, + "AXLTRY": { + "_default": "2020-01-01" + }, + "PEPEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELUSDC": { + "_default": "2020-01-01" + }, + "STRKUSDC": { + "_default": "2020-01-01" + }, + "UNIFDUSD": { + "_default": "2020-01-01" + }, + "OMTRY": { + "_default": "2020-01-01" + }, + "THETATRY": { + "_default": "2020-01-01" + }, + "WIFBTC": { + "_default": "2020-01-01" + }, + "WIFUSDT": { + "_default": "2020-01-01" + }, + "WIFFDUSD": { + "_default": "2020-01-01" + }, + "WIFTRY": { + "_default": "2020-01-01" + }, + "AGIXFDUSD": { + "_default": "2020-01-01" + }, + "PEPEUSDC": { + "_default": "2020-01-01" + }, + "SHIBUSDC": { + "_default": "2020-01-01" + }, + "THETAFDUSD": { + "_default": "2020-01-01" + }, + "ARTRY": { + "_default": "2020-01-01" + }, + "METISBTC": { + "_default": "2020-01-01" + }, + "METISUSDT": { + "_default": "2020-01-01" + }, + "METISFDUSD": { + "_default": "2020-01-01" + }, + "METISTRY": { + "_default": "2020-01-01" + }, + "BNBJPY": { + "_default": "2020-01-01" + }, + "BTCJPY": { + "_default": "2020-01-01" + }, + "ETHJPY": { + "_default": "2020-01-01" + }, + "FLOKIFDUSD": { + "_default": "2020-01-01" + }, + "GRTFDUSD": { + "_default": "2020-01-01" + }, + "NEARUSDC": { + "_default": "2020-01-01" + }, + "SNXTRY": { + "_default": "2020-01-01" + }, + "AEVOBTC": { + "_default": "2020-01-01" + }, + "AEVOUSDT": { + "_default": "2020-01-01" + }, + "AEVOBNB": { + "_default": "2020-01-01" + }, + "AEVOFDUSD": { + "_default": "2020-01-01" + }, + "AEVOTRY": { + "_default": "2020-01-01" + }, + "FETUSDC": { + "_default": "2020-01-01" + }, + "IMXTRY": { + "_default": "2020-01-01" + }, + "EURUSDC": { + "_default": "2020-01-01" + }, + "BOMETRY": { + "_default": "2020-01-01" + }, + "BOMEBTC": { + "_default": "2020-01-01" + }, + "BOMEUSDT": { + "_default": "2020-01-01" + }, + "BOMEFDUSD": { + "_default": "2020-01-01" + }, + "ETHFIBTC": { + "_default": "2020-01-01" + }, + "ETHFIUSDT": { + "_default": "2020-01-01" + }, + "ETHFIBNB": { + "_default": "2020-01-01" + }, + "ETHFIFDUSD": { + "_default": "2020-01-01" + }, + "ETHFITRY": { + "_default": "2020-01-01" + }, + "AAVETRY": { + "_default": "2020-01-01" + }, + "ARKMFDUSD": { + "_default": "2020-01-01" + }, + "CRVTRY": { + "_default": "2020-01-01" + }, + "FETBRL": { + "_default": "2020-01-01" + }, + "RAYFDUSD": { + "_default": "2020-01-01" + }, + "RNDREUR": { + "_default": "2020-01-01" + }, + "BONKUSDC": { + "_default": "2020-01-01" + }, + "FLOKIUSDC": { + "_default": "2020-01-01" + }, + "MKRTRY": { + "_default": "2020-01-01" + }, + "RAYTRY": { + "_default": "2020-01-01" + }, + "RNDRBRL": { + "_default": "2020-01-01" + }, + "ENABTC": { + "_default": "2020-01-01" + }, + "ENAUSDT": { + "_default": "2020-01-01" + }, + "ENABNB": { + "_default": "2020-01-01" + }, + "ENAFDUSD": { + "_default": "2020-01-01" + }, + "ENATRY": { + "_default": "2020-01-01" + }, + "LQTYFDUSD": { + "_default": "2020-01-01" + }, + "MASKTRY": { + "_default": "2020-01-01" + }, + "PENDLEUSDC": { + "_default": "2020-01-01" + }, + "RDNTTRY": { + "_default": "2020-01-01" + }, + "WBTC": { + "_default": "2020-01-01" + }, + "WUSDT": { + "_default": "2020-01-01" + }, + "WFDUSD": { + "_default": "2020-01-01" + }, + "WTRY": { + "_default": "2020-01-01" + }, + "BOMEUSDC": { + "_default": "2020-01-01" + }, + "JTOUSDC": { + "_default": "2020-01-01" + }, + "WIFUSDC": { + "_default": "2020-01-01" + }, + "TNSRBTC": { + "_default": "2020-01-01" + }, + "TNSRUSDT": { + "_default": "2020-01-01" + }, + "TNSRFDUSD": { + "_default": "2020-01-01" + }, + "TNSRTRY": { + "_default": "2020-01-01" + }, + "SAGABTC": { + "_default": "2020-01-01" + }, + "SAGAUSDT": { + "_default": "2020-01-01" + }, + "SAGABNB": { + "_default": "2020-01-01" + }, + "SAGAFDUSD": { + "_default": "2020-01-01" + }, + "SAGATRY": { + "_default": "2020-01-01" + }, + "USDTMXN": { + "_default": "2020-01-01" + }, + "CKBUSDC": { + "_default": "2020-01-01" + }, + "ENAUSDC": { + "_default": "2020-01-01" + }, + "ETHFIUSDC": { + "_default": "2020-01-01" + }, + "YGGUSDC": { + "_default": "2020-01-01" + }, + "USDTCZK": { + "_default": "2020-01-01" + }, + "TAOBTC": { + "_default": "2020-01-01" + }, + "TAOUSDT": { + "_default": "2020-01-01" + }, + "TAOFDUSD": { + "_default": "2020-01-01" + }, + "TAOTRY": { + "_default": "2020-01-01" + }, + "CFXUSDC": { + "_default": "2020-01-01" + }, + "RNDRUSDC": { + "_default": "2020-01-01" + }, + "RUNEUSDC": { + "_default": "2020-01-01" + }, + "SAGAUSDC": { + "_default": "2020-01-01" + }, + "POLYXTRY": { + "_default": "2020-01-01" + }, + "OMNIBTC": { + "_default": "2020-01-01" + }, + "OMNIUSDT": { + "_default": "2020-01-01" + }, + "OMNIBNB": { + "_default": "2020-01-01" + }, + "OMNIFDUSD": { + "_default": "2020-01-01" + }, + "OMNITRY": { + "_default": "2020-01-01" + }, + "APTUSDC": { + "_default": "2020-01-01" + }, + "GALAUSDC": { + "_default": "2020-01-01" + }, + "OMNIBRL": { + "_default": "2020-01-01" + }, + "STXUSDC": { + "_default": "2020-01-01" + }, + "ICPUSDC": { + "_default": "2020-01-01" + }, + "OMNIUSDC": { + "_default": "2020-01-01" + }, + "PEPEBRL": { + "_default": "2020-01-01" + }, + "YGGTRY": { + "_default": "2020-01-01" + }, + "ADAJPY": { + "_default": "2020-01-01" + }, + "SHIBJPY": { + "_default": "2020-01-01" + }, + "SOLJPY": { + "_default": "2020-01-01" + }, + "XRPJPY": { + "_default": "2020-01-01" + }, + "REZBTC": { + "_default": "2020-01-01" + }, + "REZUSDT": { + "_default": "2020-01-01" + }, + "REZBNB": { + "_default": "2020-01-01" + }, + "REZFDUSD": { + "_default": "2020-01-01" + }, + "REZTRY": { + "_default": "2020-01-01" + }, + "EGLDTRY": { + "_default": "2020-01-01" + }, + "PHBTRY": { + "_default": "2020-01-01" + }, + "RSRTRY": { + "_default": "2020-01-01" + }, + "BBBTC": { + "_default": "2020-01-01" + }, + "BBUSDT": { + "_default": "2020-01-01" + }, + "BBBNB": { + "_default": "2020-01-01" + }, + "BBFDUSD": { + "_default": "2020-01-01" + }, + "BBTRY": { + "_default": "2020-01-01" + }, + "FRONTUSDC": { + "_default": "2020-01-01" + }, + "PEOPLETRY": { + "_default": "2020-01-01" + }, + "TRBUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDT": { + "_default": "2020-01-01" + }, + "NOTBNB": { + "_default": "2020-01-01" + }, + "NOTFDUSD": { + "_default": "2020-01-01" + }, + "NOTTRY": { + "_default": "2020-01-01" + }, + "ARKMUSDC": { + "_default": "2020-01-01" + }, + "ARUSDC": { + "_default": "2020-01-01" + }, + "BBUSDC": { + "_default": "2020-01-01" + }, + "CRVUSDC": { + "_default": "2020-01-01" + }, + "PEOPLEUSDC": { + "_default": "2020-01-01" + }, + "ARFDUSD": { + "_default": "2020-01-01" + }, + "ENAEUR": { + "_default": "2020-01-01" + }, + "PEPEEUR": { + "_default": "2020-01-01" + }, + "REZUSDC": { + "_default": "2020-01-01" + }, + "TRBFDUSD": { + "_default": "2020-01-01" + }, + "USDCTRY": { + "_default": "2020-01-01" + }, + "BTCMXN": { + "_default": "2020-01-01" + }, + "XRPMXN": { + "_default": "2020-01-01" + }, + "ENSUSDC": { + "_default": "2020-01-01" + }, + "LDOUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDC": { + "_default": "2020-01-01" + }, + "NEARBRL": { + "_default": "2020-01-01" + }, + "HIGHTRY": { + "_default": "2020-01-01" + }, + "PEOPLEFDUSD": { + "_default": "2020-01-01" + }, + "TNSRUSDC": { + "_default": "2020-01-01" + }, + "USDTCOP": { + "_default": "2020-01-01" + }, + "IOBTC": { + "_default": "2020-01-01" + }, + "IOUSDT": { + "_default": "2020-01-01" + }, + "IOBNB": { + "_default": "2020-01-01" + }, + "IOFDUSD": { + "_default": "2020-01-01" + }, + "IOTRY": { + "_default": "2020-01-01" + }, + "NOTBRL": { + "_default": "2020-01-01" + }, + "TRUTRY": { + "_default": "2020-01-01" + }, + "WIFEUR": { + "_default": "2020-01-01" + }, + "ZKBTC": { + "_default": "2020-01-01" + }, + "ZKUSDT": { + "_default": "2020-01-01" + }, + "ZKFDUSD": { + "_default": "2020-01-01" + }, + "ZKTRY": { + "_default": "2020-01-01" + }, + "LISTAUSDT": { + "_default": "2020-01-01" + }, + "LISTABNB": { + "_default": "2020-01-01" + }, + "LISTAFDUSD": { + "_default": "2020-01-01" + }, + "LISTATRY": { + "_default": "2020-01-01" + }, + "ZROBTC": { + "_default": "2020-01-01" + }, + "ZROUSDT": { + "_default": "2020-01-01" + }, + "ZROFDUSD": { + "_default": "2020-01-01" + }, + "ZROTRY": { + "_default": "2020-01-01" + }, + "LISTABRL": { + "_default": "2020-01-01" + }, + "BAKETRY": { + "_default": "2020-01-01" + }, + "WIFBRL": { + "_default": "2020-01-01" + }, + "ZKUSDC": { + "_default": "2020-01-01" + }, + "ZROUSDC": { + "_default": "2020-01-01" + }, + "IOUSDC": { + "_default": "2020-01-01" + }, + "1000SATSUSDC": { + "_default": "2020-01-01" + }, + "BNXTRY": { + "_default": "2020-01-01" + }, + "ETHARS": { + "_default": "2020-01-01" + }, + "GUSDT": { + "_default": "2020-01-01" + }, + "GTRY": { + "_default": "2020-01-01" + }, + "BANANABTC": { + "_default": "2020-01-01" + }, + "BANANAUSDT": { + "_default": "2020-01-01" + }, + "BANANABNB": { + "_default": "2020-01-01" + }, + "BANANAFDUSD": { + "_default": "2020-01-01" + }, + "BANANATRY": { + "_default": "2020-01-01" + }, + "RENDERBTC": { + "_default": "2020-01-01" + }, + "RENDERUSDT": { + "_default": "2020-01-01" + }, + "RENDERFDUSD": { + "_default": "2020-01-01" + }, + "RENDERUSDC": { + "_default": "2020-01-01" + }, + "RENDERTRY": { + "_default": "2020-01-01" + }, + "RENDEREUR": { + "_default": "2020-01-01" + }, + "RENDERBRL": { + "_default": "2020-01-01" + }, + "TONBTC": { + "_default": "2020-01-01" + }, + "TONUSDT": { + "_default": "2020-01-01" + }, + "TONFDUSD": { + "_default": "2020-01-01" + }, + "TONTRY": { + "_default": "2020-01-01" + }, + "BONKBRL": { + "_default": "2020-01-01" + }, + "NOTEUR": { + "_default": "2020-01-01" + }, + "DOGEJPY": { + "_default": "2020-01-01" + }, + "MATICJPY": { + "_default": "2020-01-01" + }, + "NEARJPY": { + "_default": "2020-01-01" + }, + "TONUSDC": { + "_default": "2020-01-01" + }, + "AAVEFDUSD": { + "_default": "2020-01-01" + }, + "DOGSUSDT": { + "_default": "2020-01-01" + }, + "DOGSBNB": { + "_default": "2020-01-01" + }, + "DOGSFDUSD": { + "_default": "2020-01-01" + }, + "DOGSTRY": { + "_default": "2020-01-01" + }, + "EUREURI": { + "_default": "2020-01-01" + }, + "EURIUSDT": { + "_default": "2020-01-01" + }, + "DOGSBRL": { + "_default": "2020-01-01" + }, + "DOGSUSDC": { + "_default": "2020-01-01" + }, + "RAREBRL": { + "_default": "2020-01-01" + }, + "RAREUSDC": { + "_default": "2020-01-01" + }, + "SLFBTC": { + "_default": "2020-01-01" + }, + "SLFTRY": { + "_default": "2020-01-01" + }, + "SLFUSDC": { + "_default": "2020-01-01" + }, + "SLFUSDT": { + "_default": "2020-01-01" + }, + "AAVEUSDC": { + "_default": "2020-01-01" + }, + "SUNTRY": { + "_default": "2020-01-01" + }, + "STMXTRY": { + "_default": "2020-01-01" + }, + "POLBNB": { + "_default": "2020-01-01" + }, + "POLBRL": { + "_default": "2020-01-01" + }, + "POLBTC": { + "_default": "2020-01-01" + }, + "POLETH": { + "_default": "2020-01-01" + }, + "POLEUR": { + "_default": "2020-01-01" + }, + "POLFDUSD": { + "_default": "2020-01-01" + }, + "POLJPY": { + "_default": "2020-01-01" + }, + "POLTRY": { + "_default": "2020-01-01" + }, + "POLUSDC": { + "_default": "2020-01-01" + }, + "POLUSDT": { + "_default": "2020-01-01" + }, + "NEIROUSDT": { + "_default": "2020-01-01" + }, + "TURBOUSDT": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDT": { + "_default": "2020-01-01" + }, + "CATIUSDT": { + "_default": "2020-01-01" + }, + "CATIBNB": { + "_default": "2020-01-01" + }, + "CATIFDUSD": { + "_default": "2020-01-01" + }, + "CATITRY": { + "_default": "2020-01-01" + }, + "1MBABYDOGEFDUSD": { + "_default": "2020-01-01" + }, + "1MBABYDOGETRY": { + "_default": "2020-01-01" + }, + "CATIBRL": { + "_default": "2020-01-01" + }, + "BTCEURI": { + "_default": "2020-01-01" + }, + "NEIROFDUSD": { + "_default": "2020-01-01" + }, + "NEIROTRY": { + "_default": "2020-01-01" + }, + "HMSTRUSDT": { + "_default": "2020-01-01" + }, + "HMSTRBNB": { + "_default": "2020-01-01" + }, + "HMSTRFDUSD": { + "_default": "2020-01-01" + }, + "HMSTRTRY": { + "_default": "2020-01-01" + }, + "EIGENBTC": { + "_default": "2020-01-01" + }, + "EIGENUSDT": { + "_default": "2020-01-01" + }, + "EIGENFDUSD": { + "_default": "2020-01-01" + }, + "EIGENTRY": { + "_default": "2020-01-01" + }, + "NEIROBRL": { + "_default": "2020-01-01" + }, + "NEIROEUR": { + "_default": "2020-01-01" + }, + "BNSOLSOL": { + "_default": "2020-01-01" + }, + "SCRUSDT": { + "_default": "2020-01-01" + }, + "SUIBRL": { + "_default": "2020-01-01" + }, + "TURBOTRY": { + "_default": "2020-01-01" + }, + "BNSOLUSDT": { + "_default": "2020-01-01" + }, + "LUMIAUSDT": { + "_default": "2020-01-01" + }, + "SCRBTC": { + "_default": "2020-01-01" + }, + "SCRFDUSD": { + "_default": "2020-01-01" + }, + "SCRTRY": { + "_default": "2020-01-01" + }, + "KAIAUSDT": { + "_default": "2020-01-01" + }, + "COWUSDT": { + "_default": "2020-01-01" + }, + "CETUSUSDT": { + "_default": "2020-01-01" + }, + "PNUTUSDT": { + "_default": "2020-01-01" + }, + "ACTUSDT": { + "_default": "2020-01-01" + }, + "ACTTRY": { + "_default": "2020-01-01" + }, + "COWTRY": { + "_default": "2020-01-01" + }, + "CETUSTRY": { + "_default": "2020-01-01" + }, + "TROYTRY": { + "_default": "2020-01-01" + }, + "PNUTTRY": { + "_default": "2020-01-01" + }, + "ACTFDUSD": { + "_default": "2020-01-01" + }, + "ACTUSDC": { + "_default": "2020-01-01" + }, + "NEIROUSDC": { + "_default": "2020-01-01" + }, + "PNUTBTC": { + "_default": "2020-01-01" + }, + "PNUTFDUSD": { + "_default": "2020-01-01" + }, + "PNUTUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDT": { + "_default": "2020-01-01" + }, + "ACTBRL": { + "_default": "2020-01-01" + }, + "ACTEUR": { + "_default": "2020-01-01" + }, + "CATIUSDC": { + "_default": "2020-01-01" + }, + "ETHEURI": { + "_default": "2020-01-01" + }, + "LUMIATRY": { + "_default": "2020-01-01" + }, + "PNUTBRL": { + "_default": "2020-01-01" + }, + "PNUTEUR": { + "_default": "2020-01-01" + }, + "APEFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDC": { + "_default": "2020-01-01" + }, + "HBARUSDC": { + "_default": "2020-01-01" + }, + "OMUSDC": { + "_default": "2020-01-01" + }, + "RAYUSDC": { + "_default": "2020-01-01" + }, + "TAOUSDC": { + "_default": "2020-01-01" + }, + "TURBOFDUSD": { + "_default": "2020-01-01" + }, + "THEBTC": { + "_default": "2020-01-01" + }, + "THEBNB": { + "_default": "2020-01-01" + }, + "THEFDUSD": { + "_default": "2020-01-01" + }, + "THETRY": { + "_default": "2020-01-01" + }, + "THEUSDT": { + "_default": "2020-01-01" + }, + "APEUSDC": { + "_default": "2020-01-01" + }, + "BOMEEUR": { + "_default": "2020-01-01" + }, + "EIGENUSDC": { + "_default": "2020-01-01" + }, + "HBARFDUSD": { + "_default": "2020-01-01" + }, + "MEMEUSDC": { + "_default": "2020-01-01" + }, + "TROYUSDC": { + "_default": "2020-01-01" + }, + "WLDEUR": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDC": { + "_default": "2020-01-01" + }, + "CETUSUSDC": { + "_default": "2020-01-01" + }, + "COWUSDC": { + "_default": "2020-01-01" + }, + "DYDXUSDC": { + "_default": "2020-01-01" + }, + "HMSTRUSDC": { + "_default": "2020-01-01" + }, + "TURBOUSDC": { + "_default": "2020-01-01" + }, + "ENABRL": { + "_default": "2020-01-01" + }, + "EOSFDUSD": { + "_default": "2020-01-01" + }, + "KAIAUSDC": { + "_default": "2020-01-01" + }, + "SANDUSDC": { + "_default": "2020-01-01" + }, + "XLMFDUSD": { + "_default": "2020-01-01" + }, + "CHZUSDC": { + "_default": "2020-01-01" + }, + "PYTHUSDC": { + "_default": "2020-01-01" + }, + "RSRUSDC": { + "_default": "2020-01-01" + }, + "RSRFDUSD": { + "_default": "2020-01-01" + }, + "WUSDC": { + "_default": "2020-01-01" + }, + "XTZUSDC": { + "_default": "2020-01-01" + }, + "ACXUSDT": { + "_default": "2020-01-01" + }, + "ORCAUSDT": { + "_default": "2020-01-01" + }, + "MOVEBTC": { + "_default": "2020-01-01" + }, + "MOVEUSDT": { + "_default": "2020-01-01" + }, + "MOVEBNB": { + "_default": "2020-01-01" + }, + "MOVEFDUSD": { + "_default": "2020-01-01" + }, + "MOVETRY": { + "_default": "2020-01-01" + }, + "MEBTC": { + "_default": "2020-01-01" + }, + "MEUSDT": { + "_default": "2020-01-01" + }, + "MEFDUSD": { + "_default": "2020-01-01" + }, + "METRY": { + "_default": "2020-01-01" + }, + "ACXUSDC": { + "_default": "2020-01-01" + }, + "ORCAUSDC": { + "_default": "2020-01-01" + }, + "ACXFDUSD": { + "_default": "2020-01-01" + }, + "ORCAFDUSD": { + "_default": "2020-01-01" + }, + "ACXTRY": { + "_default": "2020-01-01" + }, + "ORCATRY": { + "_default": "2020-01-01" + }, + "KSMTRY": { + "_default": "2020-01-01" + }, + "CELOTRY": { + "_default": "2020-01-01" + }, + "HIVEFDUSD": { + "_default": "2020-01-01" + }, + "HIVEUSDC": { + "_default": "2020-01-01" + }, + "IDEXFDUSD": { + "_default": "2020-01-01" + }, + "IDEXUSDC": { + "_default": "2020-01-01" + }, + "TLMFDUSD": { + "_default": "2020-01-01" + }, + "TLMUSDC": { + "_default": "2020-01-01" + }, + "VELODROMEUSDT": { + "_default": "2020-01-01" + }, + "VANAUSDT": { + "_default": "2020-01-01" + }, + "VANABNB": { + "_default": "2020-01-01" + }, + "VANAFDUSD": { + "_default": "2020-01-01" + }, + "VANATRY": { + "_default": "2020-01-01" + }, + "1000CATUSDT": { + "_default": "2020-01-01" + }, + "1000CATBNB": { + "_default": "2020-01-01" + }, + "1000CATFDUSD": { + "_default": "2020-01-01" + }, + "1000CATTRY": { + "_default": "2020-01-01" + }, + "PENGUUSDT": { + "_default": "2020-01-01" + }, + "PENGUBNB": { + "_default": "2020-01-01" + }, + "PENGUFDUSD": { + "_default": "2020-01-01" + }, + "PENGUTRY": { + "_default": "2020-01-01" + }, + "USUALBTC": { + "_default": "2020-01-01" + }, + "USUALFDUSD": { + "_default": "2020-01-01" + }, + "USUALTRY": { + "_default": "2020-01-01" + }, + "1000CATUSDC": { + "_default": "2020-01-01" + }, + "PENGUUSDC": { + "_default": "2020-01-01" + }, + "BIOUSDT": { + "_default": "2020-01-01" + }, + "BIOBNB": { + "_default": "2020-01-01" + }, + "BIOFDUSD": { + "_default": "2020-01-01" + }, + "BIOTRY": { + "_default": "2020-01-01" + }, + "BIOUSDC": { + "_default": "2020-01-01" + }, + "HIVETRY": { + "_default": "2020-01-01" + }, + "MOVEUSDC": { + "_default": "2020-01-01" + }, + "PHATRY": { + "_default": "2020-01-01" + }, + "SUSHITRY": { + "_default": "2020-01-01" + }, + "DUSDT": { + "_default": "2020-01-01" + }, + "DTRY": { + "_default": "2020-01-01" + }, + "APTJPY": { + "_default": "2020-01-01" + }, + "SUIJPY": { + "_default": "2020-01-01" + }, + "XLMJPY": { + "_default": "2020-01-01" + }, + "PEPEJPY": { + "_default": "2020-01-01" + }, + "PHAUSDC": { + "_default": "2020-01-01" + }, + "USDCPLN": { + "_default": "2020-01-01" + }, + "STEEMUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDC": { + "_default": "2020-01-01" + }, + "AIXBTUSDT": { + "_default": "2020-01-01" + }, + "AIXBTUSDC": { + "_default": "2020-01-01" + }, + "CGPTUSDT": { + "_default": "2020-01-01" + }, + "CGPTUSDC": { + "_default": "2020-01-01" + }, + "COOKIEUSDT": { + "_default": "2020-01-01" + }, + "COOKIEUSDC": { + "_default": "2020-01-01" + }, + "SBTC": { + "_default": "2020-01-01" + }, + "SBNB": { + "_default": "2020-01-01" + }, + "SETH": { + "_default": "2020-01-01" + }, + "SEUR": { + "_default": "2020-01-01" + }, + "SFDUSD": { + "_default": "2020-01-01" + }, + "STRY": { + "_default": "2020-01-01" + }, + "SUSDC": { + "_default": "2020-01-01" + }, + "SUSDT": { + "_default": "2020-01-01" + }, + "IOTXJPY": { + "_default": "2020-01-01" + }, + "SEIJPY": { + "_default": "2020-01-01" + }, + "SOLVUSDT": { + "_default": "2020-01-01" + }, + "SOLVBNB": { + "_default": "2020-01-01" + }, + "SOLVFDUSD": { + "_default": "2020-01-01" + }, + "SOLVTRY": { + "_default": "2020-01-01" + }, + "TRUMPUSDT": { + "_default": "2020-01-01" + }, + "TRUMPUSDC": { + "_default": "2020-01-01" + }, + "AIXBTTRY": { + "_default": "2020-01-01" + }, + "TRUMPTRY": { + "_default": "2020-01-01" + }, + "ANIMEUSDT": { + "_default": "2020-01-01" + }, + "ANIMEUSDC": { + "_default": "2020-01-01" + }, + "ANIMEBNB": { + "_default": "2020-01-01" + }, + "ANIMEFDUSD": { + "_default": "2020-01-01" + }, + "ANIMETRY": { + "_default": "2020-01-01" + }, + "BERABTC": { + "_default": "2020-01-01" + }, + "BERAUSDT": { + "_default": "2020-01-01" + }, + "BERAUSDC": { + "_default": "2020-01-01" + }, + "BERAFDUSD": { + "_default": "2020-01-01" + }, + "BERABNB": { + "_default": "2020-01-01" + }, + "BERATRY": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDT": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDC": { + "_default": "2020-01-01" + }, + "TSTUSDT": { + "_default": "2020-01-01" + }, + "TSTUSDC": { + "_default": "2020-01-01" + }, + "LAYERBTC": { + "_default": "2020-01-01" + }, + "LAYERUSDT": { + "_default": "2020-01-01" + }, + "LAYERUSDC": { + "_default": "2020-01-01" + }, + "LAYERBNB": { + "_default": "2020-01-01" + }, + "LAYERFDUSD": { + "_default": "2020-01-01" + }, + "LAYERTRY": { + "_default": "2020-01-01" + }, + "QTUMTRY": { + "_default": "2020-01-01" + }, + "TRUMPEUR": { + "_default": "2020-01-01" + }, + "VTHOTRY": { + "_default": "2020-01-01" + }, + "HEIBTC": { + "_default": "2020-01-01" + }, + "HEIUSDT": { + "_default": "2020-01-01" + }, + "CAKEUSDC": { + "_default": "2020-01-01" + }, + "HEIUSDC": { + "_default": "2020-01-01" + }, + "TRUMPFDUSD": { + "_default": "2020-01-01" + }, + "TSTFDUSD": { + "_default": "2020-01-01" + }, + "BNXUSDC": { + "_default": "2020-01-01" + }, + "LTCJPY": { + "_default": "2020-01-01" + }, + "BCHJPY": { + "_default": "2020-01-01" + }, + "LINKJPY": { + "_default": "2020-01-01" + }, + "KAITOBTC": { + "_default": "2020-01-01" + }, + "KAITOUSDT": { + "_default": "2020-01-01" + }, + "KAITOUSDC": { + "_default": "2020-01-01" + }, + "KAITOBNB": { + "_default": "2020-01-01" + }, + "KAITOFDUSD": { + "_default": "2020-01-01" + }, + "KAITOTRY": { + "_default": "2020-01-01" + }, + "ETHMXN": { + "_default": "2020-01-01" + }, + "KAITOBRL": { + "_default": "2020-01-01" + }, + "SOLMXN": { + "_default": "2020-01-01" + }, + "BNBARS": { + "_default": "2020-01-01" + }, + "SOLARS": { + "_default": "2020-01-01" + }, + "TRUMPBRL": { + "_default": "2020-01-01" + }, + "TRXFDUSD": { + "_default": "2020-01-01" + }, + "TSTTRY": { + "_default": "2020-01-01" + }, + "SHELLBTC": { + "_default": "2020-01-01" + }, + "SHELLUSDT": { + "_default": "2020-01-01" + }, + "SHELLUSDC": { + "_default": "2020-01-01" + }, + "SHELLBNB": { + "_default": "2020-01-01" + }, + "SHELLFDUSD": { + "_default": "2020-01-01" + }, + "SHELLTRY": { + "_default": "2020-01-01" + }, + "REDUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDC": { + "_default": "2020-01-01" + }, + "GPSFDUSD": { + "_default": "2020-01-01" + }, + "GPSTRY": { + "_default": "2020-01-01" + }, + "GPSBNB": { + "_default": "2020-01-01" + }, + "REDBTC": { + "_default": "2020-01-01" + }, + "REDUSDC": { + "_default": "2020-01-01" + }, + "REDFDUSD": { + "_default": "2020-01-01" + }, + "REDTRY": { + "_default": "2020-01-01" + }, + "CHESSUSDC": { + "_default": "2020-01-01" + }, + "EGLDUSDC": { + "_default": "2020-01-01" + }, + "OSMOUSDC": { + "_default": "2020-01-01" + }, + "UTKUSDC": { + "_default": "2020-01-01" + }, + "TUSDC": { + "_default": "2020-01-01" + }, + "CVCUSDC": { + "_default": "2020-01-01" + }, + "EURIUSDC": { + "_default": "2020-01-01" + }, + "SYNUSDC": { + "_default": "2020-01-01" + }, + "USDCRON": { + "_default": "2020-01-01" + }, + "VELODROMEUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDT": { + "_default": "2020-01-01" + }, + "DFUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDC": { + "_default": "2020-01-01" + }, + "GMXUSDC": { + "_default": "2020-01-01" + }, + "MKRUSDC": { + "_default": "2020-01-01" + }, + "RPLUSDC": { + "_default": "2020-01-01" + }, + "BMTUSDT": { + "_default": "2020-01-01" + }, + "BMTUSDC": { + "_default": "2020-01-01" + }, + "BMTBNB": { + "_default": "2020-01-01" + }, + "BMTFDUSD": { + "_default": "2020-01-01" + }, + "BMTTRY": { + "_default": "2020-01-01" + }, + "FORMUSDC": { + "_default": "2020-01-01" + }, + "FORMUSDT": { + "_default": "2020-01-01" + }, + "FORMTRY": { + "_default": "2020-01-01" + }, + "XUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDC": { + "_default": "2020-01-01" + }, + "JUVUSDC": { + "_default": "2020-01-01" + }, + "THEUSDC": { + "_default": "2020-01-01" + }, + "VANRYUSDC": { + "_default": "2020-01-01" + }, + "USDCCZK": { + "_default": "2020-01-01" + }, + "NILUSDT": { + "_default": "2020-01-01" + }, + "NILBNB": { + "_default": "2020-01-01" + }, + "NILFDUSD": { + "_default": "2020-01-01" + }, + "NILUSDC": { + "_default": "2020-01-01" + }, + "NILTRY": { + "_default": "2020-01-01" + }, + "BEAMXUSDC": { + "_default": "2020-01-01" + }, + "VANAUSDC": { + "_default": "2020-01-01" + }, + "PARTIFDUSD": { + "_default": "2020-01-01" + }, + "PARTITRY": { + "_default": "2020-01-01" + }, + "PARTIUSDT": { + "_default": "2020-01-01" + }, + "PARTIUSDC": { + "_default": "2020-01-01" + }, + "PARTIBNB": { + "_default": "2020-01-01" + }, + "MUBARAKUSDT": { + "_default": "2020-01-01" + }, + "MUBARAKUSDC": { + "_default": "2020-01-01" + }, + "TUTUSDT": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDT": { + "_default": "2020-01-01" + }, + "TUTUSDC": { + "_default": "2020-01-01" + }, + "BANANAS31USDT": { + "_default": "2020-01-01" + }, + "BANANAS31USDC": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDC": { + "_default": "2020-01-01" + }, + "GUNUSDT": { + "_default": "2020-01-01" + }, + "GUNBNB": { + "_default": "2020-01-01" + }, + "GUNFDUSD": { + "_default": "2020-01-01" + }, + "GUNTRY": { + "_default": "2020-01-01" + }, + "THETAUSDC": { + "_default": "2020-01-01" + }, + "API3USDC": { + "_default": "2020-01-01" + }, + "AUCTIONTRY": { + "_default": "2020-01-01" + }, + "AUCTIONUSDC": { + "_default": "2020-01-01" + }, + "BANANAUSDC": { + "_default": "2020-01-01" + }, + "GUNUSDC": { + "_default": "2020-01-01" + }, + "QNTUSDC": { + "_default": "2020-01-01" + }, + "VETUSDC": { + "_default": "2020-01-01" + }, + "ZENUSDC": { + "_default": "2020-01-01" + }, + "BABYUSDT": { + "_default": "2020-01-01" + }, + "BABYUSDC": { + "_default": "2020-01-01" + }, + "BABYBNB": { + "_default": "2020-01-01" + }, + "BABYFDUSD": { + "_default": "2020-01-01" + }, + "BABYTRY": { + "_default": "2020-01-01" + }, + "ONDOUSDT": { + "_default": "2020-01-01" + }, + "ONDOUSDC": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDT": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALUSDT": { + "_default": "2020-01-01" + }, + "VIRTUALUSDC": { + "_default": "2020-01-01" + }, + "KERNELBNB": { + "_default": "2020-01-01" + }, + "KERNELFDUSD": { + "_default": "2020-01-01" + }, + "KERNELTRY": { + "_default": "2020-01-01" + }, + "KERNELUSDC": { + "_default": "2020-01-01" + }, + "KERNELUSDT": { + "_default": "2020-01-01" + }, + "WCTTRY": { + "_default": "2020-01-01" + }, + "WCTFDUSD": { + "_default": "2020-01-01" + }, + "WCTBNB": { + "_default": "2020-01-01" + }, + "WCTUSDC": { + "_default": "2020-01-01" + }, + "WCTUSDT": { + "_default": "2020-01-01" + }, + "PAXGUSDC": { + "_default": "2020-01-01" + }, + "ONDOTRY": { + "_default": "2020-01-01" + }, + "BABYEUR": { + "_default": "2020-01-01" + }, + "ACHUSDC": { + "_default": "2020-01-01" + }, + "GMTUSDC": { + "_default": "2020-01-01" + }, + "HYPERUSDT": { + "_default": "2020-01-01" + }, + "HYPERUSDC": { + "_default": "2020-01-01" + }, + "HYPERBNB": { + "_default": "2020-01-01" + }, + "HYPERFDUSD": { + "_default": "2020-01-01" + }, + "HYPERTRY": { + "_default": "2020-01-01" + }, + "INITUSDT": { + "_default": "2020-01-01" + }, + "INITUSDC": { + "_default": "2020-01-01" + }, + "INITBNB": { + "_default": "2020-01-01" + }, + "INITFDUSD": { + "_default": "2020-01-01" + }, + "INITTRY": { + "_default": "2020-01-01" + }, + "SIGNUSDT": { + "_default": "2020-01-01" + }, + "SIGNUSDC": { + "_default": "2020-01-01" + }, + "SIGNBNB": { + "_default": "2020-01-01" + }, + "SIGNFDUSD": { + "_default": "2020-01-01" + }, + "SIGNTRY": { + "_default": "2020-01-01" + }, + "STOUSDT": { + "_default": "2020-01-01" + }, + "STOUSDC": { + "_default": "2020-01-01" + }, + "STOBNB": { + "_default": "2020-01-01" + }, + "STOFDUSD": { + "_default": "2020-01-01" + }, + "STOTRY": { + "_default": "2020-01-01" + }, + "ENJUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALTRY": { + "_default": "2020-01-01" + }, + "SYRUPUSDT": { + "_default": "2020-01-01" + }, + "SYRUPUSDC": { + "_default": "2020-01-01" + }, + "KMNOUSDT": { + "_default": "2020-01-01" + }, + "KMNOUSDC": { + "_default": "2020-01-01" + }, + "SXTUSDT": { + "_default": "2020-01-01" + }, + "SXTUSDC": { + "_default": "2020-01-01" + }, + "SXTBNB": { + "_default": "2020-01-01" + }, + "SXTFDUSD": { + "_default": "2020-01-01" + }, + "SXTTRY": { + "_default": "2020-01-01" + }, + "PUNDIXUSDC": { + "_default": "2020-01-01" + }, + "SYRUPTRY": { + "_default": "2020-01-01" + }, + "NXPCUSDT": { + "_default": "2020-01-01" + }, + "NXPCUSDC": { + "_default": "2020-01-01" + }, + "NXPCBNB": { + "_default": "2020-01-01" + }, + "NXPCFDUSD": { + "_default": "2020-01-01" + }, + "NXPCTRY": { + "_default": "2020-01-01" + }, + "AWEBTC": { + "_default": "2020-01-01" + }, + "AWEUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDC": { + "_default": "2020-01-01" + }, + "HAEDALBNB": { + "_default": "2020-01-01" + }, + "HAEDALFDUSD": { + "_default": "2020-01-01" + }, + "HAEDALTRY": { + "_default": "2020-01-01" + }, + "USD1USDT": { + "_default": "2020-01-01" + }, + "HUMAUSDT": { + "_default": "2020-01-01" + }, + "HUMAUSDC": { + "_default": "2020-01-01" + }, + "HUMABNB": { + "_default": "2020-01-01" + }, + "HUMAFDUSD": { + "_default": "2020-01-01" + }, + "HUMATRY": { + "_default": "2020-01-01" + }, + "ABTC": { + "_default": "2020-01-01" + }, + "AETH": { + "_default": "2020-01-01" + }, + "AFDUSD": { + "_default": "2020-01-01" + }, + "ATRY": { + "_default": "2020-01-01" + }, + "AUSDC": { + "_default": "2020-01-01" + }, + "AUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDC": { + "_default": "2020-01-01" + }, + "SOPHBNB": { + "_default": "2020-01-01" + }, + "SOPHFDUSD": { + "_default": "2020-01-01" + }, + "SOPHTRY": { + "_default": "2020-01-01" + }, + "MUBARAKTRY": { + "_default": "2020-01-01" + }, + "TRXJPY": { + "_default": "2020-01-01" + }, + "DAIJPY": { + "_default": "2020-01-01" + }, + "RESOLVUSDT": { + "_default": "2020-01-01" + }, + "RESOLVUSDC": { + "_default": "2020-01-01" + }, + "RESOLVBNB": { + "_default": "2020-01-01" + }, + "RESOLVFDUSD": { + "_default": "2020-01-01" + }, + "RESOLVTRY": { + "_default": "2020-01-01" + }, + "HOMEUSDT": { + "_default": "2020-01-01" + }, + "HOMEUSDC": { + "_default": "2020-01-01" + }, + "HOMEBNB": { + "_default": "2020-01-01" + }, + "HOMEFDUSD": { + "_default": "2020-01-01" + }, + "HOMETRY": { + "_default": "2020-01-01" + }, + "FLUXUSDC": { + "_default": "2020-01-01" + }, + "MASKUSDC": { + "_default": "2020-01-01" + }, + "SUSHIUSDC": { + "_default": "2020-01-01" + }, + "SPKUSDT": { + "_default": "2020-01-01" + }, + "SPKUSDC": { + "_default": "2020-01-01" + }, + "SPKBNB": { + "_default": "2020-01-01" + }, + "SPKFDUSD": { + "_default": "2020-01-01" + }, + "SPKTRY": { + "_default": "2020-01-01" + }, + "NEWTUSDT": { + "_default": "2020-01-01" + }, + "NEWTUSDC": { + "_default": "2020-01-01" + }, + "NEWTBNB": { + "_default": "2020-01-01" + }, + "NEWTFDUSD": { + "_default": "2020-01-01" + }, + "NEWTTRY": { + "_default": "2020-01-01" + }, + "NEIROJPY": { + "_default": "2020-01-01" + }, + "SAHARAUSDT": { + "_default": "2020-01-01" + }, + "SAHARAUSDC": { + "_default": "2020-01-01" + }, + "SAHARABNB": { + "_default": "2020-01-01" + }, + "SAHARAFDUSD": { + "_default": "2020-01-01" + }, + "SAHARATRY": { + "_default": "2020-01-01" + }, + "LPTUSDC": { + "_default": "2020-01-01" + }, + "RVNUSDC": { + "_default": "2020-01-01" + }, + "LAUSDT": { + "_default": "2020-01-01" + }, + "LAUSDC": { + "_default": "2020-01-01" + }, + "LABNB": { + "_default": "2020-01-01" + }, + "LAFDUSD": { + "_default": "2020-01-01" + }, + "LATRY": { + "_default": "2020-01-01" + }, + "LPTJPY": { + "_default": "2020-01-01" + }, + "XAIUSDC": { + "_default": "2020-01-01" + }, + "AXSUSDC": { + "_default": "2020-01-01" + }, + "COMPUSDC": { + "_default": "2020-01-01" + }, + "ERAUSDT": { + "_default": "2020-01-01" + }, + "ERAUSDC": { + "_default": "2020-01-01" + }, + "ERABNB": { + "_default": "2020-01-01" + }, + "ERAFDUSD": { + "_default": "2020-01-01" + }, + "ERATRY": { + "_default": "2020-01-01" + }, + "CUSDT": { + "_default": "2020-01-01" + }, + "CUSDC": { + "_default": "2020-01-01" + }, + "CBNB": { + "_default": "2020-01-01" + }, + "CFDUSD": { + "_default": "2020-01-01" + }, + "CTRY": { + "_default": "2020-01-01" + }, + "GRTUSDC": { + "_default": "2020-01-01" + }, + "ROSEUSDC": { + "_default": "2020-01-01" + }, + "CVXUSDC": { + "_default": "2020-01-01" + }, + "FUNUSDC": { + "_default": "2020-01-01" + }, + "LISTAUSDC": { + "_default": "2020-01-01" + }, + "TREEUSDT": { + "_default": "2020-01-01" + }, + "TREEUSDC": { + "_default": "2020-01-01" + }, + "TREEBNB": { + "_default": "2020-01-01" + }, + "TREEFDUSD": { + "_default": "2020-01-01" + }, + "TREETRY": { + "_default": "2020-01-01" + }, + "A2ZUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDC": { + "_default": "2020-01-01" + }, + "TOWNSBNB": { + "_default": "2020-01-01" + }, + "TOWNSFDUSD": { + "_default": "2020-01-01" + }, + "TOWNSTRY": { + "_default": "2020-01-01" + }, + "PROVEUSDT": { + "_default": "2020-01-01" + }, + "PROVEUSDC": { + "_default": "2020-01-01" + }, + "PROVEBNB": { + "_default": "2020-01-01" + }, + "PROVEFDUSD": { + "_default": "2020-01-01" + }, + "PROVETRY": { + "_default": "2020-01-01" + }, + "ILVUSDC": { + "_default": "2020-01-01" + }, + "MAGICUSDC": { + "_default": "2020-01-01" + }, + "USDCBRL": { + "_default": "2020-01-01" + }, + "BFUSDUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDC": { + "_default": "2020-01-01" + }, + "PLUMEBNB": { + "_default": "2020-01-01" + }, + "PLUMEFDUSD": { + "_default": "2020-01-01" + }, + "PLUMETRY": { + "_default": "2020-01-01" + }, + "CYBERUSDC": { + "_default": "2020-01-01" + }, + "MAVUSDC": { + "_default": "2020-01-01" + }, + "SKLUSDC": { + "_default": "2020-01-01" + }, + "A2ZUSDC": { + "_default": "2020-01-01" + }, + "SSVUSDC": { + "_default": "2020-01-01" + }, + "UMAUSDC": { + "_default": "2020-01-01" + }, + "DOLOUSDT": { + "_default": "2020-01-01" + }, + "DOLOUSDC": { + "_default": "2020-01-01" + }, + "DOLOBNB": { + "_default": "2020-01-01" + }, + "DOLOFDUSD": { + "_default": "2020-01-01" + }, + "DOLOTRY": { + "_default": "2020-01-01" + }, + "MITOUSDT": { + "_default": "2020-01-01" + }, + "MITOUSDC": { + "_default": "2020-01-01" + }, + "MITOBNB": { + "_default": "2020-01-01" + }, + "MITOFDUSD": { + "_default": "2020-01-01" + }, + "MITOTRY": { + "_default": "2020-01-01" + }, + "WLFIUSDT": { + "_default": "2020-01-01" + }, + "WLFIUSDC": { + "_default": "2020-01-01" + }, + "WLFITRY": { + "_default": "2020-01-01" + }, + "BFUSDUSDC": { + "_default": "2020-01-01" + }, + "NMRUSDC": { + "_default": "2020-01-01" + }, + "QTUMUSDC": { + "_default": "2020-01-01" + }, + "SOMIUSDT": { + "_default": "2020-01-01" + }, + "SOMIUSDC": { + "_default": "2020-01-01" + }, + "SOMIBNB": { + "_default": "2020-01-01" + }, + "SOMIFDUSD": { + "_default": "2020-01-01" + }, + "SOMITRY": { + "_default": "2020-01-01" + }, + "WLFIBRL": { + "_default": "2020-01-01" + }, + "WLFIEUR": { + "_default": "2020-01-01" + }, + "OPENUSDT": { + "_default": "2020-01-01" + }, + "OPENUSDC": { + "_default": "2020-01-01" + }, + "OPENBNB": { + "_default": "2020-01-01" + }, + "OPENFDUSD": { + "_default": "2020-01-01" + }, + "OPENTRY": { + "_default": "2020-01-01" + }, + "USDEUSDC": { + "_default": "2020-01-01" + }, + "USDEUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDC": { + "_default": "2020-01-01" + }, + "LINEABNB": { + "_default": "2020-01-01" + }, + "LINEAFDUSD": { + "_default": "2020-01-01" + }, + "LINEATRY": { + "_default": "2020-01-01" + }, + "HOLOUSDT": { + "_default": "2020-01-01" + }, + "HOLOUSDC": { + "_default": "2020-01-01" + }, + "HOLOBNB": { + "_default": "2020-01-01" + }, + "HOLOFDUSD": { + "_default": "2020-01-01" + }, + "HOLOTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDT": { + "_default": "2020-01-01" + }, + "PUMPTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDC": { + "_default": "2020-01-01" + }, + "AVNTUSDT": { + "_default": "2020-01-01" + }, + "AVNTUSDC": { + "_default": "2020-01-01" + }, + "AVNTTRY": { + "_default": "2020-01-01" + }, + "ZKCUSDT": { + "_default": "2020-01-01" + }, + "ZKCUSDC": { + "_default": "2020-01-01" + }, + "ZKCFDUSD": { + "_default": "2020-01-01" + }, + "ZKCBNB": { + "_default": "2020-01-01" + }, + "ZKCTRY": { + "_default": "2020-01-01" + }, + "SKYBTC": { + "_default": "2020-01-01" + }, + "SKYTRY": { + "_default": "2020-01-01" + }, + "SKYUSDC": { + "_default": "2020-01-01" + }, + "SKYUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDC": { + "_default": "2020-01-01" + }, + "BARDFDUSD": { + "_default": "2020-01-01" + }, + "BARDTRY": { + "_default": "2020-01-01" + }, + "BARDBNB": { + "_default": "2020-01-01" + }, + "0GUSDT": { + "_default": "2020-01-01" + }, + "0GUSDC": { + "_default": "2020-01-01" + }, + "0GBNB": { + "_default": "2020-01-01" + }, + "0GFDUSD": { + "_default": "2020-01-01" + }, + "0GTRY": { + "_default": "2020-01-01" + }, + "IMXUSDC": { + "_default": "2020-01-01" + }, + "NMRTRY": { + "_default": "2020-01-01" + }, + "TWTUSDC": { + "_default": "2020-01-01" + }, + "HEMIBNB": { + "_default": "2020-01-01" + }, + "HEMITRY": { + "_default": "2020-01-01" + }, + "HEMIUSDT": { + "_default": "2020-01-01" + }, + "HEMIUSDC": { + "_default": "2020-01-01" + }, + "HEMIFDUSD": { + "_default": "2020-01-01" + }, + "XPLUSDT": { + "_default": "2020-01-01" + }, + "XPLUSDC": { + "_default": "2020-01-01" + }, + "XPLBNB": { + "_default": "2020-01-01" + }, + "XPLFDUSD": { + "_default": "2020-01-01" + }, + "XPLTRY": { + "_default": "2020-01-01" + }, + "MIRAUSDT": { + "_default": "2020-01-01" + }, + "MIRAUSDC": { + "_default": "2020-01-01" + }, + "MIRABNB": { + "_default": "2020-01-01" + }, + "MIRAFDUSD": { + "_default": "2020-01-01" + }, + "MIRATRY": { + "_default": "2020-01-01" + }, + "FFUSDT": { + "_default": "2020-01-01" + }, + "FFUSDC": { + "_default": "2020-01-01" + }, + "FFBNB": { + "_default": "2020-01-01" + }, + "FFFDUSD": { + "_default": "2020-01-01" + }, + "FFTRY": { + "_default": "2020-01-01" + }, + "AEVOUSDC": { + "_default": "2020-01-01" + }, + "MEUSDC": { + "_default": "2020-01-01" + }, + "SNXUSDC": { + "_default": "2020-01-01" + }, + "EDENUSDT": { + "_default": "2020-01-01" + }, + "EDENUSDC": { + "_default": "2020-01-01" + }, + "EDENBNB": { + "_default": "2020-01-01" + }, + "EDENFDUSD": { + "_default": "2020-01-01" + }, + "EDENTRY": { + "_default": "2020-01-01" + }, + "NOMFDUSD": { + "_default": "2020-01-01" + }, + "NOMTRY": { + "_default": "2020-01-01" + }, + "NOMUSDC": { + "_default": "2020-01-01" + }, + "NOMUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDC": { + "_default": "2020-01-01" + }, + "2ZBNB": { + "_default": "2020-01-01" + }, + "2ZFDUSD": { + "_default": "2020-01-01" + }, + "2ZTRY": { + "_default": "2020-01-01" + }, + "TRUMPJPY": { + "_default": "2020-01-01" + }, + "MORPHOUSDT": { + "_default": "2020-01-01" + }, + "MORPHOUSDC": { + "_default": "2020-01-01" + }, + "MORPHOBNB": { + "_default": "2020-01-01" + }, + "MORPHOFDUSD": { + "_default": "2020-01-01" + }, + "MORPHOTRY": { + "_default": "2020-01-01" + }, + "ASTERUSDT": { + "_default": "2020-01-01" + }, + "ASTERUSDC": { + "_default": "2020-01-01" + }, + "ASTERTRY": { + "_default": "2020-01-01" + }, + "WALUSDT": { + "_default": "2020-01-01" + }, + "WALUSDC": { + "_default": "2020-01-01" + }, + "WALBNB": { + "_default": "2020-01-01" + }, + "WALFDUSD": { + "_default": "2020-01-01" + }, + "WALTRY": { + "_default": "2020-01-01" + }, + "EULUSDT": { + "_default": "2020-01-01" + }, + "EULUSDC": { + "_default": "2020-01-01" + }, + "EULFDUSD": { + "_default": "2020-01-01" + }, + "EULBNB": { + "_default": "2020-01-01" + }, + "EULTRY": { + "_default": "2020-01-01" + }, + "ENSOUSDT": { + "_default": "2020-01-01" + }, + "ENSOUSDC": { + "_default": "2020-01-01" + }, + "ENSOFDUSD": { + "_default": "2020-01-01" + }, + "ENSOBNB": { + "_default": "2020-01-01" + }, + "ENSOTRY": { + "_default": "2020-01-01" + }, + "YBUSDT": { + "_default": "2020-01-01" + }, + "YBUSDC": { + "_default": "2020-01-01" + }, + "YBBNB": { + "_default": "2020-01-01" + }, + "YBFDUSD": { + "_default": "2020-01-01" + }, + "YBTRY": { + "_default": "2020-01-01" + }, + "ZBTUSDT": { + "_default": "2020-01-01" + }, + "ZBTUSDC": { + "_default": "2020-01-01" + }, + "ZBTBNB": { + "_default": "2020-01-01" + }, + "ZBTFDUSD": { + "_default": "2020-01-01" + }, + "ZBTTRY": { + "_default": "2020-01-01" + }, + "TURTLEUSDT": { + "_default": "2020-01-01" + }, + "TURTLEUSDC": { + "_default": "2020-01-01" + }, + "TURTLEBNB": { + "_default": "2020-01-01" + }, + "TURTLEFDUSD": { + "_default": "2020-01-01" + }, + "TURTLETRY": { + "_default": "2020-01-01" + }, + "GIGGLEUSDT": { + "_default": "2020-01-01" + }, + "GIGGLEUSDC": { + "_default": "2020-01-01" + }, + "GIGGLETRY": { + "_default": "2020-01-01" + }, + "FUSDT": { + "_default": "2020-01-01" + }, + "FUSDC": { + "_default": "2020-01-01" + }, + "FTRY": { + "_default": "2020-01-01" + }, + "KITEUSDT": { + "_default": "2020-01-01" + }, + "KITEUSDC": { + "_default": "2020-01-01" + }, + "KITEBNB": { + "_default": "2020-01-01" + }, + "KITETRY": { + "_default": "2020-01-01" + }, + "MMTUSDT": { + "_default": "2020-01-01" + }, + "MMTUSDC": { + "_default": "2020-01-01" + }, + "MMTBNB": { + "_default": "2020-01-01" + }, + "MMTTRY": { + "_default": "2020-01-01" + }, + "DASHUSDC": { + "_default": "2020-01-01" + }, + "SAPIENUSDT": { + "_default": "2020-01-01" + }, + "SAPIENUSDC": { + "_default": "2020-01-01" + }, + "SAPIENBNB": { + "_default": "2020-01-01" + }, + "SAPIENTRY": { + "_default": "2020-01-01" + }, + "MINAUSDC": { + "_default": "2020-01-01" + }, + "XVGUSDC": { + "_default": "2020-01-01" + }, + "ALLOUSDT": { + "_default": "2020-01-01" + }, + "ALLOUSDC": { + "_default": "2020-01-01" + }, + "ALLOBNB": { + "_default": "2020-01-01" + }, + "ALLOTRY": { + "_default": "2020-01-01" + }, + "SOLVUSDC": { + "_default": "2020-01-01" + }, + "USD1USDC": { + "_default": "2020-01-01" + }, + "WLFIUSD1": { + "_default": "2020-01-01" + }, + "BANKUSDT": { + "_default": "2020-01-01" + }, + "BANKUSDC": { + "_default": "2020-01-01" + }, + "BANKTRY": { + "_default": "2020-01-01" + }, + "METUSDT": { + "_default": "2020-01-01" + }, + "METUSDC": { + "_default": "2020-01-01" + }, + "METTRY": { + "_default": "2020-01-01" + }, + "1INCHUSDC": { + "_default": "2020-01-01" + }, + "COTIUSDC": { + "_default": "2020-01-01" + }, + "LSKUSDC": { + "_default": "2020-01-01" + }, + "USDTUSD": { + "_default": "2020-01-01" + }, + "USDCUSD": { + "_default": "2020-01-01" + }, + "DODOTRY": { + "_default": "2020-01-01" + }, + "HEITRY": { + "_default": "2020-01-01" + }, + "MANTAIDR": { + "_default": "2020-01-01" + }, + "SCRIDR": { + "_default": "2020-01-01" + }, + "WLDIDR": { + "_default": "2020-01-01" + }, + "HBARIDR": { + "_default": "2020-01-01" + }, + "ATUSDT": { + "_default": "2020-01-01" + }, + "ATUSDC": { + "_default": "2020-01-01" + }, + "ATBNB": { + "_default": "2020-01-01" + }, + "ATTRY": { + "_default": "2020-01-01" + }, + "ASTERIDR": { + "_default": "2020-01-01" + }, + "AVAXIDR": { + "_default": "2020-01-01" + }, + "BOMEIDR": { + "_default": "2020-01-01" + }, + "DOGSIDR": { + "_default": "2020-01-01" + }, + "FLOKIIDR": { + "_default": "2020-01-01" + }, + "POLIDR": { + "_default": "2020-01-01" + }, + "RENDERIDR": { + "_default": "2020-01-01" + }, + "TAOIDR": { + "_default": "2020-01-01" + }, + "TIAIDR": { + "_default": "2020-01-01" + }, + "TONIDR": { + "_default": "2020-01-01" + }, + "VIRTUALIDR": { + "_default": "2020-01-01" + }, + "WIFIDR": { + "_default": "2020-01-01" + }, + "ZILIDR": { + "_default": "2020-01-01" + }, + "ARBIDR": { + "_default": "2020-01-01" + }, + "ADAIDR": { + "_default": "2020-01-01" + }, + "BNBIDR": { + "_default": "2020-01-01" + }, + "BTCIDR": { + "_default": "2020-01-01" + }, + "DOGEIDR": { + "_default": "2020-01-01" + }, + "ETHIDR": { + "_default": "2020-01-01" + }, + "NEIROIDR": { + "_default": "2020-01-01" + }, + "ONDOIDR": { + "_default": "2020-01-01" + }, + "SUIIDR": { + "_default": "2020-01-01" + }, + "TKOIDR": { + "_default": "2020-01-01" + }, + "XRPIDR": { + "_default": "2020-01-01" + }, + "USDTIDR": { + "_default": "2020-01-01" + }, + "USDCIDR": { + "_default": "2020-01-01" + }, + "SOLIDR": { + "_default": "2020-01-01" + }, + "BTCUSD": { + "_default": "2020-01-01" + }, + "BTCUSD1": { + "_default": "2020-01-01" + }, + "DYMUSDC": { + "_default": "2020-01-01" + }, + "BNBUSD1": { + "_default": "2020-01-01" + }, + "ETHUSD1": { + "_default": "2020-01-01" + }, + "SOLUSD1": { + "_default": "2020-01-01" + }, + "DASHTRY": { + "_default": "2020-01-01" + }, + "DOGEUSD1": { + "_default": "2020-01-01" + }, + "SUIUSD1": { + "_default": "2020-01-01" + }, + "XRPUSD1": { + "_default": "2020-01-01" + }, + "KGSTUSDT": { + "_default": "2020-01-01" + }, + "ADAUSD1": { + "_default": "2020-01-01" + }, + "ASTERUSD1": { + "_default": "2020-01-01" + }, + "LUNAUSDC": { + "_default": "2020-01-01" + }, + "LUNCUSDC": { + "_default": "2020-01-01" + }, + "ZECUSD1": { + "_default": "2020-01-01" + }, + "AVAXUSD1": { + "_default": "2020-01-01" + }, + "BCHUSD1": { + "_default": "2020-01-01" + }, + "UNIUSD1": { + "_default": "2020-01-01" + }, + "BREVUSDT": { + "_default": "2020-01-01" + }, + "BREVUSDC": { + "_default": "2020-01-01" + }, + "BREVBNB": { + "_default": "2020-01-01" + }, + "BREVTRY": { + "_default": "2020-01-01" + }, + "币安人生USDT": { + "_default": "2020-01-01" + }, + "币安人生USDC": { + "_default": "2020-01-01" + }, + "币安人生TRY": { + "_default": "2020-01-01" + }, + "ZKPUSDT": { + "_default": "2020-01-01" + }, + "ZKPUSDC": { + "_default": "2020-01-01" + }, + "ZKPTRY": { + "_default": "2020-01-01" + }, + "FETJPY": { + "_default": "2020-01-01" + }, + "TAOJPY": { + "_default": "2020-01-01" + }, + "LINKUSD1": { + "_default": "2020-01-01" + }, + "USDCMXN": { + "_default": "2020-01-01" + }, + "PEPEUSD1": { + "_default": "2020-01-01" + }, + "UUSDT": { + "_default": "2020-01-01" + }, + "UUSDC": { + "_default": "2020-01-01" + }, + "FRAXUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDC": { + "_default": "2020-01-01" + }, + "FOGOTRY": { + "_default": "2020-01-01" + }, + "BTCU": { + "_default": "2020-01-01" + }, + "LTCUSD1": { + "_default": "2020-01-01" + }, + "UTRY": { + "_default": "2020-01-01" + }, + "XRPRLUSD": { + "_default": "2020-01-01" + }, + "RLUSDUSDT": { + "_default": "2020-01-01" + }, + "RLUSDU": { + "_default": "2020-01-01" + }, + "SENTUSDT": { + "_default": "2020-01-01" + }, + "SENTUSDC": { + "_default": "2020-01-01" + }, + "SENTTRY": { + "_default": "2020-01-01" + }, + "BNBU": { + "_default": "2020-01-01" + }, + "KGSTU": { + "_default": "2020-01-01" + }, + "SOLU": { + "_default": "2020-01-01" + }, + "TRXUSD1": { + "_default": "2020-01-01" + }, + "USD1U": { + "_default": "2020-01-01" + }, + "ETHU": { + "_default": "2020-01-01" + } + }, + "aggTrades": { + "ETHBTC": { + "_default": "2020-01-01" + }, + "LTCBTC": { + "_default": "2020-01-01" + }, + "BNBBTC": { + "_default": "2020-01-01" + }, + "NEOBTC": { + "_default": "2020-01-01" + }, + "QTUMETH": { + "_default": "2020-01-01" + }, + "EOSETH": { + "_default": "2020-01-01" + }, + "SNTETH": { + "_default": "2020-01-01" + }, + "BNTETH": { + "_default": "2020-01-01" + }, + "BCCBTC": { + "_default": "2020-01-01" + }, + "GASBTC": { + "_default": "2020-01-01" + }, + "BNBETH": { + "_default": "2020-01-01" + }, + "BTCUSDT": { + "_default": "2020-01-01" + }, + "ETHUSDT": { + "_default": "2020-01-01" + }, + "HSRBTC": { + "_default": "2020-01-01" + }, + "OAXETH": { + "_default": "2020-01-01" + }, + "DNTETH": { + "_default": "2020-01-01" + }, + "MCOETH": { + "_default": "2020-01-01" + }, + "ICNETH": { + "_default": "2020-01-01" + }, + "MCOBTC": { + "_default": "2020-01-01" + }, + "WTCBTC": { + "_default": "2020-01-01" + }, + "WTCETH": { + "_default": "2020-01-01" + }, + "LRCBTC": { + "_default": "2020-01-01" + }, + "LRCETH": { + "_default": "2020-01-01" + }, + "QTUMBTC": { + "_default": "2020-01-01" + }, + "YOYOBTC": { + "_default": "2020-01-01" + }, + "OMGBTC": { + "_default": "2020-01-01" + }, + "OMGETH": { + "_default": "2020-01-01" + }, + "ZRXBTC": { + "_default": "2020-01-01" + }, + "ZRXETH": { + "_default": "2020-01-01" + }, + "STRATBTC": { + "_default": "2020-01-01" + }, + "STRATETH": { + "_default": "2020-01-01" + }, + "SNGLSBTC": { + "_default": "2020-01-01" + }, + "SNGLSETH": { + "_default": "2020-01-01" + }, + "BQXBTC": { + "_default": "2020-01-01" + }, + "BQXETH": { + "_default": "2020-01-01" + }, + "KNCBTC": { + "_default": "2020-01-01" + }, + "KNCETH": { + "_default": "2020-01-01" + }, + "FUNBTC": { + "_default": "2020-01-01" + }, + "FUNETH": { + "_default": "2020-01-01" + }, + "SNMBTC": { + "_default": "2020-01-01" + }, + "SNMETH": { + "_default": "2020-01-01" + }, + "NEOETH": { + "_default": "2020-01-01" + }, + "IOTABTC": { + "_default": "2020-01-01" + }, + "IOTAETH": { + "_default": "2020-01-01" + }, + "LINKBTC": { + "_default": "2020-01-01" + }, + "LINKETH": { + "_default": "2020-01-01" + }, + "XVGBTC": { + "_default": "2020-01-01" + }, + "XVGETH": { + "_default": "2020-01-01" + }, + "SALTBTC": { + "_default": "2020-01-01" + }, + "SALTETH": { + "_default": "2020-01-01" + }, + "MDABTC": { + "_default": "2020-01-01" + }, + "MDAETH": { + "_default": "2020-01-01" + }, + "MTLBTC": { + "_default": "2020-01-01" + }, + "MTLETH": { + "_default": "2020-01-01" + }, + "SUBBTC": { + "_default": "2020-01-01" + }, + "SUBETH": { + "_default": "2020-01-01" + }, + "EOSBTC": { + "_default": "2020-01-01" + }, + "SNTBTC": { + "_default": "2020-01-01" + }, + "ETCETH": { + "_default": "2020-01-01" + }, + "ETCBTC": { + "_default": "2020-01-01" + }, + "MTHBTC": { + "_default": "2020-01-01" + }, + "MTHETH": { + "_default": "2020-01-01" + }, + "ENGBTC": { + "_default": "2020-01-01" + }, + "ENGETH": { + "_default": "2020-01-01" + }, + "DNTBTC": { + "_default": "2020-01-01" + }, + "ZECBTC": { + "_default": "2020-01-01" + }, + "ZECETH": { + "_default": "2020-01-01" + }, + "BNTBTC": { + "_default": "2020-01-01" + }, + "ASTBTC": { + "_default": "2020-01-01" + }, + "ASTETH": { + "_default": "2020-01-01" + }, + "DASHBTC": { + "_default": "2020-01-01" + }, + "DASHETH": { + "_default": "2020-01-01" + }, + "OAXBTC": { + "_default": "2020-01-01" + }, + "ICNBTC": { + "_default": "2020-01-01" + }, + "BTGBTC": { + "_default": "2020-01-01" + }, + "BTGETH": { + "_default": "2020-01-01" + }, + "EVXBTC": { + "_default": "2020-01-01" + }, + "EVXETH": { + "_default": "2020-01-01" + }, + "REQBTC": { + "_default": "2020-01-01" + }, + "REQETH": { + "_default": "2020-01-01" + }, + "VIBBTC": { + "_default": "2020-01-01" + }, + "VIBETH": { + "_default": "2020-01-01" + }, + "HSRETH": { + "_default": "2020-01-01" + }, + "TRXBTC": { + "_default": "2020-01-01" + }, + "TRXETH": { + "_default": "2020-01-01" + }, + "POWRBTC": { + "_default": "2020-01-01" + }, + "POWRETH": { + "_default": "2020-01-01" + }, + "ARKBTC": { + "_default": "2020-01-01" + }, + "ARKETH": { + "_default": "2020-01-01" + }, + "YOYOETH": { + "_default": "2020-01-01" + }, + "XRPBTC": { + "_default": "2020-01-01" + }, + "XRPETH": { + "_default": "2020-01-01" + }, + "MODBTC": { + "_default": "2020-01-01" + }, + "MODETH": { + "_default": "2020-01-01" + }, + "ENJBTC": { + "_default": "2020-01-01" + }, + "ENJETH": { + "_default": "2020-01-01" + }, + "STORJBTC": { + "_default": "2020-01-01" + }, + "STORJETH": { + "_default": "2020-01-01" + }, + "BNBUSDT": { + "_default": "2020-01-01" + }, + "VENBNB": { + "_default": "2020-01-01" + }, + "YOYOBNB": { + "_default": "2020-01-01" + }, + "POWRBNB": { + "_default": "2020-01-01" + }, + "VENBTC": { + "_default": "2020-01-01" + }, + "VENETH": { + "_default": "2020-01-01" + }, + "KMDBTC": { + "_default": "2020-01-01" + }, + "KMDETH": { + "_default": "2020-01-01" + }, + "NULSBNB": { + "_default": "2020-01-01" + }, + "RCNBTC": { + "_default": "2020-01-01" + }, + "RCNETH": { + "_default": "2020-01-01" + }, + "RCNBNB": { + "_default": "2020-01-01" + }, + "NULSBTC": { + "_default": "2020-01-01" + }, + "NULSETH": { + "_default": "2020-01-01" + }, + "RDNBTC": { + "_default": "2020-01-01" + }, + "RDNETH": { + "_default": "2020-01-01" + }, + "RDNBNB": { + "_default": "2020-01-01" + }, + "XMRBTC": { + "_default": "2020-01-01" + }, + "XMRETH": { + "_default": "2020-01-01" + }, + "DLTBNB": { + "_default": "2020-01-01" + }, + "WTCBNB": { + "_default": "2020-01-01" + }, + "DLTBTC": { + "_default": "2020-01-01" + }, + "DLTETH": { + "_default": "2020-01-01" + }, + "AMBBTC": { + "_default": "2020-01-01" + }, + "AMBETH": { + "_default": "2020-01-01" + }, + "AMBBNB": { + "_default": "2020-01-01" + }, + "BCCETH": { + "_default": "2020-01-01" + }, + "BCCUSDT": { + "_default": "2020-01-01" + }, + "BCCBNB": { + "_default": "2020-01-01" + }, + "BATBTC": { + "_default": "2020-01-01" + }, + "BATETH": { + "_default": "2020-01-01" + }, + "BATBNB": { + "_default": "2020-01-01" + }, + "BCPTBTC": { + "_default": "2020-01-01" + }, + "BCPTETH": { + "_default": "2020-01-01" + }, + "BCPTBNB": { + "_default": "2020-01-01" + }, + "ARNBTC": { + "_default": "2020-01-01" + }, + "ARNETH": { + "_default": "2020-01-01" + }, + "GVTBTC": { + "_default": "2020-01-01" + }, + "GVTETH": { + "_default": "2020-01-01" + }, + "CDTBTC": { + "_default": "2020-01-01" + }, + "CDTETH": { + "_default": "2020-01-01" + }, + "GXSBTC": { + "_default": "2020-01-01" + }, + "GXSETH": { + "_default": "2020-01-01" + }, + "NEOUSDT": { + "_default": "2020-01-01" + }, + "NEOBNB": { + "_default": "2020-01-01" + }, + "POEBTC": { + "_default": "2020-01-01" + }, + "POEETH": { + "_default": "2020-01-01" + }, + "QSPBTC": { + "_default": "2020-01-01" + }, + "QSPETH": { + "_default": "2020-01-01" + }, + "QSPBNB": { + "_default": "2020-01-01" + }, + "BTSBTC": { + "_default": "2020-01-01" + }, + "BTSETH": { + "_default": "2020-01-01" + }, + "BTSBNB": { + "_default": "2020-01-01" + }, + "XZCBTC": { + "_default": "2020-01-01" + }, + "XZCETH": { + "_default": "2020-01-01" + }, + "XZCBNB": { + "_default": "2020-01-01" + }, + "LSKBTC": { + "_default": "2020-01-01" + }, + "LSKETH": { + "_default": "2020-01-01" + }, + "LSKBNB": { + "_default": "2020-01-01" + }, + "TNTBTC": { + "_default": "2020-01-01" + }, + "TNTETH": { + "_default": "2020-01-01" + }, + "FUELBTC": { + "_default": "2020-01-01" + }, + "FUELETH": { + "_default": "2020-01-01" + }, + "MANABTC": { + "_default": "2020-01-01" + }, + "MANAETH": { + "_default": "2020-01-01" + }, + "BCDBTC": { + "_default": "2020-01-01" + }, + "BCDETH": { + "_default": "2020-01-01" + }, + "DGDBTC": { + "_default": "2020-01-01" + }, + "DGDETH": { + "_default": "2020-01-01" + }, + "IOTABNB": { + "_default": "2020-01-01" + }, + "ADXBTC": { + "_default": "2020-01-01" + }, + "ADXETH": { + "_default": "2020-01-01" + }, + "ADXBNB": { + "_default": "2020-01-01" + }, + "ADABTC": { + "_default": "2020-01-01" + }, + "ADAETH": { + "_default": "2020-01-01" + }, + "PPTBTC": { + "_default": "2020-01-01" + }, + "PPTETH": { + "_default": "2020-01-01" + }, + "CMTBTC": { + "_default": "2020-01-01" + }, + "CMTETH": { + "_default": "2020-01-01" + }, + "CMTBNB": { + "_default": "2020-01-01" + }, + "XLMBTC": { + "_default": "2020-01-01" + }, + "XLMETH": { + "_default": "2020-01-01" + }, + "XLMBNB": { + "_default": "2020-01-01" + }, + "CNDBTC": { + "_default": "2020-01-01" + }, + "CNDETH": { + "_default": "2020-01-01" + }, + "CNDBNB": { + "_default": "2020-01-01" + }, + "LENDBTC": { + "_default": "2020-01-01" + }, + "LENDETH": { + "_default": "2020-01-01" + }, + "WABIBTC": { + "_default": "2020-01-01" + }, + "WABIETH": { + "_default": "2020-01-01" + }, + "WABIBNB": { + "_default": "2020-01-01" + }, + "LTCETH": { + "_default": "2020-01-01" + }, + "LTCUSDT": { + "_default": "2020-01-01" + }, + "LTCBNB": { + "_default": "2020-01-01" + }, + "TNBBTC": { + "_default": "2020-01-01" + }, + "TNBETH": { + "_default": "2020-01-01" + }, + "WAVESBTC": { + "_default": "2020-01-01" + }, + "WAVESETH": { + "_default": "2020-01-01" + }, + "WAVESBNB": { + "_default": "2020-01-01" + }, + "GTOBTC": { + "_default": "2020-01-01" + }, + "GTOETH": { + "_default": "2020-01-01" + }, + "GTOBNB": { + "_default": "2020-01-01" + }, + "ICXBTC": { + "_default": "2020-01-01" + }, + "ICXETH": { + "_default": "2020-01-01" + }, + "ICXBNB": { + "_default": "2020-01-01" + }, + "OSTBTC": { + "_default": "2020-01-01" + }, + "OSTETH": { + "_default": "2020-01-01" + }, + "OSTBNB": { + "_default": "2020-01-01" + }, + "ELFBTC": { + "_default": "2020-01-01" + }, + "ELFETH": { + "_default": "2020-01-01" + }, + "AIONBTC": { + "_default": "2020-01-01" + }, + "AIONETH": { + "_default": "2020-01-01" + }, + "AIONBNB": { + "_default": "2020-01-01" + }, + "NEBLBTC": { + "_default": "2020-01-01" + }, + "NEBLBNB": { + "_default": "2020-01-01" + }, + "BRDBTC": { + "_default": "2020-01-01" + }, + "BRDETH": { + "_default": "2020-01-01" + }, + "BRDBNB": { + "_default": "2020-01-01" + }, + "MCOBNB": { + "_default": "2020-01-01" + }, + "EDOBTC": { + "_default": "2020-01-01" + }, + "EDOETH": { + "_default": "2020-01-01" + }, + "WINGSBTC": { + "_default": "2020-01-01" + }, + "WINGSETH": { + "_default": "2020-01-01" + }, + "NAVBTC": { + "_default": "2020-01-01" + }, + "NAVETH": { + "_default": "2020-01-01" + }, + "NAVBNB": { + "_default": "2020-01-01" + }, + "LUNBTC": { + "_default": "2020-01-01" + }, + "LUNETH": { + "_default": "2020-01-01" + }, + "TRIGBTC": { + "_default": "2020-01-01" + }, + "TRIGETH": { + "_default": "2020-01-01" + }, + "TRIGBNB": { + "_default": "2020-01-01" + }, + "APPCBTC": { + "_default": "2020-01-01" + }, + "APPCETH": { + "_default": "2020-01-01" + }, + "APPCBNB": { + "_default": "2020-01-01" + }, + "VIBEBTC": { + "_default": "2020-01-01" + }, + "VIBEETH": { + "_default": "2020-01-01" + }, + "RLCBTC": { + "_default": "2020-01-01" + }, + "RLCETH": { + "_default": "2020-01-01" + }, + "RLCBNB": { + "_default": "2020-01-01" + }, + "INSBTC": { + "_default": "2020-01-01" + }, + "INSETH": { + "_default": "2020-01-01" + }, + "PIVXBTC": { + "_default": "2020-01-01" + }, + "PIVXBNB": { + "_default": "2020-01-01" + }, + "IOSTBTC": { + "_default": "2020-01-01" + }, + "IOSTETH": { + "_default": "2020-01-01" + }, + "CHATBTC": { + "_default": "2020-01-01" + }, + "CHATETH": { + "_default": "2020-01-01" + }, + "STEEMBTC": { + "_default": "2020-01-01" + }, + "STEEMETH": { + "_default": "2020-01-01" + }, + "STEEMBNB": { + "_default": "2020-01-01" + }, + "NANOBTC": { + "_default": "2020-01-01" + }, + "NANOETH": { + "_default": "2020-01-01" + }, + "NANOBNB": { + "_default": "2020-01-01" + }, + "VIABTC": { + "_default": "2020-01-01" + }, + "VIAETH": { + "_default": "2020-01-01" + }, + "VIABNB": { + "_default": "2020-01-01" + }, + "BLZBTC": { + "_default": "2020-01-01" + }, + "BLZETH": { + "_default": "2020-01-01" + }, + "BLZBNB": { + "_default": "2020-01-01" + }, + "AEBTC": { + "_default": "2020-01-01" + }, + "AEETH": { + "_default": "2020-01-01" + }, + "AEBNB": { + "_default": "2020-01-01" + }, + "RPXBTC": { + "_default": "2020-01-01" + }, + "RPXETH": { + "_default": "2020-01-01" + }, + "RPXBNB": { + "_default": "2020-01-01" + }, + "NCASHBTC": { + "_default": "2020-01-01" + }, + "NCASHETH": { + "_default": "2020-01-01" + }, + "NCASHBNB": { + "_default": "2020-01-01" + }, + "POABTC": { + "_default": "2020-01-01" + }, + "POAETH": { + "_default": "2020-01-01" + }, + "POABNB": { + "_default": "2020-01-01" + }, + "ZILBTC": { + "_default": "2020-01-01" + }, + "ZILETH": { + "_default": "2020-01-01" + }, + "ZILBNB": { + "_default": "2020-01-01" + }, + "ONTBTC": { + "_default": "2020-01-01" + }, + "ONTETH": { + "_default": "2020-01-01" + }, + "ONTBNB": { + "_default": "2020-01-01" + }, + "STORMBTC": { + "_default": "2020-01-01" + }, + "STORMETH": { + "_default": "2020-01-01" + }, + "STORMBNB": { + "_default": "2020-01-01" + }, + "QTUMBNB": { + "_default": "2020-01-01" + }, + "QTUMUSDT": { + "_default": "2020-01-01" + }, + "XEMBTC": { + "_default": "2020-01-01" + }, + "XEMETH": { + "_default": "2020-01-01" + }, + "XEMBNB": { + "_default": "2020-01-01" + }, + "WANBTC": { + "_default": "2020-01-01" + }, + "WANETH": { + "_default": "2020-01-01" + }, + "WANBNB": { + "_default": "2020-01-01" + }, + "WPRBTC": { + "_default": "2020-01-01" + }, + "WPRETH": { + "_default": "2020-01-01" + }, + "QLCBTC": { + "_default": "2020-01-01" + }, + "QLCETH": { + "_default": "2020-01-01" + }, + "SYSBTC": { + "_default": "2020-01-01" + }, + "SYSETH": { + "_default": "2020-01-01" + }, + "SYSBNB": { + "_default": "2020-01-01" + }, + "QLCBNB": { + "_default": "2020-01-01" + }, + "GRSBTC": { + "_default": "2020-01-01" + }, + "GRSETH": { + "_default": "2020-01-01" + }, + "ADAUSDT": { + "_default": "2020-01-01" + }, + "ADABNB": { + "_default": "2020-01-01" + }, + "CLOAKBTC": { + "_default": "2020-01-01" + }, + "CLOAKETH": { + "_default": "2020-01-01" + }, + "GNTBTC": { + "_default": "2020-01-01" + }, + "GNTETH": { + "_default": "2020-01-01" + }, + "GNTBNB": { + "_default": "2020-01-01" + }, + "LOOMBTC": { + "_default": "2020-01-01" + }, + "LOOMETH": { + "_default": "2020-01-01" + }, + "LOOMBNB": { + "_default": "2020-01-01" + }, + "XRPUSDT": { + "_default": "2020-01-01" + }, + "BCNBTC": { + "_default": "2020-01-01" + }, + "BCNETH": { + "_default": "2020-01-01" + }, + "BCNBNB": { + "_default": "2020-01-01" + }, + "REPBTC": { + "_default": "2020-01-01" + }, + "REPBNB": { + "_default": "2020-01-01" + }, + "BTCTUSD": { + "_default": "2020-01-01" + }, + "TUSDBTC": { + "_default": "2020-01-01" + }, + "ETHTUSD": { + "_default": "2020-01-01" + }, + "TUSDETH": { + "_default": "2020-01-01" + }, + "TUSDBNB": { + "_default": "2020-01-01" + }, + "ZENBTC": { + "_default": "2020-01-01" + }, + "ZENETH": { + "_default": "2020-01-01" + }, + "ZENBNB": { + "_default": "2020-01-01" + }, + "SKYCOINBTC": { + "_default": "2020-01-01" + }, + "SKYCOINETH": { + "_default": "2020-01-01" + }, + "SKYCOINBNB": { + "_default": "2020-01-01" + }, + "EOSUSDT": { + "_default": "2020-01-01" + }, + "EOSBNB": { + "_default": "2020-01-01" + }, + "CVCBTC": { + "_default": "2020-01-01" + }, + "CVCETH": { + "_default": "2020-01-01" + }, + "CVCBNB": { + "_default": "2020-01-01" + }, + "THETABTC": { + "_default": "2020-01-01" + }, + "THETAETH": { + "_default": "2020-01-01" + }, + "THETABNB": { + "_default": "2020-01-01" + }, + "XRPBNB": { + "_default": "2020-01-01" + }, + "TUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDT": { + "_default": "2020-01-01" + }, + "XLMUSDT": { + "_default": "2020-01-01" + }, + "IOTXBTC": { + "_default": "2020-01-01" + }, + "IOTXETH": { + "_default": "2020-01-01" + }, + "QKCBTC": { + "_default": "2020-01-01" + }, + "QKCETH": { + "_default": "2020-01-01" + }, + "AGIBTC": { + "_default": "2020-01-01" + }, + "AGIETH": { + "_default": "2020-01-01" + }, + "AGIBNB": { + "_default": "2020-01-01" + }, + "NXSBTC": { + "_default": "2020-01-01" + }, + "NXSETH": { + "_default": "2020-01-01" + }, + "NXSBNB": { + "_default": "2020-01-01" + }, + "ENJBNB": { + "_default": "2020-01-01" + }, + "DATABTC": { + "_default": "2020-01-01" + }, + "DATAETH": { + "_default": "2020-01-01" + }, + "ONTUSDT": { + "_default": "2020-01-01" + }, + "TRXBNB": { + "_default": "2020-01-01" + }, + "TRXUSDT": { + "_default": "2020-01-01" + }, + "ETCUSDT": { + "_default": "2020-01-01" + }, + "ETCBNB": { + "_default": "2020-01-01" + }, + "ICXUSDT": { + "_default": "2020-01-01" + }, + "SCBTC": { + "_default": "2020-01-01" + }, + "SCETH": { + "_default": "2020-01-01" + }, + "NPXSBTC": { + "_default": "2020-01-01" + }, + "NPXSETH": { + "_default": "2020-01-01" + }, + "VENUSDT": { + "_default": "2020-01-01" + }, + "KEYBTC": { + "_default": "2020-01-01" + }, + "KEYETH": { + "_default": "2020-01-01" + }, + "NASBTC": { + "_default": "2020-01-01" + }, + "NASETH": { + "_default": "2020-01-01" + }, + "NASBNB": { + "_default": "2020-01-01" + }, + "MFTBTC": { + "_default": "2020-01-01" + }, + "MFTETH": { + "_default": "2020-01-01" + }, + "MFTBNB": { + "_default": "2020-01-01" + }, + "DENTBTC": { + "_default": "2020-01-01" + }, + "DENTETH": { + "_default": "2020-01-01" + }, + "ARDRBTC": { + "_default": "2020-01-01" + }, + "ARDRETH": { + "_default": "2020-01-01" + }, + "ARDRBNB": { + "_default": "2020-01-01" + }, + "NULSUSDT": { + "_default": "2020-01-01" + }, + "HOTBTC": { + "_default": "2020-01-01" + }, + "HOTETH": { + "_default": "2020-01-01" + }, + "VETBTC": { + "_default": "2020-01-01" + }, + "VETETH": { + "_default": "2020-01-01" + }, + "VETUSDT": { + "_default": "2020-01-01" + }, + "VETBNB": { + "_default": "2020-01-01" + }, + "DOCKBTC": { + "_default": "2020-01-01" + }, + "DOCKETH": { + "_default": "2020-01-01" + }, + "POLYBTC": { + "_default": "2020-01-01" + }, + "POLYBNB": { + "_default": "2020-01-01" + }, + "PHXBTC": { + "_default": "2020-01-01" + }, + "PHXETH": { + "_default": "2020-01-01" + }, + "PHXBNB": { + "_default": "2020-01-01" + }, + "HCBTC": { + "_default": "2020-01-01" + }, + "HCETH": { + "_default": "2020-01-01" + }, + "GOBTC": { + "_default": "2020-01-01" + }, + "GOBNB": { + "_default": "2020-01-01" + }, + "PAXBTC": { + "_default": "2020-01-01" + }, + "PAXBNB": { + "_default": "2020-01-01" + }, + "PAXUSDT": { + "_default": "2020-01-01" + }, + "PAXETH": { + "_default": "2020-01-01" + }, + "RVNBTC": { + "_default": "2020-01-01" + }, + "DCRBTC": { + "_default": "2020-01-01" + }, + "DCRBNB": { + "_default": "2020-01-01" + }, + "USDCBNB": { + "_default": "2020-01-01" + }, + "MITHBTC": { + "_default": "2020-01-01" + }, + "MITHBNB": { + "_default": "2020-01-01" + }, + "BCHABCBTC": { + "_default": "2020-01-01" + }, + "BCHSVBTC": { + "_default": "2020-01-01" + }, + "BCHABCUSDT": { + "_default": "2020-01-01" + }, + "BCHSVUSDT": { + "_default": "2020-01-01" + }, + "BNBPAX": { + "_default": "2020-01-01" + }, + "BTCPAX": { + "_default": "2020-01-01" + }, + "ETHPAX": { + "_default": "2020-01-01" + }, + "XRPPAX": { + "_default": "2020-01-01" + }, + "EOSPAX": { + "_default": "2020-01-01" + }, + "XLMPAX": { + "_default": "2020-01-01" + }, + "RENBTC": { + "_default": "2020-01-01" + }, + "RENBNB": { + "_default": "2020-01-01" + }, + "BNBTUSD": { + "_default": "2020-01-01" + }, + "XRPTUSD": { + "_default": "2020-01-01" + }, + "EOSTUSD": { + "_default": "2020-01-01" + }, + "XLMTUSD": { + "_default": "2020-01-01" + }, + "BNBUSDC": { + "_default": "2020-01-01" + }, + "BTCUSDC": { + "_default": "2020-01-01" + }, + "ETHUSDC": { + "_default": "2020-01-01" + }, + "XRPUSDC": { + "_default": "2020-01-01" + }, + "EOSUSDC": { + "_default": "2020-01-01" + }, + "XLMUSDC": { + "_default": "2020-01-01" + }, + "USDCUSDT": { + "_default": "2020-01-01" + }, + "ADATUSD": { + "_default": "2020-01-01" + }, + "TRXTUSD": { + "_default": "2020-01-01" + }, + "NEOTUSD": { + "_default": "2020-01-01" + }, + "TRXXRP": { + "_default": "2020-01-01" + }, + "XZCXRP": { + "_default": "2020-01-01" + }, + "PAXTUSD": { + "_default": "2020-01-01" + }, + "USDCTUSD": { + "_default": "2020-01-01" + }, + "USDCPAX": { + "_default": "2020-01-01" + }, + "LINKUSDT": { + "_default": "2020-01-01" + }, + "LINKTUSD": { + "_default": "2020-01-01" + }, + "LINKPAX": { + "_default": "2020-01-01" + }, + "LINKUSDC": { + "_default": "2020-01-01" + }, + "WAVESUSDT": { + "_default": "2020-01-01" + }, + "WAVESTUSD": { + "_default": "2020-01-01" + }, + "WAVESPAX": { + "_default": "2020-01-01" + }, + "WAVESUSDC": { + "_default": "2020-01-01" + }, + "BCHABCTUSD": { + "_default": "2020-01-01" + }, + "BCHABCPAX": { + "_default": "2020-01-01" + }, + "BCHABCUSDC": { + "_default": "2020-01-01" + }, + "BCHSVTUSD": { + "_default": "2020-01-01" + }, + "BCHSVPAX": { + "_default": "2020-01-01" + }, + "BCHSVUSDC": { + "_default": "2020-01-01" + }, + "LTCTUSD": { + "_default": "2020-01-01" + }, + "LTCPAX": { + "_default": "2020-01-01" + }, + "LTCUSDC": { + "_default": "2020-01-01" + }, + "TRXPAX": { + "_default": "2020-01-01" + }, + "TRXUSDC": { + "_default": "2020-01-01" + }, + "BTTBTC": { + "_default": "2020-01-01" + }, + "BTTBNB": { + "_default": "2020-01-01" + }, + "BTTUSDT": { + "_default": "2020-01-01" + }, + "BNBUSDS": { + "_default": "2020-01-01" + }, + "BTCUSDS": { + "_default": "2020-01-01" + }, + "USDSUSDT": { + "_default": "2020-01-01" + }, + "USDSPAX": { + "_default": "2020-01-01" + }, + "USDSTUSD": { + "_default": "2020-01-01" + }, + "USDSUSDC": { + "_default": "2020-01-01" + }, + "BTTPAX": { + "_default": "2020-01-01" + }, + "BTTTUSD": { + "_default": "2020-01-01" + }, + "BTTUSDC": { + "_default": "2020-01-01" + }, + "ONGBNB": { + "_default": "2020-01-01" + }, + "ONGBTC": { + "_default": "2020-01-01" + }, + "ONGUSDT": { + "_default": "2020-01-01" + }, + "HOTBNB": { + "_default": "2020-01-01" + }, + "HOTUSDT": { + "_default": "2020-01-01" + }, + "ZILUSDT": { + "_default": "2020-01-01" + }, + "ZRXBNB": { + "_default": "2020-01-01" + }, + "ZRXUSDT": { + "_default": "2020-01-01" + }, + "FETBNB": { + "_default": "2020-01-01" + }, + "FETBTC": { + "_default": "2020-01-01" + }, + "FETUSDT": { + "_default": "2020-01-01" + }, + "BATUSDT": { + "_default": "2020-01-01" + }, + "XMRBNB": { + "_default": "2020-01-01" + }, + "XMRUSDT": { + "_default": "2020-01-01" + }, + "ZECBNB": { + "_default": "2020-01-01" + }, + "ZECUSDT": { + "_default": "2020-01-01" + }, + "ZECPAX": { + "_default": "2020-01-01" + }, + "ZECTUSD": { + "_default": "2020-01-01" + }, + "ZECUSDC": { + "_default": "2020-01-01" + }, + "IOSTUSDT": { + "_default": "2020-01-01" + }, + "CELRBNB": { + "_default": "2020-01-01" + }, + "CELRBTC": { + "_default": "2020-01-01" + }, + "CELRUSDT": { + "_default": "2020-01-01" + }, + "ADAPAX": { + "_default": "2020-01-01" + }, + "ADAUSDC": { + "_default": "2020-01-01" + }, + "NEOPAX": { + "_default": "2020-01-01" + }, + "NEOUSDC": { + "_default": "2020-01-01" + }, + "DASHBNB": { + "_default": "2020-01-01" + }, + "DASHUSDT": { + "_default": "2020-01-01" + }, + "NANOUSDT": { + "_default": "2020-01-01" + }, + "OMGBNB": { + "_default": "2020-01-01" + }, + "OMGUSDT": { + "_default": "2020-01-01" + }, + "THETAUSDT": { + "_default": "2020-01-01" + }, + "ENJUSDT": { + "_default": "2020-01-01" + }, + "MITHUSDT": { + "_default": "2020-01-01" + }, + "MATICBNB": { + "_default": "2020-01-01" + }, + "MATICBTC": { + "_default": "2020-01-01" + }, + "MATICUSDT": { + "_default": "2020-01-01" + }, + "ATOMBNB": { + "_default": "2020-01-01" + }, + "ATOMBTC": { + "_default": "2020-01-01" + }, + "ATOMUSDT": { + "_default": "2020-01-01" + }, + "ATOMUSDC": { + "_default": "2020-01-01" + }, + "ATOMPAX": { + "_default": "2020-01-01" + }, + "ATOMTUSD": { + "_default": "2020-01-01" + }, + "ETCUSDC": { + "_default": "2020-01-01" + }, + "ETCPAX": { + "_default": "2020-01-01" + }, + "ETCTUSD": { + "_default": "2020-01-01" + }, + "BATUSDC": { + "_default": "2020-01-01" + }, + "BATPAX": { + "_default": "2020-01-01" + }, + "BATTUSD": { + "_default": "2020-01-01" + }, + "PHBBNB": { + "_default": "2020-01-01" + }, + "PHBBTC": { + "_default": "2020-01-01" + }, + "PHBUSDC": { + "_default": "2020-01-01" + }, + "PHBTUSD": { + "_default": "2020-01-01" + }, + "PHBPAX": { + "_default": "2020-01-01" + }, + "TFUELBNB": { + "_default": "2020-01-01" + }, + "TFUELBTC": { + "_default": "2020-01-01" + }, + "TFUELUSDT": { + "_default": "2020-01-01" + }, + "TFUELUSDC": { + "_default": "2020-01-01" + }, + "TFUELTUSD": { + "_default": "2020-01-01" + }, + "TFUELPAX": { + "_default": "2020-01-01" + }, + "ONEBNB": { + "_default": "2020-01-01" + }, + "ONEBTC": { + "_default": "2020-01-01" + }, + "ONEUSDT": { + "_default": "2020-01-01" + }, + "ONETUSD": { + "_default": "2020-01-01" + }, + "ONEPAX": { + "_default": "2020-01-01" + }, + "ONEUSDC": { + "_default": "2020-01-01" + }, + "FTMBNB": { + "_default": "2020-01-01" + }, + "FTMBTC": { + "_default": "2020-01-01" + }, + "FTMUSDT": { + "_default": "2020-01-01" + }, + "FTMTUSD": { + "_default": "2020-01-01" + }, + "FTMPAX": { + "_default": "2020-01-01" + }, + "FTMUSDC": { + "_default": "2020-01-01" + }, + "BTCBBTC": { + "_default": "2020-01-01" + }, + "BCPTTUSD": { + "_default": "2020-01-01" + }, + "BCPTPAX": { + "_default": "2020-01-01" + }, + "BCPTUSDC": { + "_default": "2020-01-01" + }, + "ALGOBNB": { + "_default": "2020-01-01" + }, + "ALGOBTC": { + "_default": "2020-01-01" + }, + "ALGOUSDT": { + "_default": "2020-01-01" + }, + "ALGOTUSD": { + "_default": "2020-01-01" + }, + "ALGOPAX": { + "_default": "2020-01-01" + }, + "ALGOUSDC": { + "_default": "2020-01-01" + }, + "USDSBUSDT": { + "_default": "2020-01-01" + }, + "USDSBUSDS": { + "_default": "2020-01-01" + }, + "GTOUSDT": { + "_default": "2020-01-01" + }, + "GTOPAX": { + "_default": "2020-01-01" + }, + "GTOTUSD": { + "_default": "2020-01-01" + }, + "GTOUSDC": { + "_default": "2020-01-01" + }, + "ERDBNB": { + "_default": "2020-01-01" + }, + "ERDBTC": { + "_default": "2020-01-01" + }, + "ERDUSDT": { + "_default": "2020-01-01" + }, + "ERDPAX": { + "_default": "2020-01-01" + }, + "ERDUSDC": { + "_default": "2020-01-01" + }, + "DOGEBNB": { + "_default": "2020-01-01" + }, + "DOGEBTC": { + "_default": "2020-01-01" + }, + "DOGEUSDT": { + "_default": "2020-01-01" + }, + "DOGEPAX": { + "_default": "2020-01-01" + }, + "DOGEUSDC": { + "_default": "2020-01-01" + }, + "DUSKBNB": { + "_default": "2020-01-01" + }, + "DUSKBTC": { + "_default": "2020-01-01" + }, + "DUSKUSDT": { + "_default": "2020-01-01" + }, + "DUSKUSDC": { + "_default": "2020-01-01" + }, + "DUSKPAX": { + "_default": "2020-01-01" + }, + "BGBPUSDC": { + "_default": "2020-01-01" + }, + "ANKRBNB": { + "_default": "2020-01-01" + }, + "ANKRBTC": { + "_default": "2020-01-01" + }, + "ANKRUSDT": { + "_default": "2020-01-01" + }, + "ANKRTUSD": { + "_default": "2020-01-01" + }, + "ANKRPAX": { + "_default": "2020-01-01" + }, + "ANKRUSDC": { + "_default": "2020-01-01" + }, + "ONTPAX": { + "_default": "2020-01-01" + }, + "ONTUSDC": { + "_default": "2020-01-01" + }, + "WINBNB": { + "_default": "2020-01-01" + }, + "WINBTC": { + "_default": "2020-01-01" + }, + "WINUSDT": { + "_default": "2020-01-01" + }, + "WINUSDC": { + "_default": "2020-01-01" + }, + "COSBNB": { + "_default": "2020-01-01" + }, + "COSBTC": { + "_default": "2020-01-01" + }, + "COSUSDT": { + "_default": "2020-01-01" + }, + "TUSDBTUSD": { + "_default": "2020-01-01" + }, + "NPXSUSDT": { + "_default": "2020-01-01" + }, + "NPXSUSDC": { + "_default": "2020-01-01" + }, + "COCOSBNB": { + "_default": "2020-01-01" + }, + "COCOSBTC": { + "_default": "2020-01-01" + }, + "COCOSUSDT": { + "_default": "2020-01-01" + }, + "MTLUSDT": { + "_default": "2020-01-01" + }, + "TOMOBNB": { + "_default": "2020-01-01" + }, + "TOMOBTC": { + "_default": "2020-01-01" + }, + "TOMOUSDT": { + "_default": "2020-01-01" + }, + "TOMOUSDC": { + "_default": "2020-01-01" + }, + "PERLBNB": { + "_default": "2020-01-01" + }, + "PERLBTC": { + "_default": "2020-01-01" + }, + "PERLUSDC": { + "_default": "2020-01-01" + }, + "PERLUSDT": { + "_default": "2020-01-01" + }, + "DENTUSDT": { + "_default": "2020-01-01" + }, + "MFTUSDT": { + "_default": "2020-01-01" + }, + "KEYUSDT": { + "_default": "2020-01-01" + }, + "STORMUSDT": { + "_default": "2020-01-01" + }, + "DOCKUSDT": { + "_default": "2020-01-01" + }, + "WANUSDT": { + "_default": "2020-01-01" + }, + "FUNUSDT": { + "_default": "2020-01-01" + }, + "CVCUSDT": { + "_default": "2020-01-01" + }, + "BTTTRX": { + "_default": "2020-01-01" + }, + "WINTRX": { + "_default": "2020-01-01" + }, + "CHZBNB": { + "_default": "2020-01-01" + }, + "CHZBTC": { + "_default": "2020-01-01" + }, + "CHZUSDT": { + "_default": "2020-01-01" + }, + "BANDBNB": { + "_default": "2020-01-01" + }, + "BANDBTC": { + "_default": "2020-01-01" + }, + "BANDUSDT": { + "_default": "2020-01-01" + }, + "BNBBUSD": { + "_default": "2020-01-01" + }, + "BTCBUSD": { + "_default": "2020-01-01" + }, + "BUSDUSDT": { + "_default": "2020-01-01" + }, + "BEAMBNB": { + "_default": "2020-01-01" + }, + "BEAMBTC": { + "_default": "2020-01-01" + }, + "BEAMUSDT": { + "_default": "2020-01-01" + }, + "XTZBNB": { + "_default": "2020-01-01" + }, + "XTZBTC": { + "_default": "2020-01-01" + }, + "XTZUSDT": { + "_default": "2020-01-01" + }, + "RENUSDT": { + "_default": "2020-01-01" + }, + "RVNUSDT": { + "_default": "2020-01-01" + }, + "HCUSDT": { + "_default": "2020-01-01" + }, + "HBARBNB": { + "_default": "2020-01-01" + }, + "HBARBTC": { + "_default": "2020-01-01" + }, + "HBARUSDT": { + "_default": "2020-01-01" + }, + "NKNBNB": { + "_default": "2020-01-01" + }, + "NKNBTC": { + "_default": "2020-01-01" + }, + "NKNUSDT": { + "_default": "2020-01-01" + }, + "XRPBUSD": { + "_default": "2020-01-01" + }, + "ETHBUSD": { + "_default": "2020-01-01" + }, + "BCHABCBUSD": { + "_default": "2020-01-01" + }, + "LTCBUSD": { + "_default": "2020-01-01" + }, + "LINKBUSD": { + "_default": "2020-01-01" + }, + "ETCBUSD": { + "_default": "2020-01-01" + }, + "STXBNB": { + "_default": "2020-01-01" + }, + "STXBTC": { + "_default": "2020-01-01" + }, + "STXUSDT": { + "_default": "2020-01-01" + }, + "KAVABNB": { + "_default": "2020-01-01" + }, + "KAVABTC": { + "_default": "2020-01-01" + }, + "KAVAUSDT": { + "_default": "2020-01-01" + }, + "BUSDNGN": { + "_default": "2020-01-01" + }, + "BNBNGN": { + "_default": "2020-01-01" + }, + "BTCNGN": { + "_default": "2020-01-01" + }, + "ARPABNB": { + "_default": "2020-01-01" + }, + "ARPABTC": { + "_default": "2020-01-01" + }, + "ARPAUSDT": { + "_default": "2020-01-01" + }, + "TRXBUSD": { + "_default": "2020-01-01" + }, + "EOSBUSD": { + "_default": "2020-01-01" + }, + "IOTXUSDT": { + "_default": "2020-01-01" + }, + "RLCUSDT": { + "_default": "2020-01-01" + }, + "MCOUSDT": { + "_default": "2020-01-01" + }, + "XLMBUSD": { + "_default": "2020-01-01" + }, + "ADABUSD": { + "_default": "2020-01-01" + }, + "CTXCBNB": { + "_default": "2020-01-01" + }, + "CTXCBTC": { + "_default": "2020-01-01" + }, + "CTXCUSDT": { + "_default": "2020-01-01" + }, + "BCHBNB": { + "_default": "2020-01-01" + }, + "BCHBTC": { + "_default": "2020-01-01" + }, + "BCHUSDT": { + "_default": "2020-01-01" + }, + "BCHUSDC": { + "_default": "2020-01-01" + }, + "BCHTUSD": { + "_default": "2020-01-01" + }, + "BCHPAX": { + "_default": "2020-01-01" + }, + "BCHBUSD": { + "_default": "2020-01-01" + }, + "BTCRUB": { + "_default": "2020-01-01" + }, + "ETHRUB": { + "_default": "2020-01-01" + }, + "XRPRUB": { + "_default": "2020-01-01" + }, + "BNBRUB": { + "_default": "2020-01-01" + }, + "TROYBNB": { + "_default": "2020-01-01" + }, + "TROYBTC": { + "_default": "2020-01-01" + }, + "TROYUSDT": { + "_default": "2020-01-01" + }, + "BUSDRUB": { + "_default": "2020-01-01" + }, + "QTUMBUSD": { + "_default": "2020-01-01" + }, + "VETBUSD": { + "_default": "2020-01-01" + }, + "VITEBNB": { + "_default": "2020-01-01" + }, + "VITEBTC": { + "_default": "2020-01-01" + }, + "VITEUSDT": { + "_default": "2020-01-01" + }, + "FTTBNB": { + "_default": "2020-01-01" + }, + "FTTBTC": { + "_default": "2020-01-01" + }, + "FTTUSDT": { + "_default": "2020-01-01" + }, + "BTCTRY": { + "_default": "2020-01-01" + }, + "BNBTRY": { + "_default": "2020-01-01" + }, + "BUSDTRY": { + "_default": "2020-01-01" + }, + "ETHTRY": { + "_default": "2020-01-01" + }, + "XRPTRY": { + "_default": "2020-01-01" + }, + "USDTTRY": { + "_default": "2020-01-01" + }, + "USDTRUB": { + "_default": "2020-01-01" + }, + "BTCEUR": { + "_default": "2020-01-01" + }, + "ETHEUR": { + "_default": "2020-01-01" + }, + "BNBEUR": { + "_default": "2020-01-01" + }, + "XRPEUR": { + "_default": "2020-01-01" + }, + "EURBUSD": { + "_default": "2020-01-01" + }, + "EURUSDT": { + "_default": "2020-01-01" + }, + "OGNBNB": { + "_default": "2020-01-01" + }, + "OGNBTC": { + "_default": "2020-01-01" + }, + "OGNUSDT": { + "_default": "2020-01-01" + }, + "DREPBNB": { + "_default": "2020-01-01" + }, + "DREPBTC": { + "_default": "2020-01-01" + }, + "DREPUSDT": { + "_default": "2020-01-01" + }, + "BULLUSDT": { + "_default": "2020-01-01" + }, + "BULLBUSD": { + "_default": "2020-01-01" + }, + "BEARUSDT": { + "_default": "2020-01-01" + }, + "BEARBUSD": { + "_default": "2020-01-01" + }, + "ETHBULLUSDT": { + "_default": "2020-01-01" + }, + "ETHBULLBUSD": { + "_default": "2020-01-01" + }, + "ETHBEARUSDT": { + "_default": "2020-01-01" + }, + "ETHBEARBUSD": { + "_default": "2020-01-01" + }, + "TCTBNB": { + "_default": "2020-01-01" + }, + "TCTBTC": { + "_default": "2020-01-01" + }, + "TCTUSDT": { + "_default": "2020-01-01" + }, + "WRXBNB": { + "_default": "2020-01-01" + }, + "WRXBTC": { + "_default": "2020-01-01" + }, + "WRXUSDT": { + "_default": "2020-01-01" + }, + "ICXBUSD": { + "_default": "2020-01-01" + }, + "BTSUSDT": { + "_default": "2020-01-01" + }, + "BTSBUSD": { + "_default": "2020-01-01" + }, + "LSKUSDT": { + "_default": "2020-01-01" + }, + "BNTUSDT": { + "_default": "2020-01-01" + }, + "BNTBUSD": { + "_default": "2020-01-01" + }, + "LTOBNB": { + "_default": "2020-01-01" + }, + "LTOBTC": { + "_default": "2020-01-01" + }, + "LTOUSDT": { + "_default": "2020-01-01" + }, + "ATOMBUSD": { + "_default": "2020-01-01" + }, + "DASHBUSD": { + "_default": "2020-01-01" + }, + "NEOBUSD": { + "_default": "2020-01-01" + }, + "WAVESBUSD": { + "_default": "2020-01-01" + }, + "XTZBUSD": { + "_default": "2020-01-01" + }, + "EOSBULLUSDT": { + "_default": "2020-01-01" + }, + "EOSBULLBUSD": { + "_default": "2020-01-01" + }, + "EOSBEARUSDT": { + "_default": "2020-01-01" + }, + "EOSBEARBUSD": { + "_default": "2020-01-01" + }, + "XRPBULLUSDT": { + "_default": "2020-01-01" + }, + "XRPBULLBUSD": { + "_default": "2020-01-01" + }, + "XRPBEARUSDT": { + "_default": "2020-01-01" + }, + "XRPBEARBUSD": { + "_default": "2020-01-01" + }, + "BATBUSD": { + "_default": "2020-01-01" + }, + "ENJBUSD": { + "_default": "2020-01-01" + }, + "NANOBUSD": { + "_default": "2020-01-01" + }, + "ONTBUSD": { + "_default": "2020-01-01" + }, + "RVNBUSD": { + "_default": "2020-01-01" + }, + "STRATBUSD": { + "_default": "2020-01-01" + }, + "STRATBNB": { + "_default": "2020-01-01" + }, + "STRATUSDT": { + "_default": "2020-01-01" + }, + "AIONBUSD": { + "_default": "2020-01-01" + }, + "AIONUSDT": { + "_default": "2020-01-01" + }, + "MBLBNB": { + "_default": "2020-01-01" + }, + "MBLBTC": { + "_default": "2020-01-01" + }, + "MBLUSDT": { + "_default": "2020-01-01" + }, + "COTIBNB": { + "_default": "2020-01-01" + }, + "COTIBTC": { + "_default": "2020-01-01" + }, + "COTIUSDT": { + "_default": "2020-01-01" + }, + "ALGOBUSD": { + "_default": "2020-01-01" + }, + "BTTBUSD": { + "_default": "2020-01-01" + }, + "TOMOBUSD": { + "_default": "2020-01-01" + }, + "XMRBUSD": { + "_default": "2020-01-01" + }, + "ZECBUSD": { + "_default": "2020-01-01" + }, + "BNBBULLUSDT": { + "_default": "2020-01-01" + }, + "BNBBULLBUSD": { + "_default": "2020-01-01" + }, + "BNBBEARUSDT": { + "_default": "2020-01-01" + }, + "BNBBEARBUSD": { + "_default": "2020-01-01" + }, + "STPTBNB": { + "_default": "2020-01-01" + }, + "STPTBTC": { + "_default": "2020-01-01" + }, + "STPTUSDT": { + "_default": "2020-01-01" + }, + "BTCZAR": { + "_default": "2020-01-01" + }, + "ETHZAR": { + "_default": "2020-01-01" + }, + "BNBZAR": { + "_default": "2020-01-01" + }, + "USDTZAR": { + "_default": "2020-01-01" + }, + "BUSDZAR": { + "_default": "2020-01-01" + }, + "BTCBKRW": { + "_default": "2020-01-01" + }, + "ETHBKRW": { + "_default": "2020-01-01" + }, + "BNBBKRW": { + "_default": "2020-01-01" + }, + "WTCUSDT": { + "_default": "2020-01-01" + }, + "DATABUSD": { + "_default": "2020-01-01" + }, + "DATAUSDT": { + "_default": "2020-01-01" + }, + "XZCUSDT": { + "_default": "2020-01-01" + }, + "SOLBNB": { + "_default": "2020-01-01" + }, + "SOLBTC": { + "_default": "2020-01-01" + }, + "SOLUSDT": { + "_default": "2020-01-01" + }, + "SOLBUSD": { + "_default": "2020-01-01" + }, + "BTCIDRT": { + "_default": "2020-01-01" + }, + "BNBIDRT": { + "_default": "2020-01-01" + }, + "USDTIDRT": { + "_default": "2020-01-01" + }, + "BUSDIDRT": { + "_default": "2020-01-01" + }, + "CTSIBTC": { + "_default": "2020-01-01" + }, + "CTSIUSDT": { + "_default": "2020-01-01" + }, + "CTSIBNB": { + "_default": "2020-01-01" + }, + "CTSIBUSD": { + "_default": "2020-01-01" + }, + "HIVEBNB": { + "_default": "2020-01-01" + }, + "HIVEBTC": { + "_default": "2020-01-01" + }, + "HIVEUSDT": { + "_default": "2020-01-01" + }, + "CHRBNB": { + "_default": "2020-01-01" + }, + "CHRBTC": { + "_default": "2020-01-01" + }, + "CHRUSDT": { + "_default": "2020-01-01" + }, + "BTCUPUSDT": { + "_default": "2020-01-01" + }, + "BTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "GXSUSDT": { + "_default": "2020-01-01" + }, + "ARDRUSDT": { + "_default": "2020-01-01" + }, + "ERDBUSD": { + "_default": "2020-01-01" + }, + "LENDUSDT": { + "_default": "2020-01-01" + }, + "HBARBUSD": { + "_default": "2020-01-01" + }, + "MATICBUSD": { + "_default": "2020-01-01" + }, + "WRXBUSD": { + "_default": "2020-01-01" + }, + "ZILBUSD": { + "_default": "2020-01-01" + }, + "MDTBNB": { + "_default": "2020-01-01" + }, + "MDTBTC": { + "_default": "2020-01-01" + }, + "MDTUSDT": { + "_default": "2020-01-01" + }, + "STMXBTC": { + "_default": "2020-01-01" + }, + "STMXETH": { + "_default": "2020-01-01" + }, + "STMXUSDT": { + "_default": "2020-01-01" + }, + "KNCBUSD": { + "_default": "2020-01-01" + }, + "KNCUSDT": { + "_default": "2020-01-01" + }, + "REPBUSD": { + "_default": "2020-01-01" + }, + "REPUSDT": { + "_default": "2020-01-01" + }, + "LRCBUSD": { + "_default": "2020-01-01" + }, + "LRCUSDT": { + "_default": "2020-01-01" + }, + "IQBNB": { + "_default": "2020-01-01" + }, + "IQBUSD": { + "_default": "2020-01-01" + }, + "PNTBTC": { + "_default": "2020-01-01" + }, + "PNTUSDT": { + "_default": "2020-01-01" + }, + "BTCGBP": { + "_default": "2020-01-01" + }, + "ETHGBP": { + "_default": "2020-01-01" + }, + "XRPGBP": { + "_default": "2020-01-01" + }, + "BNBGBP": { + "_default": "2020-01-01" + }, + "GBPBUSD": { + "_default": "2020-01-01" + }, + "DGBBTC": { + "_default": "2020-01-01" + }, + "DGBBUSD": { + "_default": "2020-01-01" + }, + "BTCUAH": { + "_default": "2020-01-01" + }, + "USDTUAH": { + "_default": "2020-01-01" + }, + "COMPBTC": { + "_default": "2020-01-01" + }, + "COMPBNB": { + "_default": "2020-01-01" + }, + "COMPBUSD": { + "_default": "2020-01-01" + }, + "COMPUSDT": { + "_default": "2020-01-01" + }, + "BTCBIDR": { + "_default": "2020-01-01" + }, + "ETHBIDR": { + "_default": "2020-01-01" + }, + "BNBBIDR": { + "_default": "2020-01-01" + }, + "BUSDBIDR": { + "_default": "2020-01-01" + }, + "USDTBIDR": { + "_default": "2020-01-01" + }, + "BKRWUSDT": { + "_default": "2020-01-01" + }, + "BKRWBUSD": { + "_default": "2020-01-01" + }, + "SCUSDT": { + "_default": "2020-01-01" + }, + "ZENUSDT": { + "_default": "2020-01-01" + }, + "SXPBTC": { + "_default": "2020-01-01" + }, + "SXPBNB": { + "_default": "2020-01-01" + }, + "SXPBUSD": { + "_default": "2020-01-01" + }, + "SNXBTC": { + "_default": "2020-01-01" + }, + "SNXBNB": { + "_default": "2020-01-01" + }, + "SNXBUSD": { + "_default": "2020-01-01" + }, + "SNXUSDT": { + "_default": "2020-01-01" + }, + "ETHUPUSDT": { + "_default": "2020-01-01" + }, + "ETHDOWNUSDT": { + "_default": "2020-01-01" + }, + "ADAUPUSDT": { + "_default": "2020-01-01" + }, + "ADADOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKUPUSDT": { + "_default": "2020-01-01" + }, + "LINKDOWNUSDT": { + "_default": "2020-01-01" + }, + "VTHOBNB": { + "_default": "2020-01-01" + }, + "VTHOBUSD": { + "_default": "2020-01-01" + }, + "VTHOUSDT": { + "_default": "2020-01-01" + }, + "DCRBUSD": { + "_default": "2020-01-01" + }, + "DGBUSDT": { + "_default": "2020-01-01" + }, + "GBPUSDT": { + "_default": "2020-01-01" + }, + "STORJBUSD": { + "_default": "2020-01-01" + }, + "SXPUSDT": { + "_default": "2020-01-01" + }, + "IRISBNB": { + "_default": "2020-01-01" + }, + "IRISBTC": { + "_default": "2020-01-01" + }, + "IRISBUSD": { + "_default": "2020-01-01" + }, + "MKRBNB": { + "_default": "2020-01-01" + }, + "MKRBTC": { + "_default": "2020-01-01" + }, + "MKRUSDT": { + "_default": "2020-01-01" + }, + "MKRBUSD": { + "_default": "2020-01-01" + }, + "DAIBNB": { + "_default": "2020-01-01" + }, + "DAIBTC": { + "_default": "2020-01-01" + }, + "DAIUSDT": { + "_default": "2020-01-01" + }, + "DAIBUSD": { + "_default": "2020-01-01" + }, + "RUNEBNB": { + "_default": "2020-01-01" + }, + "RUNEBTC": { + "_default": "2020-01-01" + }, + "RUNEBUSD": { + "_default": "2020-01-01" + }, + "MANABUSD": { + "_default": "2020-01-01" + }, + "DOGEBUSD": { + "_default": "2020-01-01" + }, + "LENDBUSD": { + "_default": "2020-01-01" + }, + "ZRXBUSD": { + "_default": "2020-01-01" + }, + "DCRUSDT": { + "_default": "2020-01-01" + }, + "STORJUSDT": { + "_default": "2020-01-01" + }, + "XRPBKRW": { + "_default": "2020-01-01" + }, + "ADABKRW": { + "_default": "2020-01-01" + }, + "BTCAUD": { + "_default": "2020-01-01" + }, + "ETHAUD": { + "_default": "2020-01-01" + }, + "AUDBUSD": { + "_default": "2020-01-01" + }, + "FIOBNB": { + "_default": "2020-01-01" + }, + "FIOBTC": { + "_default": "2020-01-01" + }, + "FIOBUSD": { + "_default": "2020-01-01" + }, + "BNBUPUSDT": { + "_default": "2020-01-01" + }, + "BNBDOWNUSDT": { + "_default": "2020-01-01" + }, + "XTZUPUSDT": { + "_default": "2020-01-01" + }, + "XTZDOWNUSDT": { + "_default": "2020-01-01" + }, + "AVABNB": { + "_default": "2020-01-01" + }, + "AVABTC": { + "_default": "2020-01-01" + }, + "AVABUSD": { + "_default": "2020-01-01" + }, + "USDTBKRW": { + "_default": "2020-01-01" + }, + "BUSDBKRW": { + "_default": "2020-01-01" + }, + "IOTABUSD": { + "_default": "2020-01-01" + }, + "MANAUSDT": { + "_default": "2020-01-01" + }, + "XRPAUD": { + "_default": "2020-01-01" + }, + "BNBAUD": { + "_default": "2020-01-01" + }, + "AUDUSDT": { + "_default": "2020-01-01" + }, + "BALBNB": { + "_default": "2020-01-01" + }, + "BALBTC": { + "_default": "2020-01-01" + }, + "BALBUSD": { + "_default": "2020-01-01" + }, + "YFIBNB": { + "_default": "2020-01-01" + }, + "YFIBTC": { + "_default": "2020-01-01" + }, + "YFIBUSD": { + "_default": "2020-01-01" + }, + "YFIUSDT": { + "_default": "2020-01-01" + }, + "BLZBUSD": { + "_default": "2020-01-01" + }, + "KMDBUSD": { + "_default": "2020-01-01" + }, + "BALUSDT": { + "_default": "2020-01-01" + }, + "BLZUSDT": { + "_default": "2020-01-01" + }, + "IRISUSDT": { + "_default": "2020-01-01" + }, + "KMDUSDT": { + "_default": "2020-01-01" + }, + "BTCDAI": { + "_default": "2020-01-01" + }, + "ETHDAI": { + "_default": "2020-01-01" + }, + "BNBDAI": { + "_default": "2020-01-01" + }, + "USDTDAI": { + "_default": "2020-01-01" + }, + "BUSDDAI": { + "_default": "2020-01-01" + }, + "JSTBNB": { + "_default": "2020-01-01" + }, + "JSTBTC": { + "_default": "2020-01-01" + }, + "JSTBUSD": { + "_default": "2020-01-01" + }, + "JSTUSDT": { + "_default": "2020-01-01" + }, + "SRMBNB": { + "_default": "2020-01-01" + }, + "SRMBTC": { + "_default": "2020-01-01" + }, + "SRMBUSD": { + "_default": "2020-01-01" + }, + "SRMUSDT": { + "_default": "2020-01-01" + }, + "ANTBNB": { + "_default": "2020-01-01" + }, + "ANTBTC": { + "_default": "2020-01-01" + }, + "ANTBUSD": { + "_default": "2020-01-01" + }, + "ANTUSDT": { + "_default": "2020-01-01" + }, + "CRVBNB": { + "_default": "2020-01-01" + }, + "CRVBTC": { + "_default": "2020-01-01" + }, + "CRVBUSD": { + "_default": "2020-01-01" + }, + "CRVUSDT": { + "_default": "2020-01-01" + }, + "SANDBNB": { + "_default": "2020-01-01" + }, + "SANDBTC": { + "_default": "2020-01-01" + }, + "SANDUSDT": { + "_default": "2020-01-01" + }, + "SANDBUSD": { + "_default": "2020-01-01" + }, + "OCEANBNB": { + "_default": "2020-01-01" + }, + "OCEANBTC": { + "_default": "2020-01-01" + }, + "OCEANBUSD": { + "_default": "2020-01-01" + }, + "OCEANUSDT": { + "_default": "2020-01-01" + }, + "NMRBTC": { + "_default": "2020-01-01" + }, + "NMRBUSD": { + "_default": "2020-01-01" + }, + "NMRUSDT": { + "_default": "2020-01-01" + }, + "DOTBNB": { + "_default": "2020-01-01" + }, + "DOTBTC": { + "_default": "2020-01-01" + }, + "DOTBUSD": { + "_default": "2020-01-01" + }, + "DOTUSDT": { + "_default": "2020-01-01" + }, + "LUNABNB": { + "_default": "2020-01-01" + }, + "LUNABTC": { + "_default": "2020-01-01" + }, + "LUNABUSD": { + "_default": "2020-01-01" + }, + "LUNAUSDT": { + "_default": "2020-01-01" + }, + "IDEXBTC": { + "_default": "2020-01-01" + }, + "IDEXBUSD": { + "_default": "2020-01-01" + }, + "RSRBNB": { + "_default": "2020-01-01" + }, + "RSRBTC": { + "_default": "2020-01-01" + }, + "RSRBUSD": { + "_default": "2020-01-01" + }, + "RSRUSDT": { + "_default": "2020-01-01" + }, + "PAXGBNB": { + "_default": "2020-01-01" + }, + "PAXGBTC": { + "_default": "2020-01-01" + }, + "PAXGBUSD": { + "_default": "2020-01-01" + }, + "PAXGUSDT": { + "_default": "2020-01-01" + }, + "WNXMBNB": { + "_default": "2020-01-01" + }, + "WNXMBTC": { + "_default": "2020-01-01" + }, + "WNXMBUSD": { + "_default": "2020-01-01" + }, + "WNXMUSDT": { + "_default": "2020-01-01" + }, + "TRBBNB": { + "_default": "2020-01-01" + }, + "TRBBTC": { + "_default": "2020-01-01" + }, + "TRBBUSD": { + "_default": "2020-01-01" + }, + "TRBUSDT": { + "_default": "2020-01-01" + }, + "ETHNGN": { + "_default": "2020-01-01" + }, + "DOTBIDR": { + "_default": "2020-01-01" + }, + "LINKAUD": { + "_default": "2020-01-01" + }, + "SXPAUD": { + "_default": "2020-01-01" + }, + "BZRXBNB": { + "_default": "2020-01-01" + }, + "BZRXBTC": { + "_default": "2020-01-01" + }, + "BZRXBUSD": { + "_default": "2020-01-01" + }, + "BZRXUSDT": { + "_default": "2020-01-01" + }, + "WBTCBTC": { + "_default": "2020-01-01" + }, + "WBTCETH": { + "_default": "2020-01-01" + }, + "SUSHIBNB": { + "_default": "2020-01-01" + }, + "SUSHIBTC": { + "_default": "2020-01-01" + }, + "SUSHIBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUSDT": { + "_default": "2020-01-01" + }, + "YFIIBNB": { + "_default": "2020-01-01" + }, + "YFIIBTC": { + "_default": "2020-01-01" + }, + "YFIIBUSD": { + "_default": "2020-01-01" + }, + "YFIIUSDT": { + "_default": "2020-01-01" + }, + "KSMBNB": { + "_default": "2020-01-01" + }, + "KSMBTC": { + "_default": "2020-01-01" + }, + "KSMBUSD": { + "_default": "2020-01-01" + }, + "KSMUSDT": { + "_default": "2020-01-01" + }, + "EGLDBNB": { + "_default": "2020-01-01" + }, + "EGLDBTC": { + "_default": "2020-01-01" + }, + "EGLDBUSD": { + "_default": "2020-01-01" + }, + "EGLDUSDT": { + "_default": "2020-01-01" + }, + "DIABNB": { + "_default": "2020-01-01" + }, + "DIABTC": { + "_default": "2020-01-01" + }, + "DIABUSD": { + "_default": "2020-01-01" + }, + "DIAUSDT": { + "_default": "2020-01-01" + }, + "RUNEUSDT": { + "_default": "2020-01-01" + }, + "FIOUSDT": { + "_default": "2020-01-01" + }, + "UMABTC": { + "_default": "2020-01-01" + }, + "UMAUSDT": { + "_default": "2020-01-01" + }, + "EOSUPUSDT": { + "_default": "2020-01-01" + }, + "EOSDOWNUSDT": { + "_default": "2020-01-01" + }, + "TRXUPUSDT": { + "_default": "2020-01-01" + }, + "TRXDOWNUSDT": { + "_default": "2020-01-01" + }, + "XRPUPUSDT": { + "_default": "2020-01-01" + }, + "XRPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTUPUSDT": { + "_default": "2020-01-01" + }, + "DOTDOWNUSDT": { + "_default": "2020-01-01" + }, + "SRMBIDR": { + "_default": "2020-01-01" + }, + "ONEBIDR": { + "_default": "2020-01-01" + }, + "LINKTRY": { + "_default": "2020-01-01" + }, + "USDTNGN": { + "_default": "2020-01-01" + }, + "BELBNB": { + "_default": "2020-01-01" + }, + "BELBTC": { + "_default": "2020-01-01" + }, + "BELBUSD": { + "_default": "2020-01-01" + }, + "BELUSDT": { + "_default": "2020-01-01" + }, + "WINGBNB": { + "_default": "2020-01-01" + }, + "WINGBTC": { + "_default": "2020-01-01" + }, + "SWRVBNB": { + "_default": "2020-01-01" + }, + "SWRVBUSD": { + "_default": "2020-01-01" + }, + "WINGBUSD": { + "_default": "2020-01-01" + }, + "WINGUSDT": { + "_default": "2020-01-01" + }, + "LTCUPUSDT": { + "_default": "2020-01-01" + }, + "LTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "LENDBKRW": { + "_default": "2020-01-01" + }, + "SXPEUR": { + "_default": "2020-01-01" + }, + "CREAMBNB": { + "_default": "2020-01-01" + }, + "CREAMBUSD": { + "_default": "2020-01-01" + }, + "UNIBNB": { + "_default": "2020-01-01" + }, + "UNIBTC": { + "_default": "2020-01-01" + }, + "UNIBUSD": { + "_default": "2020-01-01" + }, + "UNIUSDT": { + "_default": "2020-01-01" + }, + "NBSBTC": { + "_default": "2020-01-01" + }, + "NBSUSDT": { + "_default": "2020-01-01" + }, + "OXTBTC": { + "_default": "2020-01-01" + }, + "OXTUSDT": { + "_default": "2020-01-01" + }, + "SUNBTC": { + "_default": "2020-01-01" + }, + "SUNUSDT": { + "_default": "2020-01-01" + }, + "AVAXBNB": { + "_default": "2020-01-01" + }, + "AVAXBTC": { + "_default": "2020-01-01" + }, + "AVAXBUSD": { + "_default": "2020-01-01" + }, + "AVAXUSDT": { + "_default": "2020-01-01" + }, + "HNTBTC": { + "_default": "2020-01-01" + }, + "HNTUSDT": { + "_default": "2020-01-01" + }, + "BAKEBNB": { + "_default": "2020-01-01" + }, + "BURGERBNB": { + "_default": "2020-01-01" + }, + "SXPBIDR": { + "_default": "2020-01-01" + }, + "LINKBKRW": { + "_default": "2020-01-01" + }, + "FLMBNB": { + "_default": "2020-01-01" + }, + "FLMBTC": { + "_default": "2020-01-01" + }, + "FLMBUSD": { + "_default": "2020-01-01" + }, + "FLMUSDT": { + "_default": "2020-01-01" + }, + "SCRTBTC": { + "_default": "2020-01-01" + }, + "SCRTETH": { + "_default": "2020-01-01" + }, + "CAKEBNB": { + "_default": "2020-01-01" + }, + "CAKEBUSD": { + "_default": "2020-01-01" + }, + "SPARTABNB": { + "_default": "2020-01-01" + }, + "UNIUPUSDT": { + "_default": "2020-01-01" + }, + "UNIDOWNUSDT": { + "_default": "2020-01-01" + }, + "ORNBTC": { + "_default": "2020-01-01" + }, + "ORNUSDT": { + "_default": "2020-01-01" + }, + "TRXNGN": { + "_default": "2020-01-01" + }, + "SXPTRY": { + "_default": "2020-01-01" + }, + "UTKBTC": { + "_default": "2020-01-01" + }, + "UTKUSDT": { + "_default": "2020-01-01" + }, + "XVSBNB": { + "_default": "2020-01-01" + }, + "XVSBTC": { + "_default": "2020-01-01" + }, + "XVSBUSD": { + "_default": "2020-01-01" + }, + "XVSUSDT": { + "_default": "2020-01-01" + }, + "ALPHABNB": { + "_default": "2020-01-01" + }, + "ALPHABTC": { + "_default": "2020-01-01" + }, + "ALPHABUSD": { + "_default": "2020-01-01" + }, + "ALPHAUSDT": { + "_default": "2020-01-01" + }, + "VIDTBTC": { + "_default": "2020-01-01" + }, + "VIDTBUSD": { + "_default": "2020-01-01" + }, + "AAVEBNB": { + "_default": "2020-01-01" + }, + "BTCBRL": { + "_default": "2020-01-01" + }, + "USDTBRL": { + "_default": "2020-01-01" + }, + "AAVEBTC": { + "_default": "2020-01-01" + }, + "AAVEETH": { + "_default": "2020-01-01" + }, + "AAVEBUSD": { + "_default": "2020-01-01" + }, + "AAVEUSDT": { + "_default": "2020-01-01" + }, + "AAVEBKRW": { + "_default": "2020-01-01" + }, + "NEARBNB": { + "_default": "2020-01-01" + }, + "NEARBTC": { + "_default": "2020-01-01" + }, + "NEARBUSD": { + "_default": "2020-01-01" + }, + "NEARUSDT": { + "_default": "2020-01-01" + }, + "SXPUPUSDT": { + "_default": "2020-01-01" + }, + "SXPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTBKRW": { + "_default": "2020-01-01" + }, + "SXPGBP": { + "_default": "2020-01-01" + }, + "FILBNB": { + "_default": "2020-01-01" + }, + "FILBTC": { + "_default": "2020-01-01" + }, + "FILBUSD": { + "_default": "2020-01-01" + }, + "FILUSDT": { + "_default": "2020-01-01" + }, + "FILUPUSDT": { + "_default": "2020-01-01" + }, + "FILDOWNUSDT": { + "_default": "2020-01-01" + }, + "YFIUPUSDT": { + "_default": "2020-01-01" + }, + "YFIDOWNUSDT": { + "_default": "2020-01-01" + }, + "INJBNB": { + "_default": "2020-01-01" + }, + "INJBTC": { + "_default": "2020-01-01" + }, + "INJBUSD": { + "_default": "2020-01-01" + }, + "INJUSDT": { + "_default": "2020-01-01" + }, + "AERGOBTC": { + "_default": "2020-01-01" + }, + "AERGOBUSD": { + "_default": "2020-01-01" + }, + "LINKEUR": { + "_default": "2020-01-01" + }, + "ONEBUSD": { + "_default": "2020-01-01" + }, + "EASYETH": { + "_default": "2020-01-01" + }, + "AUDIOBTC": { + "_default": "2020-01-01" + }, + "AUDIOBUSD": { + "_default": "2020-01-01" + }, + "AUDIOUSDT": { + "_default": "2020-01-01" + }, + "CTKBNB": { + "_default": "2020-01-01" + }, + "CTKBTC": { + "_default": "2020-01-01" + }, + "CTKBUSD": { + "_default": "2020-01-01" + }, + "CTKUSDT": { + "_default": "2020-01-01" + }, + "BCHUPUSDT": { + "_default": "2020-01-01" + }, + "BCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BOTBTC": { + "_default": "2020-01-01" + }, + "BOTBUSD": { + "_default": "2020-01-01" + }, + "ETHBRL": { + "_default": "2020-01-01" + }, + "DOTEUR": { + "_default": "2020-01-01" + }, + "AKROBTC": { + "_default": "2020-01-01" + }, + "AKROUSDT": { + "_default": "2020-01-01" + }, + "KP3RBNB": { + "_default": "2020-01-01" + }, + "KP3RBUSD": { + "_default": "2020-01-01" + }, + "AXSBNB": { + "_default": "2020-01-01" + }, + "AXSBTC": { + "_default": "2020-01-01" + }, + "AXSBUSD": { + "_default": "2020-01-01" + }, + "AXSUSDT": { + "_default": "2020-01-01" + }, + "HARDBNB": { + "_default": "2020-01-01" + }, + "HARDBTC": { + "_default": "2020-01-01" + }, + "HARDBUSD": { + "_default": "2020-01-01" + }, + "HARDUSDT": { + "_default": "2020-01-01" + }, + "BNBBRL": { + "_default": "2020-01-01" + }, + "LTCEUR": { + "_default": "2020-01-01" + }, + "RENBTCBTC": { + "_default": "2020-01-01" + }, + "RENBTCETH": { + "_default": "2020-01-01" + }, + "DNTBUSD": { + "_default": "2020-01-01" + }, + "DNTUSDT": { + "_default": "2020-01-01" + }, + "SLPETH": { + "_default": "2020-01-01" + }, + "ADAEUR": { + "_default": "2020-01-01" + }, + "LTCNGN": { + "_default": "2020-01-01" + }, + "CVPETH": { + "_default": "2020-01-01" + }, + "CVPBUSD": { + "_default": "2020-01-01" + }, + "STRAXBTC": { + "_default": "2020-01-01" + }, + "STRAXETH": { + "_default": "2020-01-01" + }, + "STRAXBUSD": { + "_default": "2020-01-01" + }, + "STRAXUSDT": { + "_default": "2020-01-01" + }, + "FORBTC": { + "_default": "2020-01-01" + }, + "FORBUSD": { + "_default": "2020-01-01" + }, + "UNFIBNB": { + "_default": "2020-01-01" + }, + "UNFIBTC": { + "_default": "2020-01-01" + }, + "UNFIBUSD": { + "_default": "2020-01-01" + }, + "UNFIUSDT": { + "_default": "2020-01-01" + }, + "FRONTETH": { + "_default": "2020-01-01" + }, + "FRONTBUSD": { + "_default": "2020-01-01" + }, + "BCHABUSD": { + "_default": "2020-01-01" + }, + "ROSEBTC": { + "_default": "2020-01-01" + }, + "ROSEBUSD": { + "_default": "2020-01-01" + }, + "ROSEUSDT": { + "_default": "2020-01-01" + }, + "AVAXTRY": { + "_default": "2020-01-01" + }, + "BUSDBRL": { + "_default": "2020-01-01" + }, + "AVAUSDT": { + "_default": "2020-01-01" + }, + "SYSBUSD": { + "_default": "2020-01-01" + }, + "XEMUSDT": { + "_default": "2020-01-01" + }, + "HEGICETH": { + "_default": "2020-01-01" + }, + "HEGICBUSD": { + "_default": "2020-01-01" + }, + "AAVEUPUSDT": { + "_default": "2020-01-01" + }, + "AAVEDOWNUSDT": { + "_default": "2020-01-01" + }, + "PROMBNB": { + "_default": "2020-01-01" + }, + "PROMBUSD": { + "_default": "2020-01-01" + }, + "XRPBRL": { + "_default": "2020-01-01" + }, + "XRPNGN": { + "_default": "2020-01-01" + }, + "SKLBTC": { + "_default": "2020-01-01" + }, + "SKLBUSD": { + "_default": "2020-01-01" + }, + "SKLUSDT": { + "_default": "2020-01-01" + }, + "BCHEUR": { + "_default": "2020-01-01" + }, + "YFIEUR": { + "_default": "2020-01-01" + }, + "ZILBIDR": { + "_default": "2020-01-01" + }, + "SUSDBTC": { + "_default": "2020-01-01" + }, + "SUSDETH": { + "_default": "2020-01-01" + }, + "SUSDUSDT": { + "_default": "2020-01-01" + }, + "COVERETH": { + "_default": "2020-01-01" + }, + "COVERBUSD": { + "_default": "2020-01-01" + }, + "GLMBTC": { + "_default": "2020-01-01" + }, + "GLMETH": { + "_default": "2020-01-01" + }, + "GHSTETH": { + "_default": "2020-01-01" + }, + "GHSTBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUPUSDT": { + "_default": "2020-01-01" + }, + "SUSHIDOWNUSDT": { + "_default": "2020-01-01" + }, + "XLMUPUSDT": { + "_default": "2020-01-01" + }, + "XLMDOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKBRL": { + "_default": "2020-01-01" + }, + "LINKNGN": { + "_default": "2020-01-01" + }, + "LTCRUB": { + "_default": "2020-01-01" + }, + "TRXTRY": { + "_default": "2020-01-01" + }, + "XLMEUR": { + "_default": "2020-01-01" + }, + "DFETH": { + "_default": "2020-01-01" + }, + "DFBUSD": { + "_default": "2020-01-01" + }, + "GRTBTC": { + "_default": "2020-01-01" + }, + "GRTETH": { + "_default": "2020-01-01" + }, + "GRTUSDT": { + "_default": "2020-01-01" + }, + "JUVBTC": { + "_default": "2020-01-01" + }, + "JUVBUSD": { + "_default": "2020-01-01" + }, + "JUVUSDT": { + "_default": "2020-01-01" + }, + "PSGBTC": { + "_default": "2020-01-01" + }, + "PSGBUSD": { + "_default": "2020-01-01" + }, + "PSGUSDT": { + "_default": "2020-01-01" + }, + "BUSDBVND": { + "_default": "2020-01-01" + }, + "USDTBVND": { + "_default": "2020-01-01" + }, + "1INCHBTC": { + "_default": "2020-01-01" + }, + "1INCHUSDT": { + "_default": "2020-01-01" + }, + "REEFBTC": { + "_default": "2020-01-01" + }, + "REEFUSDT": { + "_default": "2020-01-01" + }, + "OGBTC": { + "_default": "2020-01-01" + }, + "OGUSDT": { + "_default": "2020-01-01" + }, + "ATMBTC": { + "_default": "2020-01-01" + }, + "ATMUSDT": { + "_default": "2020-01-01" + }, + "ASRBTC": { + "_default": "2020-01-01" + }, + "ASRUSDT": { + "_default": "2020-01-01" + }, + "CELOBTC": { + "_default": "2020-01-01" + }, + "CELOUSDT": { + "_default": "2020-01-01" + }, + "RIFBTC": { + "_default": "2020-01-01" + }, + "RIFUSDT": { + "_default": "2020-01-01" + }, + "CHZTRY": { + "_default": "2020-01-01" + }, + "XLMTRY": { + "_default": "2020-01-01" + }, + "LINKGBP": { + "_default": "2020-01-01" + }, + "GRTEUR": { + "_default": "2020-01-01" + }, + "BTCSTBTC": { + "_default": "2020-01-01" + }, + "BTCSTBUSD": { + "_default": "2020-01-01" + }, + "BTCSTUSDT": { + "_default": "2020-01-01" + }, + "TRUBTC": { + "_default": "2020-01-01" + }, + "TRUBUSD": { + "_default": "2020-01-01" + }, + "TRUUSDT": { + "_default": "2020-01-01" + }, + "DEXEETH": { + "_default": "2020-01-01" + }, + "DEXEBUSD": { + "_default": "2020-01-01" + }, + "EOSEUR": { + "_default": "2020-01-01" + }, + "LTCBRL": { + "_default": "2020-01-01" + }, + "USDCBUSD": { + "_default": "2020-01-01" + }, + "TUSDBUSD": { + "_default": "2020-01-01" + }, + "PAXBUSD": { + "_default": "2020-01-01" + }, + "CKBBTC": { + "_default": "2020-01-01" + }, + "CKBBUSD": { + "_default": "2020-01-01" + }, + "CKBUSDT": { + "_default": "2020-01-01" + }, + "TWTBTC": { + "_default": "2020-01-01" + }, + "TWTBUSD": { + "_default": "2020-01-01" + }, + "TWTUSDT": { + "_default": "2020-01-01" + }, + "FIROBTC": { + "_default": "2020-01-01" + }, + "FIROETH": { + "_default": "2020-01-01" + }, + "FIROUSDT": { + "_default": "2020-01-01" + }, + "BETHETH": { + "_default": "2020-01-01" + }, + "DOGEEUR": { + "_default": "2020-01-01" + }, + "DOGETRY": { + "_default": "2020-01-01" + }, + "DOGEAUD": { + "_default": "2020-01-01" + }, + "DOGEBRL": { + "_default": "2020-01-01" + }, + "DOTNGN": { + "_default": "2020-01-01" + }, + "PROSETH": { + "_default": "2020-01-01" + }, + "LITBTC": { + "_default": "2020-01-01" + }, + "LITBUSD": { + "_default": "2020-01-01" + }, + "LITUSDT": { + "_default": "2020-01-01" + }, + "BTCVAI": { + "_default": "2020-01-01" + }, + "BUSDVAI": { + "_default": "2020-01-01" + }, + "SFPBTC": { + "_default": "2020-01-01" + }, + "SFPBUSD": { + "_default": "2020-01-01" + }, + "SFPUSDT": { + "_default": "2020-01-01" + }, + "DOGEGBP": { + "_default": "2020-01-01" + }, + "DOTTRY": { + "_default": "2020-01-01" + }, + "FXSBTC": { + "_default": "2020-01-01" + }, + "FXSBUSD": { + "_default": "2020-01-01" + }, + "DODOBTC": { + "_default": "2020-01-01" + }, + "DODOBUSD": { + "_default": "2020-01-01" + }, + "DODOUSDT": { + "_default": "2020-01-01" + }, + "FRONTBTC": { + "_default": "2020-01-01" + }, + "EASYBTC": { + "_default": "2020-01-01" + }, + "CAKEBTC": { + "_default": "2020-01-01" + }, + "CAKEUSDT": { + "_default": "2020-01-01" + }, + "BAKEBUSD": { + "_default": "2020-01-01" + }, + "UFTETH": { + "_default": "2020-01-01" + }, + "UFTBUSD": { + "_default": "2020-01-01" + }, + "1INCHBUSD": { + "_default": "2020-01-01" + }, + "BANDBUSD": { + "_default": "2020-01-01" + }, + "GRTBUSD": { + "_default": "2020-01-01" + }, + "IOSTBUSD": { + "_default": "2020-01-01" + }, + "OMGBUSD": { + "_default": "2020-01-01" + }, + "REEFBUSD": { + "_default": "2020-01-01" + }, + "ACMBTC": { + "_default": "2020-01-01" + }, + "ACMBUSD": { + "_default": "2020-01-01" + }, + "ACMUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONBTC": { + "_default": "2020-01-01" + }, + "AUCTIONBUSD": { + "_default": "2020-01-01" + }, + "PHABTC": { + "_default": "2020-01-01" + }, + "PHABUSD": { + "_default": "2020-01-01" + }, + "DOTGBP": { + "_default": "2020-01-01" + }, + "ADATRY": { + "_default": "2020-01-01" + }, + "ADABRL": { + "_default": "2020-01-01" + }, + "ADAGBP": { + "_default": "2020-01-01" + }, + "TVKBTC": { + "_default": "2020-01-01" + }, + "TVKBUSD": { + "_default": "2020-01-01" + }, + "BADGERBTC": { + "_default": "2020-01-01" + }, + "BADGERBUSD": { + "_default": "2020-01-01" + }, + "BADGERUSDT": { + "_default": "2020-01-01" + }, + "FISBTC": { + "_default": "2020-01-01" + }, + "FISBUSD": { + "_default": "2020-01-01" + }, + "FISUSDT": { + "_default": "2020-01-01" + }, + "DOTBRL": { + "_default": "2020-01-01" + }, + "ADAAUD": { + "_default": "2020-01-01" + }, + "HOTTRY": { + "_default": "2020-01-01" + }, + "EGLDEUR": { + "_default": "2020-01-01" + }, + "OMBTC": { + "_default": "2020-01-01" + }, + "OMBUSD": { + "_default": "2020-01-01" + }, + "OMUSDT": { + "_default": "2020-01-01" + }, + "PONDBTC": { + "_default": "2020-01-01" + }, + "PONDBUSD": { + "_default": "2020-01-01" + }, + "PONDUSDT": { + "_default": "2020-01-01" + }, + "DEGOBTC": { + "_default": "2020-01-01" + }, + "DEGOBUSD": { + "_default": "2020-01-01" + }, + "DEGOUSDT": { + "_default": "2020-01-01" + }, + "AVAXEUR": { + "_default": "2020-01-01" + }, + "BTTTRY": { + "_default": "2020-01-01" + }, + "CHZBRL": { + "_default": "2020-01-01" + }, + "UNIEUR": { + "_default": "2020-01-01" + }, + "ALICEBTC": { + "_default": "2020-01-01" + }, + "ALICEBUSD": { + "_default": "2020-01-01" + }, + "ALICEUSDT": { + "_default": "2020-01-01" + }, + "CHZBUSD": { + "_default": "2020-01-01" + }, + "CHZEUR": { + "_default": "2020-01-01" + }, + "CHZGBP": { + "_default": "2020-01-01" + }, + "BIFIBNB": { + "_default": "2020-01-01" + }, + "BIFIBUSD": { + "_default": "2020-01-01" + }, + "LINABTC": { + "_default": "2020-01-01" + }, + "LINABUSD": { + "_default": "2020-01-01" + }, + "LINAUSDT": { + "_default": "2020-01-01" + }, + "ADARUB": { + "_default": "2020-01-01" + }, + "ENJBRL": { + "_default": "2020-01-01" + }, + "ENJEUR": { + "_default": "2020-01-01" + }, + "MATICEUR": { + "_default": "2020-01-01" + }, + "NEOTRY": { + "_default": "2020-01-01" + }, + "PERPBTC": { + "_default": "2020-01-01" + }, + "PERPBUSD": { + "_default": "2020-01-01" + }, + "PERPUSDT": { + "_default": "2020-01-01" + }, + "RAMPBTC": { + "_default": "2020-01-01" + }, + "RAMPBUSD": { + "_default": "2020-01-01" + }, + "RAMPUSDT": { + "_default": "2020-01-01" + }, + "SUPERBTC": { + "_default": "2020-01-01" + }, + "SUPERBUSD": { + "_default": "2020-01-01" + }, + "SUPERUSDT": { + "_default": "2020-01-01" + }, + "CFXBTC": { + "_default": "2020-01-01" + }, + "CFXBUSD": { + "_default": "2020-01-01" + }, + "CFXUSDT": { + "_default": "2020-01-01" + }, + "ENJGBP": { + "_default": "2020-01-01" + }, + "EOSTRY": { + "_default": "2020-01-01" + }, + "LTCGBP": { + "_default": "2020-01-01" + }, + "LUNAEUR": { + "_default": "2020-01-01" + }, + "RVNTRY": { + "_default": "2020-01-01" + }, + "THETAEUR": { + "_default": "2020-01-01" + }, + "XVGBUSD": { + "_default": "2020-01-01" + }, + "EPSBTC": { + "_default": "2020-01-01" + }, + "EPSBUSD": { + "_default": "2020-01-01" + }, + "EPSUSDT": { + "_default": "2020-01-01" + }, + "AUTOBTC": { + "_default": "2020-01-01" + }, + "AUTOBUSD": { + "_default": "2020-01-01" + }, + "AUTOUSDT": { + "_default": "2020-01-01" + }, + "TKOBTC": { + "_default": "2020-01-01" + }, + "TKOBIDR": { + "_default": "2020-01-01" + }, + "TKOBUSD": { + "_default": "2020-01-01" + }, + "TKOUSDT": { + "_default": "2020-01-01" + }, + "PUNDIXETH": { + "_default": "2020-01-01" + }, + "PUNDIXUSDT": { + "_default": "2020-01-01" + }, + "BTTBRL": { + "_default": "2020-01-01" + }, + "BTTEUR": { + "_default": "2020-01-01" + }, + "HOTEUR": { + "_default": "2020-01-01" + }, + "WINEUR": { + "_default": "2020-01-01" + }, + "TLMBTC": { + "_default": "2020-01-01" + }, + "TLMBUSD": { + "_default": "2020-01-01" + }, + "TLMUSDT": { + "_default": "2020-01-01" + }, + "1INCHUPUSDT": { + "_default": "2020-01-01" + }, + "1INCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BTGBUSD": { + "_default": "2020-01-01" + }, + "BTGUSDT": { + "_default": "2020-01-01" + }, + "HOTBUSD": { + "_default": "2020-01-01" + }, + "BNBUAH": { + "_default": "2020-01-01" + }, + "ONTTRY": { + "_default": "2020-01-01" + }, + "VETEUR": { + "_default": "2020-01-01" + }, + "VETGBP": { + "_default": "2020-01-01" + }, + "WINBRL": { + "_default": "2020-01-01" + }, + "MIRBTC": { + "_default": "2020-01-01" + }, + "MIRBUSD": { + "_default": "2020-01-01" + }, + "MIRUSDT": { + "_default": "2020-01-01" + }, + "BARBTC": { + "_default": "2020-01-01" + }, + "BARBUSD": { + "_default": "2020-01-01" + }, + "BARUSDT": { + "_default": "2020-01-01" + }, + "FORTHBTC": { + "_default": "2020-01-01" + }, + "FORTHBUSD": { + "_default": "2020-01-01" + }, + "FORTHUSDT": { + "_default": "2020-01-01" + }, + "CAKEGBP": { + "_default": "2020-01-01" + }, + "DOGERUB": { + "_default": "2020-01-01" + }, + "HOTBRL": { + "_default": "2020-01-01" + }, + "WRXEUR": { + "_default": "2020-01-01" + }, + "EZBTC": { + "_default": "2020-01-01" + }, + "EZETH": { + "_default": "2020-01-01" + }, + "BAKEUSDT": { + "_default": "2020-01-01" + }, + "BURGERBUSD": { + "_default": "2020-01-01" + }, + "BURGERUSDT": { + "_default": "2020-01-01" + }, + "SLPBUSD": { + "_default": "2020-01-01" + }, + "SLPUSDT": { + "_default": "2020-01-01" + }, + "TRXAUD": { + "_default": "2020-01-01" + }, + "TRXEUR": { + "_default": "2020-01-01" + }, + "VETTRY": { + "_default": "2020-01-01" + }, + "SHIBUSDT": { + "_default": "2020-01-01" + }, + "SHIBBUSD": { + "_default": "2020-01-01" + }, + "ICPBTC": { + "_default": "2020-01-01" + }, + "ICPBNB": { + "_default": "2020-01-01" + }, + "ICPBUSD": { + "_default": "2020-01-01" + }, + "ICPUSDT": { + "_default": "2020-01-01" + }, + "SHIBEUR": { + "_default": "2020-01-01" + }, + "SHIBRUB": { + "_default": "2020-01-01" + }, + "ETCEUR": { + "_default": "2020-01-01" + }, + "ETCBRL": { + "_default": "2020-01-01" + }, + "DOGEBIDR": { + "_default": "2020-01-01" + }, + "ARBTC": { + "_default": "2020-01-01" + }, + "ARBNB": { + "_default": "2020-01-01" + }, + "ARBUSD": { + "_default": "2020-01-01" + }, + "ARUSDT": { + "_default": "2020-01-01" + }, + "POLSBTC": { + "_default": "2020-01-01" + }, + "POLSBNB": { + "_default": "2020-01-01" + }, + "POLSBUSD": { + "_default": "2020-01-01" + }, + "POLSUSDT": { + "_default": "2020-01-01" + }, + "MDXBTC": { + "_default": "2020-01-01" + }, + "MDXBNB": { + "_default": "2020-01-01" + }, + "MDXBUSD": { + "_default": "2020-01-01" + }, + "MDXUSDT": { + "_default": "2020-01-01" + }, + "MASKBNB": { + "_default": "2020-01-01" + }, + "MASKBUSD": { + "_default": "2020-01-01" + }, + "MASKUSDT": { + "_default": "2020-01-01" + }, + "LPTBTC": { + "_default": "2020-01-01" + }, + "LPTBNB": { + "_default": "2020-01-01" + }, + "LPTBUSD": { + "_default": "2020-01-01" + }, + "LPTUSDT": { + "_default": "2020-01-01" + }, + "ETHUAH": { + "_default": "2020-01-01" + }, + "MATICBRL": { + "_default": "2020-01-01" + }, + "SOLEUR": { + "_default": "2020-01-01" + }, + "SHIBBRL": { + "_default": "2020-01-01" + }, + "AGIXBTC": { + "_default": "2020-01-01" + }, + "ICPEUR": { + "_default": "2020-01-01" + }, + "MATICGBP": { + "_default": "2020-01-01" + }, + "SHIBTRY": { + "_default": "2020-01-01" + }, + "MATICBIDR": { + "_default": "2020-01-01" + }, + "MATICRUB": { + "_default": "2020-01-01" + }, + "NUBTC": { + "_default": "2020-01-01" + }, + "NUBNB": { + "_default": "2020-01-01" + }, + "NUBUSD": { + "_default": "2020-01-01" + }, + "NUUSDT": { + "_default": "2020-01-01" + }, + "XVGUSDT": { + "_default": "2020-01-01" + }, + "RLCBUSD": { + "_default": "2020-01-01" + }, + "CELRBUSD": { + "_default": "2020-01-01" + }, + "ATMBUSD": { + "_default": "2020-01-01" + }, + "ZENBUSD": { + "_default": "2020-01-01" + }, + "FTMBUSD": { + "_default": "2020-01-01" + }, + "THETABUSD": { + "_default": "2020-01-01" + }, + "WINBUSD": { + "_default": "2020-01-01" + }, + "KAVABUSD": { + "_default": "2020-01-01" + }, + "XEMBUSD": { + "_default": "2020-01-01" + }, + "ATABTC": { + "_default": "2020-01-01" + }, + "ATABNB": { + "_default": "2020-01-01" + }, + "ATABUSD": { + "_default": "2020-01-01" + }, + "ATAUSDT": { + "_default": "2020-01-01" + }, + "GTCBTC": { + "_default": "2020-01-01" + }, + "GTCBNB": { + "_default": "2020-01-01" + }, + "GTCBUSD": { + "_default": "2020-01-01" + }, + "GTCUSDT": { + "_default": "2020-01-01" + }, + "TORNBTC": { + "_default": "2020-01-01" + }, + "TORNBNB": { + "_default": "2020-01-01" + }, + "TORNBUSD": { + "_default": "2020-01-01" + }, + "TORNUSDT": { + "_default": "2020-01-01" + }, + "MATICTRY": { + "_default": "2020-01-01" + }, + "ETCGBP": { + "_default": "2020-01-01" + }, + "SOLGBP": { + "_default": "2020-01-01" + }, + "BAKEBTC": { + "_default": "2020-01-01" + }, + "COTIBUSD": { + "_default": "2020-01-01" + }, + "KEEPBTC": { + "_default": "2020-01-01" + }, + "KEEPBNB": { + "_default": "2020-01-01" + }, + "KEEPBUSD": { + "_default": "2020-01-01" + }, + "KEEPUSDT": { + "_default": "2020-01-01" + }, + "SOLTRY": { + "_default": "2020-01-01" + }, + "RUNEGBP": { + "_default": "2020-01-01" + }, + "SOLBRL": { + "_default": "2020-01-01" + }, + "SCBUSD": { + "_default": "2020-01-01" + }, + "CHRBUSD": { + "_default": "2020-01-01" + }, + "STMXBUSD": { + "_default": "2020-01-01" + }, + "HNTBUSD": { + "_default": "2020-01-01" + }, + "FTTBUSD": { + "_default": "2020-01-01" + }, + "DOCKBUSD": { + "_default": "2020-01-01" + }, + "ADABIDR": { + "_default": "2020-01-01" + }, + "ERNBNB": { + "_default": "2020-01-01" + }, + "ERNBUSD": { + "_default": "2020-01-01" + }, + "ERNUSDT": { + "_default": "2020-01-01" + }, + "KLAYBTC": { + "_default": "2020-01-01" + }, + "KLAYBNB": { + "_default": "2020-01-01" + }, + "KLAYBUSD": { + "_default": "2020-01-01" + }, + "KLAYUSDT": { + "_default": "2020-01-01" + }, + "RUNEEUR": { + "_default": "2020-01-01" + }, + "MATICAUD": { + "_default": "2020-01-01" + }, + "DOTRUB": { + "_default": "2020-01-01" + }, + "UTKBUSD": { + "_default": "2020-01-01" + }, + "IOTXBUSD": { + "_default": "2020-01-01" + }, + "PHAUSDT": { + "_default": "2020-01-01" + }, + "SOLRUB": { + "_default": "2020-01-01" + }, + "RUNEAUD": { + "_default": "2020-01-01" + }, + "BUSDUAH": { + "_default": "2020-01-01" + }, + "BONDBTC": { + "_default": "2020-01-01" + }, + "BONDBNB": { + "_default": "2020-01-01" + }, + "BONDBUSD": { + "_default": "2020-01-01" + }, + "BONDUSDT": { + "_default": "2020-01-01" + }, + "MLNBTC": { + "_default": "2020-01-01" + }, + "MLNBNB": { + "_default": "2020-01-01" + }, + "MLNBUSD": { + "_default": "2020-01-01" + }, + "MLNUSDT": { + "_default": "2020-01-01" + }, + "GRTTRY": { + "_default": "2020-01-01" + }, + "CAKEBRL": { + "_default": "2020-01-01" + }, + "ICPRUB": { + "_default": "2020-01-01" + }, + "DOTAUD": { + "_default": "2020-01-01" + }, + "AAVEBRL": { + "_default": "2020-01-01" + }, + "EOSAUD": { + "_default": "2020-01-01" + }, + "DEXEUSDT": { + "_default": "2020-01-01" + }, + "LTOBUSD": { + "_default": "2020-01-01" + }, + "ADXBUSD": { + "_default": "2020-01-01" + }, + "QUICKBTC": { + "_default": "2020-01-01" + }, + "QUICKBNB": { + "_default": "2020-01-01" + }, + "QUICKBUSD": { + "_default": "2020-01-01" + }, + "C98USDT": { + "_default": "2020-01-01" + }, + "C98BUSD": { + "_default": "2020-01-01" + }, + "C98BNB": { + "_default": "2020-01-01" + }, + "C98BTC": { + "_default": "2020-01-01" + }, + "CLVBTC": { + "_default": "2020-01-01" + }, + "CLVBNB": { + "_default": "2020-01-01" + }, + "CLVBUSD": { + "_default": "2020-01-01" + }, + "CLVUSDT": { + "_default": "2020-01-01" + }, + "QNTBTC": { + "_default": "2020-01-01" + }, + "QNTBNB": { + "_default": "2020-01-01" + }, + "QNTBUSD": { + "_default": "2020-01-01" + }, + "QNTUSDT": { + "_default": "2020-01-01" + }, + "FLOWBTC": { + "_default": "2020-01-01" + }, + "FLOWBNB": { + "_default": "2020-01-01" + }, + "FLOWBUSD": { + "_default": "2020-01-01" + }, + "FLOWUSDT": { + "_default": "2020-01-01" + }, + "XECBUSD": { + "_default": "2020-01-01" + }, + "AXSBRL": { + "_default": "2020-01-01" + }, + "AXSAUD": { + "_default": "2020-01-01" + }, + "TVKUSDT": { + "_default": "2020-01-01" + }, + "MINABTC": { + "_default": "2020-01-01" + }, + "MINABNB": { + "_default": "2020-01-01" + }, + "MINABUSD": { + "_default": "2020-01-01" + }, + "MINAUSDT": { + "_default": "2020-01-01" + }, + "RAYBNB": { + "_default": "2020-01-01" + }, + "RAYBUSD": { + "_default": "2020-01-01" + }, + "RAYUSDT": { + "_default": "2020-01-01" + }, + "FARMBTC": { + "_default": "2020-01-01" + }, + "FARMBNB": { + "_default": "2020-01-01" + }, + "FARMBUSD": { + "_default": "2020-01-01" + }, + "FARMUSDT": { + "_default": "2020-01-01" + }, + "ALPACABTC": { + "_default": "2020-01-01" + }, + "ALPACABNB": { + "_default": "2020-01-01" + }, + "ALPACABUSD": { + "_default": "2020-01-01" + }, + "ALPACAUSDT": { + "_default": "2020-01-01" + }, + "TLMTRY": { + "_default": "2020-01-01" + }, + "QUICKUSDT": { + "_default": "2020-01-01" + }, + "ORNBUSD": { + "_default": "2020-01-01" + }, + "MBOXBTC": { + "_default": "2020-01-01" + }, + "MBOXBNB": { + "_default": "2020-01-01" + }, + "MBOXBUSD": { + "_default": "2020-01-01" + }, + "MBOXUSDT": { + "_default": "2020-01-01" + }, + "VGXBTC": { + "_default": "2020-01-01" + }, + "VGXETH": { + "_default": "2020-01-01" + }, + "FORUSDT": { + "_default": "2020-01-01" + }, + "REQUSDT": { + "_default": "2020-01-01" + }, + "GHSTUSDT": { + "_default": "2020-01-01" + }, + "TRURUB": { + "_default": "2020-01-01" + }, + "FISBRL": { + "_default": "2020-01-01" + }, + "WAXPUSDT": { + "_default": "2020-01-01" + }, + "WAXPBUSD": { + "_default": "2020-01-01" + }, + "WAXPBNB": { + "_default": "2020-01-01" + }, + "WAXPBTC": { + "_default": "2020-01-01" + }, + "TRIBEBTC": { + "_default": "2020-01-01" + }, + "TRIBEBNB": { + "_default": "2020-01-01" + }, + "TRIBEBUSD": { + "_default": "2020-01-01" + }, + "TRIBEUSDT": { + "_default": "2020-01-01" + }, + "GNOUSDT": { + "_default": "2020-01-01" + }, + "GNOBUSD": { + "_default": "2020-01-01" + }, + "GNOBNB": { + "_default": "2020-01-01" + }, + "GNOBTC": { + "_default": "2020-01-01" + }, + "ARPATRY": { + "_default": "2020-01-01" + }, + "PROMBTC": { + "_default": "2020-01-01" + }, + "MTLBUSD": { + "_default": "2020-01-01" + }, + "OGNBUSD": { + "_default": "2020-01-01" + }, + "XECUSDT": { + "_default": "2020-01-01" + }, + "C98BRL": { + "_default": "2020-01-01" + }, + "SOLAUD": { + "_default": "2020-01-01" + }, + "XRPBIDR": { + "_default": "2020-01-01" + }, + "POLYBUSD": { + "_default": "2020-01-01" + }, + "ELFUSDT": { + "_default": "2020-01-01" + }, + "DYDXUSDT": { + "_default": "2020-01-01" + }, + "DYDXBUSD": { + "_default": "2020-01-01" + }, + "DYDXBNB": { + "_default": "2020-01-01" + }, + "DYDXBTC": { + "_default": "2020-01-01" + }, + "ELFBUSD": { + "_default": "2020-01-01" + }, + "POLYUSDT": { + "_default": "2020-01-01" + }, + "IDEXUSDT": { + "_default": "2020-01-01" + }, + "VIDTUSDT": { + "_default": "2020-01-01" + }, + "SOLBIDR": { + "_default": "2020-01-01" + }, + "BTCUSDP": { + "_default": "2020-01-01" + }, + "ETHUSDP": { + "_default": "2020-01-01" + }, + "BNBUSDP": { + "_default": "2020-01-01" + }, + "USDPBUSD": { + "_default": "2020-01-01" + }, + "USDPUSDT": { + "_default": "2020-01-01" + }, + "GALAUSDT": { + "_default": "2020-01-01" + }, + "GALABUSD": { + "_default": "2020-01-01" + }, + "GALABNB": { + "_default": "2020-01-01" + }, + "GALABTC": { + "_default": "2020-01-01" + }, + "FTMBIDR": { + "_default": "2020-01-01" + }, + "ALGOBIDR": { + "_default": "2020-01-01" + }, + "CAKEAUD": { + "_default": "2020-01-01" + }, + "KSMAUD": { + "_default": "2020-01-01" + }, + "WAVESRUB": { + "_default": "2020-01-01" + }, + "SUNBUSD": { + "_default": "2020-01-01" + }, + "ILVUSDT": { + "_default": "2020-01-01" + }, + "ILVBUSD": { + "_default": "2020-01-01" + }, + "ILVBNB": { + "_default": "2020-01-01" + }, + "ILVBTC": { + "_default": "2020-01-01" + }, + "RENBUSD": { + "_default": "2020-01-01" + }, + "YGGUSDT": { + "_default": "2020-01-01" + }, + "YGGBUSD": { + "_default": "2020-01-01" + }, + "YGGBNB": { + "_default": "2020-01-01" + }, + "YGGBTC": { + "_default": "2020-01-01" + }, + "STXBUSD": { + "_default": "2020-01-01" + }, + "SYSUSDT": { + "_default": "2020-01-01" + }, + "DFUSDT": { + "_default": "2020-01-01" + }, + "SOLUSDC": { + "_default": "2020-01-01" + }, + "ARPARUB": { + "_default": "2020-01-01" + }, + "LTCUAH": { + "_default": "2020-01-01" + }, + "FETBUSD": { + "_default": "2020-01-01" + }, + "ARPABUSD": { + "_default": "2020-01-01" + }, + "LSKBUSD": { + "_default": "2020-01-01" + }, + "AVAXBIDR": { + "_default": "2020-01-01" + }, + "ALICEBIDR": { + "_default": "2020-01-01" + }, + "FIDAUSDT": { + "_default": "2020-01-01" + }, + "FIDABUSD": { + "_default": "2020-01-01" + }, + "FIDABNB": { + "_default": "2020-01-01" + }, + "FIDABTC": { + "_default": "2020-01-01" + }, + "DENTBUSD": { + "_default": "2020-01-01" + }, + "FRONTUSDT": { + "_default": "2020-01-01" + }, + "CVPUSDT": { + "_default": "2020-01-01" + }, + "AGLDBTC": { + "_default": "2020-01-01" + }, + "AGLDBNB": { + "_default": "2020-01-01" + }, + "AGLDBUSD": { + "_default": "2020-01-01" + }, + "AGLDUSDT": { + "_default": "2020-01-01" + }, + "RADBTC": { + "_default": "2020-01-01" + }, + "RADBNB": { + "_default": "2020-01-01" + }, + "RADBUSD": { + "_default": "2020-01-01" + }, + "RADUSDT": { + "_default": "2020-01-01" + }, + "UNIAUD": { + "_default": "2020-01-01" + }, + "HIVEBUSD": { + "_default": "2020-01-01" + }, + "STPTBUSD": { + "_default": "2020-01-01" + }, + "BETABTC": { + "_default": "2020-01-01" + }, + "BETABNB": { + "_default": "2020-01-01" + }, + "BETABUSD": { + "_default": "2020-01-01" + }, + "BETAUSDT": { + "_default": "2020-01-01" + }, + "SHIBAUD": { + "_default": "2020-01-01" + }, + "RAREBTC": { + "_default": "2020-01-01" + }, + "RAREBNB": { + "_default": "2020-01-01" + }, + "RAREBUSD": { + "_default": "2020-01-01" + }, + "RAREUSDT": { + "_default": "2020-01-01" + }, + "AVAXBRL": { + "_default": "2020-01-01" + }, + "AVAXAUD": { + "_default": "2020-01-01" + }, + "LUNAAUD": { + "_default": "2020-01-01" + }, + "TROYBUSD": { + "_default": "2020-01-01" + }, + "AXSETH": { + "_default": "2020-01-01" + }, + "FTMETH": { + "_default": "2020-01-01" + }, + "SOLETH": { + "_default": "2020-01-01" + }, + "SSVBTC": { + "_default": "2020-01-01" + }, + "SSVETH": { + "_default": "2020-01-01" + }, + "LAZIOTRY": { + "_default": "2020-01-01" + }, + "LAZIOEUR": { + "_default": "2020-01-01" + }, + "LAZIOBTC": { + "_default": "2020-01-01" + }, + "LAZIOUSDT": { + "_default": "2020-01-01" + }, + "CHESSBTC": { + "_default": "2020-01-01" + }, + "CHESSBNB": { + "_default": "2020-01-01" + }, + "CHESSBUSD": { + "_default": "2020-01-01" + }, + "CHESSUSDT": { + "_default": "2020-01-01" + }, + "FTMAUD": { + "_default": "2020-01-01" + }, + "FTMBRL": { + "_default": "2020-01-01" + }, + "SCRTBUSD": { + "_default": "2020-01-01" + }, + "ADXUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONUSDT": { + "_default": "2020-01-01" + }, + "CELOBUSD": { + "_default": "2020-01-01" + }, + "FTMRUB": { + "_default": "2020-01-01" + }, + "NUAUD": { + "_default": "2020-01-01" + }, + "NURUB": { + "_default": "2020-01-01" + }, + "REEFTRY": { + "_default": "2020-01-01" + }, + "REEFBIDR": { + "_default": "2020-01-01" + }, + "SHIBDOGE": { + "_default": "2020-01-01" + }, + "DARUSDT": { + "_default": "2020-01-01" + }, + "DARBUSD": { + "_default": "2020-01-01" + }, + "DARBNB": { + "_default": "2020-01-01" + }, + "DARBTC": { + "_default": "2020-01-01" + }, + "BNXBTC": { + "_default": "2020-01-01" + }, + "BNXBNB": { + "_default": "2020-01-01" + }, + "BNXBUSD": { + "_default": "2020-01-01" + }, + "BNXUSDT": { + "_default": "2020-01-01" + }, + "RGTUSDT": { + "_default": "2020-01-01" + }, + "RGTBTC": { + "_default": "2020-01-01" + }, + "RGTBUSD": { + "_default": "2020-01-01" + }, + "RGTBNB": { + "_default": "2020-01-01" + }, + "LAZIOBUSD": { + "_default": "2020-01-01" + }, + "OXTBUSD": { + "_default": "2020-01-01" + }, + "MANATRY": { + "_default": "2020-01-01" + }, + "ALGORUB": { + "_default": "2020-01-01" + }, + "SHIBUAH": { + "_default": "2020-01-01" + }, + "LUNABIDR": { + "_default": "2020-01-01" + }, + "AUDUSDC": { + "_default": "2020-01-01" + }, + "MOVRBTC": { + "_default": "2020-01-01" + }, + "MOVRBNB": { + "_default": "2020-01-01" + }, + "MOVRBUSD": { + "_default": "2020-01-01" + }, + "MOVRUSDT": { + "_default": "2020-01-01" + }, + "CITYBTC": { + "_default": "2020-01-01" + }, + "CITYBNB": { + "_default": "2020-01-01" + }, + "CITYBUSD": { + "_default": "2020-01-01" + }, + "CITYUSDT": { + "_default": "2020-01-01" + }, + "ENSBTC": { + "_default": "2020-01-01" + }, + "ENSBNB": { + "_default": "2020-01-01" + }, + "ENSBUSD": { + "_default": "2020-01-01" + }, + "ENSUSDT": { + "_default": "2020-01-01" + }, + "SANDETH": { + "_default": "2020-01-01" + }, + "DOTETH": { + "_default": "2020-01-01" + }, + "MATICETH": { + "_default": "2020-01-01" + }, + "ANKRBUSD": { + "_default": "2020-01-01" + }, + "SANDTRY": { + "_default": "2020-01-01" + }, + "MANABRL": { + "_default": "2020-01-01" + }, + "KP3RUSDT": { + "_default": "2020-01-01" + }, + "QIUSDT": { + "_default": "2020-01-01" + }, + "QIBUSD": { + "_default": "2020-01-01" + }, + "QIBNB": { + "_default": "2020-01-01" + }, + "QIBTC": { + "_default": "2020-01-01" + }, + "PORTOBTC": { + "_default": "2020-01-01" + }, + "PORTOUSDT": { + "_default": "2020-01-01" + }, + "PORTOTRY": { + "_default": "2020-01-01" + }, + "PORTOEUR": { + "_default": "2020-01-01" + }, + "POWRUSDT": { + "_default": "2020-01-01" + }, + "POWRBUSD": { + "_default": "2020-01-01" + }, + "AVAXETH": { + "_default": "2020-01-01" + }, + "SLPTRY": { + "_default": "2020-01-01" + }, + "FISTRY": { + "_default": "2020-01-01" + }, + "LRCTRY": { + "_default": "2020-01-01" + }, + "CHRETH": { + "_default": "2020-01-01" + }, + "FISBIDR": { + "_default": "2020-01-01" + }, + "VGXUSDT": { + "_default": "2020-01-01" + }, + "GALAETH": { + "_default": "2020-01-01" + }, + "JASMYUSDT": { + "_default": "2020-01-01" + }, + "JASMYBUSD": { + "_default": "2020-01-01" + }, + "JASMYBNB": { + "_default": "2020-01-01" + }, + "JASMYBTC": { + "_default": "2020-01-01" + }, + "AMPBTC": { + "_default": "2020-01-01" + }, + "AMPBNB": { + "_default": "2020-01-01" + }, + "AMPBUSD": { + "_default": "2020-01-01" + }, + "AMPUSDT": { + "_default": "2020-01-01" + }, + "PLABTC": { + "_default": "2020-01-01" + }, + "PLABNB": { + "_default": "2020-01-01" + }, + "PLABUSD": { + "_default": "2020-01-01" + }, + "PLAUSDT": { + "_default": "2020-01-01" + }, + "PYRBTC": { + "_default": "2020-01-01" + }, + "PYRBUSD": { + "_default": "2020-01-01" + }, + "PYRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBTC": { + "_default": "2020-01-01" + }, + "RNDRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBUSD": { + "_default": "2020-01-01" + }, + "ALCXBTC": { + "_default": "2020-01-01" + }, + "ALCXBUSD": { + "_default": "2020-01-01" + }, + "ALCXUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBTC": { + "_default": "2020-01-01" + }, + "SANTOSUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBRL": { + "_default": "2020-01-01" + }, + "SANTOSTRY": { + "_default": "2020-01-01" + }, + "MCBTC": { + "_default": "2020-01-01" + }, + "MCBUSD": { + "_default": "2020-01-01" + }, + "MCUSDT": { + "_default": "2020-01-01" + }, + "BELTRY": { + "_default": "2020-01-01" + }, + "COCOSBUSD": { + "_default": "2020-01-01" + }, + "DENTTRY": { + "_default": "2020-01-01" + }, + "ENJTRY": { + "_default": "2020-01-01" + }, + "NEORUB": { + "_default": "2020-01-01" + }, + "SANDAUD": { + "_default": "2020-01-01" + }, + "SLPBIDR": { + "_default": "2020-01-01" + }, + "ANYBTC": { + "_default": "2020-01-01" + }, + "ANYBUSD": { + "_default": "2020-01-01" + }, + "ANYUSDT": { + "_default": "2020-01-01" + }, + "BICOBTC": { + "_default": "2020-01-01" + }, + "BICOBUSD": { + "_default": "2020-01-01" + }, + "BICOUSDT": { + "_default": "2020-01-01" + }, + "FLUXBTC": { + "_default": "2020-01-01" + }, + "FLUXBUSD": { + "_default": "2020-01-01" + }, + "FLUXUSDT": { + "_default": "2020-01-01" + }, + "ALICETRY": { + "_default": "2020-01-01" + }, + "FXSUSDT": { + "_default": "2020-01-01" + }, + "GALABRL": { + "_default": "2020-01-01" + }, + "GALATRY": { + "_default": "2020-01-01" + }, + "LUNATRY": { + "_default": "2020-01-01" + }, + "REQBUSD": { + "_default": "2020-01-01" + }, + "SANDBRL": { + "_default": "2020-01-01" + }, + "MANABIDR": { + "_default": "2020-01-01" + }, + "SANDBIDR": { + "_default": "2020-01-01" + }, + "VOXELBTC": { + "_default": "2020-01-01" + }, + "VOXELBNB": { + "_default": "2020-01-01" + }, + "VOXELBUSD": { + "_default": "2020-01-01" + }, + "VOXELUSDT": { + "_default": "2020-01-01" + }, + "COSBUSD": { + "_default": "2020-01-01" + }, + "CTXCBUSD": { + "_default": "2020-01-01" + }, + "FTMTRY": { + "_default": "2020-01-01" + }, + "MANABNB": { + "_default": "2020-01-01" + }, + "MINATRY": { + "_default": "2020-01-01" + }, + "XTZTRY": { + "_default": "2020-01-01" + }, + "HIGHBTC": { + "_default": "2020-01-01" + }, + "HIGHBUSD": { + "_default": "2020-01-01" + }, + "HIGHUSDT": { + "_default": "2020-01-01" + }, + "CVXBTC": { + "_default": "2020-01-01" + }, + "CVXBUSD": { + "_default": "2020-01-01" + }, + "CVXUSDT": { + "_default": "2020-01-01" + }, + "PEOPLEBTC": { + "_default": "2020-01-01" + }, + "PEOPLEBUSD": { + "_default": "2020-01-01" + }, + "PEOPLEUSDT": { + "_default": "2020-01-01" + }, + "OOKIBUSD": { + "_default": "2020-01-01" + }, + "OOKIUSDT": { + "_default": "2020-01-01" + }, + "COCOSTRY": { + "_default": "2020-01-01" + }, + "GXSBNB": { + "_default": "2020-01-01" + }, + "LINKBNB": { + "_default": "2020-01-01" + }, + "LUNAETH": { + "_default": "2020-01-01" + }, + "MDTBUSD": { + "_default": "2020-01-01" + }, + "NULSBUSD": { + "_default": "2020-01-01" + }, + "SPELLBTC": { + "_default": "2020-01-01" + }, + "SPELLUSDT": { + "_default": "2020-01-01" + }, + "SPELLBUSD": { + "_default": "2020-01-01" + }, + "USTBTC": { + "_default": "2020-01-01" + }, + "USTBUSD": { + "_default": "2020-01-01" + }, + "USTUSDT": { + "_default": "2020-01-01" + }, + "JOEBTC": { + "_default": "2020-01-01" + }, + "JOEBUSD": { + "_default": "2020-01-01" + }, + "JOEUSDT": { + "_default": "2020-01-01" + }, + "ATOMETH": { + "_default": "2020-01-01" + }, + "DUSKBUSD": { + "_default": "2020-01-01" + }, + "EGLDETH": { + "_default": "2020-01-01" + }, + "ICPETH": { + "_default": "2020-01-01" + }, + "LUNABRL": { + "_default": "2020-01-01" + }, + "LUNAUST": { + "_default": "2020-01-01" + }, + "NEARETH": { + "_default": "2020-01-01" + }, + "ROSEBNB": { + "_default": "2020-01-01" + }, + "VOXELETH": { + "_default": "2020-01-01" + }, + "ALICEBNB": { + "_default": "2020-01-01" + }, + "ATOMTRY": { + "_default": "2020-01-01" + }, + "ETHUST": { + "_default": "2020-01-01" + }, + "GALAAUD": { + "_default": "2020-01-01" + }, + "LRCBNB": { + "_default": "2020-01-01" + }, + "ONEETH": { + "_default": "2020-01-01" + }, + "OOKIBNB": { + "_default": "2020-01-01" + }, + "ACHBTC": { + "_default": "2020-01-01" + }, + "ACHBUSD": { + "_default": "2020-01-01" + }, + "ACHUSDT": { + "_default": "2020-01-01" + }, + "IMXBTC": { + "_default": "2020-01-01" + }, + "IMXBUSD": { + "_default": "2020-01-01" + }, + "IMXUSDT": { + "_default": "2020-01-01" + }, + "GLMRBTC": { + "_default": "2020-01-01" + }, + "GLMRBUSD": { + "_default": "2020-01-01" + }, + "GLMRUSDT": { + "_default": "2020-01-01" + }, + "ATOMBIDR": { + "_default": "2020-01-01" + }, + "DYDXETH": { + "_default": "2020-01-01" + }, + "FARMETH": { + "_default": "2020-01-01" + }, + "FORBNB": { + "_default": "2020-01-01" + }, + "ICPTRY": { + "_default": "2020-01-01" + }, + "JASMYETH": { + "_default": "2020-01-01" + }, + "LINABNB": { + "_default": "2020-01-01" + }, + "OOKIETH": { + "_default": "2020-01-01" + }, + "ROSEETH": { + "_default": "2020-01-01" + }, + "UMABUSD": { + "_default": "2020-01-01" + }, + "UNIETH": { + "_default": "2020-01-01" + }, + "XTZETH": { + "_default": "2020-01-01" + }, + "LOKABTC": { + "_default": "2020-01-01" + }, + "LOKABNB": { + "_default": "2020-01-01" + }, + "LOKABUSD": { + "_default": "2020-01-01" + }, + "LOKAUSDT": { + "_default": "2020-01-01" + }, + "ATOMBRL": { + "_default": "2020-01-01" + }, + "BNBUST": { + "_default": "2020-01-01" + }, + "CRVETH": { + "_default": "2020-01-01" + }, + "HIGHBNB": { + "_default": "2020-01-01" + }, + "NEARRUB": { + "_default": "2020-01-01" + }, + "ROSETRY": { + "_default": "2020-01-01" + }, + "SCRTUSDT": { + "_default": "2020-01-01" + }, + "API3BTC": { + "_default": "2020-01-01" + }, + "API3BUSD": { + "_default": "2020-01-01" + }, + "API3USDT": { + "_default": "2020-01-01" + }, + "BTTCUSDT": { + "_default": "2020-01-01" + }, + "BTTCUSDC": { + "_default": "2020-01-01" + }, + "BTTCTRY": { + "_default": "2020-01-01" + }, + "ACABTC": { + "_default": "2020-01-01" + }, + "ACABUSD": { + "_default": "2020-01-01" + }, + "ACAUSDT": { + "_default": "2020-01-01" + }, + "ANCBTC": { + "_default": "2020-01-01" + }, + "ANCBUSD": { + "_default": "2020-01-01" + }, + "ANCUSDT": { + "_default": "2020-01-01" + }, + "BDOTDOT": { + "_default": "2020-01-01" + }, + "XNOBTC": { + "_default": "2020-01-01" + }, + "XNOETH": { + "_default": "2020-01-01" + }, + "XNOBUSD": { + "_default": "2020-01-01" + }, + "XNOUSDT": { + "_default": "2020-01-01" + }, + "COSTRY": { + "_default": "2020-01-01" + }, + "KAVAETH": { + "_default": "2020-01-01" + }, + "MCBNB": { + "_default": "2020-01-01" + }, + "ONETRY": { + "_default": "2020-01-01" + }, + "WOOBTC": { + "_default": "2020-01-01" + }, + "WOOBNB": { + "_default": "2020-01-01" + }, + "WOOBUSD": { + "_default": "2020-01-01" + }, + "WOOUSDT": { + "_default": "2020-01-01" + }, + "CELRETH": { + "_default": "2020-01-01" + }, + "PEOPLEBNB": { + "_default": "2020-01-01" + }, + "SLPBNB": { + "_default": "2020-01-01" + }, + "SPELLBNB": { + "_default": "2020-01-01" + }, + "SPELLTRY": { + "_default": "2020-01-01" + }, + "TFUELBUSD": { + "_default": "2020-01-01" + }, + "AXSTRY": { + "_default": "2020-01-01" + }, + "DARTRY": { + "_default": "2020-01-01" + }, + "NEARTRY": { + "_default": "2020-01-01" + }, + "IDEXBNB": { + "_default": "2020-01-01" + }, + "ALPINEEUR": { + "_default": "2020-01-01" + }, + "ALPINETRY": { + "_default": "2020-01-01" + }, + "ALPINEUSDT": { + "_default": "2020-01-01" + }, + "ALPINEBTC": { + "_default": "2020-01-01" + }, + "TUSDT": { + "_default": "2020-01-01" + }, + "TBUSD": { + "_default": "2020-01-01" + }, + "API3BNB": { + "_default": "2020-01-01" + }, + "BETAETH": { + "_default": "2020-01-01" + }, + "INJTRY": { + "_default": "2020-01-01" + }, + "TLMBNB": { + "_default": "2020-01-01" + }, + "ASTRBUSD": { + "_default": "2020-01-01" + }, + "ASTRUSDT": { + "_default": "2020-01-01" + }, + "API3TRY": { + "_default": "2020-01-01" + }, + "GLMRBNB": { + "_default": "2020-01-01" + }, + "MBOXTRY": { + "_default": "2020-01-01" + }, + "GMTBTC": { + "_default": "2020-01-01" + }, + "GMTBNB": { + "_default": "2020-01-01" + }, + "GMTBUSD": { + "_default": "2020-01-01" + }, + "GMTUSDT": { + "_default": "2020-01-01" + }, + "ANCBNB": { + "_default": "2020-01-01" + }, + "ATOMEUR": { + "_default": "2020-01-01" + }, + "GALAEUR": { + "_default": "2020-01-01" + }, + "KSMETH": { + "_default": "2020-01-01" + }, + "UMATRY": { + "_default": "2020-01-01" + }, + "KDABTC": { + "_default": "2020-01-01" + }, + "KDABUSD": { + "_default": "2020-01-01" + }, + "KDAUSDT": { + "_default": "2020-01-01" + }, + "APEUSDT": { + "_default": "2020-01-01" + }, + "APEBUSD": { + "_default": "2020-01-01" + }, + "APEBTC": { + "_default": "2020-01-01" + }, + "ALPINEBUSD": { + "_default": "2020-01-01" + }, + "LUNAGBP": { + "_default": "2020-01-01" + }, + "NEAREUR": { + "_default": "2020-01-01" + }, + "TWTTRY": { + "_default": "2020-01-01" + }, + "WAVESEUR": { + "_default": "2020-01-01" + }, + "APEEUR": { + "_default": "2020-01-01" + }, + "APEGBP": { + "_default": "2020-01-01" + }, + "APETRY": { + "_default": "2020-01-01" + }, + "BSWUSDT": { + "_default": "2020-01-01" + }, + "BSWBUSD": { + "_default": "2020-01-01" + }, + "BSWBNB": { + "_default": "2020-01-01" + }, + "APEBNB": { + "_default": "2020-01-01" + }, + "GMTBRL": { + "_default": "2020-01-01" + }, + "GMTETH": { + "_default": "2020-01-01" + }, + "JASMYTRY": { + "_default": "2020-01-01" + }, + "SANTOSBUSD": { + "_default": "2020-01-01" + }, + "APEAUD": { + "_default": "2020-01-01" + }, + "BIFIUSDT": { + "_default": "2020-01-01" + }, + "GMTEUR": { + "_default": "2020-01-01" + }, + "IMXBNB": { + "_default": "2020-01-01" + }, + "RUNEETH": { + "_default": "2020-01-01" + }, + "AVAXGBP": { + "_default": "2020-01-01" + }, + "MULTIBTC": { + "_default": "2020-01-01" + }, + "MULTIBUSD": { + "_default": "2020-01-01" + }, + "MULTIUSDT": { + "_default": "2020-01-01" + }, + "APEETH": { + "_default": "2020-01-01" + }, + "BSWETH": { + "_default": "2020-01-01" + }, + "FILTRY": { + "_default": "2020-01-01" + }, + "FTMEUR": { + "_default": "2020-01-01" + }, + "GMTGBP": { + "_default": "2020-01-01" + }, + "ZILTRY": { + "_default": "2020-01-01" + }, + "GMTTRY": { + "_default": "2020-01-01" + }, + "WAVESTRY": { + "_default": "2020-01-01" + }, + "BTCUST": { + "_default": "2020-01-01" + }, + "ASTRBTC": { + "_default": "2020-01-01" + }, + "ASTRETH": { + "_default": "2020-01-01" + }, + "BSWTRY": { + "_default": "2020-01-01" + }, + "FTTETH": { + "_default": "2020-01-01" + }, + "FUNBNB": { + "_default": "2020-01-01" + }, + "PORTOBUSD": { + "_default": "2020-01-01" + }, + "STEEMUSDT": { + "_default": "2020-01-01" + }, + "ZILEUR": { + "_default": "2020-01-01" + }, + "APEBRL": { + "_default": "2020-01-01" + }, + "AUDIOTRY": { + "_default": "2020-01-01" + }, + "BTTCBUSD": { + "_default": "2020-01-01" + }, + "GMTAUD": { + "_default": "2020-01-01" + }, + "MBLBUSD": { + "_default": "2020-01-01" + }, + "MOBUSDT": { + "_default": "2020-01-01" + }, + "MOBBUSD": { + "_default": "2020-01-01" + }, + "MOBBTC": { + "_default": "2020-01-01" + }, + "NEXOUSDT": { + "_default": "2020-01-01" + }, + "NEXOBUSD": { + "_default": "2020-01-01" + }, + "NEXOBTC": { + "_default": "2020-01-01" + }, + "REIUSDT": { + "_default": "2020-01-01" + }, + "REIBNB": { + "_default": "2020-01-01" + }, + "REIETH": { + "_default": "2020-01-01" + }, + "GALUSDT": { + "_default": "2020-01-01" + }, + "GALBUSD": { + "_default": "2020-01-01" + }, + "GALBNB": { + "_default": "2020-01-01" + }, + "GALBTC": { + "_default": "2020-01-01" + }, + "JASMYEUR": { + "_default": "2020-01-01" + }, + "KNCBNB": { + "_default": "2020-01-01" + }, + "SHIBGBP": { + "_default": "2020-01-01" + }, + "GALEUR": { + "_default": "2020-01-01" + }, + "GALTRY": { + "_default": "2020-01-01" + }, + "LDOBUSD": { + "_default": "2020-01-01" + }, + "LDOUSDT": { + "_default": "2020-01-01" + }, + "LDOBTC": { + "_default": "2020-01-01" + }, + "ENSTRY": { + "_default": "2020-01-01" + }, + "DAREUR": { + "_default": "2020-01-01" + }, + "DARETH": { + "_default": "2020-01-01" + }, + "ALGOETH": { + "_default": "2020-01-01" + }, + "ALGOTRY": { + "_default": "2020-01-01" + }, + "GALETH": { + "_default": "2020-01-01" + }, + "EPXUSDT": { + "_default": "2020-01-01" + }, + "EPXBUSD": { + "_default": "2020-01-01" + }, + "RUNETRY": { + "_default": "2020-01-01" + }, + "GALBRL": { + "_default": "2020-01-01" + }, + "STEEMBUSD": { + "_default": "2020-01-01" + }, + "CVCBUSD": { + "_default": "2020-01-01" + }, + "REIBUSD": { + "_default": "2020-01-01" + }, + "DREPBUSD": { + "_default": "2020-01-01" + }, + "AKROBUSD": { + "_default": "2020-01-01" + }, + "PUNDIXBUSD": { + "_default": "2020-01-01" + }, + "LUNCBUSD": { + "_default": "2020-01-01" + }, + "USTCBUSD": { + "_default": "2020-01-01" + }, + "OPBTC": { + "_default": "2020-01-01" + }, + "OPBUSD": { + "_default": "2020-01-01" + }, + "OPUSDT": { + "_default": "2020-01-01" + }, + "OGBUSD": { + "_default": "2020-01-01" + }, + "KEYBUSD": { + "_default": "2020-01-01" + }, + "ASRBUSD": { + "_default": "2020-01-01" + }, + "FIROBUSD": { + "_default": "2020-01-01" + }, + "NKNBUSD": { + "_default": "2020-01-01" + }, + "OPBNB": { + "_default": "2020-01-01" + }, + "OPEUR": { + "_default": "2020-01-01" + }, + "GTOBUSD": { + "_default": "2020-01-01" + }, + "SNXETH": { + "_default": "2020-01-01" + }, + "WBTCBUSD": { + "_default": "2020-01-01" + }, + "BELETH": { + "_default": "2020-01-01" + }, + "LITETH": { + "_default": "2020-01-01" + }, + "LEVERUSDT": { + "_default": "2020-01-01" + }, + "LEVERBUSD": { + "_default": "2020-01-01" + }, + "BURGERETH": { + "_default": "2020-01-01" + }, + "PEOPLEETH": { + "_default": "2020-01-01" + }, + "UNFIETH": { + "_default": "2020-01-01" + }, + "BONDETH": { + "_default": "2020-01-01" + }, + "STORJTRY": { + "_default": "2020-01-01" + }, + "OPETH": { + "_default": "2020-01-01" + }, + "ETCTRY": { + "_default": "2020-01-01" + }, + "WINGETH": { + "_default": "2020-01-01" + }, + "FILETH": { + "_default": "2020-01-01" + }, + "GLMBUSD": { + "_default": "2020-01-01" + }, + "SSVBUSD": { + "_default": "2020-01-01" + }, + "STGBTC": { + "_default": "2020-01-01" + }, + "STGBUSD": { + "_default": "2020-01-01" + }, + "STGUSDT": { + "_default": "2020-01-01" + }, + "ANKRTRY": { + "_default": "2020-01-01" + }, + "ARKBUSD": { + "_default": "2020-01-01" + }, + "BETHBUSD": { + "_default": "2020-01-01" + }, + "LOOMBUSD": { + "_default": "2020-01-01" + }, + "SNMBUSD": { + "_default": "2020-01-01" + }, + "AMBBUSD": { + "_default": "2020-01-01" + }, + "LUNCUSDT": { + "_default": "2020-01-01" + }, + "PHBBUSD": { + "_default": "2020-01-01" + }, + "GASBUSD": { + "_default": "2020-01-01" + }, + "NEBLBUSD": { + "_default": "2020-01-01" + }, + "PROSBUSD": { + "_default": "2020-01-01" + }, + "VIBBUSD": { + "_default": "2020-01-01" + }, + "GMXBTC": { + "_default": "2020-01-01" + }, + "GMXBUSD": { + "_default": "2020-01-01" + }, + "GMXUSDT": { + "_default": "2020-01-01" + }, + "AGIXBUSD": { + "_default": "2020-01-01" + }, + "NEBLUSDT": { + "_default": "2020-01-01" + }, + "SNTBUSD": { + "_default": "2020-01-01" + }, + "POLYXBTC": { + "_default": "2020-01-01" + }, + "POLYXBUSD": { + "_default": "2020-01-01" + }, + "POLYXUSDT": { + "_default": "2020-01-01" + }, + "APTBTC": { + "_default": "2020-01-01" + }, + "APTUSDT": { + "_default": "2020-01-01" + }, + "APTBUSD": { + "_default": "2020-01-01" + }, + "BTCPLN": { + "_default": "2020-01-01" + }, + "ETHPLN": { + "_default": "2020-01-01" + }, + "BUSDPLN": { + "_default": "2020-01-01" + }, + "APTEUR": { + "_default": "2020-01-01" + }, + "APTTRY": { + "_default": "2020-01-01" + }, + "APTBRL": { + "_default": "2020-01-01" + }, + "QKCBUSD": { + "_default": "2020-01-01" + }, + "OSMOBTC": { + "_default": "2020-01-01" + }, + "OSMOUSDT": { + "_default": "2020-01-01" + }, + "OSMOBUSD": { + "_default": "2020-01-01" + }, + "HFTBTC": { + "_default": "2020-01-01" + }, + "HFTBUSD": { + "_default": "2020-01-01" + }, + "HFTUSDT": { + "_default": "2020-01-01" + }, + "ARPAETH": { + "_default": "2020-01-01" + }, + "PHBUSDT": { + "_default": "2020-01-01" + }, + "VITEBUSD": { + "_default": "2020-01-01" + }, + "HOOKBTC": { + "_default": "2020-01-01" + }, + "HOOKUSDT": { + "_default": "2020-01-01" + }, + "HOOKBUSD": { + "_default": "2020-01-01" + }, + "HOOKBNB": { + "_default": "2020-01-01" + }, + "MAGICBTC": { + "_default": "2020-01-01" + }, + "MAGICBUSD": { + "_default": "2020-01-01" + }, + "MAGICUSDT": { + "_default": "2020-01-01" + }, + "BUSDRON": { + "_default": "2020-01-01" + }, + "HIFIETH": { + "_default": "2020-01-01" + }, + "HIFIUSDT": { + "_default": "2020-01-01" + }, + "RPLBTC": { + "_default": "2020-01-01" + }, + "RPLBUSD": { + "_default": "2020-01-01" + }, + "RPLUSDT": { + "_default": "2020-01-01" + }, + "PROSUSDT": { + "_default": "2020-01-01" + }, + "FETTRY": { + "_default": "2020-01-01" + }, + "GFTBUSD": { + "_default": "2020-01-01" + }, + "AGIXUSDT": { + "_default": "2020-01-01" + }, + "APTETH": { + "_default": "2020-01-01" + }, + "BTCRON": { + "_default": "2020-01-01" + }, + "GNSUSDT": { + "_default": "2020-01-01" + }, + "GNSBTC": { + "_default": "2020-01-01" + }, + "SYNBTC": { + "_default": "2020-01-01" + }, + "SYNUSDT": { + "_default": "2020-01-01" + }, + "VIBUSDT": { + "_default": "2020-01-01" + }, + "SSVUSDT": { + "_default": "2020-01-01" + }, + "LQTYUSDT": { + "_default": "2020-01-01" + }, + "LQTYBTC": { + "_default": "2020-01-01" + }, + "AMBUSDT": { + "_default": "2020-01-01" + }, + "BETHUSDT": { + "_default": "2020-01-01" + }, + "CFXTRY": { + "_default": "2020-01-01" + }, + "STXTRY": { + "_default": "2020-01-01" + }, + "USTCUSDT": { + "_default": "2020-01-01" + }, + "GASUSDT": { + "_default": "2020-01-01" + }, + "GLMUSDT": { + "_default": "2020-01-01" + }, + "PROMUSDT": { + "_default": "2020-01-01" + }, + "QKCUSDT": { + "_default": "2020-01-01" + }, + "UFTUSDT": { + "_default": "2020-01-01" + }, + "IDBTC": { + "_default": "2020-01-01" + }, + "IDBNB": { + "_default": "2020-01-01" + }, + "IDUSDT": { + "_default": "2020-01-01" + }, + "ARBBTC": { + "_default": "2020-01-01" + }, + "ARBUSDT": { + "_default": "2020-01-01" + }, + "AGIXTRY": { + "_default": "2020-01-01" + }, + "LOOMUSDT": { + "_default": "2020-01-01" + }, + "OAXUSDT": { + "_default": "2020-01-01" + }, + "ARBTUSD": { + "_default": "2020-01-01" + }, + "ARBTRY": { + "_default": "2020-01-01" + }, + "ARBEUR": { + "_default": "2020-01-01" + }, + "IDTUSD": { + "_default": "2020-01-01" + }, + "IDTRY": { + "_default": "2020-01-01" + }, + "IDEUR": { + "_default": "2020-01-01" + }, + "LDOTUSD": { + "_default": "2020-01-01" + }, + "MATICTUSD": { + "_default": "2020-01-01" + }, + "OPTUSD": { + "_default": "2020-01-01" + }, + "SOLTUSD": { + "_default": "2020-01-01" + }, + "SSVTUSD": { + "_default": "2020-01-01" + }, + "RDNTBTC": { + "_default": "2020-01-01" + }, + "RDNTUSDT": { + "_default": "2020-01-01" + }, + "RDNTTUSD": { + "_default": "2020-01-01" + }, + "ARBRUB": { + "_default": "2020-01-01" + }, + "JOETRY": { + "_default": "2020-01-01" + }, + "MAGICTRY": { + "_default": "2020-01-01" + }, + "USDTPLN": { + "_default": "2020-01-01" + }, + "ACHTRY": { + "_default": "2020-01-01" + }, + "XVSTRY": { + "_default": "2020-01-01" + }, + "EGLDRON": { + "_default": "2020-01-01" + }, + "USDTRON": { + "_default": "2020-01-01" + }, + "USDTARS": { + "_default": "2020-01-01" + }, + "DOGETUSD": { + "_default": "2020-01-01" + }, + "WBTCUSDT": { + "_default": "2020-01-01" + }, + "EDUUSDT": { + "_default": "2020-01-01" + }, + "EDUTUSD": { + "_default": "2020-01-01" + }, + "EDUBNB": { + "_default": "2020-01-01" + }, + "EDUBTC": { + "_default": "2020-01-01" + }, + "EDUEUR": { + "_default": "2020-01-01" + }, + "EDUTRY": { + "_default": "2020-01-01" + }, + "SUIUSDT": { + "_default": "2020-01-01" + }, + "SUITUSD": { + "_default": "2020-01-01" + }, + "SUIBTC": { + "_default": "2020-01-01" + }, + "SUIBNB": { + "_default": "2020-01-01" + }, + "SUIEUR": { + "_default": "2020-01-01" + }, + "SUITRY": { + "_default": "2020-01-01" + }, + "AERGOUSDT": { + "_default": "2020-01-01" + }, + "RNDRTRY": { + "_default": "2020-01-01" + }, + "PEPEUSDT": { + "_default": "2020-01-01" + }, + "PEPETUSD": { + "_default": "2020-01-01" + }, + "FLOKIUSDT": { + "_default": "2020-01-01" + }, + "FLOKITUSD": { + "_default": "2020-01-01" + }, + "OGTRY": { + "_default": "2020-01-01" + }, + "PEPETRY": { + "_default": "2020-01-01" + }, + "WBETHETH": { + "_default": "2020-01-01" + }, + "ASTUSDT": { + "_default": "2020-01-01" + }, + "SNTUSDT": { + "_default": "2020-01-01" + }, + "FLOKITRY": { + "_default": "2020-01-01" + }, + "CITYTRY": { + "_default": "2020-01-01" + }, + "COMBOUSDT": { + "_default": "2020-01-01" + }, + "COMBOBNB": { + "_default": "2020-01-01" + }, + "COMBOTRY": { + "_default": "2020-01-01" + }, + "LTCTRY": { + "_default": "2020-01-01" + }, + "RADTRY": { + "_default": "2020-01-01" + }, + "BTCARS": { + "_default": "2020-01-01" + }, + "OPTRY": { + "_default": "2020-01-01" + }, + "PAXGTRY": { + "_default": "2020-01-01" + }, + "MAVBTC": { + "_default": "2020-01-01" + }, + "MAVUSDT": { + "_default": "2020-01-01" + }, + "MAVTUSD": { + "_default": "2020-01-01" + }, + "CFXTUSD": { + "_default": "2020-01-01" + }, + "PENDLEBTC": { + "_default": "2020-01-01" + }, + "PENDLEUSDT": { + "_default": "2020-01-01" + }, + "PENDLETUSD": { + "_default": "2020-01-01" + }, + "MAVTRY": { + "_default": "2020-01-01" + }, + "OCEANTRY": { + "_default": "2020-01-01" + }, + "TUSDTRY": { + "_default": "2020-01-01" + }, + "ARBETH": { + "_default": "2020-01-01" + }, + "BCHTRY": { + "_default": "2020-01-01" + }, + "XVGTRY": { + "_default": "2020-01-01" + }, + "XVGTUSD": { + "_default": "2020-01-01" + }, + "ARKMUSDT": { + "_default": "2020-01-01" + }, + "ARKMTUSD": { + "_default": "2020-01-01" + }, + "ARKMTRY": { + "_default": "2020-01-01" + }, + "ARKMBNB": { + "_default": "2020-01-01" + }, + "ARKMBTC": { + "_default": "2020-01-01" + }, + "WBETHUSDT": { + "_default": "2020-01-01" + }, + "ACATRY": { + "_default": "2020-01-01" + }, + "AVAXTUSD": { + "_default": "2020-01-01" + }, + "COMPTUSD": { + "_default": "2020-01-01" + }, + "COMPTRY": { + "_default": "2020-01-01" + }, + "XECTRY": { + "_default": "2020-01-01" + }, + "QUICKTUSD": { + "_default": "2020-01-01" + }, + "WLDUSDT": { + "_default": "2020-01-01" + }, + "WLDBTC": { + "_default": "2020-01-01" + }, + "BNBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDBUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDT": { + "_default": "2020-01-01" + }, + "ARKMRUB": { + "_default": "2020-01-01" + }, + "WLDTRY": { + "_default": "2020-01-01" + }, + "WLDRUB": { + "_default": "2020-01-01" + }, + "AMPTRY": { + "_default": "2020-01-01" + }, + "OGNTRY": { + "_default": "2020-01-01" + }, + "BTCFDUSD": { + "_default": "2020-01-01" + }, + "ETHFDUSD": { + "_default": "2020-01-01" + }, + "ASRTRY": { + "_default": "2020-01-01" + }, + "ATMTRY": { + "_default": "2020-01-01" + }, + "ACMTRY": { + "_default": "2020-01-01" + }, + "BARTRY": { + "_default": "2020-01-01" + }, + "JUVTRY": { + "_default": "2020-01-01" + }, + "PSGTRY": { + "_default": "2020-01-01" + }, + "SEIBNB": { + "_default": "2020-01-01" + }, + "SEIBTC": { + "_default": "2020-01-01" + }, + "SEIFDUSD": { + "_default": "2020-01-01" + }, + "SEITRY": { + "_default": "2020-01-01" + }, + "SEIUSDT": { + "_default": "2020-01-01" + }, + "CYBERBNB": { + "_default": "2020-01-01" + }, + "CYBERBTC": { + "_default": "2020-01-01" + }, + "CYBERFDUSD": { + "_default": "2020-01-01" + }, + "CYBERTRY": { + "_default": "2020-01-01" + }, + "CYBERUSDT": { + "_default": "2020-01-01" + }, + "CYBERTUSD": { + "_default": "2020-01-01" + }, + "SEITUSD": { + "_default": "2020-01-01" + }, + "LPTTRY": { + "_default": "2020-01-01" + }, + "UNITRY": { + "_default": "2020-01-01" + }, + "SOLFDUSD": { + "_default": "2020-01-01" + }, + "TOMOTRY": { + "_default": "2020-01-01" + }, + "UNFITRY": { + "_default": "2020-01-01" + }, + "XRPFDUSD": { + "_default": "2020-01-01" + }, + "DOGEFDUSD": { + "_default": "2020-01-01" + }, + "CYBERETH": { + "_default": "2020-01-01" + }, + "MTLTRY": { + "_default": "2020-01-01" + }, + "ARKUSDT": { + "_default": "2020-01-01" + }, + "CREAMUSDT": { + "_default": "2020-01-01" + }, + "GFTUSDT": { + "_default": "2020-01-01" + }, + "IQUSDT": { + "_default": "2020-01-01" + }, + "USDTVAI": { + "_default": "2020-01-01" + }, + "ARBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDTRY": { + "_default": "2020-01-01" + }, + "FRONTTRY": { + "_default": "2020-01-01" + }, + "SUIFDUSD": { + "_default": "2020-01-01" + }, + "NTRNBTC": { + "_default": "2020-01-01" + }, + "NTRNUSDT": { + "_default": "2020-01-01" + }, + "NTRNBNB": { + "_default": "2020-01-01" + }, + "FILFDUSD": { + "_default": "2020-01-01" + }, + "FRONTTUSD": { + "_default": "2020-01-01" + }, + "LEVERTRY": { + "_default": "2020-01-01" + }, + "LTCFDUSD": { + "_default": "2020-01-01" + }, + "ADAFDUSD": { + "_default": "2020-01-01" + }, + "RUNETUSD": { + "_default": "2020-01-01" + }, + "TRBTRY": { + "_default": "2020-01-01" + }, + "ATOMFDUSD": { + "_default": "2020-01-01" + }, + "AVAXFDUSD": { + "_default": "2020-01-01" + }, + "BANDTRY": { + "_default": "2020-01-01" + }, + "BCHFDUSD": { + "_default": "2020-01-01" + }, + "LOOMTRY": { + "_default": "2020-01-01" + }, + "MATICFDUSD": { + "_default": "2020-01-01" + }, + "ALGOFDUSD": { + "_default": "2020-01-01" + }, + "DOTFDUSD": { + "_default": "2020-01-01" + }, + "FTMFDUSD": { + "_default": "2020-01-01" + }, + "LINKFDUSD": { + "_default": "2020-01-01" + }, + "NEARFDUSD": { + "_default": "2020-01-01" + }, + "STRAXTRY": { + "_default": "2020-01-01" + }, + "TIABTC": { + "_default": "2020-01-01" + }, + "TIAUSDT": { + "_default": "2020-01-01" + }, + "TIATRY": { + "_default": "2020-01-01" + }, + "MEMEBNB": { + "_default": "2020-01-01" + }, + "MEMEUSDT": { + "_default": "2020-01-01" + }, + "MEMEFDUSD": { + "_default": "2020-01-01" + }, + "MEMETUSD": { + "_default": "2020-01-01" + }, + "MEMETRY": { + "_default": "2020-01-01" + }, + "ORDIBTC": { + "_default": "2020-01-01" + }, + "ORDIUSDT": { + "_default": "2020-01-01" + }, + "ORDITRY": { + "_default": "2020-01-01" + }, + "EGLDFDUSD": { + "_default": "2020-01-01" + }, + "FETFDUSD": { + "_default": "2020-01-01" + }, + "GASFDUSD": { + "_default": "2020-01-01" + }, + "INJETH": { + "_default": "2020-01-01" + }, + "INJTUSD": { + "_default": "2020-01-01" + }, + "OPFDUSD": { + "_default": "2020-01-01" + }, + "ORDIFDUSD": { + "_default": "2020-01-01" + }, + "ORDITUSD": { + "_default": "2020-01-01" + }, + "RNDRFDUSD": { + "_default": "2020-01-01" + }, + "SHIBTUSD": { + "_default": "2020-01-01" + }, + "BEAMXUSDT": { + "_default": "2020-01-01" + }, + "ARKTRY": { + "_default": "2020-01-01" + }, + "BEAMXTRY": { + "_default": "2020-01-01" + }, + "CAKETRY": { + "_default": "2020-01-01" + }, + "CAKETUSD": { + "_default": "2020-01-01" + }, + "DYDXFDUSD": { + "_default": "2020-01-01" + }, + "PIVXUSDT": { + "_default": "2020-01-01" + }, + "RUNEFDUSD": { + "_default": "2020-01-01" + }, + "TIATUSD": { + "_default": "2020-01-01" + }, + "DOTTUSD": { + "_default": "2020-01-01" + }, + "GALAFDUSD": { + "_default": "2020-01-01" + }, + "WLDFDUSD": { + "_default": "2020-01-01" + }, + "GASTRY": { + "_default": "2020-01-01" + }, + "NTRNTRY": { + "_default": "2020-01-01" + }, + "VICBTC": { + "_default": "2020-01-01" + }, + "VICUSDT": { + "_default": "2020-01-01" + }, + "VICTRY": { + "_default": "2020-01-01" + }, + "BLURBTC": { + "_default": "2020-01-01" + }, + "BLURUSDT": { + "_default": "2020-01-01" + }, + "BLURTRY": { + "_default": "2020-01-01" + }, + "BLURFDUSD": { + "_default": "2020-01-01" + }, + "SUPERFDUSD": { + "_default": "2020-01-01" + }, + "USTCFDUSD": { + "_default": "2020-01-01" + }, + "USTCTRY": { + "_default": "2020-01-01" + }, + "DYDXTRY": { + "_default": "2020-01-01" + }, + "VANRYUSDT": { + "_default": "2020-01-01" + }, + "VANRYBTC": { + "_default": "2020-01-01" + }, + "BTCAEUR": { + "_default": "2020-01-01" + }, + "AEURUSDT": { + "_default": "2020-01-01" + }, + "ETHAEUR": { + "_default": "2020-01-01" + }, + "EURAEUR": { + "_default": "2020-01-01" + }, + "AUCTIONFDUSD": { + "_default": "2020-01-01" + }, + "IOTAFDUSD": { + "_default": "2020-01-01" + }, + "LUNCTRY": { + "_default": "2020-01-01" + }, + "SUPERTRY": { + "_default": "2020-01-01" + }, + "JTOUSDT": { + "_default": "2020-01-01" + }, + "JTOFDUSD": { + "_default": "2020-01-01" + }, + "JTOTRY": { + "_default": "2020-01-01" + }, + "1000SATSUSDT": { + "_default": "2020-01-01" + }, + "1000SATSFDUSD": { + "_default": "2020-01-01" + }, + "1000SATSTRY": { + "_default": "2020-01-01" + }, + "SHIBFDUSD": { + "_default": "2020-01-01" + }, + "SANDFDUSD": { + "_default": "2020-01-01" + }, + "MEMEETH": { + "_default": "2020-01-01" + }, + "IOTATRY": { + "_default": "2020-01-01" + }, + "INJFDUSD": { + "_default": "2020-01-01" + }, + "FIDATRY": { + "_default": "2020-01-01" + }, + "BONKUSDT": { + "_default": "2020-01-01" + }, + "BONKFDUSD": { + "_default": "2020-01-01" + }, + "BONKTRY": { + "_default": "2020-01-01" + }, + "ACEFDUSD": { + "_default": "2020-01-01" + }, + "ACEUSDT": { + "_default": "2020-01-01" + }, + "ACEBNB": { + "_default": "2020-01-01" + }, + "ACEBTC": { + "_default": "2020-01-01" + }, + "ACETRY": { + "_default": "2020-01-01" + }, + "BLZFDUSD": { + "_default": "2020-01-01" + }, + "RARETRY": { + "_default": "2020-01-01" + }, + "VANRYTRY": { + "_default": "2020-01-01" + }, + "NFPBTC": { + "_default": "2020-01-01" + }, + "NFPUSDT": { + "_default": "2020-01-01" + }, + "NFPBNB": { + "_default": "2020-01-01" + }, + "NFPFDUSD": { + "_default": "2020-01-01" + }, + "NFPTUSD": { + "_default": "2020-01-01" + }, + "NFPTRY": { + "_default": "2020-01-01" + }, + "ARBUSDC": { + "_default": "2020-01-01" + }, + "AVAXUSDC": { + "_default": "2020-01-01" + }, + "DOTUSDC": { + "_default": "2020-01-01" + }, + "INJUSDC": { + "_default": "2020-01-01" + }, + "MATICUSDC": { + "_default": "2020-01-01" + }, + "OPUSDC": { + "_default": "2020-01-01" + }, + "ORDIUSDC": { + "_default": "2020-01-01" + }, + "AIBTC": { + "_default": "2020-01-01" + }, + "AIUSDT": { + "_default": "2020-01-01" + }, + "AIBNB": { + "_default": "2020-01-01" + }, + "AIFDUSD": { + "_default": "2020-01-01" + }, + "AITUSD": { + "_default": "2020-01-01" + }, + "AITRY": { + "_default": "2020-01-01" + }, + "ICPFDUSD": { + "_default": "2020-01-01" + }, + "LDOFDUSD": { + "_default": "2020-01-01" + }, + "MOVRTRY": { + "_default": "2020-01-01" + }, + "XAIBTC": { + "_default": "2020-01-01" + }, + "XAIUSDT": { + "_default": "2020-01-01" + }, + "XAIBNB": { + "_default": "2020-01-01" + }, + "XAIFDUSD": { + "_default": "2020-01-01" + }, + "XAITUSD": { + "_default": "2020-01-01" + }, + "XAITRY": { + "_default": "2020-01-01" + }, + "SKLTRY": { + "_default": "2020-01-01" + }, + "STXFDUSD": { + "_default": "2020-01-01" + }, + "TIAFDUSD": { + "_default": "2020-01-01" + }, + "MANTABTC": { + "_default": "2020-01-01" + }, + "MANTAUSDT": { + "_default": "2020-01-01" + }, + "MANTABNB": { + "_default": "2020-01-01" + }, + "MANTAFDUSD": { + "_default": "2020-01-01" + }, + "MANTATRY": { + "_default": "2020-01-01" + }, + "ENSFDUSD": { + "_default": "2020-01-01" + }, + "ETCFDUSD": { + "_default": "2020-01-01" + }, + "SUIUSDC": { + "_default": "2020-01-01" + }, + "TIAUSDC": { + "_default": "2020-01-01" + }, + "CHZFDUSD": { + "_default": "2020-01-01" + }, + "MANTAUSDC": { + "_default": "2020-01-01" + }, + "ALTBTC": { + "_default": "2020-01-01" + }, + "ALTUSDT": { + "_default": "2020-01-01" + }, + "ALTBNB": { + "_default": "2020-01-01" + }, + "ALTFDUSD": { + "_default": "2020-01-01" + }, + "ALTTRY": { + "_default": "2020-01-01" + }, + "APTFDUSD": { + "_default": "2020-01-01" + }, + "BLURUSDC": { + "_default": "2020-01-01" + }, + "JUPUSDT": { + "_default": "2020-01-01" + }, + "JUPFDUSD": { + "_default": "2020-01-01" + }, + "JUPTRY": { + "_default": "2020-01-01" + }, + "ALTUSDC": { + "_default": "2020-01-01" + }, + "MAGICFDUSD": { + "_default": "2020-01-01" + }, + "SEIUSDC": { + "_default": "2020-01-01" + }, + "PYTHBTC": { + "_default": "2020-01-01" + }, + "PYTHUSDT": { + "_default": "2020-01-01" + }, + "PYTHFDUSD": { + "_default": "2020-01-01" + }, + "PYTHTRY": { + "_default": "2020-01-01" + }, + "RONINBTC": { + "_default": "2020-01-01" + }, + "RONINUSDT": { + "_default": "2020-01-01" + }, + "RONINFDUSD": { + "_default": "2020-01-01" + }, + "RONINTRY": { + "_default": "2020-01-01" + }, + "DYMBTC": { + "_default": "2020-01-01" + }, + "DYMUSDT": { + "_default": "2020-01-01" + }, + "DYMFDUSD": { + "_default": "2020-01-01" + }, + "DYMTRY": { + "_default": "2020-01-01" + }, + "JUPUSDC": { + "_default": "2020-01-01" + }, + "PENDLEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELBTC": { + "_default": "2020-01-01" + }, + "PIXELBNB": { + "_default": "2020-01-01" + }, + "PIXELUSDT": { + "_default": "2020-01-01" + }, + "PIXELFDUSD": { + "_default": "2020-01-01" + }, + "PIXELTRY": { + "_default": "2020-01-01" + }, + "STRKBTC": { + "_default": "2020-01-01" + }, + "STRKUSDT": { + "_default": "2020-01-01" + }, + "STRKFDUSD": { + "_default": "2020-01-01" + }, + "STRKTRY": { + "_default": "2020-01-01" + }, + "FILUSDC": { + "_default": "2020-01-01" + }, + "HBARTRY": { + "_default": "2020-01-01" + }, + "PENDLETRY": { + "_default": "2020-01-01" + }, + "WLDUSDC": { + "_default": "2020-01-01" + }, + "CKBTRY": { + "_default": "2020-01-01" + }, + "COTITRY": { + "_default": "2020-01-01" + }, + "LDOTRY": { + "_default": "2020-01-01" + }, + "UNIUSDC": { + "_default": "2020-01-01" + }, + "PORTALBTC": { + "_default": "2020-01-01" + }, + "PORTALUSDT": { + "_default": "2020-01-01" + }, + "PORTALBNB": { + "_default": "2020-01-01" + }, + "PORTALFDUSD": { + "_default": "2020-01-01" + }, + "PORTALTRY": { + "_default": "2020-01-01" + }, + "PDABTC": { + "_default": "2020-01-01" + }, + "PDAUSDT": { + "_default": "2020-01-01" + }, + "AXLBTC": { + "_default": "2020-01-01" + }, + "AXLUSDT": { + "_default": "2020-01-01" + }, + "AXLFDUSD": { + "_default": "2020-01-01" + }, + "AXLTRY": { + "_default": "2020-01-01" + }, + "PEPEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELUSDC": { + "_default": "2020-01-01" + }, + "STRKUSDC": { + "_default": "2020-01-01" + }, + "UNIFDUSD": { + "_default": "2020-01-01" + }, + "OMTRY": { + "_default": "2020-01-01" + }, + "THETATRY": { + "_default": "2020-01-01" + }, + "WIFBTC": { + "_default": "2020-01-01" + }, + "WIFUSDT": { + "_default": "2020-01-01" + }, + "WIFFDUSD": { + "_default": "2020-01-01" + }, + "WIFTRY": { + "_default": "2020-01-01" + }, + "AGIXFDUSD": { + "_default": "2020-01-01" + }, + "PEPEUSDC": { + "_default": "2020-01-01" + }, + "SHIBUSDC": { + "_default": "2020-01-01" + }, + "THETAFDUSD": { + "_default": "2020-01-01" + }, + "ARTRY": { + "_default": "2020-01-01" + }, + "METISBTC": { + "_default": "2020-01-01" + }, + "METISUSDT": { + "_default": "2020-01-01" + }, + "METISFDUSD": { + "_default": "2020-01-01" + }, + "METISTRY": { + "_default": "2020-01-01" + }, + "BNBJPY": { + "_default": "2020-01-01" + }, + "BTCJPY": { + "_default": "2020-01-01" + }, + "ETHJPY": { + "_default": "2020-01-01" + }, + "FLOKIFDUSD": { + "_default": "2020-01-01" + }, + "GRTFDUSD": { + "_default": "2020-01-01" + }, + "NEARUSDC": { + "_default": "2020-01-01" + }, + "SNXTRY": { + "_default": "2020-01-01" + }, + "AEVOBTC": { + "_default": "2020-01-01" + }, + "AEVOUSDT": { + "_default": "2020-01-01" + }, + "AEVOBNB": { + "_default": "2020-01-01" + }, + "AEVOFDUSD": { + "_default": "2020-01-01" + }, + "AEVOTRY": { + "_default": "2020-01-01" + }, + "FETUSDC": { + "_default": "2020-01-01" + }, + "IMXTRY": { + "_default": "2020-01-01" + }, + "EURUSDC": { + "_default": "2020-01-01" + }, + "BOMETRY": { + "_default": "2020-01-01" + }, + "BOMEBTC": { + "_default": "2020-01-01" + }, + "BOMEUSDT": { + "_default": "2020-01-01" + }, + "BOMEFDUSD": { + "_default": "2020-01-01" + }, + "ETHFIBTC": { + "_default": "2020-01-01" + }, + "ETHFIUSDT": { + "_default": "2020-01-01" + }, + "ETHFIBNB": { + "_default": "2020-01-01" + }, + "ETHFIFDUSD": { + "_default": "2020-01-01" + }, + "ETHFITRY": { + "_default": "2020-01-01" + }, + "AAVETRY": { + "_default": "2020-01-01" + }, + "ARKMFDUSD": { + "_default": "2020-01-01" + }, + "CRVTRY": { + "_default": "2020-01-01" + }, + "FETBRL": { + "_default": "2020-01-01" + }, + "RAYFDUSD": { + "_default": "2020-01-01" + }, + "RNDREUR": { + "_default": "2020-01-01" + }, + "BONKUSDC": { + "_default": "2020-01-01" + }, + "FLOKIUSDC": { + "_default": "2020-01-01" + }, + "MKRTRY": { + "_default": "2020-01-01" + }, + "RAYTRY": { + "_default": "2020-01-01" + }, + "RNDRBRL": { + "_default": "2020-01-01" + }, + "ENABTC": { + "_default": "2020-01-01" + }, + "ENAUSDT": { + "_default": "2020-01-01" + }, + "ENABNB": { + "_default": "2020-01-01" + }, + "ENAFDUSD": { + "_default": "2020-01-01" + }, + "ENATRY": { + "_default": "2020-01-01" + }, + "LQTYFDUSD": { + "_default": "2020-01-01" + }, + "MASKTRY": { + "_default": "2020-01-01" + }, + "PENDLEUSDC": { + "_default": "2020-01-01" + }, + "RDNTTRY": { + "_default": "2020-01-01" + }, + "WBTC": { + "_default": "2020-01-01" + }, + "WUSDT": { + "_default": "2020-01-01" + }, + "WFDUSD": { + "_default": "2020-01-01" + }, + "WTRY": { + "_default": "2020-01-01" + }, + "BOMEUSDC": { + "_default": "2020-01-01" + }, + "JTOUSDC": { + "_default": "2020-01-01" + }, + "WIFUSDC": { + "_default": "2020-01-01" + }, + "TNSRBTC": { + "_default": "2020-01-01" + }, + "TNSRUSDT": { + "_default": "2020-01-01" + }, + "TNSRFDUSD": { + "_default": "2020-01-01" + }, + "TNSRTRY": { + "_default": "2020-01-01" + }, + "SAGABTC": { + "_default": "2020-01-01" + }, + "SAGAUSDT": { + "_default": "2020-01-01" + }, + "SAGABNB": { + "_default": "2020-01-01" + }, + "SAGAFDUSD": { + "_default": "2020-01-01" + }, + "SAGATRY": { + "_default": "2020-01-01" + }, + "USDTMXN": { + "_default": "2020-01-01" + }, + "CKBUSDC": { + "_default": "2020-01-01" + }, + "ENAUSDC": { + "_default": "2020-01-01" + }, + "ETHFIUSDC": { + "_default": "2020-01-01" + }, + "YGGUSDC": { + "_default": "2020-01-01" + }, + "USDTCZK": { + "_default": "2020-01-01" + }, + "TAOBTC": { + "_default": "2020-01-01" + }, + "TAOUSDT": { + "_default": "2020-01-01" + }, + "TAOFDUSD": { + "_default": "2020-01-01" + }, + "TAOTRY": { + "_default": "2020-01-01" + }, + "CFXUSDC": { + "_default": "2020-01-01" + }, + "RNDRUSDC": { + "_default": "2020-01-01" + }, + "RUNEUSDC": { + "_default": "2020-01-01" + }, + "SAGAUSDC": { + "_default": "2020-01-01" + }, + "POLYXTRY": { + "_default": "2020-01-01" + }, + "OMNIBTC": { + "_default": "2020-01-01" + }, + "OMNIUSDT": { + "_default": "2020-01-01" + }, + "OMNIBNB": { + "_default": "2020-01-01" + }, + "OMNIFDUSD": { + "_default": "2020-01-01" + }, + "OMNITRY": { + "_default": "2020-01-01" + }, + "APTUSDC": { + "_default": "2020-01-01" + }, + "GALAUSDC": { + "_default": "2020-01-01" + }, + "OMNIBRL": { + "_default": "2020-01-01" + }, + "STXUSDC": { + "_default": "2020-01-01" + }, + "ICPUSDC": { + "_default": "2020-01-01" + }, + "OMNIUSDC": { + "_default": "2020-01-01" + }, + "PEPEBRL": { + "_default": "2020-01-01" + }, + "YGGTRY": { + "_default": "2020-01-01" + }, + "ADAJPY": { + "_default": "2020-01-01" + }, + "SHIBJPY": { + "_default": "2020-01-01" + }, + "SOLJPY": { + "_default": "2020-01-01" + }, + "XRPJPY": { + "_default": "2020-01-01" + }, + "REZBTC": { + "_default": "2020-01-01" + }, + "REZUSDT": { + "_default": "2020-01-01" + }, + "REZBNB": { + "_default": "2020-01-01" + }, + "REZFDUSD": { + "_default": "2020-01-01" + }, + "REZTRY": { + "_default": "2020-01-01" + }, + "EGLDTRY": { + "_default": "2020-01-01" + }, + "PHBTRY": { + "_default": "2020-01-01" + }, + "RSRTRY": { + "_default": "2020-01-01" + }, + "BBBTC": { + "_default": "2020-01-01" + }, + "BBUSDT": { + "_default": "2020-01-01" + }, + "BBBNB": { + "_default": "2020-01-01" + }, + "BBFDUSD": { + "_default": "2020-01-01" + }, + "BBTRY": { + "_default": "2020-01-01" + }, + "FRONTUSDC": { + "_default": "2020-01-01" + }, + "PEOPLETRY": { + "_default": "2020-01-01" + }, + "TRBUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDT": { + "_default": "2020-01-01" + }, + "NOTBNB": { + "_default": "2020-01-01" + }, + "NOTFDUSD": { + "_default": "2020-01-01" + }, + "NOTTRY": { + "_default": "2020-01-01" + }, + "ARKMUSDC": { + "_default": "2020-01-01" + }, + "ARUSDC": { + "_default": "2020-01-01" + }, + "BBUSDC": { + "_default": "2020-01-01" + }, + "CRVUSDC": { + "_default": "2020-01-01" + }, + "PEOPLEUSDC": { + "_default": "2020-01-01" + }, + "ARFDUSD": { + "_default": "2020-01-01" + }, + "ENAEUR": { + "_default": "2020-01-01" + }, + "PEPEEUR": { + "_default": "2020-01-01" + }, + "REZUSDC": { + "_default": "2020-01-01" + }, + "TRBFDUSD": { + "_default": "2020-01-01" + }, + "USDCTRY": { + "_default": "2020-01-01" + }, + "BTCMXN": { + "_default": "2020-01-01" + }, + "XRPMXN": { + "_default": "2020-01-01" + }, + "ENSUSDC": { + "_default": "2020-01-01" + }, + "LDOUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDC": { + "_default": "2020-01-01" + }, + "NEARBRL": { + "_default": "2020-01-01" + }, + "HIGHTRY": { + "_default": "2020-01-01" + }, + "PEOPLEFDUSD": { + "_default": "2020-01-01" + }, + "TNSRUSDC": { + "_default": "2020-01-01" + }, + "USDTCOP": { + "_default": "2020-01-01" + }, + "IOBTC": { + "_default": "2020-01-01" + }, + "IOUSDT": { + "_default": "2020-01-01" + }, + "IOBNB": { + "_default": "2020-01-01" + }, + "IOFDUSD": { + "_default": "2020-01-01" + }, + "IOTRY": { + "_default": "2020-01-01" + }, + "NOTBRL": { + "_default": "2020-01-01" + }, + "TRUTRY": { + "_default": "2020-01-01" + }, + "WIFEUR": { + "_default": "2020-01-01" + }, + "ZKBTC": { + "_default": "2020-01-01" + }, + "ZKUSDT": { + "_default": "2020-01-01" + }, + "ZKFDUSD": { + "_default": "2020-01-01" + }, + "ZKTRY": { + "_default": "2020-01-01" + }, + "LISTAUSDT": { + "_default": "2020-01-01" + }, + "LISTABNB": { + "_default": "2020-01-01" + }, + "LISTAFDUSD": { + "_default": "2020-01-01" + }, + "LISTATRY": { + "_default": "2020-01-01" + }, + "ZROBTC": { + "_default": "2020-01-01" + }, + "ZROUSDT": { + "_default": "2020-01-01" + }, + "ZROFDUSD": { + "_default": "2020-01-01" + }, + "ZROTRY": { + "_default": "2020-01-01" + }, + "LISTABRL": { + "_default": "2020-01-01" + }, + "BAKETRY": { + "_default": "2020-01-01" + }, + "WIFBRL": { + "_default": "2020-01-01" + }, + "ZKUSDC": { + "_default": "2020-01-01" + }, + "ZROUSDC": { + "_default": "2020-01-01" + }, + "IOUSDC": { + "_default": "2020-01-01" + }, + "1000SATSUSDC": { + "_default": "2020-01-01" + }, + "BNXTRY": { + "_default": "2020-01-01" + }, + "ETHARS": { + "_default": "2020-01-01" + }, + "GUSDT": { + "_default": "2020-01-01" + }, + "GTRY": { + "_default": "2020-01-01" + }, + "BANANABTC": { + "_default": "2020-01-01" + }, + "BANANAUSDT": { + "_default": "2020-01-01" + }, + "BANANABNB": { + "_default": "2020-01-01" + }, + "BANANAFDUSD": { + "_default": "2020-01-01" + }, + "BANANATRY": { + "_default": "2020-01-01" + }, + "RENDERBTC": { + "_default": "2020-01-01" + }, + "RENDERUSDT": { + "_default": "2020-01-01" + }, + "RENDERFDUSD": { + "_default": "2020-01-01" + }, + "RENDERUSDC": { + "_default": "2020-01-01" + }, + "RENDERTRY": { + "_default": "2020-01-01" + }, + "RENDEREUR": { + "_default": "2020-01-01" + }, + "RENDERBRL": { + "_default": "2020-01-01" + }, + "TONBTC": { + "_default": "2020-01-01" + }, + "TONUSDT": { + "_default": "2020-01-01" + }, + "TONFDUSD": { + "_default": "2020-01-01" + }, + "TONTRY": { + "_default": "2020-01-01" + }, + "BONKBRL": { + "_default": "2020-01-01" + }, + "NOTEUR": { + "_default": "2020-01-01" + }, + "DOGEJPY": { + "_default": "2020-01-01" + }, + "MATICJPY": { + "_default": "2020-01-01" + }, + "NEARJPY": { + "_default": "2020-01-01" + }, + "TONUSDC": { + "_default": "2020-01-01" + }, + "AAVEFDUSD": { + "_default": "2020-01-01" + }, + "DOGSUSDT": { + "_default": "2020-01-01" + }, + "DOGSBNB": { + "_default": "2020-01-01" + }, + "DOGSFDUSD": { + "_default": "2020-01-01" + }, + "DOGSTRY": { + "_default": "2020-01-01" + }, + "EUREURI": { + "_default": "2020-01-01" + }, + "EURIUSDT": { + "_default": "2020-01-01" + }, + "DOGSBRL": { + "_default": "2020-01-01" + }, + "DOGSUSDC": { + "_default": "2020-01-01" + }, + "RAREBRL": { + "_default": "2020-01-01" + }, + "RAREUSDC": { + "_default": "2020-01-01" + }, + "SLFBTC": { + "_default": "2020-01-01" + }, + "SLFTRY": { + "_default": "2020-01-01" + }, + "SLFUSDC": { + "_default": "2020-01-01" + }, + "SLFUSDT": { + "_default": "2020-01-01" + }, + "AAVEUSDC": { + "_default": "2020-01-01" + }, + "SUNTRY": { + "_default": "2020-01-01" + }, + "STMXTRY": { + "_default": "2020-01-01" + }, + "POLBNB": { + "_default": "2020-01-01" + }, + "POLBRL": { + "_default": "2020-01-01" + }, + "POLBTC": { + "_default": "2020-01-01" + }, + "POLETH": { + "_default": "2020-01-01" + }, + "POLEUR": { + "_default": "2020-01-01" + }, + "POLFDUSD": { + "_default": "2020-01-01" + }, + "POLJPY": { + "_default": "2020-01-01" + }, + "POLTRY": { + "_default": "2020-01-01" + }, + "POLUSDC": { + "_default": "2020-01-01" + }, + "POLUSDT": { + "_default": "2020-01-01" + }, + "NEIROUSDT": { + "_default": "2020-01-01" + }, + "TURBOUSDT": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDT": { + "_default": "2020-01-01" + }, + "CATIUSDT": { + "_default": "2020-01-01" + }, + "CATIBNB": { + "_default": "2020-01-01" + }, + "CATIFDUSD": { + "_default": "2020-01-01" + }, + "CATITRY": { + "_default": "2020-01-01" + }, + "1MBABYDOGEFDUSD": { + "_default": "2020-01-01" + }, + "1MBABYDOGETRY": { + "_default": "2020-01-01" + }, + "CATIBRL": { + "_default": "2020-01-01" + }, + "BTCEURI": { + "_default": "2020-01-01" + }, + "NEIROFDUSD": { + "_default": "2020-01-01" + }, + "NEIROTRY": { + "_default": "2020-01-01" + }, + "HMSTRUSDT": { + "_default": "2020-01-01" + }, + "HMSTRBNB": { + "_default": "2020-01-01" + }, + "HMSTRFDUSD": { + "_default": "2020-01-01" + }, + "HMSTRTRY": { + "_default": "2020-01-01" + }, + "EIGENBTC": { + "_default": "2020-01-01" + }, + "EIGENUSDT": { + "_default": "2020-01-01" + }, + "EIGENFDUSD": { + "_default": "2020-01-01" + }, + "EIGENTRY": { + "_default": "2020-01-01" + }, + "NEIROBRL": { + "_default": "2020-01-01" + }, + "NEIROEUR": { + "_default": "2020-01-01" + }, + "BNSOLSOL": { + "_default": "2020-01-01" + }, + "SCRUSDT": { + "_default": "2020-01-01" + }, + "SUIBRL": { + "_default": "2020-01-01" + }, + "TURBOTRY": { + "_default": "2020-01-01" + }, + "BNSOLUSDT": { + "_default": "2020-01-01" + }, + "LUMIAUSDT": { + "_default": "2020-01-01" + }, + "SCRBTC": { + "_default": "2020-01-01" + }, + "SCRFDUSD": { + "_default": "2020-01-01" + }, + "SCRTRY": { + "_default": "2020-01-01" + }, + "KAIAUSDT": { + "_default": "2020-01-01" + }, + "COWUSDT": { + "_default": "2020-01-01" + }, + "CETUSUSDT": { + "_default": "2020-01-01" + }, + "PNUTUSDT": { + "_default": "2020-01-01" + }, + "ACTUSDT": { + "_default": "2020-01-01" + }, + "ACTTRY": { + "_default": "2020-01-01" + }, + "COWTRY": { + "_default": "2020-01-01" + }, + "CETUSTRY": { + "_default": "2020-01-01" + }, + "TROYTRY": { + "_default": "2020-01-01" + }, + "PNUTTRY": { + "_default": "2020-01-01" + }, + "ACTFDUSD": { + "_default": "2020-01-01" + }, + "ACTUSDC": { + "_default": "2020-01-01" + }, + "NEIROUSDC": { + "_default": "2020-01-01" + }, + "PNUTBTC": { + "_default": "2020-01-01" + }, + "PNUTFDUSD": { + "_default": "2020-01-01" + }, + "PNUTUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDT": { + "_default": "2020-01-01" + }, + "ACTBRL": { + "_default": "2020-01-01" + }, + "ACTEUR": { + "_default": "2020-01-01" + }, + "CATIUSDC": { + "_default": "2020-01-01" + }, + "ETHEURI": { + "_default": "2020-01-01" + }, + "LUMIATRY": { + "_default": "2020-01-01" + }, + "PNUTBRL": { + "_default": "2020-01-01" + }, + "PNUTEUR": { + "_default": "2020-01-01" + }, + "APEFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDC": { + "_default": "2020-01-01" + }, + "HBARUSDC": { + "_default": "2020-01-01" + }, + "OMUSDC": { + "_default": "2020-01-01" + }, + "RAYUSDC": { + "_default": "2020-01-01" + }, + "TAOUSDC": { + "_default": "2020-01-01" + }, + "TURBOFDUSD": { + "_default": "2020-01-01" + }, + "THEBTC": { + "_default": "2020-01-01" + }, + "THEBNB": { + "_default": "2020-01-01" + }, + "THEFDUSD": { + "_default": "2020-01-01" + }, + "THETRY": { + "_default": "2020-01-01" + }, + "THEUSDT": { + "_default": "2020-01-01" + }, + "APEUSDC": { + "_default": "2020-01-01" + }, + "BOMEEUR": { + "_default": "2020-01-01" + }, + "EIGENUSDC": { + "_default": "2020-01-01" + }, + "HBARFDUSD": { + "_default": "2020-01-01" + }, + "MEMEUSDC": { + "_default": "2020-01-01" + }, + "TROYUSDC": { + "_default": "2020-01-01" + }, + "WLDEUR": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDC": { + "_default": "2020-01-01" + }, + "CETUSUSDC": { + "_default": "2020-01-01" + }, + "COWUSDC": { + "_default": "2020-01-01" + }, + "DYDXUSDC": { + "_default": "2020-01-01" + }, + "HMSTRUSDC": { + "_default": "2020-01-01" + }, + "TURBOUSDC": { + "_default": "2020-01-01" + }, + "ENABRL": { + "_default": "2020-01-01" + }, + "EOSFDUSD": { + "_default": "2020-01-01" + }, + "KAIAUSDC": { + "_default": "2020-01-01" + }, + "SANDUSDC": { + "_default": "2020-01-01" + }, + "XLMFDUSD": { + "_default": "2020-01-01" + }, + "CHZUSDC": { + "_default": "2020-01-01" + }, + "PYTHUSDC": { + "_default": "2020-01-01" + }, + "RSRUSDC": { + "_default": "2020-01-01" + }, + "RSRFDUSD": { + "_default": "2020-01-01" + }, + "WUSDC": { + "_default": "2020-01-01" + }, + "XTZUSDC": { + "_default": "2020-01-01" + }, + "ACXUSDT": { + "_default": "2020-01-01" + }, + "ORCAUSDT": { + "_default": "2020-01-01" + }, + "MOVEBTC": { + "_default": "2020-01-01" + }, + "MOVEUSDT": { + "_default": "2020-01-01" + }, + "MOVEBNB": { + "_default": "2020-01-01" + }, + "MOVEFDUSD": { + "_default": "2020-01-01" + }, + "MOVETRY": { + "_default": "2020-01-01" + }, + "MEBTC": { + "_default": "2020-01-01" + }, + "MEUSDT": { + "_default": "2020-01-01" + }, + "MEFDUSD": { + "_default": "2020-01-01" + }, + "METRY": { + "_default": "2020-01-01" + }, + "ACXUSDC": { + "_default": "2020-01-01" + }, + "ORCAUSDC": { + "_default": "2020-01-01" + }, + "ACXFDUSD": { + "_default": "2020-01-01" + }, + "ORCAFDUSD": { + "_default": "2020-01-01" + }, + "ACXTRY": { + "_default": "2020-01-01" + }, + "ORCATRY": { + "_default": "2020-01-01" + }, + "KSMTRY": { + "_default": "2020-01-01" + }, + "CELOTRY": { + "_default": "2020-01-01" + }, + "HIVEFDUSD": { + "_default": "2020-01-01" + }, + "HIVEUSDC": { + "_default": "2020-01-01" + }, + "IDEXFDUSD": { + "_default": "2020-01-01" + }, + "IDEXUSDC": { + "_default": "2020-01-01" + }, + "TLMFDUSD": { + "_default": "2020-01-01" + }, + "TLMUSDC": { + "_default": "2020-01-01" + }, + "VELODROMEUSDT": { + "_default": "2020-01-01" + }, + "VANAUSDT": { + "_default": "2020-01-01" + }, + "VANABNB": { + "_default": "2020-01-01" + }, + "VANAFDUSD": { + "_default": "2020-01-01" + }, + "VANATRY": { + "_default": "2020-01-01" + }, + "1000CATUSDT": { + "_default": "2020-01-01" + }, + "1000CATBNB": { + "_default": "2020-01-01" + }, + "1000CATFDUSD": { + "_default": "2020-01-01" + }, + "1000CATTRY": { + "_default": "2020-01-01" + }, + "PENGUUSDT": { + "_default": "2020-01-01" + }, + "PENGUBNB": { + "_default": "2020-01-01" + }, + "PENGUFDUSD": { + "_default": "2020-01-01" + }, + "PENGUTRY": { + "_default": "2020-01-01" + }, + "USUALBTC": { + "_default": "2020-01-01" + }, + "USUALFDUSD": { + "_default": "2020-01-01" + }, + "USUALTRY": { + "_default": "2020-01-01" + }, + "1000CATUSDC": { + "_default": "2020-01-01" + }, + "PENGUUSDC": { + "_default": "2020-01-01" + }, + "BIOUSDT": { + "_default": "2020-01-01" + }, + "BIOBNB": { + "_default": "2020-01-01" + }, + "BIOFDUSD": { + "_default": "2020-01-01" + }, + "BIOTRY": { + "_default": "2020-01-01" + }, + "BIOUSDC": { + "_default": "2020-01-01" + }, + "HIVETRY": { + "_default": "2020-01-01" + }, + "MOVEUSDC": { + "_default": "2020-01-01" + }, + "PHATRY": { + "_default": "2020-01-01" + }, + "SUSHITRY": { + "_default": "2020-01-01" + }, + "DUSDT": { + "_default": "2020-01-01" + }, + "DTRY": { + "_default": "2020-01-01" + }, + "APTJPY": { + "_default": "2020-01-01" + }, + "SUIJPY": { + "_default": "2020-01-01" + }, + "XLMJPY": { + "_default": "2020-01-01" + }, + "PEPEJPY": { + "_default": "2020-01-01" + }, + "PHAUSDC": { + "_default": "2020-01-01" + }, + "USDCPLN": { + "_default": "2020-01-01" + }, + "STEEMUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDC": { + "_default": "2020-01-01" + }, + "AIXBTUSDT": { + "_default": "2020-01-01" + }, + "AIXBTUSDC": { + "_default": "2020-01-01" + }, + "CGPTUSDT": { + "_default": "2020-01-01" + }, + "CGPTUSDC": { + "_default": "2020-01-01" + }, + "COOKIEUSDT": { + "_default": "2020-01-01" + }, + "COOKIEUSDC": { + "_default": "2020-01-01" + }, + "SBTC": { + "_default": "2020-01-01" + }, + "SBNB": { + "_default": "2020-01-01" + }, + "SETH": { + "_default": "2020-01-01" + }, + "SEUR": { + "_default": "2020-01-01" + }, + "SFDUSD": { + "_default": "2020-01-01" + }, + "STRY": { + "_default": "2020-01-01" + }, + "SUSDC": { + "_default": "2020-01-01" + }, + "SUSDT": { + "_default": "2020-01-01" + }, + "IOTXJPY": { + "_default": "2020-01-01" + }, + "SEIJPY": { + "_default": "2020-01-01" + }, + "SOLVUSDT": { + "_default": "2020-01-01" + }, + "SOLVBNB": { + "_default": "2020-01-01" + }, + "SOLVFDUSD": { + "_default": "2020-01-01" + }, + "SOLVTRY": { + "_default": "2020-01-01" + }, + "TRUMPUSDT": { + "_default": "2020-01-01" + }, + "TRUMPUSDC": { + "_default": "2020-01-01" + }, + "AIXBTTRY": { + "_default": "2020-01-01" + }, + "TRUMPTRY": { + "_default": "2020-01-01" + }, + "ANIMEUSDT": { + "_default": "2020-01-01" + }, + "ANIMEUSDC": { + "_default": "2020-01-01" + }, + "ANIMEBNB": { + "_default": "2020-01-01" + }, + "ANIMEFDUSD": { + "_default": "2020-01-01" + }, + "ANIMETRY": { + "_default": "2020-01-01" + }, + "BERABTC": { + "_default": "2020-01-01" + }, + "BERAUSDT": { + "_default": "2020-01-01" + }, + "BERAUSDC": { + "_default": "2020-01-01" + }, + "BERAFDUSD": { + "_default": "2020-01-01" + }, + "BERABNB": { + "_default": "2020-01-01" + }, + "BERATRY": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDT": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDC": { + "_default": "2020-01-01" + }, + "TSTUSDT": { + "_default": "2020-01-01" + }, + "TSTUSDC": { + "_default": "2020-01-01" + }, + "LAYERBTC": { + "_default": "2020-01-01" + }, + "LAYERUSDT": { + "_default": "2020-01-01" + }, + "LAYERUSDC": { + "_default": "2020-01-01" + }, + "LAYERBNB": { + "_default": "2020-01-01" + }, + "LAYERFDUSD": { + "_default": "2020-01-01" + }, + "LAYERTRY": { + "_default": "2020-01-01" + }, + "QTUMTRY": { + "_default": "2020-01-01" + }, + "TRUMPEUR": { + "_default": "2020-01-01" + }, + "VTHOTRY": { + "_default": "2020-01-01" + }, + "HEIBTC": { + "_default": "2020-01-01" + }, + "HEIUSDT": { + "_default": "2020-01-01" + }, + "CAKEUSDC": { + "_default": "2020-01-01" + }, + "HEIUSDC": { + "_default": "2020-01-01" + }, + "TRUMPFDUSD": { + "_default": "2020-01-01" + }, + "TSTFDUSD": { + "_default": "2020-01-01" + }, + "BNXUSDC": { + "_default": "2020-01-01" + }, + "LTCJPY": { + "_default": "2020-01-01" + }, + "BCHJPY": { + "_default": "2020-01-01" + }, + "LINKJPY": { + "_default": "2020-01-01" + }, + "KAITOBTC": { + "_default": "2020-01-01" + }, + "KAITOUSDT": { + "_default": "2020-01-01" + }, + "KAITOUSDC": { + "_default": "2020-01-01" + }, + "KAITOBNB": { + "_default": "2020-01-01" + }, + "KAITOFDUSD": { + "_default": "2020-01-01" + }, + "KAITOTRY": { + "_default": "2020-01-01" + }, + "ETHMXN": { + "_default": "2020-01-01" + }, + "KAITOBRL": { + "_default": "2020-01-01" + }, + "SOLMXN": { + "_default": "2020-01-01" + }, + "BNBARS": { + "_default": "2020-01-01" + }, + "SOLARS": { + "_default": "2020-01-01" + }, + "TRUMPBRL": { + "_default": "2020-01-01" + }, + "TRXFDUSD": { + "_default": "2020-01-01" + }, + "TSTTRY": { + "_default": "2020-01-01" + }, + "SHELLBTC": { + "_default": "2020-01-01" + }, + "SHELLUSDT": { + "_default": "2020-01-01" + }, + "SHELLUSDC": { + "_default": "2020-01-01" + }, + "SHELLBNB": { + "_default": "2020-01-01" + }, + "SHELLFDUSD": { + "_default": "2020-01-01" + }, + "SHELLTRY": { + "_default": "2020-01-01" + }, + "REDUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDC": { + "_default": "2020-01-01" + }, + "GPSFDUSD": { + "_default": "2020-01-01" + }, + "GPSTRY": { + "_default": "2020-01-01" + }, + "GPSBNB": { + "_default": "2020-01-01" + }, + "REDBTC": { + "_default": "2020-01-01" + }, + "REDUSDC": { + "_default": "2020-01-01" + }, + "REDFDUSD": { + "_default": "2020-01-01" + }, + "REDTRY": { + "_default": "2020-01-01" + }, + "CHESSUSDC": { + "_default": "2020-01-01" + }, + "EGLDUSDC": { + "_default": "2020-01-01" + }, + "OSMOUSDC": { + "_default": "2020-01-01" + }, + "UTKUSDC": { + "_default": "2020-01-01" + }, + "TUSDC": { + "_default": "2020-01-01" + }, + "CVCUSDC": { + "_default": "2020-01-01" + }, + "EURIUSDC": { + "_default": "2020-01-01" + }, + "SYNUSDC": { + "_default": "2020-01-01" + }, + "USDCRON": { + "_default": "2020-01-01" + }, + "VELODROMEUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDT": { + "_default": "2020-01-01" + }, + "DFUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDC": { + "_default": "2020-01-01" + }, + "GMXUSDC": { + "_default": "2020-01-01" + }, + "MKRUSDC": { + "_default": "2020-01-01" + }, + "RPLUSDC": { + "_default": "2020-01-01" + }, + "BMTUSDT": { + "_default": "2020-01-01" + }, + "BMTUSDC": { + "_default": "2020-01-01" + }, + "BMTBNB": { + "_default": "2020-01-01" + }, + "BMTFDUSD": { + "_default": "2020-01-01" + }, + "BMTTRY": { + "_default": "2020-01-01" + }, + "FORMUSDC": { + "_default": "2020-01-01" + }, + "FORMUSDT": { + "_default": "2020-01-01" + }, + "FORMTRY": { + "_default": "2020-01-01" + }, + "XUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDC": { + "_default": "2020-01-01" + }, + "JUVUSDC": { + "_default": "2020-01-01" + }, + "THEUSDC": { + "_default": "2020-01-01" + }, + "VANRYUSDC": { + "_default": "2020-01-01" + }, + "USDCCZK": { + "_default": "2020-01-01" + }, + "NILUSDT": { + "_default": "2020-01-01" + }, + "NILBNB": { + "_default": "2020-01-01" + }, + "NILFDUSD": { + "_default": "2020-01-01" + }, + "NILUSDC": { + "_default": "2020-01-01" + }, + "NILTRY": { + "_default": "2020-01-01" + }, + "BEAMXUSDC": { + "_default": "2020-01-01" + }, + "VANAUSDC": { + "_default": "2020-01-01" + }, + "PARTIFDUSD": { + "_default": "2020-01-01" + }, + "PARTITRY": { + "_default": "2020-01-01" + }, + "PARTIUSDT": { + "_default": "2020-01-01" + }, + "PARTIUSDC": { + "_default": "2020-01-01" + }, + "PARTIBNB": { + "_default": "2020-01-01" + }, + "MUBARAKUSDT": { + "_default": "2020-01-01" + }, + "MUBARAKUSDC": { + "_default": "2020-01-01" + }, + "TUTUSDT": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDT": { + "_default": "2020-01-01" + }, + "TUTUSDC": { + "_default": "2020-01-01" + }, + "BANANAS31USDT": { + "_default": "2020-01-01" + }, + "BANANAS31USDC": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDC": { + "_default": "2020-01-01" + }, + "GUNUSDT": { + "_default": "2020-01-01" + }, + "GUNBNB": { + "_default": "2020-01-01" + }, + "GUNFDUSD": { + "_default": "2020-01-01" + }, + "GUNTRY": { + "_default": "2020-01-01" + }, + "THETAUSDC": { + "_default": "2020-01-01" + }, + "API3USDC": { + "_default": "2020-01-01" + }, + "AUCTIONTRY": { + "_default": "2020-01-01" + }, + "AUCTIONUSDC": { + "_default": "2020-01-01" + }, + "BANANAUSDC": { + "_default": "2020-01-01" + }, + "GUNUSDC": { + "_default": "2020-01-01" + }, + "QNTUSDC": { + "_default": "2020-01-01" + }, + "VETUSDC": { + "_default": "2020-01-01" + }, + "ZENUSDC": { + "_default": "2020-01-01" + }, + "BABYUSDT": { + "_default": "2020-01-01" + }, + "BABYUSDC": { + "_default": "2020-01-01" + }, + "BABYBNB": { + "_default": "2020-01-01" + }, + "BABYFDUSD": { + "_default": "2020-01-01" + }, + "BABYTRY": { + "_default": "2020-01-01" + }, + "ONDOUSDT": { + "_default": "2020-01-01" + }, + "ONDOUSDC": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDT": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALUSDT": { + "_default": "2020-01-01" + }, + "VIRTUALUSDC": { + "_default": "2020-01-01" + }, + "KERNELBNB": { + "_default": "2020-01-01" + }, + "KERNELFDUSD": { + "_default": "2020-01-01" + }, + "KERNELTRY": { + "_default": "2020-01-01" + }, + "KERNELUSDC": { + "_default": "2020-01-01" + }, + "KERNELUSDT": { + "_default": "2020-01-01" + }, + "WCTTRY": { + "_default": "2020-01-01" + }, + "WCTFDUSD": { + "_default": "2020-01-01" + }, + "WCTBNB": { + "_default": "2020-01-01" + }, + "WCTUSDC": { + "_default": "2020-01-01" + }, + "WCTUSDT": { + "_default": "2020-01-01" + }, + "PAXGUSDC": { + "_default": "2020-01-01" + }, + "ONDOTRY": { + "_default": "2020-01-01" + }, + "BABYEUR": { + "_default": "2020-01-01" + }, + "ACHUSDC": { + "_default": "2020-01-01" + }, + "GMTUSDC": { + "_default": "2020-01-01" + }, + "HYPERUSDT": { + "_default": "2020-01-01" + }, + "HYPERUSDC": { + "_default": "2020-01-01" + }, + "HYPERBNB": { + "_default": "2020-01-01" + }, + "HYPERFDUSD": { + "_default": "2020-01-01" + }, + "HYPERTRY": { + "_default": "2020-01-01" + }, + "INITUSDT": { + "_default": "2020-01-01" + }, + "INITUSDC": { + "_default": "2020-01-01" + }, + "INITBNB": { + "_default": "2020-01-01" + }, + "INITFDUSD": { + "_default": "2020-01-01" + }, + "INITTRY": { + "_default": "2020-01-01" + }, + "SIGNUSDT": { + "_default": "2020-01-01" + }, + "SIGNUSDC": { + "_default": "2020-01-01" + }, + "SIGNBNB": { + "_default": "2020-01-01" + }, + "SIGNFDUSD": { + "_default": "2020-01-01" + }, + "SIGNTRY": { + "_default": "2020-01-01" + }, + "STOUSDT": { + "_default": "2020-01-01" + }, + "STOUSDC": { + "_default": "2020-01-01" + }, + "STOBNB": { + "_default": "2020-01-01" + }, + "STOFDUSD": { + "_default": "2020-01-01" + }, + "STOTRY": { + "_default": "2020-01-01" + }, + "ENJUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALTRY": { + "_default": "2020-01-01" + }, + "SYRUPUSDT": { + "_default": "2020-01-01" + }, + "SYRUPUSDC": { + "_default": "2020-01-01" + }, + "KMNOUSDT": { + "_default": "2020-01-01" + }, + "KMNOUSDC": { + "_default": "2020-01-01" + }, + "SXTUSDT": { + "_default": "2020-01-01" + }, + "SXTUSDC": { + "_default": "2020-01-01" + }, + "SXTBNB": { + "_default": "2020-01-01" + }, + "SXTFDUSD": { + "_default": "2020-01-01" + }, + "SXTTRY": { + "_default": "2020-01-01" + }, + "PUNDIXUSDC": { + "_default": "2020-01-01" + }, + "SYRUPTRY": { + "_default": "2020-01-01" + }, + "NXPCUSDT": { + "_default": "2020-01-01" + }, + "NXPCUSDC": { + "_default": "2020-01-01" + }, + "NXPCBNB": { + "_default": "2020-01-01" + }, + "NXPCFDUSD": { + "_default": "2020-01-01" + }, + "NXPCTRY": { + "_default": "2020-01-01" + }, + "AWEBTC": { + "_default": "2020-01-01" + }, + "AWEUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDC": { + "_default": "2020-01-01" + }, + "HAEDALBNB": { + "_default": "2020-01-01" + }, + "HAEDALFDUSD": { + "_default": "2020-01-01" + }, + "HAEDALTRY": { + "_default": "2020-01-01" + }, + "USD1USDT": { + "_default": "2020-01-01" + }, + "HUMAUSDT": { + "_default": "2020-01-01" + }, + "HUMAUSDC": { + "_default": "2020-01-01" + }, + "HUMABNB": { + "_default": "2020-01-01" + }, + "HUMAFDUSD": { + "_default": "2020-01-01" + }, + "HUMATRY": { + "_default": "2020-01-01" + }, + "ABTC": { + "_default": "2020-01-01" + }, + "AETH": { + "_default": "2020-01-01" + }, + "AFDUSD": { + "_default": "2020-01-01" + }, + "ATRY": { + "_default": "2020-01-01" + }, + "AUSDC": { + "_default": "2020-01-01" + }, + "AUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDC": { + "_default": "2020-01-01" + }, + "SOPHBNB": { + "_default": "2020-01-01" + }, + "SOPHFDUSD": { + "_default": "2020-01-01" + }, + "SOPHTRY": { + "_default": "2020-01-01" + }, + "MUBARAKTRY": { + "_default": "2020-01-01" + }, + "TRXJPY": { + "_default": "2020-01-01" + }, + "DAIJPY": { + "_default": "2020-01-01" + }, + "RESOLVUSDT": { + "_default": "2020-01-01" + }, + "RESOLVUSDC": { + "_default": "2020-01-01" + }, + "RESOLVBNB": { + "_default": "2020-01-01" + }, + "RESOLVFDUSD": { + "_default": "2020-01-01" + }, + "RESOLVTRY": { + "_default": "2020-01-01" + }, + "HOMEUSDT": { + "_default": "2020-01-01" + }, + "HOMEUSDC": { + "_default": "2020-01-01" + }, + "HOMEBNB": { + "_default": "2020-01-01" + }, + "HOMEFDUSD": { + "_default": "2020-01-01" + }, + "HOMETRY": { + "_default": "2020-01-01" + }, + "FLUXUSDC": { + "_default": "2020-01-01" + }, + "MASKUSDC": { + "_default": "2020-01-01" + }, + "SUSHIUSDC": { + "_default": "2020-01-01" + }, + "SPKUSDT": { + "_default": "2020-01-01" + }, + "SPKUSDC": { + "_default": "2020-01-01" + }, + "SPKBNB": { + "_default": "2020-01-01" + }, + "SPKFDUSD": { + "_default": "2020-01-01" + }, + "SPKTRY": { + "_default": "2020-01-01" + }, + "NEWTUSDT": { + "_default": "2020-01-01" + }, + "NEWTUSDC": { + "_default": "2020-01-01" + }, + "NEWTBNB": { + "_default": "2020-01-01" + }, + "NEWTFDUSD": { + "_default": "2020-01-01" + }, + "NEWTTRY": { + "_default": "2020-01-01" + }, + "NEIROJPY": { + "_default": "2020-01-01" + }, + "SAHARAUSDT": { + "_default": "2020-01-01" + }, + "SAHARAUSDC": { + "_default": "2020-01-01" + }, + "SAHARABNB": { + "_default": "2020-01-01" + }, + "SAHARAFDUSD": { + "_default": "2020-01-01" + }, + "SAHARATRY": { + "_default": "2020-01-01" + }, + "LPTUSDC": { + "_default": "2020-01-01" + }, + "RVNUSDC": { + "_default": "2020-01-01" + }, + "LAUSDT": { + "_default": "2020-01-01" + }, + "LAUSDC": { + "_default": "2020-01-01" + }, + "LABNB": { + "_default": "2020-01-01" + }, + "LAFDUSD": { + "_default": "2020-01-01" + }, + "LATRY": { + "_default": "2020-01-01" + }, + "LPTJPY": { + "_default": "2020-01-01" + }, + "XAIUSDC": { + "_default": "2020-01-01" + }, + "AXSUSDC": { + "_default": "2020-01-01" + }, + "COMPUSDC": { + "_default": "2020-01-01" + }, + "ERAUSDT": { + "_default": "2020-01-01" + }, + "ERAUSDC": { + "_default": "2020-01-01" + }, + "ERABNB": { + "_default": "2020-01-01" + }, + "ERAFDUSD": { + "_default": "2020-01-01" + }, + "ERATRY": { + "_default": "2020-01-01" + }, + "CUSDT": { + "_default": "2020-01-01" + }, + "CUSDC": { + "_default": "2020-01-01" + }, + "CBNB": { + "_default": "2020-01-01" + }, + "CFDUSD": { + "_default": "2020-01-01" + }, + "CTRY": { + "_default": "2020-01-01" + }, + "GRTUSDC": { + "_default": "2020-01-01" + }, + "ROSEUSDC": { + "_default": "2020-01-01" + }, + "CVXUSDC": { + "_default": "2020-01-01" + }, + "FUNUSDC": { + "_default": "2020-01-01" + }, + "LISTAUSDC": { + "_default": "2020-01-01" + }, + "TREEUSDT": { + "_default": "2020-01-01" + }, + "TREEUSDC": { + "_default": "2020-01-01" + }, + "TREEBNB": { + "_default": "2020-01-01" + }, + "TREEFDUSD": { + "_default": "2020-01-01" + }, + "TREETRY": { + "_default": "2020-01-01" + }, + "A2ZUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDC": { + "_default": "2020-01-01" + }, + "TOWNSBNB": { + "_default": "2020-01-01" + }, + "TOWNSFDUSD": { + "_default": "2020-01-01" + }, + "TOWNSTRY": { + "_default": "2020-01-01" + }, + "PROVEUSDT": { + "_default": "2020-01-01" + }, + "PROVEUSDC": { + "_default": "2020-01-01" + }, + "PROVEBNB": { + "_default": "2020-01-01" + }, + "PROVEFDUSD": { + "_default": "2020-01-01" + }, + "PROVETRY": { + "_default": "2020-01-01" + }, + "ILVUSDC": { + "_default": "2020-01-01" + }, + "MAGICUSDC": { + "_default": "2020-01-01" + }, + "USDCBRL": { + "_default": "2020-01-01" + }, + "BFUSDUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDC": { + "_default": "2020-01-01" + }, + "PLUMEBNB": { + "_default": "2020-01-01" + }, + "PLUMEFDUSD": { + "_default": "2020-01-01" + }, + "PLUMETRY": { + "_default": "2020-01-01" + }, + "CYBERUSDC": { + "_default": "2020-01-01" + }, + "MAVUSDC": { + "_default": "2020-01-01" + }, + "SKLUSDC": { + "_default": "2020-01-01" + }, + "A2ZUSDC": { + "_default": "2020-01-01" + }, + "SSVUSDC": { + "_default": "2020-01-01" + }, + "UMAUSDC": { + "_default": "2020-01-01" + }, + "DOLOUSDT": { + "_default": "2020-01-01" + }, + "DOLOUSDC": { + "_default": "2020-01-01" + }, + "DOLOBNB": { + "_default": "2020-01-01" + }, + "DOLOFDUSD": { + "_default": "2020-01-01" + }, + "DOLOTRY": { + "_default": "2020-01-01" + }, + "MITOUSDT": { + "_default": "2020-01-01" + }, + "MITOUSDC": { + "_default": "2020-01-01" + }, + "MITOBNB": { + "_default": "2020-01-01" + }, + "MITOFDUSD": { + "_default": "2020-01-01" + }, + "MITOTRY": { + "_default": "2020-01-01" + }, + "WLFIUSDT": { + "_default": "2020-01-01" + }, + "WLFIUSDC": { + "_default": "2020-01-01" + }, + "WLFITRY": { + "_default": "2020-01-01" + }, + "BFUSDUSDC": { + "_default": "2020-01-01" + }, + "NMRUSDC": { + "_default": "2020-01-01" + }, + "QTUMUSDC": { + "_default": "2020-01-01" + }, + "SOMIUSDT": { + "_default": "2020-01-01" + }, + "SOMIUSDC": { + "_default": "2020-01-01" + }, + "SOMIBNB": { + "_default": "2020-01-01" + }, + "SOMIFDUSD": { + "_default": "2020-01-01" + }, + "SOMITRY": { + "_default": "2020-01-01" + }, + "WLFIBRL": { + "_default": "2020-01-01" + }, + "WLFIEUR": { + "_default": "2020-01-01" + }, + "OPENUSDT": { + "_default": "2020-01-01" + }, + "OPENUSDC": { + "_default": "2020-01-01" + }, + "OPENBNB": { + "_default": "2020-01-01" + }, + "OPENFDUSD": { + "_default": "2020-01-01" + }, + "OPENTRY": { + "_default": "2020-01-01" + }, + "USDEUSDC": { + "_default": "2020-01-01" + }, + "USDEUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDC": { + "_default": "2020-01-01" + }, + "LINEABNB": { + "_default": "2020-01-01" + }, + "LINEAFDUSD": { + "_default": "2020-01-01" + }, + "LINEATRY": { + "_default": "2020-01-01" + }, + "HOLOUSDT": { + "_default": "2020-01-01" + }, + "HOLOUSDC": { + "_default": "2020-01-01" + }, + "HOLOBNB": { + "_default": "2020-01-01" + }, + "HOLOFDUSD": { + "_default": "2020-01-01" + }, + "HOLOTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDT": { + "_default": "2020-01-01" + }, + "PUMPTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDC": { + "_default": "2020-01-01" + }, + "AVNTUSDT": { + "_default": "2020-01-01" + }, + "AVNTUSDC": { + "_default": "2020-01-01" + }, + "AVNTTRY": { + "_default": "2020-01-01" + }, + "ZKCUSDT": { + "_default": "2020-01-01" + }, + "ZKCUSDC": { + "_default": "2020-01-01" + }, + "ZKCFDUSD": { + "_default": "2020-01-01" + }, + "ZKCBNB": { + "_default": "2020-01-01" + }, + "ZKCTRY": { + "_default": "2020-01-01" + }, + "SKYBTC": { + "_default": "2020-01-01" + }, + "SKYTRY": { + "_default": "2020-01-01" + }, + "SKYUSDC": { + "_default": "2020-01-01" + }, + "SKYUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDC": { + "_default": "2020-01-01" + }, + "BARDFDUSD": { + "_default": "2020-01-01" + }, + "BARDTRY": { + "_default": "2020-01-01" + }, + "BARDBNB": { + "_default": "2020-01-01" + }, + "0GUSDT": { + "_default": "2020-01-01" + }, + "0GUSDC": { + "_default": "2020-01-01" + }, + "0GBNB": { + "_default": "2020-01-01" + }, + "0GFDUSD": { + "_default": "2020-01-01" + }, + "0GTRY": { + "_default": "2020-01-01" + }, + "IMXUSDC": { + "_default": "2020-01-01" + }, + "NMRTRY": { + "_default": "2020-01-01" + }, + "TWTUSDC": { + "_default": "2020-01-01" + }, + "HEMIBNB": { + "_default": "2020-01-01" + }, + "HEMITRY": { + "_default": "2020-01-01" + }, + "HEMIUSDT": { + "_default": "2020-01-01" + }, + "HEMIUSDC": { + "_default": "2020-01-01" + }, + "HEMIFDUSD": { + "_default": "2020-01-01" + }, + "XPLUSDT": { + "_default": "2020-01-01" + }, + "XPLUSDC": { + "_default": "2020-01-01" + }, + "XPLBNB": { + "_default": "2020-01-01" + }, + "XPLFDUSD": { + "_default": "2020-01-01" + }, + "XPLTRY": { + "_default": "2020-01-01" + }, + "MIRAUSDT": { + "_default": "2020-01-01" + }, + "MIRAUSDC": { + "_default": "2020-01-01" + }, + "MIRABNB": { + "_default": "2020-01-01" + }, + "MIRAFDUSD": { + "_default": "2020-01-01" + }, + "MIRATRY": { + "_default": "2020-01-01" + }, + "FFUSDT": { + "_default": "2020-01-01" + }, + "FFUSDC": { + "_default": "2020-01-01" + }, + "FFBNB": { + "_default": "2020-01-01" + }, + "FFFDUSD": { + "_default": "2020-01-01" + }, + "FFTRY": { + "_default": "2020-01-01" + }, + "AEVOUSDC": { + "_default": "2020-01-01" + }, + "MEUSDC": { + "_default": "2020-01-01" + }, + "SNXUSDC": { + "_default": "2020-01-01" + }, + "EDENUSDT": { + "_default": "2020-01-01" + }, + "EDENUSDC": { + "_default": "2020-01-01" + }, + "EDENBNB": { + "_default": "2020-01-01" + }, + "EDENFDUSD": { + "_default": "2020-01-01" + }, + "EDENTRY": { + "_default": "2020-01-01" + }, + "NOMFDUSD": { + "_default": "2020-01-01" + }, + "NOMTRY": { + "_default": "2020-01-01" + }, + "NOMUSDC": { + "_default": "2020-01-01" + }, + "NOMUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDC": { + "_default": "2020-01-01" + }, + "2ZBNB": { + "_default": "2020-01-01" + }, + "2ZFDUSD": { + "_default": "2020-01-01" + }, + "2ZTRY": { + "_default": "2020-01-01" + }, + "TRUMPJPY": { + "_default": "2020-01-01" + }, + "MORPHOUSDT": { + "_default": "2020-01-01" + }, + "MORPHOUSDC": { + "_default": "2020-01-01" + }, + "MORPHOBNB": { + "_default": "2020-01-01" + }, + "MORPHOFDUSD": { + "_default": "2020-01-01" + }, + "MORPHOTRY": { + "_default": "2020-01-01" + }, + "ASTERUSDT": { + "_default": "2020-01-01" + }, + "ASTERUSDC": { + "_default": "2020-01-01" + }, + "ASTERTRY": { + "_default": "2020-01-01" + }, + "WALUSDT": { + "_default": "2020-01-01" + }, + "WALUSDC": { + "_default": "2020-01-01" + }, + "WALBNB": { + "_default": "2020-01-01" + }, + "WALFDUSD": { + "_default": "2020-01-01" + }, + "WALTRY": { + "_default": "2020-01-01" + }, + "EULUSDT": { + "_default": "2020-01-01" + }, + "EULUSDC": { + "_default": "2020-01-01" + }, + "EULFDUSD": { + "_default": "2020-01-01" + }, + "EULBNB": { + "_default": "2020-01-01" + }, + "EULTRY": { + "_default": "2020-01-01" + }, + "ENSOUSDT": { + "_default": "2020-01-01" + }, + "ENSOUSDC": { + "_default": "2020-01-01" + }, + "ENSOFDUSD": { + "_default": "2020-01-01" + }, + "ENSOBNB": { + "_default": "2020-01-01" + }, + "ENSOTRY": { + "_default": "2020-01-01" + }, + "YBUSDT": { + "_default": "2020-01-01" + }, + "YBUSDC": { + "_default": "2020-01-01" + }, + "YBBNB": { + "_default": "2020-01-01" + }, + "YBFDUSD": { + "_default": "2020-01-01" + }, + "YBTRY": { + "_default": "2020-01-01" + }, + "ZBTUSDT": { + "_default": "2020-01-01" + }, + "ZBTUSDC": { + "_default": "2020-01-01" + }, + "ZBTBNB": { + "_default": "2020-01-01" + }, + "ZBTFDUSD": { + "_default": "2020-01-01" + }, + "ZBTTRY": { + "_default": "2020-01-01" + }, + "TURTLEUSDT": { + "_default": "2020-01-01" + }, + "TURTLEUSDC": { + "_default": "2020-01-01" + }, + "TURTLEBNB": { + "_default": "2020-01-01" + }, + "TURTLEFDUSD": { + "_default": "2020-01-01" + }, + "TURTLETRY": { + "_default": "2020-01-01" + }, + "GIGGLEUSDT": { + "_default": "2020-01-01" + }, + "GIGGLEUSDC": { + "_default": "2020-01-01" + }, + "GIGGLETRY": { + "_default": "2020-01-01" + }, + "FUSDT": { + "_default": "2020-01-01" + }, + "FUSDC": { + "_default": "2020-01-01" + }, + "FTRY": { + "_default": "2020-01-01" + }, + "KITEUSDT": { + "_default": "2020-01-01" + }, + "KITEUSDC": { + "_default": "2020-01-01" + }, + "KITEBNB": { + "_default": "2020-01-01" + }, + "KITETRY": { + "_default": "2020-01-01" + }, + "MMTUSDT": { + "_default": "2020-01-01" + }, + "MMTUSDC": { + "_default": "2020-01-01" + }, + "MMTBNB": { + "_default": "2020-01-01" + }, + "MMTTRY": { + "_default": "2020-01-01" + }, + "DASHUSDC": { + "_default": "2020-01-01" + }, + "SAPIENUSDT": { + "_default": "2020-01-01" + }, + "SAPIENUSDC": { + "_default": "2020-01-01" + }, + "SAPIENBNB": { + "_default": "2020-01-01" + }, + "SAPIENTRY": { + "_default": "2020-01-01" + }, + "MINAUSDC": { + "_default": "2020-01-01" + }, + "XVGUSDC": { + "_default": "2020-01-01" + }, + "ALLOUSDT": { + "_default": "2020-01-01" + }, + "ALLOUSDC": { + "_default": "2020-01-01" + }, + "ALLOBNB": { + "_default": "2020-01-01" + }, + "ALLOTRY": { + "_default": "2020-01-01" + }, + "SOLVUSDC": { + "_default": "2020-01-01" + }, + "USD1USDC": { + "_default": "2020-01-01" + }, + "WLFIUSD1": { + "_default": "2020-01-01" + }, + "BANKUSDT": { + "_default": "2020-01-01" + }, + "BANKUSDC": { + "_default": "2020-01-01" + }, + "BANKTRY": { + "_default": "2020-01-01" + }, + "METUSDT": { + "_default": "2020-01-01" + }, + "METUSDC": { + "_default": "2020-01-01" + }, + "METTRY": { + "_default": "2020-01-01" + }, + "1INCHUSDC": { + "_default": "2020-01-01" + }, + "COTIUSDC": { + "_default": "2020-01-01" + }, + "LSKUSDC": { + "_default": "2020-01-01" + }, + "USDTUSD": { + "_default": "2020-01-01" + }, + "USDCUSD": { + "_default": "2020-01-01" + }, + "DODOTRY": { + "_default": "2020-01-01" + }, + "HEITRY": { + "_default": "2020-01-01" + }, + "MANTAIDR": { + "_default": "2020-01-01" + }, + "SCRIDR": { + "_default": "2020-01-01" + }, + "WLDIDR": { + "_default": "2020-01-01" + }, + "HBARIDR": { + "_default": "2020-01-01" + }, + "ATUSDT": { + "_default": "2020-01-01" + }, + "ATUSDC": { + "_default": "2020-01-01" + }, + "ATBNB": { + "_default": "2020-01-01" + }, + "ATTRY": { + "_default": "2020-01-01" + }, + "ASTERIDR": { + "_default": "2020-01-01" + }, + "AVAXIDR": { + "_default": "2020-01-01" + }, + "BOMEIDR": { + "_default": "2020-01-01" + }, + "DOGSIDR": { + "_default": "2020-01-01" + }, + "FLOKIIDR": { + "_default": "2020-01-01" + }, + "POLIDR": { + "_default": "2020-01-01" + }, + "RENDERIDR": { + "_default": "2020-01-01" + }, + "TAOIDR": { + "_default": "2020-01-01" + }, + "TIAIDR": { + "_default": "2020-01-01" + }, + "TONIDR": { + "_default": "2020-01-01" + }, + "VIRTUALIDR": { + "_default": "2020-01-01" + }, + "WIFIDR": { + "_default": "2020-01-01" + }, + "ZILIDR": { + "_default": "2020-01-01" + }, + "ARBIDR": { + "_default": "2020-01-01" + }, + "ADAIDR": { + "_default": "2020-01-01" + }, + "BNBIDR": { + "_default": "2020-01-01" + }, + "BTCIDR": { + "_default": "2020-01-01" + }, + "DOGEIDR": { + "_default": "2020-01-01" + }, + "ETHIDR": { + "_default": "2020-01-01" + }, + "NEIROIDR": { + "_default": "2020-01-01" + }, + "ONDOIDR": { + "_default": "2020-01-01" + }, + "SUIIDR": { + "_default": "2020-01-01" + }, + "TKOIDR": { + "_default": "2020-01-01" + }, + "XRPIDR": { + "_default": "2020-01-01" + }, + "USDTIDR": { + "_default": "2020-01-01" + }, + "USDCIDR": { + "_default": "2020-01-01" + }, + "SOLIDR": { + "_default": "2020-01-01" + }, + "BTCUSD": { + "_default": "2020-01-01" + }, + "BTCUSD1": { + "_default": "2020-01-01" + }, + "DYMUSDC": { + "_default": "2020-01-01" + }, + "BNBUSD1": { + "_default": "2020-01-01" + }, + "ETHUSD1": { + "_default": "2020-01-01" + }, + "SOLUSD1": { + "_default": "2020-01-01" + }, + "DASHTRY": { + "_default": "2020-01-01" + }, + "DOGEUSD1": { + "_default": "2020-01-01" + }, + "SUIUSD1": { + "_default": "2020-01-01" + }, + "XRPUSD1": { + "_default": "2020-01-01" + }, + "KGSTUSDT": { + "_default": "2020-01-01" + }, + "ADAUSD1": { + "_default": "2020-01-01" + }, + "ASTERUSD1": { + "_default": "2020-01-01" + }, + "LUNAUSDC": { + "_default": "2020-01-01" + }, + "LUNCUSDC": { + "_default": "2020-01-01" + }, + "ZECUSD1": { + "_default": "2020-01-01" + }, + "AVAXUSD1": { + "_default": "2020-01-01" + }, + "BCHUSD1": { + "_default": "2020-01-01" + }, + "UNIUSD1": { + "_default": "2020-01-01" + }, + "BREVUSDT": { + "_default": "2020-01-01" + }, + "BREVUSDC": { + "_default": "2020-01-01" + }, + "BREVBNB": { + "_default": "2020-01-01" + }, + "BREVTRY": { + "_default": "2020-01-01" + }, + "币安人生USDT": { + "_default": "2020-01-01" + }, + "币安人生USDC": { + "_default": "2020-01-01" + }, + "币安人生TRY": { + "_default": "2020-01-01" + }, + "ZKPUSDT": { + "_default": "2020-01-01" + }, + "ZKPUSDC": { + "_default": "2020-01-01" + }, + "ZKPTRY": { + "_default": "2020-01-01" + }, + "FETJPY": { + "_default": "2020-01-01" + }, + "TAOJPY": { + "_default": "2020-01-01" + }, + "LINKUSD1": { + "_default": "2020-01-01" + }, + "USDCMXN": { + "_default": "2020-01-01" + }, + "PEPEUSD1": { + "_default": "2020-01-01" + }, + "UUSDT": { + "_default": "2020-01-01" + }, + "UUSDC": { + "_default": "2020-01-01" + }, + "FRAXUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDC": { + "_default": "2020-01-01" + }, + "FOGOTRY": { + "_default": "2020-01-01" + }, + "BTCU": { + "_default": "2020-01-01" + }, + "LTCUSD1": { + "_default": "2020-01-01" + }, + "UTRY": { + "_default": "2020-01-01" + }, + "XRPRLUSD": { + "_default": "2020-01-01" + }, + "RLUSDUSDT": { + "_default": "2020-01-01" + }, + "RLUSDU": { + "_default": "2020-01-01" + }, + "SENTUSDT": { + "_default": "2020-01-01" + }, + "SENTUSDC": { + "_default": "2020-01-01" + }, + "SENTTRY": { + "_default": "2020-01-01" + }, + "BNBU": { + "_default": "2020-01-01" + }, + "KGSTU": { + "_default": "2020-01-01" + }, + "SOLU": { + "_default": "2020-01-01" + }, + "TRXUSD1": { + "_default": "2020-01-01" + }, + "USD1U": { + "_default": "2020-01-01" + }, + "ETHU": { + "_default": "2020-01-01" + } + }, + "depth": { + "ETHBTC": { + "_default": "2020-01-01" + }, + "LTCBTC": { + "_default": "2020-01-01" + }, + "BNBBTC": { + "_default": "2020-01-01" + }, + "NEOBTC": { + "_default": "2020-01-01" + }, + "QTUMETH": { + "_default": "2020-01-01" + }, + "EOSETH": { + "_default": "2020-01-01" + }, + "SNTETH": { + "_default": "2020-01-01" + }, + "BNTETH": { + "_default": "2020-01-01" + }, + "BCCBTC": { + "_default": "2020-01-01" + }, + "GASBTC": { + "_default": "2020-01-01" + }, + "BNBETH": { + "_default": "2020-01-01" + }, + "BTCUSDT": { + "_default": "2020-01-01" + }, + "ETHUSDT": { + "_default": "2020-01-01" + }, + "HSRBTC": { + "_default": "2020-01-01" + }, + "OAXETH": { + "_default": "2020-01-01" + }, + "DNTETH": { + "_default": "2020-01-01" + }, + "MCOETH": { + "_default": "2020-01-01" + }, + "ICNETH": { + "_default": "2020-01-01" + }, + "MCOBTC": { + "_default": "2020-01-01" + }, + "WTCBTC": { + "_default": "2020-01-01" + }, + "WTCETH": { + "_default": "2020-01-01" + }, + "LRCBTC": { + "_default": "2020-01-01" + }, + "LRCETH": { + "_default": "2020-01-01" + }, + "QTUMBTC": { + "_default": "2020-01-01" + }, + "YOYOBTC": { + "_default": "2020-01-01" + }, + "OMGBTC": { + "_default": "2020-01-01" + }, + "OMGETH": { + "_default": "2020-01-01" + }, + "ZRXBTC": { + "_default": "2020-01-01" + }, + "ZRXETH": { + "_default": "2020-01-01" + }, + "STRATBTC": { + "_default": "2020-01-01" + }, + "STRATETH": { + "_default": "2020-01-01" + }, + "SNGLSBTC": { + "_default": "2020-01-01" + }, + "SNGLSETH": { + "_default": "2020-01-01" + }, + "BQXBTC": { + "_default": "2020-01-01" + }, + "BQXETH": { + "_default": "2020-01-01" + }, + "KNCBTC": { + "_default": "2020-01-01" + }, + "KNCETH": { + "_default": "2020-01-01" + }, + "FUNBTC": { + "_default": "2020-01-01" + }, + "FUNETH": { + "_default": "2020-01-01" + }, + "SNMBTC": { + "_default": "2020-01-01" + }, + "SNMETH": { + "_default": "2020-01-01" + }, + "NEOETH": { + "_default": "2020-01-01" + }, + "IOTABTC": { + "_default": "2020-01-01" + }, + "IOTAETH": { + "_default": "2020-01-01" + }, + "LINKBTC": { + "_default": "2020-01-01" + }, + "LINKETH": { + "_default": "2020-01-01" + }, + "XVGBTC": { + "_default": "2020-01-01" + }, + "XVGETH": { + "_default": "2020-01-01" + }, + "SALTBTC": { + "_default": "2020-01-01" + }, + "SALTETH": { + "_default": "2020-01-01" + }, + "MDABTC": { + "_default": "2020-01-01" + }, + "MDAETH": { + "_default": "2020-01-01" + }, + "MTLBTC": { + "_default": "2020-01-01" + }, + "MTLETH": { + "_default": "2020-01-01" + }, + "SUBBTC": { + "_default": "2020-01-01" + }, + "SUBETH": { + "_default": "2020-01-01" + }, + "EOSBTC": { + "_default": "2020-01-01" + }, + "SNTBTC": { + "_default": "2020-01-01" + }, + "ETCETH": { + "_default": "2020-01-01" + }, + "ETCBTC": { + "_default": "2020-01-01" + }, + "MTHBTC": { + "_default": "2020-01-01" + }, + "MTHETH": { + "_default": "2020-01-01" + }, + "ENGBTC": { + "_default": "2020-01-01" + }, + "ENGETH": { + "_default": "2020-01-01" + }, + "DNTBTC": { + "_default": "2020-01-01" + }, + "ZECBTC": { + "_default": "2020-01-01" + }, + "ZECETH": { + "_default": "2020-01-01" + }, + "BNTBTC": { + "_default": "2020-01-01" + }, + "ASTBTC": { + "_default": "2020-01-01" + }, + "ASTETH": { + "_default": "2020-01-01" + }, + "DASHBTC": { + "_default": "2020-01-01" + }, + "DASHETH": { + "_default": "2020-01-01" + }, + "OAXBTC": { + "_default": "2020-01-01" + }, + "ICNBTC": { + "_default": "2020-01-01" + }, + "BTGBTC": { + "_default": "2020-01-01" + }, + "BTGETH": { + "_default": "2020-01-01" + }, + "EVXBTC": { + "_default": "2020-01-01" + }, + "EVXETH": { + "_default": "2020-01-01" + }, + "REQBTC": { + "_default": "2020-01-01" + }, + "REQETH": { + "_default": "2020-01-01" + }, + "VIBBTC": { + "_default": "2020-01-01" + }, + "VIBETH": { + "_default": "2020-01-01" + }, + "HSRETH": { + "_default": "2020-01-01" + }, + "TRXBTC": { + "_default": "2020-01-01" + }, + "TRXETH": { + "_default": "2020-01-01" + }, + "POWRBTC": { + "_default": "2020-01-01" + }, + "POWRETH": { + "_default": "2020-01-01" + }, + "ARKBTC": { + "_default": "2020-01-01" + }, + "ARKETH": { + "_default": "2020-01-01" + }, + "YOYOETH": { + "_default": "2020-01-01" + }, + "XRPBTC": { + "_default": "2020-01-01" + }, + "XRPETH": { + "_default": "2020-01-01" + }, + "MODBTC": { + "_default": "2020-01-01" + }, + "MODETH": { + "_default": "2020-01-01" + }, + "ENJBTC": { + "_default": "2020-01-01" + }, + "ENJETH": { + "_default": "2020-01-01" + }, + "STORJBTC": { + "_default": "2020-01-01" + }, + "STORJETH": { + "_default": "2020-01-01" + }, + "BNBUSDT": { + "_default": "2020-01-01" + }, + "VENBNB": { + "_default": "2020-01-01" + }, + "YOYOBNB": { + "_default": "2020-01-01" + }, + "POWRBNB": { + "_default": "2020-01-01" + }, + "VENBTC": { + "_default": "2020-01-01" + }, + "VENETH": { + "_default": "2020-01-01" + }, + "KMDBTC": { + "_default": "2020-01-01" + }, + "KMDETH": { + "_default": "2020-01-01" + }, + "NULSBNB": { + "_default": "2020-01-01" + }, + "RCNBTC": { + "_default": "2020-01-01" + }, + "RCNETH": { + "_default": "2020-01-01" + }, + "RCNBNB": { + "_default": "2020-01-01" + }, + "NULSBTC": { + "_default": "2020-01-01" + }, + "NULSETH": { + "_default": "2020-01-01" + }, + "RDNBTC": { + "_default": "2020-01-01" + }, + "RDNETH": { + "_default": "2020-01-01" + }, + "RDNBNB": { + "_default": "2020-01-01" + }, + "XMRBTC": { + "_default": "2020-01-01" + }, + "XMRETH": { + "_default": "2020-01-01" + }, + "DLTBNB": { + "_default": "2020-01-01" + }, + "WTCBNB": { + "_default": "2020-01-01" + }, + "DLTBTC": { + "_default": "2020-01-01" + }, + "DLTETH": { + "_default": "2020-01-01" + }, + "AMBBTC": { + "_default": "2020-01-01" + }, + "AMBETH": { + "_default": "2020-01-01" + }, + "AMBBNB": { + "_default": "2020-01-01" + }, + "BCCETH": { + "_default": "2020-01-01" + }, + "BCCUSDT": { + "_default": "2020-01-01" + }, + "BCCBNB": { + "_default": "2020-01-01" + }, + "BATBTC": { + "_default": "2020-01-01" + }, + "BATETH": { + "_default": "2020-01-01" + }, + "BATBNB": { + "_default": "2020-01-01" + }, + "BCPTBTC": { + "_default": "2020-01-01" + }, + "BCPTETH": { + "_default": "2020-01-01" + }, + "BCPTBNB": { + "_default": "2020-01-01" + }, + "ARNBTC": { + "_default": "2020-01-01" + }, + "ARNETH": { + "_default": "2020-01-01" + }, + "GVTBTC": { + "_default": "2020-01-01" + }, + "GVTETH": { + "_default": "2020-01-01" + }, + "CDTBTC": { + "_default": "2020-01-01" + }, + "CDTETH": { + "_default": "2020-01-01" + }, + "GXSBTC": { + "_default": "2020-01-01" + }, + "GXSETH": { + "_default": "2020-01-01" + }, + "NEOUSDT": { + "_default": "2020-01-01" + }, + "NEOBNB": { + "_default": "2020-01-01" + }, + "POEBTC": { + "_default": "2020-01-01" + }, + "POEETH": { + "_default": "2020-01-01" + }, + "QSPBTC": { + "_default": "2020-01-01" + }, + "QSPETH": { + "_default": "2020-01-01" + }, + "QSPBNB": { + "_default": "2020-01-01" + }, + "BTSBTC": { + "_default": "2020-01-01" + }, + "BTSETH": { + "_default": "2020-01-01" + }, + "BTSBNB": { + "_default": "2020-01-01" + }, + "XZCBTC": { + "_default": "2020-01-01" + }, + "XZCETH": { + "_default": "2020-01-01" + }, + "XZCBNB": { + "_default": "2020-01-01" + }, + "LSKBTC": { + "_default": "2020-01-01" + }, + "LSKETH": { + "_default": "2020-01-01" + }, + "LSKBNB": { + "_default": "2020-01-01" + }, + "TNTBTC": { + "_default": "2020-01-01" + }, + "TNTETH": { + "_default": "2020-01-01" + }, + "FUELBTC": { + "_default": "2020-01-01" + }, + "FUELETH": { + "_default": "2020-01-01" + }, + "MANABTC": { + "_default": "2020-01-01" + }, + "MANAETH": { + "_default": "2020-01-01" + }, + "BCDBTC": { + "_default": "2020-01-01" + }, + "BCDETH": { + "_default": "2020-01-01" + }, + "DGDBTC": { + "_default": "2020-01-01" + }, + "DGDETH": { + "_default": "2020-01-01" + }, + "IOTABNB": { + "_default": "2020-01-01" + }, + "ADXBTC": { + "_default": "2020-01-01" + }, + "ADXETH": { + "_default": "2020-01-01" + }, + "ADXBNB": { + "_default": "2020-01-01" + }, + "ADABTC": { + "_default": "2020-01-01" + }, + "ADAETH": { + "_default": "2020-01-01" + }, + "PPTBTC": { + "_default": "2020-01-01" + }, + "PPTETH": { + "_default": "2020-01-01" + }, + "CMTBTC": { + "_default": "2020-01-01" + }, + "CMTETH": { + "_default": "2020-01-01" + }, + "CMTBNB": { + "_default": "2020-01-01" + }, + "XLMBTC": { + "_default": "2020-01-01" + }, + "XLMETH": { + "_default": "2020-01-01" + }, + "XLMBNB": { + "_default": "2020-01-01" + }, + "CNDBTC": { + "_default": "2020-01-01" + }, + "CNDETH": { + "_default": "2020-01-01" + }, + "CNDBNB": { + "_default": "2020-01-01" + }, + "LENDBTC": { + "_default": "2020-01-01" + }, + "LENDETH": { + "_default": "2020-01-01" + }, + "WABIBTC": { + "_default": "2020-01-01" + }, + "WABIETH": { + "_default": "2020-01-01" + }, + "WABIBNB": { + "_default": "2020-01-01" + }, + "LTCETH": { + "_default": "2020-01-01" + }, + "LTCUSDT": { + "_default": "2020-01-01" + }, + "LTCBNB": { + "_default": "2020-01-01" + }, + "TNBBTC": { + "_default": "2020-01-01" + }, + "TNBETH": { + "_default": "2020-01-01" + }, + "WAVESBTC": { + "_default": "2020-01-01" + }, + "WAVESETH": { + "_default": "2020-01-01" + }, + "WAVESBNB": { + "_default": "2020-01-01" + }, + "GTOBTC": { + "_default": "2020-01-01" + }, + "GTOETH": { + "_default": "2020-01-01" + }, + "GTOBNB": { + "_default": "2020-01-01" + }, + "ICXBTC": { + "_default": "2020-01-01" + }, + "ICXETH": { + "_default": "2020-01-01" + }, + "ICXBNB": { + "_default": "2020-01-01" + }, + "OSTBTC": { + "_default": "2020-01-01" + }, + "OSTETH": { + "_default": "2020-01-01" + }, + "OSTBNB": { + "_default": "2020-01-01" + }, + "ELFBTC": { + "_default": "2020-01-01" + }, + "ELFETH": { + "_default": "2020-01-01" + }, + "AIONBTC": { + "_default": "2020-01-01" + }, + "AIONETH": { + "_default": "2020-01-01" + }, + "AIONBNB": { + "_default": "2020-01-01" + }, + "NEBLBTC": { + "_default": "2020-01-01" + }, + "NEBLBNB": { + "_default": "2020-01-01" + }, + "BRDBTC": { + "_default": "2020-01-01" + }, + "BRDETH": { + "_default": "2020-01-01" + }, + "BRDBNB": { + "_default": "2020-01-01" + }, + "MCOBNB": { + "_default": "2020-01-01" + }, + "EDOBTC": { + "_default": "2020-01-01" + }, + "EDOETH": { + "_default": "2020-01-01" + }, + "WINGSBTC": { + "_default": "2020-01-01" + }, + "WINGSETH": { + "_default": "2020-01-01" + }, + "NAVBTC": { + "_default": "2020-01-01" + }, + "NAVETH": { + "_default": "2020-01-01" + }, + "NAVBNB": { + "_default": "2020-01-01" + }, + "LUNBTC": { + "_default": "2020-01-01" + }, + "LUNETH": { + "_default": "2020-01-01" + }, + "TRIGBTC": { + "_default": "2020-01-01" + }, + "TRIGETH": { + "_default": "2020-01-01" + }, + "TRIGBNB": { + "_default": "2020-01-01" + }, + "APPCBTC": { + "_default": "2020-01-01" + }, + "APPCETH": { + "_default": "2020-01-01" + }, + "APPCBNB": { + "_default": "2020-01-01" + }, + "VIBEBTC": { + "_default": "2020-01-01" + }, + "VIBEETH": { + "_default": "2020-01-01" + }, + "RLCBTC": { + "_default": "2020-01-01" + }, + "RLCETH": { + "_default": "2020-01-01" + }, + "RLCBNB": { + "_default": "2020-01-01" + }, + "INSBTC": { + "_default": "2020-01-01" + }, + "INSETH": { + "_default": "2020-01-01" + }, + "PIVXBTC": { + "_default": "2020-01-01" + }, + "PIVXBNB": { + "_default": "2020-01-01" + }, + "IOSTBTC": { + "_default": "2020-01-01" + }, + "IOSTETH": { + "_default": "2020-01-01" + }, + "CHATBTC": { + "_default": "2020-01-01" + }, + "CHATETH": { + "_default": "2020-01-01" + }, + "STEEMBTC": { + "_default": "2020-01-01" + }, + "STEEMETH": { + "_default": "2020-01-01" + }, + "STEEMBNB": { + "_default": "2020-01-01" + }, + "NANOBTC": { + "_default": "2020-01-01" + }, + "NANOETH": { + "_default": "2020-01-01" + }, + "NANOBNB": { + "_default": "2020-01-01" + }, + "VIABTC": { + "_default": "2020-01-01" + }, + "VIAETH": { + "_default": "2020-01-01" + }, + "VIABNB": { + "_default": "2020-01-01" + }, + "BLZBTC": { + "_default": "2020-01-01" + }, + "BLZETH": { + "_default": "2020-01-01" + }, + "BLZBNB": { + "_default": "2020-01-01" + }, + "AEBTC": { + "_default": "2020-01-01" + }, + "AEETH": { + "_default": "2020-01-01" + }, + "AEBNB": { + "_default": "2020-01-01" + }, + "RPXBTC": { + "_default": "2020-01-01" + }, + "RPXETH": { + "_default": "2020-01-01" + }, + "RPXBNB": { + "_default": "2020-01-01" + }, + "NCASHBTC": { + "_default": "2020-01-01" + }, + "NCASHETH": { + "_default": "2020-01-01" + }, + "NCASHBNB": { + "_default": "2020-01-01" + }, + "POABTC": { + "_default": "2020-01-01" + }, + "POAETH": { + "_default": "2020-01-01" + }, + "POABNB": { + "_default": "2020-01-01" + }, + "ZILBTC": { + "_default": "2020-01-01" + }, + "ZILETH": { + "_default": "2020-01-01" + }, + "ZILBNB": { + "_default": "2020-01-01" + }, + "ONTBTC": { + "_default": "2020-01-01" + }, + "ONTETH": { + "_default": "2020-01-01" + }, + "ONTBNB": { + "_default": "2020-01-01" + }, + "STORMBTC": { + "_default": "2020-01-01" + }, + "STORMETH": { + "_default": "2020-01-01" + }, + "STORMBNB": { + "_default": "2020-01-01" + }, + "QTUMBNB": { + "_default": "2020-01-01" + }, + "QTUMUSDT": { + "_default": "2020-01-01" + }, + "XEMBTC": { + "_default": "2020-01-01" + }, + "XEMETH": { + "_default": "2020-01-01" + }, + "XEMBNB": { + "_default": "2020-01-01" + }, + "WANBTC": { + "_default": "2020-01-01" + }, + "WANETH": { + "_default": "2020-01-01" + }, + "WANBNB": { + "_default": "2020-01-01" + }, + "WPRBTC": { + "_default": "2020-01-01" + }, + "WPRETH": { + "_default": "2020-01-01" + }, + "QLCBTC": { + "_default": "2020-01-01" + }, + "QLCETH": { + "_default": "2020-01-01" + }, + "SYSBTC": { + "_default": "2020-01-01" + }, + "SYSETH": { + "_default": "2020-01-01" + }, + "SYSBNB": { + "_default": "2020-01-01" + }, + "QLCBNB": { + "_default": "2020-01-01" + }, + "GRSBTC": { + "_default": "2020-01-01" + }, + "GRSETH": { + "_default": "2020-01-01" + }, + "ADAUSDT": { + "_default": "2020-01-01" + }, + "ADABNB": { + "_default": "2020-01-01" + }, + "CLOAKBTC": { + "_default": "2020-01-01" + }, + "CLOAKETH": { + "_default": "2020-01-01" + }, + "GNTBTC": { + "_default": "2020-01-01" + }, + "GNTETH": { + "_default": "2020-01-01" + }, + "GNTBNB": { + "_default": "2020-01-01" + }, + "LOOMBTC": { + "_default": "2020-01-01" + }, + "LOOMETH": { + "_default": "2020-01-01" + }, + "LOOMBNB": { + "_default": "2020-01-01" + }, + "XRPUSDT": { + "_default": "2020-01-01" + }, + "BCNBTC": { + "_default": "2020-01-01" + }, + "BCNETH": { + "_default": "2020-01-01" + }, + "BCNBNB": { + "_default": "2020-01-01" + }, + "REPBTC": { + "_default": "2020-01-01" + }, + "REPBNB": { + "_default": "2020-01-01" + }, + "BTCTUSD": { + "_default": "2020-01-01" + }, + "TUSDBTC": { + "_default": "2020-01-01" + }, + "ETHTUSD": { + "_default": "2020-01-01" + }, + "TUSDETH": { + "_default": "2020-01-01" + }, + "TUSDBNB": { + "_default": "2020-01-01" + }, + "ZENBTC": { + "_default": "2020-01-01" + }, + "ZENETH": { + "_default": "2020-01-01" + }, + "ZENBNB": { + "_default": "2020-01-01" + }, + "SKYCOINBTC": { + "_default": "2020-01-01" + }, + "SKYCOINETH": { + "_default": "2020-01-01" + }, + "SKYCOINBNB": { + "_default": "2020-01-01" + }, + "EOSUSDT": { + "_default": "2020-01-01" + }, + "EOSBNB": { + "_default": "2020-01-01" + }, + "CVCBTC": { + "_default": "2020-01-01" + }, + "CVCETH": { + "_default": "2020-01-01" + }, + "CVCBNB": { + "_default": "2020-01-01" + }, + "THETABTC": { + "_default": "2020-01-01" + }, + "THETAETH": { + "_default": "2020-01-01" + }, + "THETABNB": { + "_default": "2020-01-01" + }, + "XRPBNB": { + "_default": "2020-01-01" + }, + "TUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDT": { + "_default": "2020-01-01" + }, + "XLMUSDT": { + "_default": "2020-01-01" + }, + "IOTXBTC": { + "_default": "2020-01-01" + }, + "IOTXETH": { + "_default": "2020-01-01" + }, + "QKCBTC": { + "_default": "2020-01-01" + }, + "QKCETH": { + "_default": "2020-01-01" + }, + "AGIBTC": { + "_default": "2020-01-01" + }, + "AGIETH": { + "_default": "2020-01-01" + }, + "AGIBNB": { + "_default": "2020-01-01" + }, + "NXSBTC": { + "_default": "2020-01-01" + }, + "NXSETH": { + "_default": "2020-01-01" + }, + "NXSBNB": { + "_default": "2020-01-01" + }, + "ENJBNB": { + "_default": "2020-01-01" + }, + "DATABTC": { + "_default": "2020-01-01" + }, + "DATAETH": { + "_default": "2020-01-01" + }, + "ONTUSDT": { + "_default": "2020-01-01" + }, + "TRXBNB": { + "_default": "2020-01-01" + }, + "TRXUSDT": { + "_default": "2020-01-01" + }, + "ETCUSDT": { + "_default": "2020-01-01" + }, + "ETCBNB": { + "_default": "2020-01-01" + }, + "ICXUSDT": { + "_default": "2020-01-01" + }, + "SCBTC": { + "_default": "2020-01-01" + }, + "SCETH": { + "_default": "2020-01-01" + }, + "NPXSBTC": { + "_default": "2020-01-01" + }, + "NPXSETH": { + "_default": "2020-01-01" + }, + "VENUSDT": { + "_default": "2020-01-01" + }, + "KEYBTC": { + "_default": "2020-01-01" + }, + "KEYETH": { + "_default": "2020-01-01" + }, + "NASBTC": { + "_default": "2020-01-01" + }, + "NASETH": { + "_default": "2020-01-01" + }, + "NASBNB": { + "_default": "2020-01-01" + }, + "MFTBTC": { + "_default": "2020-01-01" + }, + "MFTETH": { + "_default": "2020-01-01" + }, + "MFTBNB": { + "_default": "2020-01-01" + }, + "DENTBTC": { + "_default": "2020-01-01" + }, + "DENTETH": { + "_default": "2020-01-01" + }, + "ARDRBTC": { + "_default": "2020-01-01" + }, + "ARDRETH": { + "_default": "2020-01-01" + }, + "ARDRBNB": { + "_default": "2020-01-01" + }, + "NULSUSDT": { + "_default": "2020-01-01" + }, + "HOTBTC": { + "_default": "2020-01-01" + }, + "HOTETH": { + "_default": "2020-01-01" + }, + "VETBTC": { + "_default": "2020-01-01" + }, + "VETETH": { + "_default": "2020-01-01" + }, + "VETUSDT": { + "_default": "2020-01-01" + }, + "VETBNB": { + "_default": "2020-01-01" + }, + "DOCKBTC": { + "_default": "2020-01-01" + }, + "DOCKETH": { + "_default": "2020-01-01" + }, + "POLYBTC": { + "_default": "2020-01-01" + }, + "POLYBNB": { + "_default": "2020-01-01" + }, + "PHXBTC": { + "_default": "2020-01-01" + }, + "PHXETH": { + "_default": "2020-01-01" + }, + "PHXBNB": { + "_default": "2020-01-01" + }, + "HCBTC": { + "_default": "2020-01-01" + }, + "HCETH": { + "_default": "2020-01-01" + }, + "GOBTC": { + "_default": "2020-01-01" + }, + "GOBNB": { + "_default": "2020-01-01" + }, + "PAXBTC": { + "_default": "2020-01-01" + }, + "PAXBNB": { + "_default": "2020-01-01" + }, + "PAXUSDT": { + "_default": "2020-01-01" + }, + "PAXETH": { + "_default": "2020-01-01" + }, + "RVNBTC": { + "_default": "2020-01-01" + }, + "DCRBTC": { + "_default": "2020-01-01" + }, + "DCRBNB": { + "_default": "2020-01-01" + }, + "USDCBNB": { + "_default": "2020-01-01" + }, + "MITHBTC": { + "_default": "2020-01-01" + }, + "MITHBNB": { + "_default": "2020-01-01" + }, + "BCHABCBTC": { + "_default": "2020-01-01" + }, + "BCHSVBTC": { + "_default": "2020-01-01" + }, + "BCHABCUSDT": { + "_default": "2020-01-01" + }, + "BCHSVUSDT": { + "_default": "2020-01-01" + }, + "BNBPAX": { + "_default": "2020-01-01" + }, + "BTCPAX": { + "_default": "2020-01-01" + }, + "ETHPAX": { + "_default": "2020-01-01" + }, + "XRPPAX": { + "_default": "2020-01-01" + }, + "EOSPAX": { + "_default": "2020-01-01" + }, + "XLMPAX": { + "_default": "2020-01-01" + }, + "RENBTC": { + "_default": "2020-01-01" + }, + "RENBNB": { + "_default": "2020-01-01" + }, + "BNBTUSD": { + "_default": "2020-01-01" + }, + "XRPTUSD": { + "_default": "2020-01-01" + }, + "EOSTUSD": { + "_default": "2020-01-01" + }, + "XLMTUSD": { + "_default": "2020-01-01" + }, + "BNBUSDC": { + "_default": "2020-01-01" + }, + "BTCUSDC": { + "_default": "2020-01-01" + }, + "ETHUSDC": { + "_default": "2020-01-01" + }, + "XRPUSDC": { + "_default": "2020-01-01" + }, + "EOSUSDC": { + "_default": "2020-01-01" + }, + "XLMUSDC": { + "_default": "2020-01-01" + }, + "USDCUSDT": { + "_default": "2020-01-01" + }, + "ADATUSD": { + "_default": "2020-01-01" + }, + "TRXTUSD": { + "_default": "2020-01-01" + }, + "NEOTUSD": { + "_default": "2020-01-01" + }, + "TRXXRP": { + "_default": "2020-01-01" + }, + "XZCXRP": { + "_default": "2020-01-01" + }, + "PAXTUSD": { + "_default": "2020-01-01" + }, + "USDCTUSD": { + "_default": "2020-01-01" + }, + "USDCPAX": { + "_default": "2020-01-01" + }, + "LINKUSDT": { + "_default": "2020-01-01" + }, + "LINKTUSD": { + "_default": "2020-01-01" + }, + "LINKPAX": { + "_default": "2020-01-01" + }, + "LINKUSDC": { + "_default": "2020-01-01" + }, + "WAVESUSDT": { + "_default": "2020-01-01" + }, + "WAVESTUSD": { + "_default": "2020-01-01" + }, + "WAVESPAX": { + "_default": "2020-01-01" + }, + "WAVESUSDC": { + "_default": "2020-01-01" + }, + "BCHABCTUSD": { + "_default": "2020-01-01" + }, + "BCHABCPAX": { + "_default": "2020-01-01" + }, + "BCHABCUSDC": { + "_default": "2020-01-01" + }, + "BCHSVTUSD": { + "_default": "2020-01-01" + }, + "BCHSVPAX": { + "_default": "2020-01-01" + }, + "BCHSVUSDC": { + "_default": "2020-01-01" + }, + "LTCTUSD": { + "_default": "2020-01-01" + }, + "LTCPAX": { + "_default": "2020-01-01" + }, + "LTCUSDC": { + "_default": "2020-01-01" + }, + "TRXPAX": { + "_default": "2020-01-01" + }, + "TRXUSDC": { + "_default": "2020-01-01" + }, + "BTTBTC": { + "_default": "2020-01-01" + }, + "BTTBNB": { + "_default": "2020-01-01" + }, + "BTTUSDT": { + "_default": "2020-01-01" + }, + "BNBUSDS": { + "_default": "2020-01-01" + }, + "BTCUSDS": { + "_default": "2020-01-01" + }, + "USDSUSDT": { + "_default": "2020-01-01" + }, + "USDSPAX": { + "_default": "2020-01-01" + }, + "USDSTUSD": { + "_default": "2020-01-01" + }, + "USDSUSDC": { + "_default": "2020-01-01" + }, + "BTTPAX": { + "_default": "2020-01-01" + }, + "BTTTUSD": { + "_default": "2020-01-01" + }, + "BTTUSDC": { + "_default": "2020-01-01" + }, + "ONGBNB": { + "_default": "2020-01-01" + }, + "ONGBTC": { + "_default": "2020-01-01" + }, + "ONGUSDT": { + "_default": "2020-01-01" + }, + "HOTBNB": { + "_default": "2020-01-01" + }, + "HOTUSDT": { + "_default": "2020-01-01" + }, + "ZILUSDT": { + "_default": "2020-01-01" + }, + "ZRXBNB": { + "_default": "2020-01-01" + }, + "ZRXUSDT": { + "_default": "2020-01-01" + }, + "FETBNB": { + "_default": "2020-01-01" + }, + "FETBTC": { + "_default": "2020-01-01" + }, + "FETUSDT": { + "_default": "2020-01-01" + }, + "BATUSDT": { + "_default": "2020-01-01" + }, + "XMRBNB": { + "_default": "2020-01-01" + }, + "XMRUSDT": { + "_default": "2020-01-01" + }, + "ZECBNB": { + "_default": "2020-01-01" + }, + "ZECUSDT": { + "_default": "2020-01-01" + }, + "ZECPAX": { + "_default": "2020-01-01" + }, + "ZECTUSD": { + "_default": "2020-01-01" + }, + "ZECUSDC": { + "_default": "2020-01-01" + }, + "IOSTUSDT": { + "_default": "2020-01-01" + }, + "CELRBNB": { + "_default": "2020-01-01" + }, + "CELRBTC": { + "_default": "2020-01-01" + }, + "CELRUSDT": { + "_default": "2020-01-01" + }, + "ADAPAX": { + "_default": "2020-01-01" + }, + "ADAUSDC": { + "_default": "2020-01-01" + }, + "NEOPAX": { + "_default": "2020-01-01" + }, + "NEOUSDC": { + "_default": "2020-01-01" + }, + "DASHBNB": { + "_default": "2020-01-01" + }, + "DASHUSDT": { + "_default": "2020-01-01" + }, + "NANOUSDT": { + "_default": "2020-01-01" + }, + "OMGBNB": { + "_default": "2020-01-01" + }, + "OMGUSDT": { + "_default": "2020-01-01" + }, + "THETAUSDT": { + "_default": "2020-01-01" + }, + "ENJUSDT": { + "_default": "2020-01-01" + }, + "MITHUSDT": { + "_default": "2020-01-01" + }, + "MATICBNB": { + "_default": "2020-01-01" + }, + "MATICBTC": { + "_default": "2020-01-01" + }, + "MATICUSDT": { + "_default": "2020-01-01" + }, + "ATOMBNB": { + "_default": "2020-01-01" + }, + "ATOMBTC": { + "_default": "2020-01-01" + }, + "ATOMUSDT": { + "_default": "2020-01-01" + }, + "ATOMUSDC": { + "_default": "2020-01-01" + }, + "ATOMPAX": { + "_default": "2020-01-01" + }, + "ATOMTUSD": { + "_default": "2020-01-01" + }, + "ETCUSDC": { + "_default": "2020-01-01" + }, + "ETCPAX": { + "_default": "2020-01-01" + }, + "ETCTUSD": { + "_default": "2020-01-01" + }, + "BATUSDC": { + "_default": "2020-01-01" + }, + "BATPAX": { + "_default": "2020-01-01" + }, + "BATTUSD": { + "_default": "2020-01-01" + }, + "PHBBNB": { + "_default": "2020-01-01" + }, + "PHBBTC": { + "_default": "2020-01-01" + }, + "PHBUSDC": { + "_default": "2020-01-01" + }, + "PHBTUSD": { + "_default": "2020-01-01" + }, + "PHBPAX": { + "_default": "2020-01-01" + }, + "TFUELBNB": { + "_default": "2020-01-01" + }, + "TFUELBTC": { + "_default": "2020-01-01" + }, + "TFUELUSDT": { + "_default": "2020-01-01" + }, + "TFUELUSDC": { + "_default": "2020-01-01" + }, + "TFUELTUSD": { + "_default": "2020-01-01" + }, + "TFUELPAX": { + "_default": "2020-01-01" + }, + "ONEBNB": { + "_default": "2020-01-01" + }, + "ONEBTC": { + "_default": "2020-01-01" + }, + "ONEUSDT": { + "_default": "2020-01-01" + }, + "ONETUSD": { + "_default": "2020-01-01" + }, + "ONEPAX": { + "_default": "2020-01-01" + }, + "ONEUSDC": { + "_default": "2020-01-01" + }, + "FTMBNB": { + "_default": "2020-01-01" + }, + "FTMBTC": { + "_default": "2020-01-01" + }, + "FTMUSDT": { + "_default": "2020-01-01" + }, + "FTMTUSD": { + "_default": "2020-01-01" + }, + "FTMPAX": { + "_default": "2020-01-01" + }, + "FTMUSDC": { + "_default": "2020-01-01" + }, + "BTCBBTC": { + "_default": "2020-01-01" + }, + "BCPTTUSD": { + "_default": "2020-01-01" + }, + "BCPTPAX": { + "_default": "2020-01-01" + }, + "BCPTUSDC": { + "_default": "2020-01-01" + }, + "ALGOBNB": { + "_default": "2020-01-01" + }, + "ALGOBTC": { + "_default": "2020-01-01" + }, + "ALGOUSDT": { + "_default": "2020-01-01" + }, + "ALGOTUSD": { + "_default": "2020-01-01" + }, + "ALGOPAX": { + "_default": "2020-01-01" + }, + "ALGOUSDC": { + "_default": "2020-01-01" + }, + "USDSBUSDT": { + "_default": "2020-01-01" + }, + "USDSBUSDS": { + "_default": "2020-01-01" + }, + "GTOUSDT": { + "_default": "2020-01-01" + }, + "GTOPAX": { + "_default": "2020-01-01" + }, + "GTOTUSD": { + "_default": "2020-01-01" + }, + "GTOUSDC": { + "_default": "2020-01-01" + }, + "ERDBNB": { + "_default": "2020-01-01" + }, + "ERDBTC": { + "_default": "2020-01-01" + }, + "ERDUSDT": { + "_default": "2020-01-01" + }, + "ERDPAX": { + "_default": "2020-01-01" + }, + "ERDUSDC": { + "_default": "2020-01-01" + }, + "DOGEBNB": { + "_default": "2020-01-01" + }, + "DOGEBTC": { + "_default": "2020-01-01" + }, + "DOGEUSDT": { + "_default": "2020-01-01" + }, + "DOGEPAX": { + "_default": "2020-01-01" + }, + "DOGEUSDC": { + "_default": "2020-01-01" + }, + "DUSKBNB": { + "_default": "2020-01-01" + }, + "DUSKBTC": { + "_default": "2020-01-01" + }, + "DUSKUSDT": { + "_default": "2020-01-01" + }, + "DUSKUSDC": { + "_default": "2020-01-01" + }, + "DUSKPAX": { + "_default": "2020-01-01" + }, + "BGBPUSDC": { + "_default": "2020-01-01" + }, + "ANKRBNB": { + "_default": "2020-01-01" + }, + "ANKRBTC": { + "_default": "2020-01-01" + }, + "ANKRUSDT": { + "_default": "2020-01-01" + }, + "ANKRTUSD": { + "_default": "2020-01-01" + }, + "ANKRPAX": { + "_default": "2020-01-01" + }, + "ANKRUSDC": { + "_default": "2020-01-01" + }, + "ONTPAX": { + "_default": "2020-01-01" + }, + "ONTUSDC": { + "_default": "2020-01-01" + }, + "WINBNB": { + "_default": "2020-01-01" + }, + "WINBTC": { + "_default": "2020-01-01" + }, + "WINUSDT": { + "_default": "2020-01-01" + }, + "WINUSDC": { + "_default": "2020-01-01" + }, + "COSBNB": { + "_default": "2020-01-01" + }, + "COSBTC": { + "_default": "2020-01-01" + }, + "COSUSDT": { + "_default": "2020-01-01" + }, + "TUSDBTUSD": { + "_default": "2020-01-01" + }, + "NPXSUSDT": { + "_default": "2020-01-01" + }, + "NPXSUSDC": { + "_default": "2020-01-01" + }, + "COCOSBNB": { + "_default": "2020-01-01" + }, + "COCOSBTC": { + "_default": "2020-01-01" + }, + "COCOSUSDT": { + "_default": "2020-01-01" + }, + "MTLUSDT": { + "_default": "2020-01-01" + }, + "TOMOBNB": { + "_default": "2020-01-01" + }, + "TOMOBTC": { + "_default": "2020-01-01" + }, + "TOMOUSDT": { + "_default": "2020-01-01" + }, + "TOMOUSDC": { + "_default": "2020-01-01" + }, + "PERLBNB": { + "_default": "2020-01-01" + }, + "PERLBTC": { + "_default": "2020-01-01" + }, + "PERLUSDC": { + "_default": "2020-01-01" + }, + "PERLUSDT": { + "_default": "2020-01-01" + }, + "DENTUSDT": { + "_default": "2020-01-01" + }, + "MFTUSDT": { + "_default": "2020-01-01" + }, + "KEYUSDT": { + "_default": "2020-01-01" + }, + "STORMUSDT": { + "_default": "2020-01-01" + }, + "DOCKUSDT": { + "_default": "2020-01-01" + }, + "WANUSDT": { + "_default": "2020-01-01" + }, + "FUNUSDT": { + "_default": "2020-01-01" + }, + "CVCUSDT": { + "_default": "2020-01-01" + }, + "BTTTRX": { + "_default": "2020-01-01" + }, + "WINTRX": { + "_default": "2020-01-01" + }, + "CHZBNB": { + "_default": "2020-01-01" + }, + "CHZBTC": { + "_default": "2020-01-01" + }, + "CHZUSDT": { + "_default": "2020-01-01" + }, + "BANDBNB": { + "_default": "2020-01-01" + }, + "BANDBTC": { + "_default": "2020-01-01" + }, + "BANDUSDT": { + "_default": "2020-01-01" + }, + "BNBBUSD": { + "_default": "2020-01-01" + }, + "BTCBUSD": { + "_default": "2020-01-01" + }, + "BUSDUSDT": { + "_default": "2020-01-01" + }, + "BEAMBNB": { + "_default": "2020-01-01" + }, + "BEAMBTC": { + "_default": "2020-01-01" + }, + "BEAMUSDT": { + "_default": "2020-01-01" + }, + "XTZBNB": { + "_default": "2020-01-01" + }, + "XTZBTC": { + "_default": "2020-01-01" + }, + "XTZUSDT": { + "_default": "2020-01-01" + }, + "RENUSDT": { + "_default": "2020-01-01" + }, + "RVNUSDT": { + "_default": "2020-01-01" + }, + "HCUSDT": { + "_default": "2020-01-01" + }, + "HBARBNB": { + "_default": "2020-01-01" + }, + "HBARBTC": { + "_default": "2020-01-01" + }, + "HBARUSDT": { + "_default": "2020-01-01" + }, + "NKNBNB": { + "_default": "2020-01-01" + }, + "NKNBTC": { + "_default": "2020-01-01" + }, + "NKNUSDT": { + "_default": "2020-01-01" + }, + "XRPBUSD": { + "_default": "2020-01-01" + }, + "ETHBUSD": { + "_default": "2020-01-01" + }, + "BCHABCBUSD": { + "_default": "2020-01-01" + }, + "LTCBUSD": { + "_default": "2020-01-01" + }, + "LINKBUSD": { + "_default": "2020-01-01" + }, + "ETCBUSD": { + "_default": "2020-01-01" + }, + "STXBNB": { + "_default": "2020-01-01" + }, + "STXBTC": { + "_default": "2020-01-01" + }, + "STXUSDT": { + "_default": "2020-01-01" + }, + "KAVABNB": { + "_default": "2020-01-01" + }, + "KAVABTC": { + "_default": "2020-01-01" + }, + "KAVAUSDT": { + "_default": "2020-01-01" + }, + "BUSDNGN": { + "_default": "2020-01-01" + }, + "BNBNGN": { + "_default": "2020-01-01" + }, + "BTCNGN": { + "_default": "2020-01-01" + }, + "ARPABNB": { + "_default": "2020-01-01" + }, + "ARPABTC": { + "_default": "2020-01-01" + }, + "ARPAUSDT": { + "_default": "2020-01-01" + }, + "TRXBUSD": { + "_default": "2020-01-01" + }, + "EOSBUSD": { + "_default": "2020-01-01" + }, + "IOTXUSDT": { + "_default": "2020-01-01" + }, + "RLCUSDT": { + "_default": "2020-01-01" + }, + "MCOUSDT": { + "_default": "2020-01-01" + }, + "XLMBUSD": { + "_default": "2020-01-01" + }, + "ADABUSD": { + "_default": "2020-01-01" + }, + "CTXCBNB": { + "_default": "2020-01-01" + }, + "CTXCBTC": { + "_default": "2020-01-01" + }, + "CTXCUSDT": { + "_default": "2020-01-01" + }, + "BCHBNB": { + "_default": "2020-01-01" + }, + "BCHBTC": { + "_default": "2020-01-01" + }, + "BCHUSDT": { + "_default": "2020-01-01" + }, + "BCHUSDC": { + "_default": "2020-01-01" + }, + "BCHTUSD": { + "_default": "2020-01-01" + }, + "BCHPAX": { + "_default": "2020-01-01" + }, + "BCHBUSD": { + "_default": "2020-01-01" + }, + "BTCRUB": { + "_default": "2020-01-01" + }, + "ETHRUB": { + "_default": "2020-01-01" + }, + "XRPRUB": { + "_default": "2020-01-01" + }, + "BNBRUB": { + "_default": "2020-01-01" + }, + "TROYBNB": { + "_default": "2020-01-01" + }, + "TROYBTC": { + "_default": "2020-01-01" + }, + "TROYUSDT": { + "_default": "2020-01-01" + }, + "BUSDRUB": { + "_default": "2020-01-01" + }, + "QTUMBUSD": { + "_default": "2020-01-01" + }, + "VETBUSD": { + "_default": "2020-01-01" + }, + "VITEBNB": { + "_default": "2020-01-01" + }, + "VITEBTC": { + "_default": "2020-01-01" + }, + "VITEUSDT": { + "_default": "2020-01-01" + }, + "FTTBNB": { + "_default": "2020-01-01" + }, + "FTTBTC": { + "_default": "2020-01-01" + }, + "FTTUSDT": { + "_default": "2020-01-01" + }, + "BTCTRY": { + "_default": "2020-01-01" + }, + "BNBTRY": { + "_default": "2020-01-01" + }, + "BUSDTRY": { + "_default": "2020-01-01" + }, + "ETHTRY": { + "_default": "2020-01-01" + }, + "XRPTRY": { + "_default": "2020-01-01" + }, + "USDTTRY": { + "_default": "2020-01-01" + }, + "USDTRUB": { + "_default": "2020-01-01" + }, + "BTCEUR": { + "_default": "2020-01-01" + }, + "ETHEUR": { + "_default": "2020-01-01" + }, + "BNBEUR": { + "_default": "2020-01-01" + }, + "XRPEUR": { + "_default": "2020-01-01" + }, + "EURBUSD": { + "_default": "2020-01-01" + }, + "EURUSDT": { + "_default": "2020-01-01" + }, + "OGNBNB": { + "_default": "2020-01-01" + }, + "OGNBTC": { + "_default": "2020-01-01" + }, + "OGNUSDT": { + "_default": "2020-01-01" + }, + "DREPBNB": { + "_default": "2020-01-01" + }, + "DREPBTC": { + "_default": "2020-01-01" + }, + "DREPUSDT": { + "_default": "2020-01-01" + }, + "BULLUSDT": { + "_default": "2020-01-01" + }, + "BULLBUSD": { + "_default": "2020-01-01" + }, + "BEARUSDT": { + "_default": "2020-01-01" + }, + "BEARBUSD": { + "_default": "2020-01-01" + }, + "ETHBULLUSDT": { + "_default": "2020-01-01" + }, + "ETHBULLBUSD": { + "_default": "2020-01-01" + }, + "ETHBEARUSDT": { + "_default": "2020-01-01" + }, + "ETHBEARBUSD": { + "_default": "2020-01-01" + }, + "TCTBNB": { + "_default": "2020-01-01" + }, + "TCTBTC": { + "_default": "2020-01-01" + }, + "TCTUSDT": { + "_default": "2020-01-01" + }, + "WRXBNB": { + "_default": "2020-01-01" + }, + "WRXBTC": { + "_default": "2020-01-01" + }, + "WRXUSDT": { + "_default": "2020-01-01" + }, + "ICXBUSD": { + "_default": "2020-01-01" + }, + "BTSUSDT": { + "_default": "2020-01-01" + }, + "BTSBUSD": { + "_default": "2020-01-01" + }, + "LSKUSDT": { + "_default": "2020-01-01" + }, + "BNTUSDT": { + "_default": "2020-01-01" + }, + "BNTBUSD": { + "_default": "2020-01-01" + }, + "LTOBNB": { + "_default": "2020-01-01" + }, + "LTOBTC": { + "_default": "2020-01-01" + }, + "LTOUSDT": { + "_default": "2020-01-01" + }, + "ATOMBUSD": { + "_default": "2020-01-01" + }, + "DASHBUSD": { + "_default": "2020-01-01" + }, + "NEOBUSD": { + "_default": "2020-01-01" + }, + "WAVESBUSD": { + "_default": "2020-01-01" + }, + "XTZBUSD": { + "_default": "2020-01-01" + }, + "EOSBULLUSDT": { + "_default": "2020-01-01" + }, + "EOSBULLBUSD": { + "_default": "2020-01-01" + }, + "EOSBEARUSDT": { + "_default": "2020-01-01" + }, + "EOSBEARBUSD": { + "_default": "2020-01-01" + }, + "XRPBULLUSDT": { + "_default": "2020-01-01" + }, + "XRPBULLBUSD": { + "_default": "2020-01-01" + }, + "XRPBEARUSDT": { + "_default": "2020-01-01" + }, + "XRPBEARBUSD": { + "_default": "2020-01-01" + }, + "BATBUSD": { + "_default": "2020-01-01" + }, + "ENJBUSD": { + "_default": "2020-01-01" + }, + "NANOBUSD": { + "_default": "2020-01-01" + }, + "ONTBUSD": { + "_default": "2020-01-01" + }, + "RVNBUSD": { + "_default": "2020-01-01" + }, + "STRATBUSD": { + "_default": "2020-01-01" + }, + "STRATBNB": { + "_default": "2020-01-01" + }, + "STRATUSDT": { + "_default": "2020-01-01" + }, + "AIONBUSD": { + "_default": "2020-01-01" + }, + "AIONUSDT": { + "_default": "2020-01-01" + }, + "MBLBNB": { + "_default": "2020-01-01" + }, + "MBLBTC": { + "_default": "2020-01-01" + }, + "MBLUSDT": { + "_default": "2020-01-01" + }, + "COTIBNB": { + "_default": "2020-01-01" + }, + "COTIBTC": { + "_default": "2020-01-01" + }, + "COTIUSDT": { + "_default": "2020-01-01" + }, + "ALGOBUSD": { + "_default": "2020-01-01" + }, + "BTTBUSD": { + "_default": "2020-01-01" + }, + "TOMOBUSD": { + "_default": "2020-01-01" + }, + "XMRBUSD": { + "_default": "2020-01-01" + }, + "ZECBUSD": { + "_default": "2020-01-01" + }, + "BNBBULLUSDT": { + "_default": "2020-01-01" + }, + "BNBBULLBUSD": { + "_default": "2020-01-01" + }, + "BNBBEARUSDT": { + "_default": "2020-01-01" + }, + "BNBBEARBUSD": { + "_default": "2020-01-01" + }, + "STPTBNB": { + "_default": "2020-01-01" + }, + "STPTBTC": { + "_default": "2020-01-01" + }, + "STPTUSDT": { + "_default": "2020-01-01" + }, + "BTCZAR": { + "_default": "2020-01-01" + }, + "ETHZAR": { + "_default": "2020-01-01" + }, + "BNBZAR": { + "_default": "2020-01-01" + }, + "USDTZAR": { + "_default": "2020-01-01" + }, + "BUSDZAR": { + "_default": "2020-01-01" + }, + "BTCBKRW": { + "_default": "2020-01-01" + }, + "ETHBKRW": { + "_default": "2020-01-01" + }, + "BNBBKRW": { + "_default": "2020-01-01" + }, + "WTCUSDT": { + "_default": "2020-01-01" + }, + "DATABUSD": { + "_default": "2020-01-01" + }, + "DATAUSDT": { + "_default": "2020-01-01" + }, + "XZCUSDT": { + "_default": "2020-01-01" + }, + "SOLBNB": { + "_default": "2020-01-01" + }, + "SOLBTC": { + "_default": "2020-01-01" + }, + "SOLUSDT": { + "_default": "2020-01-01" + }, + "SOLBUSD": { + "_default": "2020-01-01" + }, + "BTCIDRT": { + "_default": "2020-01-01" + }, + "BNBIDRT": { + "_default": "2020-01-01" + }, + "USDTIDRT": { + "_default": "2020-01-01" + }, + "BUSDIDRT": { + "_default": "2020-01-01" + }, + "CTSIBTC": { + "_default": "2020-01-01" + }, + "CTSIUSDT": { + "_default": "2020-01-01" + }, + "CTSIBNB": { + "_default": "2020-01-01" + }, + "CTSIBUSD": { + "_default": "2020-01-01" + }, + "HIVEBNB": { + "_default": "2020-01-01" + }, + "HIVEBTC": { + "_default": "2020-01-01" + }, + "HIVEUSDT": { + "_default": "2020-01-01" + }, + "CHRBNB": { + "_default": "2020-01-01" + }, + "CHRBTC": { + "_default": "2020-01-01" + }, + "CHRUSDT": { + "_default": "2020-01-01" + }, + "BTCUPUSDT": { + "_default": "2020-01-01" + }, + "BTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "GXSUSDT": { + "_default": "2020-01-01" + }, + "ARDRUSDT": { + "_default": "2020-01-01" + }, + "ERDBUSD": { + "_default": "2020-01-01" + }, + "LENDUSDT": { + "_default": "2020-01-01" + }, + "HBARBUSD": { + "_default": "2020-01-01" + }, + "MATICBUSD": { + "_default": "2020-01-01" + }, + "WRXBUSD": { + "_default": "2020-01-01" + }, + "ZILBUSD": { + "_default": "2020-01-01" + }, + "MDTBNB": { + "_default": "2020-01-01" + }, + "MDTBTC": { + "_default": "2020-01-01" + }, + "MDTUSDT": { + "_default": "2020-01-01" + }, + "STMXBTC": { + "_default": "2020-01-01" + }, + "STMXETH": { + "_default": "2020-01-01" + }, + "STMXUSDT": { + "_default": "2020-01-01" + }, + "KNCBUSD": { + "_default": "2020-01-01" + }, + "KNCUSDT": { + "_default": "2020-01-01" + }, + "REPBUSD": { + "_default": "2020-01-01" + }, + "REPUSDT": { + "_default": "2020-01-01" + }, + "LRCBUSD": { + "_default": "2020-01-01" + }, + "LRCUSDT": { + "_default": "2020-01-01" + }, + "IQBNB": { + "_default": "2020-01-01" + }, + "IQBUSD": { + "_default": "2020-01-01" + }, + "PNTBTC": { + "_default": "2020-01-01" + }, + "PNTUSDT": { + "_default": "2020-01-01" + }, + "BTCGBP": { + "_default": "2020-01-01" + }, + "ETHGBP": { + "_default": "2020-01-01" + }, + "XRPGBP": { + "_default": "2020-01-01" + }, + "BNBGBP": { + "_default": "2020-01-01" + }, + "GBPBUSD": { + "_default": "2020-01-01" + }, + "DGBBTC": { + "_default": "2020-01-01" + }, + "DGBBUSD": { + "_default": "2020-01-01" + }, + "BTCUAH": { + "_default": "2020-01-01" + }, + "USDTUAH": { + "_default": "2020-01-01" + }, + "COMPBTC": { + "_default": "2020-01-01" + }, + "COMPBNB": { + "_default": "2020-01-01" + }, + "COMPBUSD": { + "_default": "2020-01-01" + }, + "COMPUSDT": { + "_default": "2020-01-01" + }, + "BTCBIDR": { + "_default": "2020-01-01" + }, + "ETHBIDR": { + "_default": "2020-01-01" + }, + "BNBBIDR": { + "_default": "2020-01-01" + }, + "BUSDBIDR": { + "_default": "2020-01-01" + }, + "USDTBIDR": { + "_default": "2020-01-01" + }, + "BKRWUSDT": { + "_default": "2020-01-01" + }, + "BKRWBUSD": { + "_default": "2020-01-01" + }, + "SCUSDT": { + "_default": "2020-01-01" + }, + "ZENUSDT": { + "_default": "2020-01-01" + }, + "SXPBTC": { + "_default": "2020-01-01" + }, + "SXPBNB": { + "_default": "2020-01-01" + }, + "SXPBUSD": { + "_default": "2020-01-01" + }, + "SNXBTC": { + "_default": "2020-01-01" + }, + "SNXBNB": { + "_default": "2020-01-01" + }, + "SNXBUSD": { + "_default": "2020-01-01" + }, + "SNXUSDT": { + "_default": "2020-01-01" + }, + "ETHUPUSDT": { + "_default": "2020-01-01" + }, + "ETHDOWNUSDT": { + "_default": "2020-01-01" + }, + "ADAUPUSDT": { + "_default": "2020-01-01" + }, + "ADADOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKUPUSDT": { + "_default": "2020-01-01" + }, + "LINKDOWNUSDT": { + "_default": "2020-01-01" + }, + "VTHOBNB": { + "_default": "2020-01-01" + }, + "VTHOBUSD": { + "_default": "2020-01-01" + }, + "VTHOUSDT": { + "_default": "2020-01-01" + }, + "DCRBUSD": { + "_default": "2020-01-01" + }, + "DGBUSDT": { + "_default": "2020-01-01" + }, + "GBPUSDT": { + "_default": "2020-01-01" + }, + "STORJBUSD": { + "_default": "2020-01-01" + }, + "SXPUSDT": { + "_default": "2020-01-01" + }, + "IRISBNB": { + "_default": "2020-01-01" + }, + "IRISBTC": { + "_default": "2020-01-01" + }, + "IRISBUSD": { + "_default": "2020-01-01" + }, + "MKRBNB": { + "_default": "2020-01-01" + }, + "MKRBTC": { + "_default": "2020-01-01" + }, + "MKRUSDT": { + "_default": "2020-01-01" + }, + "MKRBUSD": { + "_default": "2020-01-01" + }, + "DAIBNB": { + "_default": "2020-01-01" + }, + "DAIBTC": { + "_default": "2020-01-01" + }, + "DAIUSDT": { + "_default": "2020-01-01" + }, + "DAIBUSD": { + "_default": "2020-01-01" + }, + "RUNEBNB": { + "_default": "2020-01-01" + }, + "RUNEBTC": { + "_default": "2020-01-01" + }, + "RUNEBUSD": { + "_default": "2020-01-01" + }, + "MANABUSD": { + "_default": "2020-01-01" + }, + "DOGEBUSD": { + "_default": "2020-01-01" + }, + "LENDBUSD": { + "_default": "2020-01-01" + }, + "ZRXBUSD": { + "_default": "2020-01-01" + }, + "DCRUSDT": { + "_default": "2020-01-01" + }, + "STORJUSDT": { + "_default": "2020-01-01" + }, + "XRPBKRW": { + "_default": "2020-01-01" + }, + "ADABKRW": { + "_default": "2020-01-01" + }, + "BTCAUD": { + "_default": "2020-01-01" + }, + "ETHAUD": { + "_default": "2020-01-01" + }, + "AUDBUSD": { + "_default": "2020-01-01" + }, + "FIOBNB": { + "_default": "2020-01-01" + }, + "FIOBTC": { + "_default": "2020-01-01" + }, + "FIOBUSD": { + "_default": "2020-01-01" + }, + "BNBUPUSDT": { + "_default": "2020-01-01" + }, + "BNBDOWNUSDT": { + "_default": "2020-01-01" + }, + "XTZUPUSDT": { + "_default": "2020-01-01" + }, + "XTZDOWNUSDT": { + "_default": "2020-01-01" + }, + "AVABNB": { + "_default": "2020-01-01" + }, + "AVABTC": { + "_default": "2020-01-01" + }, + "AVABUSD": { + "_default": "2020-01-01" + }, + "USDTBKRW": { + "_default": "2020-01-01" + }, + "BUSDBKRW": { + "_default": "2020-01-01" + }, + "IOTABUSD": { + "_default": "2020-01-01" + }, + "MANAUSDT": { + "_default": "2020-01-01" + }, + "XRPAUD": { + "_default": "2020-01-01" + }, + "BNBAUD": { + "_default": "2020-01-01" + }, + "AUDUSDT": { + "_default": "2020-01-01" + }, + "BALBNB": { + "_default": "2020-01-01" + }, + "BALBTC": { + "_default": "2020-01-01" + }, + "BALBUSD": { + "_default": "2020-01-01" + }, + "YFIBNB": { + "_default": "2020-01-01" + }, + "YFIBTC": { + "_default": "2020-01-01" + }, + "YFIBUSD": { + "_default": "2020-01-01" + }, + "YFIUSDT": { + "_default": "2020-01-01" + }, + "BLZBUSD": { + "_default": "2020-01-01" + }, + "KMDBUSD": { + "_default": "2020-01-01" + }, + "BALUSDT": { + "_default": "2020-01-01" + }, + "BLZUSDT": { + "_default": "2020-01-01" + }, + "IRISUSDT": { + "_default": "2020-01-01" + }, + "KMDUSDT": { + "_default": "2020-01-01" + }, + "BTCDAI": { + "_default": "2020-01-01" + }, + "ETHDAI": { + "_default": "2020-01-01" + }, + "BNBDAI": { + "_default": "2020-01-01" + }, + "USDTDAI": { + "_default": "2020-01-01" + }, + "BUSDDAI": { + "_default": "2020-01-01" + }, + "JSTBNB": { + "_default": "2020-01-01" + }, + "JSTBTC": { + "_default": "2020-01-01" + }, + "JSTBUSD": { + "_default": "2020-01-01" + }, + "JSTUSDT": { + "_default": "2020-01-01" + }, + "SRMBNB": { + "_default": "2020-01-01" + }, + "SRMBTC": { + "_default": "2020-01-01" + }, + "SRMBUSD": { + "_default": "2020-01-01" + }, + "SRMUSDT": { + "_default": "2020-01-01" + }, + "ANTBNB": { + "_default": "2020-01-01" + }, + "ANTBTC": { + "_default": "2020-01-01" + }, + "ANTBUSD": { + "_default": "2020-01-01" + }, + "ANTUSDT": { + "_default": "2020-01-01" + }, + "CRVBNB": { + "_default": "2020-01-01" + }, + "CRVBTC": { + "_default": "2020-01-01" + }, + "CRVBUSD": { + "_default": "2020-01-01" + }, + "CRVUSDT": { + "_default": "2020-01-01" + }, + "SANDBNB": { + "_default": "2020-01-01" + }, + "SANDBTC": { + "_default": "2020-01-01" + }, + "SANDUSDT": { + "_default": "2020-01-01" + }, + "SANDBUSD": { + "_default": "2020-01-01" + }, + "OCEANBNB": { + "_default": "2020-01-01" + }, + "OCEANBTC": { + "_default": "2020-01-01" + }, + "OCEANBUSD": { + "_default": "2020-01-01" + }, + "OCEANUSDT": { + "_default": "2020-01-01" + }, + "NMRBTC": { + "_default": "2020-01-01" + }, + "NMRBUSD": { + "_default": "2020-01-01" + }, + "NMRUSDT": { + "_default": "2020-01-01" + }, + "DOTBNB": { + "_default": "2020-01-01" + }, + "DOTBTC": { + "_default": "2020-01-01" + }, + "DOTBUSD": { + "_default": "2020-01-01" + }, + "DOTUSDT": { + "_default": "2020-01-01" + }, + "LUNABNB": { + "_default": "2020-01-01" + }, + "LUNABTC": { + "_default": "2020-01-01" + }, + "LUNABUSD": { + "_default": "2020-01-01" + }, + "LUNAUSDT": { + "_default": "2020-01-01" + }, + "IDEXBTC": { + "_default": "2020-01-01" + }, + "IDEXBUSD": { + "_default": "2020-01-01" + }, + "RSRBNB": { + "_default": "2020-01-01" + }, + "RSRBTC": { + "_default": "2020-01-01" + }, + "RSRBUSD": { + "_default": "2020-01-01" + }, + "RSRUSDT": { + "_default": "2020-01-01" + }, + "PAXGBNB": { + "_default": "2020-01-01" + }, + "PAXGBTC": { + "_default": "2020-01-01" + }, + "PAXGBUSD": { + "_default": "2020-01-01" + }, + "PAXGUSDT": { + "_default": "2020-01-01" + }, + "WNXMBNB": { + "_default": "2020-01-01" + }, + "WNXMBTC": { + "_default": "2020-01-01" + }, + "WNXMBUSD": { + "_default": "2020-01-01" + }, + "WNXMUSDT": { + "_default": "2020-01-01" + }, + "TRBBNB": { + "_default": "2020-01-01" + }, + "TRBBTC": { + "_default": "2020-01-01" + }, + "TRBBUSD": { + "_default": "2020-01-01" + }, + "TRBUSDT": { + "_default": "2020-01-01" + }, + "ETHNGN": { + "_default": "2020-01-01" + }, + "DOTBIDR": { + "_default": "2020-01-01" + }, + "LINKAUD": { + "_default": "2020-01-01" + }, + "SXPAUD": { + "_default": "2020-01-01" + }, + "BZRXBNB": { + "_default": "2020-01-01" + }, + "BZRXBTC": { + "_default": "2020-01-01" + }, + "BZRXBUSD": { + "_default": "2020-01-01" + }, + "BZRXUSDT": { + "_default": "2020-01-01" + }, + "WBTCBTC": { + "_default": "2020-01-01" + }, + "WBTCETH": { + "_default": "2020-01-01" + }, + "SUSHIBNB": { + "_default": "2020-01-01" + }, + "SUSHIBTC": { + "_default": "2020-01-01" + }, + "SUSHIBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUSDT": { + "_default": "2020-01-01" + }, + "YFIIBNB": { + "_default": "2020-01-01" + }, + "YFIIBTC": { + "_default": "2020-01-01" + }, + "YFIIBUSD": { + "_default": "2020-01-01" + }, + "YFIIUSDT": { + "_default": "2020-01-01" + }, + "KSMBNB": { + "_default": "2020-01-01" + }, + "KSMBTC": { + "_default": "2020-01-01" + }, + "KSMBUSD": { + "_default": "2020-01-01" + }, + "KSMUSDT": { + "_default": "2020-01-01" + }, + "EGLDBNB": { + "_default": "2020-01-01" + }, + "EGLDBTC": { + "_default": "2020-01-01" + }, + "EGLDBUSD": { + "_default": "2020-01-01" + }, + "EGLDUSDT": { + "_default": "2020-01-01" + }, + "DIABNB": { + "_default": "2020-01-01" + }, + "DIABTC": { + "_default": "2020-01-01" + }, + "DIABUSD": { + "_default": "2020-01-01" + }, + "DIAUSDT": { + "_default": "2020-01-01" + }, + "RUNEUSDT": { + "_default": "2020-01-01" + }, + "FIOUSDT": { + "_default": "2020-01-01" + }, + "UMABTC": { + "_default": "2020-01-01" + }, + "UMAUSDT": { + "_default": "2020-01-01" + }, + "EOSUPUSDT": { + "_default": "2020-01-01" + }, + "EOSDOWNUSDT": { + "_default": "2020-01-01" + }, + "TRXUPUSDT": { + "_default": "2020-01-01" + }, + "TRXDOWNUSDT": { + "_default": "2020-01-01" + }, + "XRPUPUSDT": { + "_default": "2020-01-01" + }, + "XRPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTUPUSDT": { + "_default": "2020-01-01" + }, + "DOTDOWNUSDT": { + "_default": "2020-01-01" + }, + "SRMBIDR": { + "_default": "2020-01-01" + }, + "ONEBIDR": { + "_default": "2020-01-01" + }, + "LINKTRY": { + "_default": "2020-01-01" + }, + "USDTNGN": { + "_default": "2020-01-01" + }, + "BELBNB": { + "_default": "2020-01-01" + }, + "BELBTC": { + "_default": "2020-01-01" + }, + "BELBUSD": { + "_default": "2020-01-01" + }, + "BELUSDT": { + "_default": "2020-01-01" + }, + "WINGBNB": { + "_default": "2020-01-01" + }, + "WINGBTC": { + "_default": "2020-01-01" + }, + "SWRVBNB": { + "_default": "2020-01-01" + }, + "SWRVBUSD": { + "_default": "2020-01-01" + }, + "WINGBUSD": { + "_default": "2020-01-01" + }, + "WINGUSDT": { + "_default": "2020-01-01" + }, + "LTCUPUSDT": { + "_default": "2020-01-01" + }, + "LTCDOWNUSDT": { + "_default": "2020-01-01" + }, + "LENDBKRW": { + "_default": "2020-01-01" + }, + "SXPEUR": { + "_default": "2020-01-01" + }, + "CREAMBNB": { + "_default": "2020-01-01" + }, + "CREAMBUSD": { + "_default": "2020-01-01" + }, + "UNIBNB": { + "_default": "2020-01-01" + }, + "UNIBTC": { + "_default": "2020-01-01" + }, + "UNIBUSD": { + "_default": "2020-01-01" + }, + "UNIUSDT": { + "_default": "2020-01-01" + }, + "NBSBTC": { + "_default": "2020-01-01" + }, + "NBSUSDT": { + "_default": "2020-01-01" + }, + "OXTBTC": { + "_default": "2020-01-01" + }, + "OXTUSDT": { + "_default": "2020-01-01" + }, + "SUNBTC": { + "_default": "2020-01-01" + }, + "SUNUSDT": { + "_default": "2020-01-01" + }, + "AVAXBNB": { + "_default": "2020-01-01" + }, + "AVAXBTC": { + "_default": "2020-01-01" + }, + "AVAXBUSD": { + "_default": "2020-01-01" + }, + "AVAXUSDT": { + "_default": "2020-01-01" + }, + "HNTBTC": { + "_default": "2020-01-01" + }, + "HNTUSDT": { + "_default": "2020-01-01" + }, + "BAKEBNB": { + "_default": "2020-01-01" + }, + "BURGERBNB": { + "_default": "2020-01-01" + }, + "SXPBIDR": { + "_default": "2020-01-01" + }, + "LINKBKRW": { + "_default": "2020-01-01" + }, + "FLMBNB": { + "_default": "2020-01-01" + }, + "FLMBTC": { + "_default": "2020-01-01" + }, + "FLMBUSD": { + "_default": "2020-01-01" + }, + "FLMUSDT": { + "_default": "2020-01-01" + }, + "SCRTBTC": { + "_default": "2020-01-01" + }, + "SCRTETH": { + "_default": "2020-01-01" + }, + "CAKEBNB": { + "_default": "2020-01-01" + }, + "CAKEBUSD": { + "_default": "2020-01-01" + }, + "SPARTABNB": { + "_default": "2020-01-01" + }, + "UNIUPUSDT": { + "_default": "2020-01-01" + }, + "UNIDOWNUSDT": { + "_default": "2020-01-01" + }, + "ORNBTC": { + "_default": "2020-01-01" + }, + "ORNUSDT": { + "_default": "2020-01-01" + }, + "TRXNGN": { + "_default": "2020-01-01" + }, + "SXPTRY": { + "_default": "2020-01-01" + }, + "UTKBTC": { + "_default": "2020-01-01" + }, + "UTKUSDT": { + "_default": "2020-01-01" + }, + "XVSBNB": { + "_default": "2020-01-01" + }, + "XVSBTC": { + "_default": "2020-01-01" + }, + "XVSBUSD": { + "_default": "2020-01-01" + }, + "XVSUSDT": { + "_default": "2020-01-01" + }, + "ALPHABNB": { + "_default": "2020-01-01" + }, + "ALPHABTC": { + "_default": "2020-01-01" + }, + "ALPHABUSD": { + "_default": "2020-01-01" + }, + "ALPHAUSDT": { + "_default": "2020-01-01" + }, + "VIDTBTC": { + "_default": "2020-01-01" + }, + "VIDTBUSD": { + "_default": "2020-01-01" + }, + "AAVEBNB": { + "_default": "2020-01-01" + }, + "BTCBRL": { + "_default": "2020-01-01" + }, + "USDTBRL": { + "_default": "2020-01-01" + }, + "AAVEBTC": { + "_default": "2020-01-01" + }, + "AAVEETH": { + "_default": "2020-01-01" + }, + "AAVEBUSD": { + "_default": "2020-01-01" + }, + "AAVEUSDT": { + "_default": "2020-01-01" + }, + "AAVEBKRW": { + "_default": "2020-01-01" + }, + "NEARBNB": { + "_default": "2020-01-01" + }, + "NEARBTC": { + "_default": "2020-01-01" + }, + "NEARBUSD": { + "_default": "2020-01-01" + }, + "NEARUSDT": { + "_default": "2020-01-01" + }, + "SXPUPUSDT": { + "_default": "2020-01-01" + }, + "SXPDOWNUSDT": { + "_default": "2020-01-01" + }, + "DOTBKRW": { + "_default": "2020-01-01" + }, + "SXPGBP": { + "_default": "2020-01-01" + }, + "FILBNB": { + "_default": "2020-01-01" + }, + "FILBTC": { + "_default": "2020-01-01" + }, + "FILBUSD": { + "_default": "2020-01-01" + }, + "FILUSDT": { + "_default": "2020-01-01" + }, + "FILUPUSDT": { + "_default": "2020-01-01" + }, + "FILDOWNUSDT": { + "_default": "2020-01-01" + }, + "YFIUPUSDT": { + "_default": "2020-01-01" + }, + "YFIDOWNUSDT": { + "_default": "2020-01-01" + }, + "INJBNB": { + "_default": "2020-01-01" + }, + "INJBTC": { + "_default": "2020-01-01" + }, + "INJBUSD": { + "_default": "2020-01-01" + }, + "INJUSDT": { + "_default": "2020-01-01" + }, + "AERGOBTC": { + "_default": "2020-01-01" + }, + "AERGOBUSD": { + "_default": "2020-01-01" + }, + "LINKEUR": { + "_default": "2020-01-01" + }, + "ONEBUSD": { + "_default": "2020-01-01" + }, + "EASYETH": { + "_default": "2020-01-01" + }, + "AUDIOBTC": { + "_default": "2020-01-01" + }, + "AUDIOBUSD": { + "_default": "2020-01-01" + }, + "AUDIOUSDT": { + "_default": "2020-01-01" + }, + "CTKBNB": { + "_default": "2020-01-01" + }, + "CTKBTC": { + "_default": "2020-01-01" + }, + "CTKBUSD": { + "_default": "2020-01-01" + }, + "CTKUSDT": { + "_default": "2020-01-01" + }, + "BCHUPUSDT": { + "_default": "2020-01-01" + }, + "BCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BOTBTC": { + "_default": "2020-01-01" + }, + "BOTBUSD": { + "_default": "2020-01-01" + }, + "ETHBRL": { + "_default": "2020-01-01" + }, + "DOTEUR": { + "_default": "2020-01-01" + }, + "AKROBTC": { + "_default": "2020-01-01" + }, + "AKROUSDT": { + "_default": "2020-01-01" + }, + "KP3RBNB": { + "_default": "2020-01-01" + }, + "KP3RBUSD": { + "_default": "2020-01-01" + }, + "AXSBNB": { + "_default": "2020-01-01" + }, + "AXSBTC": { + "_default": "2020-01-01" + }, + "AXSBUSD": { + "_default": "2020-01-01" + }, + "AXSUSDT": { + "_default": "2020-01-01" + }, + "HARDBNB": { + "_default": "2020-01-01" + }, + "HARDBTC": { + "_default": "2020-01-01" + }, + "HARDBUSD": { + "_default": "2020-01-01" + }, + "HARDUSDT": { + "_default": "2020-01-01" + }, + "BNBBRL": { + "_default": "2020-01-01" + }, + "LTCEUR": { + "_default": "2020-01-01" + }, + "RENBTCBTC": { + "_default": "2020-01-01" + }, + "RENBTCETH": { + "_default": "2020-01-01" + }, + "DNTBUSD": { + "_default": "2020-01-01" + }, + "DNTUSDT": { + "_default": "2020-01-01" + }, + "SLPETH": { + "_default": "2020-01-01" + }, + "ADAEUR": { + "_default": "2020-01-01" + }, + "LTCNGN": { + "_default": "2020-01-01" + }, + "CVPETH": { + "_default": "2020-01-01" + }, + "CVPBUSD": { + "_default": "2020-01-01" + }, + "STRAXBTC": { + "_default": "2020-01-01" + }, + "STRAXETH": { + "_default": "2020-01-01" + }, + "STRAXBUSD": { + "_default": "2020-01-01" + }, + "STRAXUSDT": { + "_default": "2020-01-01" + }, + "FORBTC": { + "_default": "2020-01-01" + }, + "FORBUSD": { + "_default": "2020-01-01" + }, + "UNFIBNB": { + "_default": "2020-01-01" + }, + "UNFIBTC": { + "_default": "2020-01-01" + }, + "UNFIBUSD": { + "_default": "2020-01-01" + }, + "UNFIUSDT": { + "_default": "2020-01-01" + }, + "FRONTETH": { + "_default": "2020-01-01" + }, + "FRONTBUSD": { + "_default": "2020-01-01" + }, + "BCHABUSD": { + "_default": "2020-01-01" + }, + "ROSEBTC": { + "_default": "2020-01-01" + }, + "ROSEBUSD": { + "_default": "2020-01-01" + }, + "ROSEUSDT": { + "_default": "2020-01-01" + }, + "AVAXTRY": { + "_default": "2020-01-01" + }, + "BUSDBRL": { + "_default": "2020-01-01" + }, + "AVAUSDT": { + "_default": "2020-01-01" + }, + "SYSBUSD": { + "_default": "2020-01-01" + }, + "XEMUSDT": { + "_default": "2020-01-01" + }, + "HEGICETH": { + "_default": "2020-01-01" + }, + "HEGICBUSD": { + "_default": "2020-01-01" + }, + "AAVEUPUSDT": { + "_default": "2020-01-01" + }, + "AAVEDOWNUSDT": { + "_default": "2020-01-01" + }, + "PROMBNB": { + "_default": "2020-01-01" + }, + "PROMBUSD": { + "_default": "2020-01-01" + }, + "XRPBRL": { + "_default": "2020-01-01" + }, + "XRPNGN": { + "_default": "2020-01-01" + }, + "SKLBTC": { + "_default": "2020-01-01" + }, + "SKLBUSD": { + "_default": "2020-01-01" + }, + "SKLUSDT": { + "_default": "2020-01-01" + }, + "BCHEUR": { + "_default": "2020-01-01" + }, + "YFIEUR": { + "_default": "2020-01-01" + }, + "ZILBIDR": { + "_default": "2020-01-01" + }, + "SUSDBTC": { + "_default": "2020-01-01" + }, + "SUSDETH": { + "_default": "2020-01-01" + }, + "SUSDUSDT": { + "_default": "2020-01-01" + }, + "COVERETH": { + "_default": "2020-01-01" + }, + "COVERBUSD": { + "_default": "2020-01-01" + }, + "GLMBTC": { + "_default": "2020-01-01" + }, + "GLMETH": { + "_default": "2020-01-01" + }, + "GHSTETH": { + "_default": "2020-01-01" + }, + "GHSTBUSD": { + "_default": "2020-01-01" + }, + "SUSHIUPUSDT": { + "_default": "2020-01-01" + }, + "SUSHIDOWNUSDT": { + "_default": "2020-01-01" + }, + "XLMUPUSDT": { + "_default": "2020-01-01" + }, + "XLMDOWNUSDT": { + "_default": "2020-01-01" + }, + "LINKBRL": { + "_default": "2020-01-01" + }, + "LINKNGN": { + "_default": "2020-01-01" + }, + "LTCRUB": { + "_default": "2020-01-01" + }, + "TRXTRY": { + "_default": "2020-01-01" + }, + "XLMEUR": { + "_default": "2020-01-01" + }, + "DFETH": { + "_default": "2020-01-01" + }, + "DFBUSD": { + "_default": "2020-01-01" + }, + "GRTBTC": { + "_default": "2020-01-01" + }, + "GRTETH": { + "_default": "2020-01-01" + }, + "GRTUSDT": { + "_default": "2020-01-01" + }, + "JUVBTC": { + "_default": "2020-01-01" + }, + "JUVBUSD": { + "_default": "2020-01-01" + }, + "JUVUSDT": { + "_default": "2020-01-01" + }, + "PSGBTC": { + "_default": "2020-01-01" + }, + "PSGBUSD": { + "_default": "2020-01-01" + }, + "PSGUSDT": { + "_default": "2020-01-01" + }, + "BUSDBVND": { + "_default": "2020-01-01" + }, + "USDTBVND": { + "_default": "2020-01-01" + }, + "1INCHBTC": { + "_default": "2020-01-01" + }, + "1INCHUSDT": { + "_default": "2020-01-01" + }, + "REEFBTC": { + "_default": "2020-01-01" + }, + "REEFUSDT": { + "_default": "2020-01-01" + }, + "OGBTC": { + "_default": "2020-01-01" + }, + "OGUSDT": { + "_default": "2020-01-01" + }, + "ATMBTC": { + "_default": "2020-01-01" + }, + "ATMUSDT": { + "_default": "2020-01-01" + }, + "ASRBTC": { + "_default": "2020-01-01" + }, + "ASRUSDT": { + "_default": "2020-01-01" + }, + "CELOBTC": { + "_default": "2020-01-01" + }, + "CELOUSDT": { + "_default": "2020-01-01" + }, + "RIFBTC": { + "_default": "2020-01-01" + }, + "RIFUSDT": { + "_default": "2020-01-01" + }, + "CHZTRY": { + "_default": "2020-01-01" + }, + "XLMTRY": { + "_default": "2020-01-01" + }, + "LINKGBP": { + "_default": "2020-01-01" + }, + "GRTEUR": { + "_default": "2020-01-01" + }, + "BTCSTBTC": { + "_default": "2020-01-01" + }, + "BTCSTBUSD": { + "_default": "2020-01-01" + }, + "BTCSTUSDT": { + "_default": "2020-01-01" + }, + "TRUBTC": { + "_default": "2020-01-01" + }, + "TRUBUSD": { + "_default": "2020-01-01" + }, + "TRUUSDT": { + "_default": "2020-01-01" + }, + "DEXEETH": { + "_default": "2020-01-01" + }, + "DEXEBUSD": { + "_default": "2020-01-01" + }, + "EOSEUR": { + "_default": "2020-01-01" + }, + "LTCBRL": { + "_default": "2020-01-01" + }, + "USDCBUSD": { + "_default": "2020-01-01" + }, + "TUSDBUSD": { + "_default": "2020-01-01" + }, + "PAXBUSD": { + "_default": "2020-01-01" + }, + "CKBBTC": { + "_default": "2020-01-01" + }, + "CKBBUSD": { + "_default": "2020-01-01" + }, + "CKBUSDT": { + "_default": "2020-01-01" + }, + "TWTBTC": { + "_default": "2020-01-01" + }, + "TWTBUSD": { + "_default": "2020-01-01" + }, + "TWTUSDT": { + "_default": "2020-01-01" + }, + "FIROBTC": { + "_default": "2020-01-01" + }, + "FIROETH": { + "_default": "2020-01-01" + }, + "FIROUSDT": { + "_default": "2020-01-01" + }, + "BETHETH": { + "_default": "2020-01-01" + }, + "DOGEEUR": { + "_default": "2020-01-01" + }, + "DOGETRY": { + "_default": "2020-01-01" + }, + "DOGEAUD": { + "_default": "2020-01-01" + }, + "DOGEBRL": { + "_default": "2020-01-01" + }, + "DOTNGN": { + "_default": "2020-01-01" + }, + "PROSETH": { + "_default": "2020-01-01" + }, + "LITBTC": { + "_default": "2020-01-01" + }, + "LITBUSD": { + "_default": "2020-01-01" + }, + "LITUSDT": { + "_default": "2020-01-01" + }, + "BTCVAI": { + "_default": "2020-01-01" + }, + "BUSDVAI": { + "_default": "2020-01-01" + }, + "SFPBTC": { + "_default": "2020-01-01" + }, + "SFPBUSD": { + "_default": "2020-01-01" + }, + "SFPUSDT": { + "_default": "2020-01-01" + }, + "DOGEGBP": { + "_default": "2020-01-01" + }, + "DOTTRY": { + "_default": "2020-01-01" + }, + "FXSBTC": { + "_default": "2020-01-01" + }, + "FXSBUSD": { + "_default": "2020-01-01" + }, + "DODOBTC": { + "_default": "2020-01-01" + }, + "DODOBUSD": { + "_default": "2020-01-01" + }, + "DODOUSDT": { + "_default": "2020-01-01" + }, + "FRONTBTC": { + "_default": "2020-01-01" + }, + "EASYBTC": { + "_default": "2020-01-01" + }, + "CAKEBTC": { + "_default": "2020-01-01" + }, + "CAKEUSDT": { + "_default": "2020-01-01" + }, + "BAKEBUSD": { + "_default": "2020-01-01" + }, + "UFTETH": { + "_default": "2020-01-01" + }, + "UFTBUSD": { + "_default": "2020-01-01" + }, + "1INCHBUSD": { + "_default": "2020-01-01" + }, + "BANDBUSD": { + "_default": "2020-01-01" + }, + "GRTBUSD": { + "_default": "2020-01-01" + }, + "IOSTBUSD": { + "_default": "2020-01-01" + }, + "OMGBUSD": { + "_default": "2020-01-01" + }, + "REEFBUSD": { + "_default": "2020-01-01" + }, + "ACMBTC": { + "_default": "2020-01-01" + }, + "ACMBUSD": { + "_default": "2020-01-01" + }, + "ACMUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONBTC": { + "_default": "2020-01-01" + }, + "AUCTIONBUSD": { + "_default": "2020-01-01" + }, + "PHABTC": { + "_default": "2020-01-01" + }, + "PHABUSD": { + "_default": "2020-01-01" + }, + "DOTGBP": { + "_default": "2020-01-01" + }, + "ADATRY": { + "_default": "2020-01-01" + }, + "ADABRL": { + "_default": "2020-01-01" + }, + "ADAGBP": { + "_default": "2020-01-01" + }, + "TVKBTC": { + "_default": "2020-01-01" + }, + "TVKBUSD": { + "_default": "2020-01-01" + }, + "BADGERBTC": { + "_default": "2020-01-01" + }, + "BADGERBUSD": { + "_default": "2020-01-01" + }, + "BADGERUSDT": { + "_default": "2020-01-01" + }, + "FISBTC": { + "_default": "2020-01-01" + }, + "FISBUSD": { + "_default": "2020-01-01" + }, + "FISUSDT": { + "_default": "2020-01-01" + }, + "DOTBRL": { + "_default": "2020-01-01" + }, + "ADAAUD": { + "_default": "2020-01-01" + }, + "HOTTRY": { + "_default": "2020-01-01" + }, + "EGLDEUR": { + "_default": "2020-01-01" + }, + "OMBTC": { + "_default": "2020-01-01" + }, + "OMBUSD": { + "_default": "2020-01-01" + }, + "OMUSDT": { + "_default": "2020-01-01" + }, + "PONDBTC": { + "_default": "2020-01-01" + }, + "PONDBUSD": { + "_default": "2020-01-01" + }, + "PONDUSDT": { + "_default": "2020-01-01" + }, + "DEGOBTC": { + "_default": "2020-01-01" + }, + "DEGOBUSD": { + "_default": "2020-01-01" + }, + "DEGOUSDT": { + "_default": "2020-01-01" + }, + "AVAXEUR": { + "_default": "2020-01-01" + }, + "BTTTRY": { + "_default": "2020-01-01" + }, + "CHZBRL": { + "_default": "2020-01-01" + }, + "UNIEUR": { + "_default": "2020-01-01" + }, + "ALICEBTC": { + "_default": "2020-01-01" + }, + "ALICEBUSD": { + "_default": "2020-01-01" + }, + "ALICEUSDT": { + "_default": "2020-01-01" + }, + "CHZBUSD": { + "_default": "2020-01-01" + }, + "CHZEUR": { + "_default": "2020-01-01" + }, + "CHZGBP": { + "_default": "2020-01-01" + }, + "BIFIBNB": { + "_default": "2020-01-01" + }, + "BIFIBUSD": { + "_default": "2020-01-01" + }, + "LINABTC": { + "_default": "2020-01-01" + }, + "LINABUSD": { + "_default": "2020-01-01" + }, + "LINAUSDT": { + "_default": "2020-01-01" + }, + "ADARUB": { + "_default": "2020-01-01" + }, + "ENJBRL": { + "_default": "2020-01-01" + }, + "ENJEUR": { + "_default": "2020-01-01" + }, + "MATICEUR": { + "_default": "2020-01-01" + }, + "NEOTRY": { + "_default": "2020-01-01" + }, + "PERPBTC": { + "_default": "2020-01-01" + }, + "PERPBUSD": { + "_default": "2020-01-01" + }, + "PERPUSDT": { + "_default": "2020-01-01" + }, + "RAMPBTC": { + "_default": "2020-01-01" + }, + "RAMPBUSD": { + "_default": "2020-01-01" + }, + "RAMPUSDT": { + "_default": "2020-01-01" + }, + "SUPERBTC": { + "_default": "2020-01-01" + }, + "SUPERBUSD": { + "_default": "2020-01-01" + }, + "SUPERUSDT": { + "_default": "2020-01-01" + }, + "CFXBTC": { + "_default": "2020-01-01" + }, + "CFXBUSD": { + "_default": "2020-01-01" + }, + "CFXUSDT": { + "_default": "2020-01-01" + }, + "ENJGBP": { + "_default": "2020-01-01" + }, + "EOSTRY": { + "_default": "2020-01-01" + }, + "LTCGBP": { + "_default": "2020-01-01" + }, + "LUNAEUR": { + "_default": "2020-01-01" + }, + "RVNTRY": { + "_default": "2020-01-01" + }, + "THETAEUR": { + "_default": "2020-01-01" + }, + "XVGBUSD": { + "_default": "2020-01-01" + }, + "EPSBTC": { + "_default": "2020-01-01" + }, + "EPSBUSD": { + "_default": "2020-01-01" + }, + "EPSUSDT": { + "_default": "2020-01-01" + }, + "AUTOBTC": { + "_default": "2020-01-01" + }, + "AUTOBUSD": { + "_default": "2020-01-01" + }, + "AUTOUSDT": { + "_default": "2020-01-01" + }, + "TKOBTC": { + "_default": "2020-01-01" + }, + "TKOBIDR": { + "_default": "2020-01-01" + }, + "TKOBUSD": { + "_default": "2020-01-01" + }, + "TKOUSDT": { + "_default": "2020-01-01" + }, + "PUNDIXETH": { + "_default": "2020-01-01" + }, + "PUNDIXUSDT": { + "_default": "2020-01-01" + }, + "BTTBRL": { + "_default": "2020-01-01" + }, + "BTTEUR": { + "_default": "2020-01-01" + }, + "HOTEUR": { + "_default": "2020-01-01" + }, + "WINEUR": { + "_default": "2020-01-01" + }, + "TLMBTC": { + "_default": "2020-01-01" + }, + "TLMBUSD": { + "_default": "2020-01-01" + }, + "TLMUSDT": { + "_default": "2020-01-01" + }, + "1INCHUPUSDT": { + "_default": "2020-01-01" + }, + "1INCHDOWNUSDT": { + "_default": "2020-01-01" + }, + "BTGBUSD": { + "_default": "2020-01-01" + }, + "BTGUSDT": { + "_default": "2020-01-01" + }, + "HOTBUSD": { + "_default": "2020-01-01" + }, + "BNBUAH": { + "_default": "2020-01-01" + }, + "ONTTRY": { + "_default": "2020-01-01" + }, + "VETEUR": { + "_default": "2020-01-01" + }, + "VETGBP": { + "_default": "2020-01-01" + }, + "WINBRL": { + "_default": "2020-01-01" + }, + "MIRBTC": { + "_default": "2020-01-01" + }, + "MIRBUSD": { + "_default": "2020-01-01" + }, + "MIRUSDT": { + "_default": "2020-01-01" + }, + "BARBTC": { + "_default": "2020-01-01" + }, + "BARBUSD": { + "_default": "2020-01-01" + }, + "BARUSDT": { + "_default": "2020-01-01" + }, + "FORTHBTC": { + "_default": "2020-01-01" + }, + "FORTHBUSD": { + "_default": "2020-01-01" + }, + "FORTHUSDT": { + "_default": "2020-01-01" + }, + "CAKEGBP": { + "_default": "2020-01-01" + }, + "DOGERUB": { + "_default": "2020-01-01" + }, + "HOTBRL": { + "_default": "2020-01-01" + }, + "WRXEUR": { + "_default": "2020-01-01" + }, + "EZBTC": { + "_default": "2020-01-01" + }, + "EZETH": { + "_default": "2020-01-01" + }, + "BAKEUSDT": { + "_default": "2020-01-01" + }, + "BURGERBUSD": { + "_default": "2020-01-01" + }, + "BURGERUSDT": { + "_default": "2020-01-01" + }, + "SLPBUSD": { + "_default": "2020-01-01" + }, + "SLPUSDT": { + "_default": "2020-01-01" + }, + "TRXAUD": { + "_default": "2020-01-01" + }, + "TRXEUR": { + "_default": "2020-01-01" + }, + "VETTRY": { + "_default": "2020-01-01" + }, + "SHIBUSDT": { + "_default": "2020-01-01" + }, + "SHIBBUSD": { + "_default": "2020-01-01" + }, + "ICPBTC": { + "_default": "2020-01-01" + }, + "ICPBNB": { + "_default": "2020-01-01" + }, + "ICPBUSD": { + "_default": "2020-01-01" + }, + "ICPUSDT": { + "_default": "2020-01-01" + }, + "SHIBEUR": { + "_default": "2020-01-01" + }, + "SHIBRUB": { + "_default": "2020-01-01" + }, + "ETCEUR": { + "_default": "2020-01-01" + }, + "ETCBRL": { + "_default": "2020-01-01" + }, + "DOGEBIDR": { + "_default": "2020-01-01" + }, + "ARBTC": { + "_default": "2020-01-01" + }, + "ARBNB": { + "_default": "2020-01-01" + }, + "ARBUSD": { + "_default": "2020-01-01" + }, + "ARUSDT": { + "_default": "2020-01-01" + }, + "POLSBTC": { + "_default": "2020-01-01" + }, + "POLSBNB": { + "_default": "2020-01-01" + }, + "POLSBUSD": { + "_default": "2020-01-01" + }, + "POLSUSDT": { + "_default": "2020-01-01" + }, + "MDXBTC": { + "_default": "2020-01-01" + }, + "MDXBNB": { + "_default": "2020-01-01" + }, + "MDXBUSD": { + "_default": "2020-01-01" + }, + "MDXUSDT": { + "_default": "2020-01-01" + }, + "MASKBNB": { + "_default": "2020-01-01" + }, + "MASKBUSD": { + "_default": "2020-01-01" + }, + "MASKUSDT": { + "_default": "2020-01-01" + }, + "LPTBTC": { + "_default": "2020-01-01" + }, + "LPTBNB": { + "_default": "2020-01-01" + }, + "LPTBUSD": { + "_default": "2020-01-01" + }, + "LPTUSDT": { + "_default": "2020-01-01" + }, + "ETHUAH": { + "_default": "2020-01-01" + }, + "MATICBRL": { + "_default": "2020-01-01" + }, + "SOLEUR": { + "_default": "2020-01-01" + }, + "SHIBBRL": { + "_default": "2020-01-01" + }, + "AGIXBTC": { + "_default": "2020-01-01" + }, + "ICPEUR": { + "_default": "2020-01-01" + }, + "MATICGBP": { + "_default": "2020-01-01" + }, + "SHIBTRY": { + "_default": "2020-01-01" + }, + "MATICBIDR": { + "_default": "2020-01-01" + }, + "MATICRUB": { + "_default": "2020-01-01" + }, + "NUBTC": { + "_default": "2020-01-01" + }, + "NUBNB": { + "_default": "2020-01-01" + }, + "NUBUSD": { + "_default": "2020-01-01" + }, + "NUUSDT": { + "_default": "2020-01-01" + }, + "XVGUSDT": { + "_default": "2020-01-01" + }, + "RLCBUSD": { + "_default": "2020-01-01" + }, + "CELRBUSD": { + "_default": "2020-01-01" + }, + "ATMBUSD": { + "_default": "2020-01-01" + }, + "ZENBUSD": { + "_default": "2020-01-01" + }, + "FTMBUSD": { + "_default": "2020-01-01" + }, + "THETABUSD": { + "_default": "2020-01-01" + }, + "WINBUSD": { + "_default": "2020-01-01" + }, + "KAVABUSD": { + "_default": "2020-01-01" + }, + "XEMBUSD": { + "_default": "2020-01-01" + }, + "ATABTC": { + "_default": "2020-01-01" + }, + "ATABNB": { + "_default": "2020-01-01" + }, + "ATABUSD": { + "_default": "2020-01-01" + }, + "ATAUSDT": { + "_default": "2020-01-01" + }, + "GTCBTC": { + "_default": "2020-01-01" + }, + "GTCBNB": { + "_default": "2020-01-01" + }, + "GTCBUSD": { + "_default": "2020-01-01" + }, + "GTCUSDT": { + "_default": "2020-01-01" + }, + "TORNBTC": { + "_default": "2020-01-01" + }, + "TORNBNB": { + "_default": "2020-01-01" + }, + "TORNBUSD": { + "_default": "2020-01-01" + }, + "TORNUSDT": { + "_default": "2020-01-01" + }, + "MATICTRY": { + "_default": "2020-01-01" + }, + "ETCGBP": { + "_default": "2020-01-01" + }, + "SOLGBP": { + "_default": "2020-01-01" + }, + "BAKEBTC": { + "_default": "2020-01-01" + }, + "COTIBUSD": { + "_default": "2020-01-01" + }, + "KEEPBTC": { + "_default": "2020-01-01" + }, + "KEEPBNB": { + "_default": "2020-01-01" + }, + "KEEPBUSD": { + "_default": "2020-01-01" + }, + "KEEPUSDT": { + "_default": "2020-01-01" + }, + "SOLTRY": { + "_default": "2020-01-01" + }, + "RUNEGBP": { + "_default": "2020-01-01" + }, + "SOLBRL": { + "_default": "2020-01-01" + }, + "SCBUSD": { + "_default": "2020-01-01" + }, + "CHRBUSD": { + "_default": "2020-01-01" + }, + "STMXBUSD": { + "_default": "2020-01-01" + }, + "HNTBUSD": { + "_default": "2020-01-01" + }, + "FTTBUSD": { + "_default": "2020-01-01" + }, + "DOCKBUSD": { + "_default": "2020-01-01" + }, + "ADABIDR": { + "_default": "2020-01-01" + }, + "ERNBNB": { + "_default": "2020-01-01" + }, + "ERNBUSD": { + "_default": "2020-01-01" + }, + "ERNUSDT": { + "_default": "2020-01-01" + }, + "KLAYBTC": { + "_default": "2020-01-01" + }, + "KLAYBNB": { + "_default": "2020-01-01" + }, + "KLAYBUSD": { + "_default": "2020-01-01" + }, + "KLAYUSDT": { + "_default": "2020-01-01" + }, + "RUNEEUR": { + "_default": "2020-01-01" + }, + "MATICAUD": { + "_default": "2020-01-01" + }, + "DOTRUB": { + "_default": "2020-01-01" + }, + "UTKBUSD": { + "_default": "2020-01-01" + }, + "IOTXBUSD": { + "_default": "2020-01-01" + }, + "PHAUSDT": { + "_default": "2020-01-01" + }, + "SOLRUB": { + "_default": "2020-01-01" + }, + "RUNEAUD": { + "_default": "2020-01-01" + }, + "BUSDUAH": { + "_default": "2020-01-01" + }, + "BONDBTC": { + "_default": "2020-01-01" + }, + "BONDBNB": { + "_default": "2020-01-01" + }, + "BONDBUSD": { + "_default": "2020-01-01" + }, + "BONDUSDT": { + "_default": "2020-01-01" + }, + "MLNBTC": { + "_default": "2020-01-01" + }, + "MLNBNB": { + "_default": "2020-01-01" + }, + "MLNBUSD": { + "_default": "2020-01-01" + }, + "MLNUSDT": { + "_default": "2020-01-01" + }, + "GRTTRY": { + "_default": "2020-01-01" + }, + "CAKEBRL": { + "_default": "2020-01-01" + }, + "ICPRUB": { + "_default": "2020-01-01" + }, + "DOTAUD": { + "_default": "2020-01-01" + }, + "AAVEBRL": { + "_default": "2020-01-01" + }, + "EOSAUD": { + "_default": "2020-01-01" + }, + "DEXEUSDT": { + "_default": "2020-01-01" + }, + "LTOBUSD": { + "_default": "2020-01-01" + }, + "ADXBUSD": { + "_default": "2020-01-01" + }, + "QUICKBTC": { + "_default": "2020-01-01" + }, + "QUICKBNB": { + "_default": "2020-01-01" + }, + "QUICKBUSD": { + "_default": "2020-01-01" + }, + "C98USDT": { + "_default": "2020-01-01" + }, + "C98BUSD": { + "_default": "2020-01-01" + }, + "C98BNB": { + "_default": "2020-01-01" + }, + "C98BTC": { + "_default": "2020-01-01" + }, + "CLVBTC": { + "_default": "2020-01-01" + }, + "CLVBNB": { + "_default": "2020-01-01" + }, + "CLVBUSD": { + "_default": "2020-01-01" + }, + "CLVUSDT": { + "_default": "2020-01-01" + }, + "QNTBTC": { + "_default": "2020-01-01" + }, + "QNTBNB": { + "_default": "2020-01-01" + }, + "QNTBUSD": { + "_default": "2020-01-01" + }, + "QNTUSDT": { + "_default": "2020-01-01" + }, + "FLOWBTC": { + "_default": "2020-01-01" + }, + "FLOWBNB": { + "_default": "2020-01-01" + }, + "FLOWBUSD": { + "_default": "2020-01-01" + }, + "FLOWUSDT": { + "_default": "2020-01-01" + }, + "XECBUSD": { + "_default": "2020-01-01" + }, + "AXSBRL": { + "_default": "2020-01-01" + }, + "AXSAUD": { + "_default": "2020-01-01" + }, + "TVKUSDT": { + "_default": "2020-01-01" + }, + "MINABTC": { + "_default": "2020-01-01" + }, + "MINABNB": { + "_default": "2020-01-01" + }, + "MINABUSD": { + "_default": "2020-01-01" + }, + "MINAUSDT": { + "_default": "2020-01-01" + }, + "RAYBNB": { + "_default": "2020-01-01" + }, + "RAYBUSD": { + "_default": "2020-01-01" + }, + "RAYUSDT": { + "_default": "2020-01-01" + }, + "FARMBTC": { + "_default": "2020-01-01" + }, + "FARMBNB": { + "_default": "2020-01-01" + }, + "FARMBUSD": { + "_default": "2020-01-01" + }, + "FARMUSDT": { + "_default": "2020-01-01" + }, + "ALPACABTC": { + "_default": "2020-01-01" + }, + "ALPACABNB": { + "_default": "2020-01-01" + }, + "ALPACABUSD": { + "_default": "2020-01-01" + }, + "ALPACAUSDT": { + "_default": "2020-01-01" + }, + "TLMTRY": { + "_default": "2020-01-01" + }, + "QUICKUSDT": { + "_default": "2020-01-01" + }, + "ORNBUSD": { + "_default": "2020-01-01" + }, + "MBOXBTC": { + "_default": "2020-01-01" + }, + "MBOXBNB": { + "_default": "2020-01-01" + }, + "MBOXBUSD": { + "_default": "2020-01-01" + }, + "MBOXUSDT": { + "_default": "2020-01-01" + }, + "VGXBTC": { + "_default": "2020-01-01" + }, + "VGXETH": { + "_default": "2020-01-01" + }, + "FORUSDT": { + "_default": "2020-01-01" + }, + "REQUSDT": { + "_default": "2020-01-01" + }, + "GHSTUSDT": { + "_default": "2020-01-01" + }, + "TRURUB": { + "_default": "2020-01-01" + }, + "FISBRL": { + "_default": "2020-01-01" + }, + "WAXPUSDT": { + "_default": "2020-01-01" + }, + "WAXPBUSD": { + "_default": "2020-01-01" + }, + "WAXPBNB": { + "_default": "2020-01-01" + }, + "WAXPBTC": { + "_default": "2020-01-01" + }, + "TRIBEBTC": { + "_default": "2020-01-01" + }, + "TRIBEBNB": { + "_default": "2020-01-01" + }, + "TRIBEBUSD": { + "_default": "2020-01-01" + }, + "TRIBEUSDT": { + "_default": "2020-01-01" + }, + "GNOUSDT": { + "_default": "2020-01-01" + }, + "GNOBUSD": { + "_default": "2020-01-01" + }, + "GNOBNB": { + "_default": "2020-01-01" + }, + "GNOBTC": { + "_default": "2020-01-01" + }, + "ARPATRY": { + "_default": "2020-01-01" + }, + "PROMBTC": { + "_default": "2020-01-01" + }, + "MTLBUSD": { + "_default": "2020-01-01" + }, + "OGNBUSD": { + "_default": "2020-01-01" + }, + "XECUSDT": { + "_default": "2020-01-01" + }, + "C98BRL": { + "_default": "2020-01-01" + }, + "SOLAUD": { + "_default": "2020-01-01" + }, + "XRPBIDR": { + "_default": "2020-01-01" + }, + "POLYBUSD": { + "_default": "2020-01-01" + }, + "ELFUSDT": { + "_default": "2020-01-01" + }, + "DYDXUSDT": { + "_default": "2020-01-01" + }, + "DYDXBUSD": { + "_default": "2020-01-01" + }, + "DYDXBNB": { + "_default": "2020-01-01" + }, + "DYDXBTC": { + "_default": "2020-01-01" + }, + "ELFBUSD": { + "_default": "2020-01-01" + }, + "POLYUSDT": { + "_default": "2020-01-01" + }, + "IDEXUSDT": { + "_default": "2020-01-01" + }, + "VIDTUSDT": { + "_default": "2020-01-01" + }, + "SOLBIDR": { + "_default": "2020-01-01" + }, + "BTCUSDP": { + "_default": "2020-01-01" + }, + "ETHUSDP": { + "_default": "2020-01-01" + }, + "BNBUSDP": { + "_default": "2020-01-01" + }, + "USDPBUSD": { + "_default": "2020-01-01" + }, + "USDPUSDT": { + "_default": "2020-01-01" + }, + "GALAUSDT": { + "_default": "2020-01-01" + }, + "GALABUSD": { + "_default": "2020-01-01" + }, + "GALABNB": { + "_default": "2020-01-01" + }, + "GALABTC": { + "_default": "2020-01-01" + }, + "FTMBIDR": { + "_default": "2020-01-01" + }, + "ALGOBIDR": { + "_default": "2020-01-01" + }, + "CAKEAUD": { + "_default": "2020-01-01" + }, + "KSMAUD": { + "_default": "2020-01-01" + }, + "WAVESRUB": { + "_default": "2020-01-01" + }, + "SUNBUSD": { + "_default": "2020-01-01" + }, + "ILVUSDT": { + "_default": "2020-01-01" + }, + "ILVBUSD": { + "_default": "2020-01-01" + }, + "ILVBNB": { + "_default": "2020-01-01" + }, + "ILVBTC": { + "_default": "2020-01-01" + }, + "RENBUSD": { + "_default": "2020-01-01" + }, + "YGGUSDT": { + "_default": "2020-01-01" + }, + "YGGBUSD": { + "_default": "2020-01-01" + }, + "YGGBNB": { + "_default": "2020-01-01" + }, + "YGGBTC": { + "_default": "2020-01-01" + }, + "STXBUSD": { + "_default": "2020-01-01" + }, + "SYSUSDT": { + "_default": "2020-01-01" + }, + "DFUSDT": { + "_default": "2020-01-01" + }, + "SOLUSDC": { + "_default": "2020-01-01" + }, + "ARPARUB": { + "_default": "2020-01-01" + }, + "LTCUAH": { + "_default": "2020-01-01" + }, + "FETBUSD": { + "_default": "2020-01-01" + }, + "ARPABUSD": { + "_default": "2020-01-01" + }, + "LSKBUSD": { + "_default": "2020-01-01" + }, + "AVAXBIDR": { + "_default": "2020-01-01" + }, + "ALICEBIDR": { + "_default": "2020-01-01" + }, + "FIDAUSDT": { + "_default": "2020-01-01" + }, + "FIDABUSD": { + "_default": "2020-01-01" + }, + "FIDABNB": { + "_default": "2020-01-01" + }, + "FIDABTC": { + "_default": "2020-01-01" + }, + "DENTBUSD": { + "_default": "2020-01-01" + }, + "FRONTUSDT": { + "_default": "2020-01-01" + }, + "CVPUSDT": { + "_default": "2020-01-01" + }, + "AGLDBTC": { + "_default": "2020-01-01" + }, + "AGLDBNB": { + "_default": "2020-01-01" + }, + "AGLDBUSD": { + "_default": "2020-01-01" + }, + "AGLDUSDT": { + "_default": "2020-01-01" + }, + "RADBTC": { + "_default": "2020-01-01" + }, + "RADBNB": { + "_default": "2020-01-01" + }, + "RADBUSD": { + "_default": "2020-01-01" + }, + "RADUSDT": { + "_default": "2020-01-01" + }, + "UNIAUD": { + "_default": "2020-01-01" + }, + "HIVEBUSD": { + "_default": "2020-01-01" + }, + "STPTBUSD": { + "_default": "2020-01-01" + }, + "BETABTC": { + "_default": "2020-01-01" + }, + "BETABNB": { + "_default": "2020-01-01" + }, + "BETABUSD": { + "_default": "2020-01-01" + }, + "BETAUSDT": { + "_default": "2020-01-01" + }, + "SHIBAUD": { + "_default": "2020-01-01" + }, + "RAREBTC": { + "_default": "2020-01-01" + }, + "RAREBNB": { + "_default": "2020-01-01" + }, + "RAREBUSD": { + "_default": "2020-01-01" + }, + "RAREUSDT": { + "_default": "2020-01-01" + }, + "AVAXBRL": { + "_default": "2020-01-01" + }, + "AVAXAUD": { + "_default": "2020-01-01" + }, + "LUNAAUD": { + "_default": "2020-01-01" + }, + "TROYBUSD": { + "_default": "2020-01-01" + }, + "AXSETH": { + "_default": "2020-01-01" + }, + "FTMETH": { + "_default": "2020-01-01" + }, + "SOLETH": { + "_default": "2020-01-01" + }, + "SSVBTC": { + "_default": "2020-01-01" + }, + "SSVETH": { + "_default": "2020-01-01" + }, + "LAZIOTRY": { + "_default": "2020-01-01" + }, + "LAZIOEUR": { + "_default": "2020-01-01" + }, + "LAZIOBTC": { + "_default": "2020-01-01" + }, + "LAZIOUSDT": { + "_default": "2020-01-01" + }, + "CHESSBTC": { + "_default": "2020-01-01" + }, + "CHESSBNB": { + "_default": "2020-01-01" + }, + "CHESSBUSD": { + "_default": "2020-01-01" + }, + "CHESSUSDT": { + "_default": "2020-01-01" + }, + "FTMAUD": { + "_default": "2020-01-01" + }, + "FTMBRL": { + "_default": "2020-01-01" + }, + "SCRTBUSD": { + "_default": "2020-01-01" + }, + "ADXUSDT": { + "_default": "2020-01-01" + }, + "AUCTIONUSDT": { + "_default": "2020-01-01" + }, + "CELOBUSD": { + "_default": "2020-01-01" + }, + "FTMRUB": { + "_default": "2020-01-01" + }, + "NUAUD": { + "_default": "2020-01-01" + }, + "NURUB": { + "_default": "2020-01-01" + }, + "REEFTRY": { + "_default": "2020-01-01" + }, + "REEFBIDR": { + "_default": "2020-01-01" + }, + "SHIBDOGE": { + "_default": "2020-01-01" + }, + "DARUSDT": { + "_default": "2020-01-01" + }, + "DARBUSD": { + "_default": "2020-01-01" + }, + "DARBNB": { + "_default": "2020-01-01" + }, + "DARBTC": { + "_default": "2020-01-01" + }, + "BNXBTC": { + "_default": "2020-01-01" + }, + "BNXBNB": { + "_default": "2020-01-01" + }, + "BNXBUSD": { + "_default": "2020-01-01" + }, + "BNXUSDT": { + "_default": "2020-01-01" + }, + "RGTUSDT": { + "_default": "2020-01-01" + }, + "RGTBTC": { + "_default": "2020-01-01" + }, + "RGTBUSD": { + "_default": "2020-01-01" + }, + "RGTBNB": { + "_default": "2020-01-01" + }, + "LAZIOBUSD": { + "_default": "2020-01-01" + }, + "OXTBUSD": { + "_default": "2020-01-01" + }, + "MANATRY": { + "_default": "2020-01-01" + }, + "ALGORUB": { + "_default": "2020-01-01" + }, + "SHIBUAH": { + "_default": "2020-01-01" + }, + "LUNABIDR": { + "_default": "2020-01-01" + }, + "AUDUSDC": { + "_default": "2020-01-01" + }, + "MOVRBTC": { + "_default": "2020-01-01" + }, + "MOVRBNB": { + "_default": "2020-01-01" + }, + "MOVRBUSD": { + "_default": "2020-01-01" + }, + "MOVRUSDT": { + "_default": "2020-01-01" + }, + "CITYBTC": { + "_default": "2020-01-01" + }, + "CITYBNB": { + "_default": "2020-01-01" + }, + "CITYBUSD": { + "_default": "2020-01-01" + }, + "CITYUSDT": { + "_default": "2020-01-01" + }, + "ENSBTC": { + "_default": "2020-01-01" + }, + "ENSBNB": { + "_default": "2020-01-01" + }, + "ENSBUSD": { + "_default": "2020-01-01" + }, + "ENSUSDT": { + "_default": "2020-01-01" + }, + "SANDETH": { + "_default": "2020-01-01" + }, + "DOTETH": { + "_default": "2020-01-01" + }, + "MATICETH": { + "_default": "2020-01-01" + }, + "ANKRBUSD": { + "_default": "2020-01-01" + }, + "SANDTRY": { + "_default": "2020-01-01" + }, + "MANABRL": { + "_default": "2020-01-01" + }, + "KP3RUSDT": { + "_default": "2020-01-01" + }, + "QIUSDT": { + "_default": "2020-01-01" + }, + "QIBUSD": { + "_default": "2020-01-01" + }, + "QIBNB": { + "_default": "2020-01-01" + }, + "QIBTC": { + "_default": "2020-01-01" + }, + "PORTOBTC": { + "_default": "2020-01-01" + }, + "PORTOUSDT": { + "_default": "2020-01-01" + }, + "PORTOTRY": { + "_default": "2020-01-01" + }, + "PORTOEUR": { + "_default": "2020-01-01" + }, + "POWRUSDT": { + "_default": "2020-01-01" + }, + "POWRBUSD": { + "_default": "2020-01-01" + }, + "AVAXETH": { + "_default": "2020-01-01" + }, + "SLPTRY": { + "_default": "2020-01-01" + }, + "FISTRY": { + "_default": "2020-01-01" + }, + "LRCTRY": { + "_default": "2020-01-01" + }, + "CHRETH": { + "_default": "2020-01-01" + }, + "FISBIDR": { + "_default": "2020-01-01" + }, + "VGXUSDT": { + "_default": "2020-01-01" + }, + "GALAETH": { + "_default": "2020-01-01" + }, + "JASMYUSDT": { + "_default": "2020-01-01" + }, + "JASMYBUSD": { + "_default": "2020-01-01" + }, + "JASMYBNB": { + "_default": "2020-01-01" + }, + "JASMYBTC": { + "_default": "2020-01-01" + }, + "AMPBTC": { + "_default": "2020-01-01" + }, + "AMPBNB": { + "_default": "2020-01-01" + }, + "AMPBUSD": { + "_default": "2020-01-01" + }, + "AMPUSDT": { + "_default": "2020-01-01" + }, + "PLABTC": { + "_default": "2020-01-01" + }, + "PLABNB": { + "_default": "2020-01-01" + }, + "PLABUSD": { + "_default": "2020-01-01" + }, + "PLAUSDT": { + "_default": "2020-01-01" + }, + "PYRBTC": { + "_default": "2020-01-01" + }, + "PYRBUSD": { + "_default": "2020-01-01" + }, + "PYRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBTC": { + "_default": "2020-01-01" + }, + "RNDRUSDT": { + "_default": "2020-01-01" + }, + "RNDRBUSD": { + "_default": "2020-01-01" + }, + "ALCXBTC": { + "_default": "2020-01-01" + }, + "ALCXBUSD": { + "_default": "2020-01-01" + }, + "ALCXUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBTC": { + "_default": "2020-01-01" + }, + "SANTOSUSDT": { + "_default": "2020-01-01" + }, + "SANTOSBRL": { + "_default": "2020-01-01" + }, + "SANTOSTRY": { + "_default": "2020-01-01" + }, + "MCBTC": { + "_default": "2020-01-01" + }, + "MCBUSD": { + "_default": "2020-01-01" + }, + "MCUSDT": { + "_default": "2020-01-01" + }, + "BELTRY": { + "_default": "2020-01-01" + }, + "COCOSBUSD": { + "_default": "2020-01-01" + }, + "DENTTRY": { + "_default": "2020-01-01" + }, + "ENJTRY": { + "_default": "2020-01-01" + }, + "NEORUB": { + "_default": "2020-01-01" + }, + "SANDAUD": { + "_default": "2020-01-01" + }, + "SLPBIDR": { + "_default": "2020-01-01" + }, + "ANYBTC": { + "_default": "2020-01-01" + }, + "ANYBUSD": { + "_default": "2020-01-01" + }, + "ANYUSDT": { + "_default": "2020-01-01" + }, + "BICOBTC": { + "_default": "2020-01-01" + }, + "BICOBUSD": { + "_default": "2020-01-01" + }, + "BICOUSDT": { + "_default": "2020-01-01" + }, + "FLUXBTC": { + "_default": "2020-01-01" + }, + "FLUXBUSD": { + "_default": "2020-01-01" + }, + "FLUXUSDT": { + "_default": "2020-01-01" + }, + "ALICETRY": { + "_default": "2020-01-01" + }, + "FXSUSDT": { + "_default": "2020-01-01" + }, + "GALABRL": { + "_default": "2020-01-01" + }, + "GALATRY": { + "_default": "2020-01-01" + }, + "LUNATRY": { + "_default": "2020-01-01" + }, + "REQBUSD": { + "_default": "2020-01-01" + }, + "SANDBRL": { + "_default": "2020-01-01" + }, + "MANABIDR": { + "_default": "2020-01-01" + }, + "SANDBIDR": { + "_default": "2020-01-01" + }, + "VOXELBTC": { + "_default": "2020-01-01" + }, + "VOXELBNB": { + "_default": "2020-01-01" + }, + "VOXELBUSD": { + "_default": "2020-01-01" + }, + "VOXELUSDT": { + "_default": "2020-01-01" + }, + "COSBUSD": { + "_default": "2020-01-01" + }, + "CTXCBUSD": { + "_default": "2020-01-01" + }, + "FTMTRY": { + "_default": "2020-01-01" + }, + "MANABNB": { + "_default": "2020-01-01" + }, + "MINATRY": { + "_default": "2020-01-01" + }, + "XTZTRY": { + "_default": "2020-01-01" + }, + "HIGHBTC": { + "_default": "2020-01-01" + }, + "HIGHBUSD": { + "_default": "2020-01-01" + }, + "HIGHUSDT": { + "_default": "2020-01-01" + }, + "CVXBTC": { + "_default": "2020-01-01" + }, + "CVXBUSD": { + "_default": "2020-01-01" + }, + "CVXUSDT": { + "_default": "2020-01-01" + }, + "PEOPLEBTC": { + "_default": "2020-01-01" + }, + "PEOPLEBUSD": { + "_default": "2020-01-01" + }, + "PEOPLEUSDT": { + "_default": "2020-01-01" + }, + "OOKIBUSD": { + "_default": "2020-01-01" + }, + "OOKIUSDT": { + "_default": "2020-01-01" + }, + "COCOSTRY": { + "_default": "2020-01-01" + }, + "GXSBNB": { + "_default": "2020-01-01" + }, + "LINKBNB": { + "_default": "2020-01-01" + }, + "LUNAETH": { + "_default": "2020-01-01" + }, + "MDTBUSD": { + "_default": "2020-01-01" + }, + "NULSBUSD": { + "_default": "2020-01-01" + }, + "SPELLBTC": { + "_default": "2020-01-01" + }, + "SPELLUSDT": { + "_default": "2020-01-01" + }, + "SPELLBUSD": { + "_default": "2020-01-01" + }, + "USTBTC": { + "_default": "2020-01-01" + }, + "USTBUSD": { + "_default": "2020-01-01" + }, + "USTUSDT": { + "_default": "2020-01-01" + }, + "JOEBTC": { + "_default": "2020-01-01" + }, + "JOEBUSD": { + "_default": "2020-01-01" + }, + "JOEUSDT": { + "_default": "2020-01-01" + }, + "ATOMETH": { + "_default": "2020-01-01" + }, + "DUSKBUSD": { + "_default": "2020-01-01" + }, + "EGLDETH": { + "_default": "2020-01-01" + }, + "ICPETH": { + "_default": "2020-01-01" + }, + "LUNABRL": { + "_default": "2020-01-01" + }, + "LUNAUST": { + "_default": "2020-01-01" + }, + "NEARETH": { + "_default": "2020-01-01" + }, + "ROSEBNB": { + "_default": "2020-01-01" + }, + "VOXELETH": { + "_default": "2020-01-01" + }, + "ALICEBNB": { + "_default": "2020-01-01" + }, + "ATOMTRY": { + "_default": "2020-01-01" + }, + "ETHUST": { + "_default": "2020-01-01" + }, + "GALAAUD": { + "_default": "2020-01-01" + }, + "LRCBNB": { + "_default": "2020-01-01" + }, + "ONEETH": { + "_default": "2020-01-01" + }, + "OOKIBNB": { + "_default": "2020-01-01" + }, + "ACHBTC": { + "_default": "2020-01-01" + }, + "ACHBUSD": { + "_default": "2020-01-01" + }, + "ACHUSDT": { + "_default": "2020-01-01" + }, + "IMXBTC": { + "_default": "2020-01-01" + }, + "IMXBUSD": { + "_default": "2020-01-01" + }, + "IMXUSDT": { + "_default": "2020-01-01" + }, + "GLMRBTC": { + "_default": "2020-01-01" + }, + "GLMRBUSD": { + "_default": "2020-01-01" + }, + "GLMRUSDT": { + "_default": "2020-01-01" + }, + "ATOMBIDR": { + "_default": "2020-01-01" + }, + "DYDXETH": { + "_default": "2020-01-01" + }, + "FARMETH": { + "_default": "2020-01-01" + }, + "FORBNB": { + "_default": "2020-01-01" + }, + "ICPTRY": { + "_default": "2020-01-01" + }, + "JASMYETH": { + "_default": "2020-01-01" + }, + "LINABNB": { + "_default": "2020-01-01" + }, + "OOKIETH": { + "_default": "2020-01-01" + }, + "ROSEETH": { + "_default": "2020-01-01" + }, + "UMABUSD": { + "_default": "2020-01-01" + }, + "UNIETH": { + "_default": "2020-01-01" + }, + "XTZETH": { + "_default": "2020-01-01" + }, + "LOKABTC": { + "_default": "2020-01-01" + }, + "LOKABNB": { + "_default": "2020-01-01" + }, + "LOKABUSD": { + "_default": "2020-01-01" + }, + "LOKAUSDT": { + "_default": "2020-01-01" + }, + "ATOMBRL": { + "_default": "2020-01-01" + }, + "BNBUST": { + "_default": "2020-01-01" + }, + "CRVETH": { + "_default": "2020-01-01" + }, + "HIGHBNB": { + "_default": "2020-01-01" + }, + "NEARRUB": { + "_default": "2020-01-01" + }, + "ROSETRY": { + "_default": "2020-01-01" + }, + "SCRTUSDT": { + "_default": "2020-01-01" + }, + "API3BTC": { + "_default": "2020-01-01" + }, + "API3BUSD": { + "_default": "2020-01-01" + }, + "API3USDT": { + "_default": "2020-01-01" + }, + "BTTCUSDT": { + "_default": "2020-01-01" + }, + "BTTCUSDC": { + "_default": "2020-01-01" + }, + "BTTCTRY": { + "_default": "2020-01-01" + }, + "ACABTC": { + "_default": "2020-01-01" + }, + "ACABUSD": { + "_default": "2020-01-01" + }, + "ACAUSDT": { + "_default": "2020-01-01" + }, + "ANCBTC": { + "_default": "2020-01-01" + }, + "ANCBUSD": { + "_default": "2020-01-01" + }, + "ANCUSDT": { + "_default": "2020-01-01" + }, + "BDOTDOT": { + "_default": "2020-01-01" + }, + "XNOBTC": { + "_default": "2020-01-01" + }, + "XNOETH": { + "_default": "2020-01-01" + }, + "XNOBUSD": { + "_default": "2020-01-01" + }, + "XNOUSDT": { + "_default": "2020-01-01" + }, + "COSTRY": { + "_default": "2020-01-01" + }, + "KAVAETH": { + "_default": "2020-01-01" + }, + "MCBNB": { + "_default": "2020-01-01" + }, + "ONETRY": { + "_default": "2020-01-01" + }, + "WOOBTC": { + "_default": "2020-01-01" + }, + "WOOBNB": { + "_default": "2020-01-01" + }, + "WOOBUSD": { + "_default": "2020-01-01" + }, + "WOOUSDT": { + "_default": "2020-01-01" + }, + "CELRETH": { + "_default": "2020-01-01" + }, + "PEOPLEBNB": { + "_default": "2020-01-01" + }, + "SLPBNB": { + "_default": "2020-01-01" + }, + "SPELLBNB": { + "_default": "2020-01-01" + }, + "SPELLTRY": { + "_default": "2020-01-01" + }, + "TFUELBUSD": { + "_default": "2020-01-01" + }, + "AXSTRY": { + "_default": "2020-01-01" + }, + "DARTRY": { + "_default": "2020-01-01" + }, + "NEARTRY": { + "_default": "2020-01-01" + }, + "IDEXBNB": { + "_default": "2020-01-01" + }, + "ALPINEEUR": { + "_default": "2020-01-01" + }, + "ALPINETRY": { + "_default": "2020-01-01" + }, + "ALPINEUSDT": { + "_default": "2020-01-01" + }, + "ALPINEBTC": { + "_default": "2020-01-01" + }, + "TUSDT": { + "_default": "2020-01-01" + }, + "TBUSD": { + "_default": "2020-01-01" + }, + "API3BNB": { + "_default": "2020-01-01" + }, + "BETAETH": { + "_default": "2020-01-01" + }, + "INJTRY": { + "_default": "2020-01-01" + }, + "TLMBNB": { + "_default": "2020-01-01" + }, + "ASTRBUSD": { + "_default": "2020-01-01" + }, + "ASTRUSDT": { + "_default": "2020-01-01" + }, + "API3TRY": { + "_default": "2020-01-01" + }, + "GLMRBNB": { + "_default": "2020-01-01" + }, + "MBOXTRY": { + "_default": "2020-01-01" + }, + "GMTBTC": { + "_default": "2020-01-01" + }, + "GMTBNB": { + "_default": "2020-01-01" + }, + "GMTBUSD": { + "_default": "2020-01-01" + }, + "GMTUSDT": { + "_default": "2020-01-01" + }, + "ANCBNB": { + "_default": "2020-01-01" + }, + "ATOMEUR": { + "_default": "2020-01-01" + }, + "GALAEUR": { + "_default": "2020-01-01" + }, + "KSMETH": { + "_default": "2020-01-01" + }, + "UMATRY": { + "_default": "2020-01-01" + }, + "KDABTC": { + "_default": "2020-01-01" + }, + "KDABUSD": { + "_default": "2020-01-01" + }, + "KDAUSDT": { + "_default": "2020-01-01" + }, + "APEUSDT": { + "_default": "2020-01-01" + }, + "APEBUSD": { + "_default": "2020-01-01" + }, + "APEBTC": { + "_default": "2020-01-01" + }, + "ALPINEBUSD": { + "_default": "2020-01-01" + }, + "LUNAGBP": { + "_default": "2020-01-01" + }, + "NEAREUR": { + "_default": "2020-01-01" + }, + "TWTTRY": { + "_default": "2020-01-01" + }, + "WAVESEUR": { + "_default": "2020-01-01" + }, + "APEEUR": { + "_default": "2020-01-01" + }, + "APEGBP": { + "_default": "2020-01-01" + }, + "APETRY": { + "_default": "2020-01-01" + }, + "BSWUSDT": { + "_default": "2020-01-01" + }, + "BSWBUSD": { + "_default": "2020-01-01" + }, + "BSWBNB": { + "_default": "2020-01-01" + }, + "APEBNB": { + "_default": "2020-01-01" + }, + "GMTBRL": { + "_default": "2020-01-01" + }, + "GMTETH": { + "_default": "2020-01-01" + }, + "JASMYTRY": { + "_default": "2020-01-01" + }, + "SANTOSBUSD": { + "_default": "2020-01-01" + }, + "APEAUD": { + "_default": "2020-01-01" + }, + "BIFIUSDT": { + "_default": "2020-01-01" + }, + "GMTEUR": { + "_default": "2020-01-01" + }, + "IMXBNB": { + "_default": "2020-01-01" + }, + "RUNEETH": { + "_default": "2020-01-01" + }, + "AVAXGBP": { + "_default": "2020-01-01" + }, + "MULTIBTC": { + "_default": "2020-01-01" + }, + "MULTIBUSD": { + "_default": "2020-01-01" + }, + "MULTIUSDT": { + "_default": "2020-01-01" + }, + "APEETH": { + "_default": "2020-01-01" + }, + "BSWETH": { + "_default": "2020-01-01" + }, + "FILTRY": { + "_default": "2020-01-01" + }, + "FTMEUR": { + "_default": "2020-01-01" + }, + "GMTGBP": { + "_default": "2020-01-01" + }, + "ZILTRY": { + "_default": "2020-01-01" + }, + "GMTTRY": { + "_default": "2020-01-01" + }, + "WAVESTRY": { + "_default": "2020-01-01" + }, + "BTCUST": { + "_default": "2020-01-01" + }, + "ASTRBTC": { + "_default": "2020-01-01" + }, + "ASTRETH": { + "_default": "2020-01-01" + }, + "BSWTRY": { + "_default": "2020-01-01" + }, + "FTTETH": { + "_default": "2020-01-01" + }, + "FUNBNB": { + "_default": "2020-01-01" + }, + "PORTOBUSD": { + "_default": "2020-01-01" + }, + "STEEMUSDT": { + "_default": "2020-01-01" + }, + "ZILEUR": { + "_default": "2020-01-01" + }, + "APEBRL": { + "_default": "2020-01-01" + }, + "AUDIOTRY": { + "_default": "2020-01-01" + }, + "BTTCBUSD": { + "_default": "2020-01-01" + }, + "GMTAUD": { + "_default": "2020-01-01" + }, + "MBLBUSD": { + "_default": "2020-01-01" + }, + "MOBUSDT": { + "_default": "2020-01-01" + }, + "MOBBUSD": { + "_default": "2020-01-01" + }, + "MOBBTC": { + "_default": "2020-01-01" + }, + "NEXOUSDT": { + "_default": "2020-01-01" + }, + "NEXOBUSD": { + "_default": "2020-01-01" + }, + "NEXOBTC": { + "_default": "2020-01-01" + }, + "REIUSDT": { + "_default": "2020-01-01" + }, + "REIBNB": { + "_default": "2020-01-01" + }, + "REIETH": { + "_default": "2020-01-01" + }, + "GALUSDT": { + "_default": "2020-01-01" + }, + "GALBUSD": { + "_default": "2020-01-01" + }, + "GALBNB": { + "_default": "2020-01-01" + }, + "GALBTC": { + "_default": "2020-01-01" + }, + "JASMYEUR": { + "_default": "2020-01-01" + }, + "KNCBNB": { + "_default": "2020-01-01" + }, + "SHIBGBP": { + "_default": "2020-01-01" + }, + "GALEUR": { + "_default": "2020-01-01" + }, + "GALTRY": { + "_default": "2020-01-01" + }, + "LDOBUSD": { + "_default": "2020-01-01" + }, + "LDOUSDT": { + "_default": "2020-01-01" + }, + "LDOBTC": { + "_default": "2020-01-01" + }, + "ENSTRY": { + "_default": "2020-01-01" + }, + "DAREUR": { + "_default": "2020-01-01" + }, + "DARETH": { + "_default": "2020-01-01" + }, + "ALGOETH": { + "_default": "2020-01-01" + }, + "ALGOTRY": { + "_default": "2020-01-01" + }, + "GALETH": { + "_default": "2020-01-01" + }, + "EPXUSDT": { + "_default": "2020-01-01" + }, + "EPXBUSD": { + "_default": "2020-01-01" + }, + "RUNETRY": { + "_default": "2020-01-01" + }, + "GALBRL": { + "_default": "2020-01-01" + }, + "STEEMBUSD": { + "_default": "2020-01-01" + }, + "CVCBUSD": { + "_default": "2020-01-01" + }, + "REIBUSD": { + "_default": "2020-01-01" + }, + "DREPBUSD": { + "_default": "2020-01-01" + }, + "AKROBUSD": { + "_default": "2020-01-01" + }, + "PUNDIXBUSD": { + "_default": "2020-01-01" + }, + "LUNCBUSD": { + "_default": "2020-01-01" + }, + "USTCBUSD": { + "_default": "2020-01-01" + }, + "OPBTC": { + "_default": "2020-01-01" + }, + "OPBUSD": { + "_default": "2020-01-01" + }, + "OPUSDT": { + "_default": "2020-01-01" + }, + "OGBUSD": { + "_default": "2020-01-01" + }, + "KEYBUSD": { + "_default": "2020-01-01" + }, + "ASRBUSD": { + "_default": "2020-01-01" + }, + "FIROBUSD": { + "_default": "2020-01-01" + }, + "NKNBUSD": { + "_default": "2020-01-01" + }, + "OPBNB": { + "_default": "2020-01-01" + }, + "OPEUR": { + "_default": "2020-01-01" + }, + "GTOBUSD": { + "_default": "2020-01-01" + }, + "SNXETH": { + "_default": "2020-01-01" + }, + "WBTCBUSD": { + "_default": "2020-01-01" + }, + "BELETH": { + "_default": "2020-01-01" + }, + "LITETH": { + "_default": "2020-01-01" + }, + "LEVERUSDT": { + "_default": "2020-01-01" + }, + "LEVERBUSD": { + "_default": "2020-01-01" + }, + "BURGERETH": { + "_default": "2020-01-01" + }, + "PEOPLEETH": { + "_default": "2020-01-01" + }, + "UNFIETH": { + "_default": "2020-01-01" + }, + "BONDETH": { + "_default": "2020-01-01" + }, + "STORJTRY": { + "_default": "2020-01-01" + }, + "OPETH": { + "_default": "2020-01-01" + }, + "ETCTRY": { + "_default": "2020-01-01" + }, + "WINGETH": { + "_default": "2020-01-01" + }, + "FILETH": { + "_default": "2020-01-01" + }, + "GLMBUSD": { + "_default": "2020-01-01" + }, + "SSVBUSD": { + "_default": "2020-01-01" + }, + "STGBTC": { + "_default": "2020-01-01" + }, + "STGBUSD": { + "_default": "2020-01-01" + }, + "STGUSDT": { + "_default": "2020-01-01" + }, + "ANKRTRY": { + "_default": "2020-01-01" + }, + "ARKBUSD": { + "_default": "2020-01-01" + }, + "BETHBUSD": { + "_default": "2020-01-01" + }, + "LOOMBUSD": { + "_default": "2020-01-01" + }, + "SNMBUSD": { + "_default": "2020-01-01" + }, + "AMBBUSD": { + "_default": "2020-01-01" + }, + "LUNCUSDT": { + "_default": "2020-01-01" + }, + "PHBBUSD": { + "_default": "2020-01-01" + }, + "GASBUSD": { + "_default": "2020-01-01" + }, + "NEBLBUSD": { + "_default": "2020-01-01" + }, + "PROSBUSD": { + "_default": "2020-01-01" + }, + "VIBBUSD": { + "_default": "2020-01-01" + }, + "GMXBTC": { + "_default": "2020-01-01" + }, + "GMXBUSD": { + "_default": "2020-01-01" + }, + "GMXUSDT": { + "_default": "2020-01-01" + }, + "AGIXBUSD": { + "_default": "2020-01-01" + }, + "NEBLUSDT": { + "_default": "2020-01-01" + }, + "SNTBUSD": { + "_default": "2020-01-01" + }, + "POLYXBTC": { + "_default": "2020-01-01" + }, + "POLYXBUSD": { + "_default": "2020-01-01" + }, + "POLYXUSDT": { + "_default": "2020-01-01" + }, + "APTBTC": { + "_default": "2020-01-01" + }, + "APTUSDT": { + "_default": "2020-01-01" + }, + "APTBUSD": { + "_default": "2020-01-01" + }, + "BTCPLN": { + "_default": "2020-01-01" + }, + "ETHPLN": { + "_default": "2020-01-01" + }, + "BUSDPLN": { + "_default": "2020-01-01" + }, + "APTEUR": { + "_default": "2020-01-01" + }, + "APTTRY": { + "_default": "2020-01-01" + }, + "APTBRL": { + "_default": "2020-01-01" + }, + "QKCBUSD": { + "_default": "2020-01-01" + }, + "OSMOBTC": { + "_default": "2020-01-01" + }, + "OSMOUSDT": { + "_default": "2020-01-01" + }, + "OSMOBUSD": { + "_default": "2020-01-01" + }, + "HFTBTC": { + "_default": "2020-01-01" + }, + "HFTBUSD": { + "_default": "2020-01-01" + }, + "HFTUSDT": { + "_default": "2020-01-01" + }, + "ARPAETH": { + "_default": "2020-01-01" + }, + "PHBUSDT": { + "_default": "2020-01-01" + }, + "VITEBUSD": { + "_default": "2020-01-01" + }, + "HOOKBTC": { + "_default": "2020-01-01" + }, + "HOOKUSDT": { + "_default": "2020-01-01" + }, + "HOOKBUSD": { + "_default": "2020-01-01" + }, + "HOOKBNB": { + "_default": "2020-01-01" + }, + "MAGICBTC": { + "_default": "2020-01-01" + }, + "MAGICBUSD": { + "_default": "2020-01-01" + }, + "MAGICUSDT": { + "_default": "2020-01-01" + }, + "BUSDRON": { + "_default": "2020-01-01" + }, + "HIFIETH": { + "_default": "2020-01-01" + }, + "HIFIUSDT": { + "_default": "2020-01-01" + }, + "RPLBTC": { + "_default": "2020-01-01" + }, + "RPLBUSD": { + "_default": "2020-01-01" + }, + "RPLUSDT": { + "_default": "2020-01-01" + }, + "PROSUSDT": { + "_default": "2020-01-01" + }, + "FETTRY": { + "_default": "2020-01-01" + }, + "GFTBUSD": { + "_default": "2020-01-01" + }, + "AGIXUSDT": { + "_default": "2020-01-01" + }, + "APTETH": { + "_default": "2020-01-01" + }, + "BTCRON": { + "_default": "2020-01-01" + }, + "GNSUSDT": { + "_default": "2020-01-01" + }, + "GNSBTC": { + "_default": "2020-01-01" + }, + "SYNBTC": { + "_default": "2020-01-01" + }, + "SYNUSDT": { + "_default": "2020-01-01" + }, + "VIBUSDT": { + "_default": "2020-01-01" + }, + "SSVUSDT": { + "_default": "2020-01-01" + }, + "LQTYUSDT": { + "_default": "2020-01-01" + }, + "LQTYBTC": { + "_default": "2020-01-01" + }, + "AMBUSDT": { + "_default": "2020-01-01" + }, + "BETHUSDT": { + "_default": "2020-01-01" + }, + "CFXTRY": { + "_default": "2020-01-01" + }, + "STXTRY": { + "_default": "2020-01-01" + }, + "USTCUSDT": { + "_default": "2020-01-01" + }, + "GASUSDT": { + "_default": "2020-01-01" + }, + "GLMUSDT": { + "_default": "2020-01-01" + }, + "PROMUSDT": { + "_default": "2020-01-01" + }, + "QKCUSDT": { + "_default": "2020-01-01" + }, + "UFTUSDT": { + "_default": "2020-01-01" + }, + "IDBTC": { + "_default": "2020-01-01" + }, + "IDBNB": { + "_default": "2020-01-01" + }, + "IDUSDT": { + "_default": "2020-01-01" + }, + "ARBBTC": { + "_default": "2020-01-01" + }, + "ARBUSDT": { + "_default": "2020-01-01" + }, + "AGIXTRY": { + "_default": "2020-01-01" + }, + "LOOMUSDT": { + "_default": "2020-01-01" + }, + "OAXUSDT": { + "_default": "2020-01-01" + }, + "ARBTUSD": { + "_default": "2020-01-01" + }, + "ARBTRY": { + "_default": "2020-01-01" + }, + "ARBEUR": { + "_default": "2020-01-01" + }, + "IDTUSD": { + "_default": "2020-01-01" + }, + "IDTRY": { + "_default": "2020-01-01" + }, + "IDEUR": { + "_default": "2020-01-01" + }, + "LDOTUSD": { + "_default": "2020-01-01" + }, + "MATICTUSD": { + "_default": "2020-01-01" + }, + "OPTUSD": { + "_default": "2020-01-01" + }, + "SOLTUSD": { + "_default": "2020-01-01" + }, + "SSVTUSD": { + "_default": "2020-01-01" + }, + "RDNTBTC": { + "_default": "2020-01-01" + }, + "RDNTUSDT": { + "_default": "2020-01-01" + }, + "RDNTTUSD": { + "_default": "2020-01-01" + }, + "ARBRUB": { + "_default": "2020-01-01" + }, + "JOETRY": { + "_default": "2020-01-01" + }, + "MAGICTRY": { + "_default": "2020-01-01" + }, + "USDTPLN": { + "_default": "2020-01-01" + }, + "ACHTRY": { + "_default": "2020-01-01" + }, + "XVSTRY": { + "_default": "2020-01-01" + }, + "EGLDRON": { + "_default": "2020-01-01" + }, + "USDTRON": { + "_default": "2020-01-01" + }, + "USDTARS": { + "_default": "2020-01-01" + }, + "DOGETUSD": { + "_default": "2020-01-01" + }, + "WBTCUSDT": { + "_default": "2020-01-01" + }, + "EDUUSDT": { + "_default": "2020-01-01" + }, + "EDUTUSD": { + "_default": "2020-01-01" + }, + "EDUBNB": { + "_default": "2020-01-01" + }, + "EDUBTC": { + "_default": "2020-01-01" + }, + "EDUEUR": { + "_default": "2020-01-01" + }, + "EDUTRY": { + "_default": "2020-01-01" + }, + "SUIUSDT": { + "_default": "2020-01-01" + }, + "SUITUSD": { + "_default": "2020-01-01" + }, + "SUIBTC": { + "_default": "2020-01-01" + }, + "SUIBNB": { + "_default": "2020-01-01" + }, + "SUIEUR": { + "_default": "2020-01-01" + }, + "SUITRY": { + "_default": "2020-01-01" + }, + "AERGOUSDT": { + "_default": "2020-01-01" + }, + "RNDRTRY": { + "_default": "2020-01-01" + }, + "PEPEUSDT": { + "_default": "2020-01-01" + }, + "PEPETUSD": { + "_default": "2020-01-01" + }, + "FLOKIUSDT": { + "_default": "2020-01-01" + }, + "FLOKITUSD": { + "_default": "2020-01-01" + }, + "OGTRY": { + "_default": "2020-01-01" + }, + "PEPETRY": { + "_default": "2020-01-01" + }, + "WBETHETH": { + "_default": "2020-01-01" + }, + "ASTUSDT": { + "_default": "2020-01-01" + }, + "SNTUSDT": { + "_default": "2020-01-01" + }, + "FLOKITRY": { + "_default": "2020-01-01" + }, + "CITYTRY": { + "_default": "2020-01-01" + }, + "COMBOUSDT": { + "_default": "2020-01-01" + }, + "COMBOBNB": { + "_default": "2020-01-01" + }, + "COMBOTRY": { + "_default": "2020-01-01" + }, + "LTCTRY": { + "_default": "2020-01-01" + }, + "RADTRY": { + "_default": "2020-01-01" + }, + "BTCARS": { + "_default": "2020-01-01" + }, + "OPTRY": { + "_default": "2020-01-01" + }, + "PAXGTRY": { + "_default": "2020-01-01" + }, + "MAVBTC": { + "_default": "2020-01-01" + }, + "MAVUSDT": { + "_default": "2020-01-01" + }, + "MAVTUSD": { + "_default": "2020-01-01" + }, + "CFXTUSD": { + "_default": "2020-01-01" + }, + "PENDLEBTC": { + "_default": "2020-01-01" + }, + "PENDLEUSDT": { + "_default": "2020-01-01" + }, + "PENDLETUSD": { + "_default": "2020-01-01" + }, + "MAVTRY": { + "_default": "2020-01-01" + }, + "OCEANTRY": { + "_default": "2020-01-01" + }, + "TUSDTRY": { + "_default": "2020-01-01" + }, + "ARBETH": { + "_default": "2020-01-01" + }, + "BCHTRY": { + "_default": "2020-01-01" + }, + "XVGTRY": { + "_default": "2020-01-01" + }, + "XVGTUSD": { + "_default": "2020-01-01" + }, + "ARKMUSDT": { + "_default": "2020-01-01" + }, + "ARKMTUSD": { + "_default": "2020-01-01" + }, + "ARKMTRY": { + "_default": "2020-01-01" + }, + "ARKMBNB": { + "_default": "2020-01-01" + }, + "ARKMBTC": { + "_default": "2020-01-01" + }, + "WBETHUSDT": { + "_default": "2020-01-01" + }, + "ACATRY": { + "_default": "2020-01-01" + }, + "AVAXTUSD": { + "_default": "2020-01-01" + }, + "COMPTUSD": { + "_default": "2020-01-01" + }, + "COMPTRY": { + "_default": "2020-01-01" + }, + "XECTRY": { + "_default": "2020-01-01" + }, + "QUICKTUSD": { + "_default": "2020-01-01" + }, + "WLDUSDT": { + "_default": "2020-01-01" + }, + "WLDBTC": { + "_default": "2020-01-01" + }, + "BNBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDBUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDT": { + "_default": "2020-01-01" + }, + "ARKMRUB": { + "_default": "2020-01-01" + }, + "WLDTRY": { + "_default": "2020-01-01" + }, + "WLDRUB": { + "_default": "2020-01-01" + }, + "AMPTRY": { + "_default": "2020-01-01" + }, + "OGNTRY": { + "_default": "2020-01-01" + }, + "BTCFDUSD": { + "_default": "2020-01-01" + }, + "ETHFDUSD": { + "_default": "2020-01-01" + }, + "ASRTRY": { + "_default": "2020-01-01" + }, + "ATMTRY": { + "_default": "2020-01-01" + }, + "ACMTRY": { + "_default": "2020-01-01" + }, + "BARTRY": { + "_default": "2020-01-01" + }, + "JUVTRY": { + "_default": "2020-01-01" + }, + "PSGTRY": { + "_default": "2020-01-01" + }, + "SEIBNB": { + "_default": "2020-01-01" + }, + "SEIBTC": { + "_default": "2020-01-01" + }, + "SEIFDUSD": { + "_default": "2020-01-01" + }, + "SEITRY": { + "_default": "2020-01-01" + }, + "SEIUSDT": { + "_default": "2020-01-01" + }, + "CYBERBNB": { + "_default": "2020-01-01" + }, + "CYBERBTC": { + "_default": "2020-01-01" + }, + "CYBERFDUSD": { + "_default": "2020-01-01" + }, + "CYBERTRY": { + "_default": "2020-01-01" + }, + "CYBERUSDT": { + "_default": "2020-01-01" + }, + "CYBERTUSD": { + "_default": "2020-01-01" + }, + "SEITUSD": { + "_default": "2020-01-01" + }, + "LPTTRY": { + "_default": "2020-01-01" + }, + "UNITRY": { + "_default": "2020-01-01" + }, + "SOLFDUSD": { + "_default": "2020-01-01" + }, + "TOMOTRY": { + "_default": "2020-01-01" + }, + "UNFITRY": { + "_default": "2020-01-01" + }, + "XRPFDUSD": { + "_default": "2020-01-01" + }, + "DOGEFDUSD": { + "_default": "2020-01-01" + }, + "CYBERETH": { + "_default": "2020-01-01" + }, + "MTLTRY": { + "_default": "2020-01-01" + }, + "ARKUSDT": { + "_default": "2020-01-01" + }, + "CREAMUSDT": { + "_default": "2020-01-01" + }, + "GFTUSDT": { + "_default": "2020-01-01" + }, + "IQUSDT": { + "_default": "2020-01-01" + }, + "USDTVAI": { + "_default": "2020-01-01" + }, + "ARBFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDTRY": { + "_default": "2020-01-01" + }, + "FRONTTRY": { + "_default": "2020-01-01" + }, + "SUIFDUSD": { + "_default": "2020-01-01" + }, + "NTRNBTC": { + "_default": "2020-01-01" + }, + "NTRNUSDT": { + "_default": "2020-01-01" + }, + "NTRNBNB": { + "_default": "2020-01-01" + }, + "FILFDUSD": { + "_default": "2020-01-01" + }, + "FRONTTUSD": { + "_default": "2020-01-01" + }, + "LEVERTRY": { + "_default": "2020-01-01" + }, + "LTCFDUSD": { + "_default": "2020-01-01" + }, + "ADAFDUSD": { + "_default": "2020-01-01" + }, + "RUNETUSD": { + "_default": "2020-01-01" + }, + "TRBTRY": { + "_default": "2020-01-01" + }, + "ATOMFDUSD": { + "_default": "2020-01-01" + }, + "AVAXFDUSD": { + "_default": "2020-01-01" + }, + "BANDTRY": { + "_default": "2020-01-01" + }, + "BCHFDUSD": { + "_default": "2020-01-01" + }, + "LOOMTRY": { + "_default": "2020-01-01" + }, + "MATICFDUSD": { + "_default": "2020-01-01" + }, + "ALGOFDUSD": { + "_default": "2020-01-01" + }, + "DOTFDUSD": { + "_default": "2020-01-01" + }, + "FTMFDUSD": { + "_default": "2020-01-01" + }, + "LINKFDUSD": { + "_default": "2020-01-01" + }, + "NEARFDUSD": { + "_default": "2020-01-01" + }, + "STRAXTRY": { + "_default": "2020-01-01" + }, + "TIABTC": { + "_default": "2020-01-01" + }, + "TIAUSDT": { + "_default": "2020-01-01" + }, + "TIATRY": { + "_default": "2020-01-01" + }, + "MEMEBNB": { + "_default": "2020-01-01" + }, + "MEMEUSDT": { + "_default": "2020-01-01" + }, + "MEMEFDUSD": { + "_default": "2020-01-01" + }, + "MEMETUSD": { + "_default": "2020-01-01" + }, + "MEMETRY": { + "_default": "2020-01-01" + }, + "ORDIBTC": { + "_default": "2020-01-01" + }, + "ORDIUSDT": { + "_default": "2020-01-01" + }, + "ORDITRY": { + "_default": "2020-01-01" + }, + "EGLDFDUSD": { + "_default": "2020-01-01" + }, + "FETFDUSD": { + "_default": "2020-01-01" + }, + "GASFDUSD": { + "_default": "2020-01-01" + }, + "INJETH": { + "_default": "2020-01-01" + }, + "INJTUSD": { + "_default": "2020-01-01" + }, + "OPFDUSD": { + "_default": "2020-01-01" + }, + "ORDIFDUSD": { + "_default": "2020-01-01" + }, + "ORDITUSD": { + "_default": "2020-01-01" + }, + "RNDRFDUSD": { + "_default": "2020-01-01" + }, + "SHIBTUSD": { + "_default": "2020-01-01" + }, + "BEAMXUSDT": { + "_default": "2020-01-01" + }, + "ARKTRY": { + "_default": "2020-01-01" + }, + "BEAMXTRY": { + "_default": "2020-01-01" + }, + "CAKETRY": { + "_default": "2020-01-01" + }, + "CAKETUSD": { + "_default": "2020-01-01" + }, + "DYDXFDUSD": { + "_default": "2020-01-01" + }, + "PIVXUSDT": { + "_default": "2020-01-01" + }, + "RUNEFDUSD": { + "_default": "2020-01-01" + }, + "TIATUSD": { + "_default": "2020-01-01" + }, + "DOTTUSD": { + "_default": "2020-01-01" + }, + "GALAFDUSD": { + "_default": "2020-01-01" + }, + "WLDFDUSD": { + "_default": "2020-01-01" + }, + "GASTRY": { + "_default": "2020-01-01" + }, + "NTRNTRY": { + "_default": "2020-01-01" + }, + "VICBTC": { + "_default": "2020-01-01" + }, + "VICUSDT": { + "_default": "2020-01-01" + }, + "VICTRY": { + "_default": "2020-01-01" + }, + "BLURBTC": { + "_default": "2020-01-01" + }, + "BLURUSDT": { + "_default": "2020-01-01" + }, + "BLURTRY": { + "_default": "2020-01-01" + }, + "BLURFDUSD": { + "_default": "2020-01-01" + }, + "SUPERFDUSD": { + "_default": "2020-01-01" + }, + "USTCFDUSD": { + "_default": "2020-01-01" + }, + "USTCTRY": { + "_default": "2020-01-01" + }, + "DYDXTRY": { + "_default": "2020-01-01" + }, + "VANRYUSDT": { + "_default": "2020-01-01" + }, + "VANRYBTC": { + "_default": "2020-01-01" + }, + "BTCAEUR": { + "_default": "2020-01-01" + }, + "AEURUSDT": { + "_default": "2020-01-01" + }, + "ETHAEUR": { + "_default": "2020-01-01" + }, + "EURAEUR": { + "_default": "2020-01-01" + }, + "AUCTIONFDUSD": { + "_default": "2020-01-01" + }, + "IOTAFDUSD": { + "_default": "2020-01-01" + }, + "LUNCTRY": { + "_default": "2020-01-01" + }, + "SUPERTRY": { + "_default": "2020-01-01" + }, + "JTOUSDT": { + "_default": "2020-01-01" + }, + "JTOFDUSD": { + "_default": "2020-01-01" + }, + "JTOTRY": { + "_default": "2020-01-01" + }, + "1000SATSUSDT": { + "_default": "2020-01-01" + }, + "1000SATSFDUSD": { + "_default": "2020-01-01" + }, + "1000SATSTRY": { + "_default": "2020-01-01" + }, + "SHIBFDUSD": { + "_default": "2020-01-01" + }, + "SANDFDUSD": { + "_default": "2020-01-01" + }, + "MEMEETH": { + "_default": "2020-01-01" + }, + "IOTATRY": { + "_default": "2020-01-01" + }, + "INJFDUSD": { + "_default": "2020-01-01" + }, + "FIDATRY": { + "_default": "2020-01-01" + }, + "BONKUSDT": { + "_default": "2020-01-01" + }, + "BONKFDUSD": { + "_default": "2020-01-01" + }, + "BONKTRY": { + "_default": "2020-01-01" + }, + "ACEFDUSD": { + "_default": "2020-01-01" + }, + "ACEUSDT": { + "_default": "2020-01-01" + }, + "ACEBNB": { + "_default": "2020-01-01" + }, + "ACEBTC": { + "_default": "2020-01-01" + }, + "ACETRY": { + "_default": "2020-01-01" + }, + "BLZFDUSD": { + "_default": "2020-01-01" + }, + "RARETRY": { + "_default": "2020-01-01" + }, + "VANRYTRY": { + "_default": "2020-01-01" + }, + "NFPBTC": { + "_default": "2020-01-01" + }, + "NFPUSDT": { + "_default": "2020-01-01" + }, + "NFPBNB": { + "_default": "2020-01-01" + }, + "NFPFDUSD": { + "_default": "2020-01-01" + }, + "NFPTUSD": { + "_default": "2020-01-01" + }, + "NFPTRY": { + "_default": "2020-01-01" + }, + "ARBUSDC": { + "_default": "2020-01-01" + }, + "AVAXUSDC": { + "_default": "2020-01-01" + }, + "DOTUSDC": { + "_default": "2020-01-01" + }, + "INJUSDC": { + "_default": "2020-01-01" + }, + "MATICUSDC": { + "_default": "2020-01-01" + }, + "OPUSDC": { + "_default": "2020-01-01" + }, + "ORDIUSDC": { + "_default": "2020-01-01" + }, + "AIBTC": { + "_default": "2020-01-01" + }, + "AIUSDT": { + "_default": "2020-01-01" + }, + "AIBNB": { + "_default": "2020-01-01" + }, + "AIFDUSD": { + "_default": "2020-01-01" + }, + "AITUSD": { + "_default": "2020-01-01" + }, + "AITRY": { + "_default": "2020-01-01" + }, + "ICPFDUSD": { + "_default": "2020-01-01" + }, + "LDOFDUSD": { + "_default": "2020-01-01" + }, + "MOVRTRY": { + "_default": "2020-01-01" + }, + "XAIBTC": { + "_default": "2020-01-01" + }, + "XAIUSDT": { + "_default": "2020-01-01" + }, + "XAIBNB": { + "_default": "2020-01-01" + }, + "XAIFDUSD": { + "_default": "2020-01-01" + }, + "XAITUSD": { + "_default": "2020-01-01" + }, + "XAITRY": { + "_default": "2020-01-01" + }, + "SKLTRY": { + "_default": "2020-01-01" + }, + "STXFDUSD": { + "_default": "2020-01-01" + }, + "TIAFDUSD": { + "_default": "2020-01-01" + }, + "MANTABTC": { + "_default": "2020-01-01" + }, + "MANTAUSDT": { + "_default": "2020-01-01" + }, + "MANTABNB": { + "_default": "2020-01-01" + }, + "MANTAFDUSD": { + "_default": "2020-01-01" + }, + "MANTATRY": { + "_default": "2020-01-01" + }, + "ENSFDUSD": { + "_default": "2020-01-01" + }, + "ETCFDUSD": { + "_default": "2020-01-01" + }, + "SUIUSDC": { + "_default": "2020-01-01" + }, + "TIAUSDC": { + "_default": "2020-01-01" + }, + "CHZFDUSD": { + "_default": "2020-01-01" + }, + "MANTAUSDC": { + "_default": "2020-01-01" + }, + "ALTBTC": { + "_default": "2020-01-01" + }, + "ALTUSDT": { + "_default": "2020-01-01" + }, + "ALTBNB": { + "_default": "2020-01-01" + }, + "ALTFDUSD": { + "_default": "2020-01-01" + }, + "ALTTRY": { + "_default": "2020-01-01" + }, + "APTFDUSD": { + "_default": "2020-01-01" + }, + "BLURUSDC": { + "_default": "2020-01-01" + }, + "JUPUSDT": { + "_default": "2020-01-01" + }, + "JUPFDUSD": { + "_default": "2020-01-01" + }, + "JUPTRY": { + "_default": "2020-01-01" + }, + "ALTUSDC": { + "_default": "2020-01-01" + }, + "MAGICFDUSD": { + "_default": "2020-01-01" + }, + "SEIUSDC": { + "_default": "2020-01-01" + }, + "PYTHBTC": { + "_default": "2020-01-01" + }, + "PYTHUSDT": { + "_default": "2020-01-01" + }, + "PYTHFDUSD": { + "_default": "2020-01-01" + }, + "PYTHTRY": { + "_default": "2020-01-01" + }, + "RONINBTC": { + "_default": "2020-01-01" + }, + "RONINUSDT": { + "_default": "2020-01-01" + }, + "RONINFDUSD": { + "_default": "2020-01-01" + }, + "RONINTRY": { + "_default": "2020-01-01" + }, + "DYMBTC": { + "_default": "2020-01-01" + }, + "DYMUSDT": { + "_default": "2020-01-01" + }, + "DYMFDUSD": { + "_default": "2020-01-01" + }, + "DYMTRY": { + "_default": "2020-01-01" + }, + "JUPUSDC": { + "_default": "2020-01-01" + }, + "PENDLEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELBTC": { + "_default": "2020-01-01" + }, + "PIXELBNB": { + "_default": "2020-01-01" + }, + "PIXELUSDT": { + "_default": "2020-01-01" + }, + "PIXELFDUSD": { + "_default": "2020-01-01" + }, + "PIXELTRY": { + "_default": "2020-01-01" + }, + "STRKBTC": { + "_default": "2020-01-01" + }, + "STRKUSDT": { + "_default": "2020-01-01" + }, + "STRKFDUSD": { + "_default": "2020-01-01" + }, + "STRKTRY": { + "_default": "2020-01-01" + }, + "FILUSDC": { + "_default": "2020-01-01" + }, + "HBARTRY": { + "_default": "2020-01-01" + }, + "PENDLETRY": { + "_default": "2020-01-01" + }, + "WLDUSDC": { + "_default": "2020-01-01" + }, + "CKBTRY": { + "_default": "2020-01-01" + }, + "COTITRY": { + "_default": "2020-01-01" + }, + "LDOTRY": { + "_default": "2020-01-01" + }, + "UNIUSDC": { + "_default": "2020-01-01" + }, + "PORTALBTC": { + "_default": "2020-01-01" + }, + "PORTALUSDT": { + "_default": "2020-01-01" + }, + "PORTALBNB": { + "_default": "2020-01-01" + }, + "PORTALFDUSD": { + "_default": "2020-01-01" + }, + "PORTALTRY": { + "_default": "2020-01-01" + }, + "PDABTC": { + "_default": "2020-01-01" + }, + "PDAUSDT": { + "_default": "2020-01-01" + }, + "AXLBTC": { + "_default": "2020-01-01" + }, + "AXLUSDT": { + "_default": "2020-01-01" + }, + "AXLFDUSD": { + "_default": "2020-01-01" + }, + "AXLTRY": { + "_default": "2020-01-01" + }, + "PEPEFDUSD": { + "_default": "2020-01-01" + }, + "PIXELUSDC": { + "_default": "2020-01-01" + }, + "STRKUSDC": { + "_default": "2020-01-01" + }, + "UNIFDUSD": { + "_default": "2020-01-01" + }, + "OMTRY": { + "_default": "2020-01-01" + }, + "THETATRY": { + "_default": "2020-01-01" + }, + "WIFBTC": { + "_default": "2020-01-01" + }, + "WIFUSDT": { + "_default": "2020-01-01" + }, + "WIFFDUSD": { + "_default": "2020-01-01" + }, + "WIFTRY": { + "_default": "2020-01-01" + }, + "AGIXFDUSD": { + "_default": "2020-01-01" + }, + "PEPEUSDC": { + "_default": "2020-01-01" + }, + "SHIBUSDC": { + "_default": "2020-01-01" + }, + "THETAFDUSD": { + "_default": "2020-01-01" + }, + "ARTRY": { + "_default": "2020-01-01" + }, + "METISBTC": { + "_default": "2020-01-01" + }, + "METISUSDT": { + "_default": "2020-01-01" + }, + "METISFDUSD": { + "_default": "2020-01-01" + }, + "METISTRY": { + "_default": "2020-01-01" + }, + "BNBJPY": { + "_default": "2020-01-01" + }, + "BTCJPY": { + "_default": "2020-01-01" + }, + "ETHJPY": { + "_default": "2020-01-01" + }, + "FLOKIFDUSD": { + "_default": "2020-01-01" + }, + "GRTFDUSD": { + "_default": "2020-01-01" + }, + "NEARUSDC": { + "_default": "2020-01-01" + }, + "SNXTRY": { + "_default": "2020-01-01" + }, + "AEVOBTC": { + "_default": "2020-01-01" + }, + "AEVOUSDT": { + "_default": "2020-01-01" + }, + "AEVOBNB": { + "_default": "2020-01-01" + }, + "AEVOFDUSD": { + "_default": "2020-01-01" + }, + "AEVOTRY": { + "_default": "2020-01-01" + }, + "FETUSDC": { + "_default": "2020-01-01" + }, + "IMXTRY": { + "_default": "2020-01-01" + }, + "EURUSDC": { + "_default": "2020-01-01" + }, + "BOMETRY": { + "_default": "2020-01-01" + }, + "BOMEBTC": { + "_default": "2020-01-01" + }, + "BOMEUSDT": { + "_default": "2020-01-01" + }, + "BOMEFDUSD": { + "_default": "2020-01-01" + }, + "ETHFIBTC": { + "_default": "2020-01-01" + }, + "ETHFIUSDT": { + "_default": "2020-01-01" + }, + "ETHFIBNB": { + "_default": "2020-01-01" + }, + "ETHFIFDUSD": { + "_default": "2020-01-01" + }, + "ETHFITRY": { + "_default": "2020-01-01" + }, + "AAVETRY": { + "_default": "2020-01-01" + }, + "ARKMFDUSD": { + "_default": "2020-01-01" + }, + "CRVTRY": { + "_default": "2020-01-01" + }, + "FETBRL": { + "_default": "2020-01-01" + }, + "RAYFDUSD": { + "_default": "2020-01-01" + }, + "RNDREUR": { + "_default": "2020-01-01" + }, + "BONKUSDC": { + "_default": "2020-01-01" + }, + "FLOKIUSDC": { + "_default": "2020-01-01" + }, + "MKRTRY": { + "_default": "2020-01-01" + }, + "RAYTRY": { + "_default": "2020-01-01" + }, + "RNDRBRL": { + "_default": "2020-01-01" + }, + "ENABTC": { + "_default": "2020-01-01" + }, + "ENAUSDT": { + "_default": "2020-01-01" + }, + "ENABNB": { + "_default": "2020-01-01" + }, + "ENAFDUSD": { + "_default": "2020-01-01" + }, + "ENATRY": { + "_default": "2020-01-01" + }, + "LQTYFDUSD": { + "_default": "2020-01-01" + }, + "MASKTRY": { + "_default": "2020-01-01" + }, + "PENDLEUSDC": { + "_default": "2020-01-01" + }, + "RDNTTRY": { + "_default": "2020-01-01" + }, + "WBTC": { + "_default": "2020-01-01" + }, + "WUSDT": { + "_default": "2020-01-01" + }, + "WFDUSD": { + "_default": "2020-01-01" + }, + "WTRY": { + "_default": "2020-01-01" + }, + "BOMEUSDC": { + "_default": "2020-01-01" + }, + "JTOUSDC": { + "_default": "2020-01-01" + }, + "WIFUSDC": { + "_default": "2020-01-01" + }, + "TNSRBTC": { + "_default": "2020-01-01" + }, + "TNSRUSDT": { + "_default": "2020-01-01" + }, + "TNSRFDUSD": { + "_default": "2020-01-01" + }, + "TNSRTRY": { + "_default": "2020-01-01" + }, + "SAGABTC": { + "_default": "2020-01-01" + }, + "SAGAUSDT": { + "_default": "2020-01-01" + }, + "SAGABNB": { + "_default": "2020-01-01" + }, + "SAGAFDUSD": { + "_default": "2020-01-01" + }, + "SAGATRY": { + "_default": "2020-01-01" + }, + "USDTMXN": { + "_default": "2020-01-01" + }, + "CKBUSDC": { + "_default": "2020-01-01" + }, + "ENAUSDC": { + "_default": "2020-01-01" + }, + "ETHFIUSDC": { + "_default": "2020-01-01" + }, + "YGGUSDC": { + "_default": "2020-01-01" + }, + "USDTCZK": { + "_default": "2020-01-01" + }, + "TAOBTC": { + "_default": "2020-01-01" + }, + "TAOUSDT": { + "_default": "2020-01-01" + }, + "TAOFDUSD": { + "_default": "2020-01-01" + }, + "TAOTRY": { + "_default": "2020-01-01" + }, + "CFXUSDC": { + "_default": "2020-01-01" + }, + "RNDRUSDC": { + "_default": "2020-01-01" + }, + "RUNEUSDC": { + "_default": "2020-01-01" + }, + "SAGAUSDC": { + "_default": "2020-01-01" + }, + "POLYXTRY": { + "_default": "2020-01-01" + }, + "OMNIBTC": { + "_default": "2020-01-01" + }, + "OMNIUSDT": { + "_default": "2020-01-01" + }, + "OMNIBNB": { + "_default": "2020-01-01" + }, + "OMNIFDUSD": { + "_default": "2020-01-01" + }, + "OMNITRY": { + "_default": "2020-01-01" + }, + "APTUSDC": { + "_default": "2020-01-01" + }, + "GALAUSDC": { + "_default": "2020-01-01" + }, + "OMNIBRL": { + "_default": "2020-01-01" + }, + "STXUSDC": { + "_default": "2020-01-01" + }, + "ICPUSDC": { + "_default": "2020-01-01" + }, + "OMNIUSDC": { + "_default": "2020-01-01" + }, + "PEPEBRL": { + "_default": "2020-01-01" + }, + "YGGTRY": { + "_default": "2020-01-01" + }, + "ADAJPY": { + "_default": "2020-01-01" + }, + "SHIBJPY": { + "_default": "2020-01-01" + }, + "SOLJPY": { + "_default": "2020-01-01" + }, + "XRPJPY": { + "_default": "2020-01-01" + }, + "REZBTC": { + "_default": "2020-01-01" + }, + "REZUSDT": { + "_default": "2020-01-01" + }, + "REZBNB": { + "_default": "2020-01-01" + }, + "REZFDUSD": { + "_default": "2020-01-01" + }, + "REZTRY": { + "_default": "2020-01-01" + }, + "EGLDTRY": { + "_default": "2020-01-01" + }, + "PHBTRY": { + "_default": "2020-01-01" + }, + "RSRTRY": { + "_default": "2020-01-01" + }, + "BBBTC": { + "_default": "2020-01-01" + }, + "BBUSDT": { + "_default": "2020-01-01" + }, + "BBBNB": { + "_default": "2020-01-01" + }, + "BBFDUSD": { + "_default": "2020-01-01" + }, + "BBTRY": { + "_default": "2020-01-01" + }, + "FRONTUSDC": { + "_default": "2020-01-01" + }, + "PEOPLETRY": { + "_default": "2020-01-01" + }, + "TRBUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDT": { + "_default": "2020-01-01" + }, + "NOTBNB": { + "_default": "2020-01-01" + }, + "NOTFDUSD": { + "_default": "2020-01-01" + }, + "NOTTRY": { + "_default": "2020-01-01" + }, + "ARKMUSDC": { + "_default": "2020-01-01" + }, + "ARUSDC": { + "_default": "2020-01-01" + }, + "BBUSDC": { + "_default": "2020-01-01" + }, + "CRVUSDC": { + "_default": "2020-01-01" + }, + "PEOPLEUSDC": { + "_default": "2020-01-01" + }, + "ARFDUSD": { + "_default": "2020-01-01" + }, + "ENAEUR": { + "_default": "2020-01-01" + }, + "PEPEEUR": { + "_default": "2020-01-01" + }, + "REZUSDC": { + "_default": "2020-01-01" + }, + "TRBFDUSD": { + "_default": "2020-01-01" + }, + "USDCTRY": { + "_default": "2020-01-01" + }, + "BTCMXN": { + "_default": "2020-01-01" + }, + "XRPMXN": { + "_default": "2020-01-01" + }, + "ENSUSDC": { + "_default": "2020-01-01" + }, + "LDOUSDC": { + "_default": "2020-01-01" + }, + "NOTUSDC": { + "_default": "2020-01-01" + }, + "NEARBRL": { + "_default": "2020-01-01" + }, + "HIGHTRY": { + "_default": "2020-01-01" + }, + "PEOPLEFDUSD": { + "_default": "2020-01-01" + }, + "TNSRUSDC": { + "_default": "2020-01-01" + }, + "USDTCOP": { + "_default": "2020-01-01" + }, + "IOBTC": { + "_default": "2020-01-01" + }, + "IOUSDT": { + "_default": "2020-01-01" + }, + "IOBNB": { + "_default": "2020-01-01" + }, + "IOFDUSD": { + "_default": "2020-01-01" + }, + "IOTRY": { + "_default": "2020-01-01" + }, + "NOTBRL": { + "_default": "2020-01-01" + }, + "TRUTRY": { + "_default": "2020-01-01" + }, + "WIFEUR": { + "_default": "2020-01-01" + }, + "ZKBTC": { + "_default": "2020-01-01" + }, + "ZKUSDT": { + "_default": "2020-01-01" + }, + "ZKFDUSD": { + "_default": "2020-01-01" + }, + "ZKTRY": { + "_default": "2020-01-01" + }, + "LISTAUSDT": { + "_default": "2020-01-01" + }, + "LISTABNB": { + "_default": "2020-01-01" + }, + "LISTAFDUSD": { + "_default": "2020-01-01" + }, + "LISTATRY": { + "_default": "2020-01-01" + }, + "ZROBTC": { + "_default": "2020-01-01" + }, + "ZROUSDT": { + "_default": "2020-01-01" + }, + "ZROFDUSD": { + "_default": "2020-01-01" + }, + "ZROTRY": { + "_default": "2020-01-01" + }, + "LISTABRL": { + "_default": "2020-01-01" + }, + "BAKETRY": { + "_default": "2020-01-01" + }, + "WIFBRL": { + "_default": "2020-01-01" + }, + "ZKUSDC": { + "_default": "2020-01-01" + }, + "ZROUSDC": { + "_default": "2020-01-01" + }, + "IOUSDC": { + "_default": "2020-01-01" + }, + "1000SATSUSDC": { + "_default": "2020-01-01" + }, + "BNXTRY": { + "_default": "2020-01-01" + }, + "ETHARS": { + "_default": "2020-01-01" + }, + "GUSDT": { + "_default": "2020-01-01" + }, + "GTRY": { + "_default": "2020-01-01" + }, + "BANANABTC": { + "_default": "2020-01-01" + }, + "BANANAUSDT": { + "_default": "2020-01-01" + }, + "BANANABNB": { + "_default": "2020-01-01" + }, + "BANANAFDUSD": { + "_default": "2020-01-01" + }, + "BANANATRY": { + "_default": "2020-01-01" + }, + "RENDERBTC": { + "_default": "2020-01-01" + }, + "RENDERUSDT": { + "_default": "2020-01-01" + }, + "RENDERFDUSD": { + "_default": "2020-01-01" + }, + "RENDERUSDC": { + "_default": "2020-01-01" + }, + "RENDERTRY": { + "_default": "2020-01-01" + }, + "RENDEREUR": { + "_default": "2020-01-01" + }, + "RENDERBRL": { + "_default": "2020-01-01" + }, + "TONBTC": { + "_default": "2020-01-01" + }, + "TONUSDT": { + "_default": "2020-01-01" + }, + "TONFDUSD": { + "_default": "2020-01-01" + }, + "TONTRY": { + "_default": "2020-01-01" + }, + "BONKBRL": { + "_default": "2020-01-01" + }, + "NOTEUR": { + "_default": "2020-01-01" + }, + "DOGEJPY": { + "_default": "2020-01-01" + }, + "MATICJPY": { + "_default": "2020-01-01" + }, + "NEARJPY": { + "_default": "2020-01-01" + }, + "TONUSDC": { + "_default": "2020-01-01" + }, + "AAVEFDUSD": { + "_default": "2020-01-01" + }, + "DOGSUSDT": { + "_default": "2020-01-01" + }, + "DOGSBNB": { + "_default": "2020-01-01" + }, + "DOGSFDUSD": { + "_default": "2020-01-01" + }, + "DOGSTRY": { + "_default": "2020-01-01" + }, + "EUREURI": { + "_default": "2020-01-01" + }, + "EURIUSDT": { + "_default": "2020-01-01" + }, + "DOGSBRL": { + "_default": "2020-01-01" + }, + "DOGSUSDC": { + "_default": "2020-01-01" + }, + "RAREBRL": { + "_default": "2020-01-01" + }, + "RAREUSDC": { + "_default": "2020-01-01" + }, + "SLFBTC": { + "_default": "2020-01-01" + }, + "SLFTRY": { + "_default": "2020-01-01" + }, + "SLFUSDC": { + "_default": "2020-01-01" + }, + "SLFUSDT": { + "_default": "2020-01-01" + }, + "AAVEUSDC": { + "_default": "2020-01-01" + }, + "SUNTRY": { + "_default": "2020-01-01" + }, + "STMXTRY": { + "_default": "2020-01-01" + }, + "POLBNB": { + "_default": "2020-01-01" + }, + "POLBRL": { + "_default": "2020-01-01" + }, + "POLBTC": { + "_default": "2020-01-01" + }, + "POLETH": { + "_default": "2020-01-01" + }, + "POLEUR": { + "_default": "2020-01-01" + }, + "POLFDUSD": { + "_default": "2020-01-01" + }, + "POLJPY": { + "_default": "2020-01-01" + }, + "POLTRY": { + "_default": "2020-01-01" + }, + "POLUSDC": { + "_default": "2020-01-01" + }, + "POLUSDT": { + "_default": "2020-01-01" + }, + "NEIROUSDT": { + "_default": "2020-01-01" + }, + "TURBOUSDT": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDT": { + "_default": "2020-01-01" + }, + "CATIUSDT": { + "_default": "2020-01-01" + }, + "CATIBNB": { + "_default": "2020-01-01" + }, + "CATIFDUSD": { + "_default": "2020-01-01" + }, + "CATITRY": { + "_default": "2020-01-01" + }, + "1MBABYDOGEFDUSD": { + "_default": "2020-01-01" + }, + "1MBABYDOGETRY": { + "_default": "2020-01-01" + }, + "CATIBRL": { + "_default": "2020-01-01" + }, + "BTCEURI": { + "_default": "2020-01-01" + }, + "NEIROFDUSD": { + "_default": "2020-01-01" + }, + "NEIROTRY": { + "_default": "2020-01-01" + }, + "HMSTRUSDT": { + "_default": "2020-01-01" + }, + "HMSTRBNB": { + "_default": "2020-01-01" + }, + "HMSTRFDUSD": { + "_default": "2020-01-01" + }, + "HMSTRTRY": { + "_default": "2020-01-01" + }, + "EIGENBTC": { + "_default": "2020-01-01" + }, + "EIGENUSDT": { + "_default": "2020-01-01" + }, + "EIGENFDUSD": { + "_default": "2020-01-01" + }, + "EIGENTRY": { + "_default": "2020-01-01" + }, + "NEIROBRL": { + "_default": "2020-01-01" + }, + "NEIROEUR": { + "_default": "2020-01-01" + }, + "BNSOLSOL": { + "_default": "2020-01-01" + }, + "SCRUSDT": { + "_default": "2020-01-01" + }, + "SUIBRL": { + "_default": "2020-01-01" + }, + "TURBOTRY": { + "_default": "2020-01-01" + }, + "BNSOLUSDT": { + "_default": "2020-01-01" + }, + "LUMIAUSDT": { + "_default": "2020-01-01" + }, + "SCRBTC": { + "_default": "2020-01-01" + }, + "SCRFDUSD": { + "_default": "2020-01-01" + }, + "SCRTRY": { + "_default": "2020-01-01" + }, + "KAIAUSDT": { + "_default": "2020-01-01" + }, + "COWUSDT": { + "_default": "2020-01-01" + }, + "CETUSUSDT": { + "_default": "2020-01-01" + }, + "PNUTUSDT": { + "_default": "2020-01-01" + }, + "ACTUSDT": { + "_default": "2020-01-01" + }, + "ACTTRY": { + "_default": "2020-01-01" + }, + "COWTRY": { + "_default": "2020-01-01" + }, + "CETUSTRY": { + "_default": "2020-01-01" + }, + "TROYTRY": { + "_default": "2020-01-01" + }, + "PNUTTRY": { + "_default": "2020-01-01" + }, + "ACTFDUSD": { + "_default": "2020-01-01" + }, + "ACTUSDC": { + "_default": "2020-01-01" + }, + "NEIROUSDC": { + "_default": "2020-01-01" + }, + "PNUTBTC": { + "_default": "2020-01-01" + }, + "PNUTFDUSD": { + "_default": "2020-01-01" + }, + "PNUTUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDT": { + "_default": "2020-01-01" + }, + "ACTBRL": { + "_default": "2020-01-01" + }, + "ACTEUR": { + "_default": "2020-01-01" + }, + "CATIUSDC": { + "_default": "2020-01-01" + }, + "ETHEURI": { + "_default": "2020-01-01" + }, + "LUMIATRY": { + "_default": "2020-01-01" + }, + "PNUTBRL": { + "_default": "2020-01-01" + }, + "PNUTEUR": { + "_default": "2020-01-01" + }, + "APEFDUSD": { + "_default": "2020-01-01" + }, + "FDUSDUSDC": { + "_default": "2020-01-01" + }, + "HBARUSDC": { + "_default": "2020-01-01" + }, + "OMUSDC": { + "_default": "2020-01-01" + }, + "RAYUSDC": { + "_default": "2020-01-01" + }, + "TAOUSDC": { + "_default": "2020-01-01" + }, + "TURBOFDUSD": { + "_default": "2020-01-01" + }, + "THEBTC": { + "_default": "2020-01-01" + }, + "THEBNB": { + "_default": "2020-01-01" + }, + "THEFDUSD": { + "_default": "2020-01-01" + }, + "THETRY": { + "_default": "2020-01-01" + }, + "THEUSDT": { + "_default": "2020-01-01" + }, + "APEUSDC": { + "_default": "2020-01-01" + }, + "BOMEEUR": { + "_default": "2020-01-01" + }, + "EIGENUSDC": { + "_default": "2020-01-01" + }, + "HBARFDUSD": { + "_default": "2020-01-01" + }, + "MEMEUSDC": { + "_default": "2020-01-01" + }, + "TROYUSDC": { + "_default": "2020-01-01" + }, + "WLDEUR": { + "_default": "2020-01-01" + }, + "1MBABYDOGEUSDC": { + "_default": "2020-01-01" + }, + "CETUSUSDC": { + "_default": "2020-01-01" + }, + "COWUSDC": { + "_default": "2020-01-01" + }, + "DYDXUSDC": { + "_default": "2020-01-01" + }, + "HMSTRUSDC": { + "_default": "2020-01-01" + }, + "TURBOUSDC": { + "_default": "2020-01-01" + }, + "ENABRL": { + "_default": "2020-01-01" + }, + "EOSFDUSD": { + "_default": "2020-01-01" + }, + "KAIAUSDC": { + "_default": "2020-01-01" + }, + "SANDUSDC": { + "_default": "2020-01-01" + }, + "XLMFDUSD": { + "_default": "2020-01-01" + }, + "CHZUSDC": { + "_default": "2020-01-01" + }, + "PYTHUSDC": { + "_default": "2020-01-01" + }, + "RSRUSDC": { + "_default": "2020-01-01" + }, + "RSRFDUSD": { + "_default": "2020-01-01" + }, + "WUSDC": { + "_default": "2020-01-01" + }, + "XTZUSDC": { + "_default": "2020-01-01" + }, + "ACXUSDT": { + "_default": "2020-01-01" + }, + "ORCAUSDT": { + "_default": "2020-01-01" + }, + "MOVEBTC": { + "_default": "2020-01-01" + }, + "MOVEUSDT": { + "_default": "2020-01-01" + }, + "MOVEBNB": { + "_default": "2020-01-01" + }, + "MOVEFDUSD": { + "_default": "2020-01-01" + }, + "MOVETRY": { + "_default": "2020-01-01" + }, + "MEBTC": { + "_default": "2020-01-01" + }, + "MEUSDT": { + "_default": "2020-01-01" + }, + "MEFDUSD": { + "_default": "2020-01-01" + }, + "METRY": { + "_default": "2020-01-01" + }, + "ACXUSDC": { + "_default": "2020-01-01" + }, + "ORCAUSDC": { + "_default": "2020-01-01" + }, + "ACXFDUSD": { + "_default": "2020-01-01" + }, + "ORCAFDUSD": { + "_default": "2020-01-01" + }, + "ACXTRY": { + "_default": "2020-01-01" + }, + "ORCATRY": { + "_default": "2020-01-01" + }, + "KSMTRY": { + "_default": "2020-01-01" + }, + "CELOTRY": { + "_default": "2020-01-01" + }, + "HIVEFDUSD": { + "_default": "2020-01-01" + }, + "HIVEUSDC": { + "_default": "2020-01-01" + }, + "IDEXFDUSD": { + "_default": "2020-01-01" + }, + "IDEXUSDC": { + "_default": "2020-01-01" + }, + "TLMFDUSD": { + "_default": "2020-01-01" + }, + "TLMUSDC": { + "_default": "2020-01-01" + }, + "VELODROMEUSDT": { + "_default": "2020-01-01" + }, + "VANAUSDT": { + "_default": "2020-01-01" + }, + "VANABNB": { + "_default": "2020-01-01" + }, + "VANAFDUSD": { + "_default": "2020-01-01" + }, + "VANATRY": { + "_default": "2020-01-01" + }, + "1000CATUSDT": { + "_default": "2020-01-01" + }, + "1000CATBNB": { + "_default": "2020-01-01" + }, + "1000CATFDUSD": { + "_default": "2020-01-01" + }, + "1000CATTRY": { + "_default": "2020-01-01" + }, + "PENGUUSDT": { + "_default": "2020-01-01" + }, + "PENGUBNB": { + "_default": "2020-01-01" + }, + "PENGUFDUSD": { + "_default": "2020-01-01" + }, + "PENGUTRY": { + "_default": "2020-01-01" + }, + "USUALBTC": { + "_default": "2020-01-01" + }, + "USUALFDUSD": { + "_default": "2020-01-01" + }, + "USUALTRY": { + "_default": "2020-01-01" + }, + "1000CATUSDC": { + "_default": "2020-01-01" + }, + "PENGUUSDC": { + "_default": "2020-01-01" + }, + "BIOUSDT": { + "_default": "2020-01-01" + }, + "BIOBNB": { + "_default": "2020-01-01" + }, + "BIOFDUSD": { + "_default": "2020-01-01" + }, + "BIOTRY": { + "_default": "2020-01-01" + }, + "BIOUSDC": { + "_default": "2020-01-01" + }, + "HIVETRY": { + "_default": "2020-01-01" + }, + "MOVEUSDC": { + "_default": "2020-01-01" + }, + "PHATRY": { + "_default": "2020-01-01" + }, + "SUSHITRY": { + "_default": "2020-01-01" + }, + "DUSDT": { + "_default": "2020-01-01" + }, + "DTRY": { + "_default": "2020-01-01" + }, + "APTJPY": { + "_default": "2020-01-01" + }, + "SUIJPY": { + "_default": "2020-01-01" + }, + "XLMJPY": { + "_default": "2020-01-01" + }, + "PEPEJPY": { + "_default": "2020-01-01" + }, + "PHAUSDC": { + "_default": "2020-01-01" + }, + "USDCPLN": { + "_default": "2020-01-01" + }, + "STEEMUSDC": { + "_default": "2020-01-01" + }, + "USUALUSDC": { + "_default": "2020-01-01" + }, + "AIXBTUSDT": { + "_default": "2020-01-01" + }, + "AIXBTUSDC": { + "_default": "2020-01-01" + }, + "CGPTUSDT": { + "_default": "2020-01-01" + }, + "CGPTUSDC": { + "_default": "2020-01-01" + }, + "COOKIEUSDT": { + "_default": "2020-01-01" + }, + "COOKIEUSDC": { + "_default": "2020-01-01" + }, + "SBTC": { + "_default": "2020-01-01" + }, + "SBNB": { + "_default": "2020-01-01" + }, + "SETH": { + "_default": "2020-01-01" + }, + "SEUR": { + "_default": "2020-01-01" + }, + "SFDUSD": { + "_default": "2020-01-01" + }, + "STRY": { + "_default": "2020-01-01" + }, + "SUSDC": { + "_default": "2020-01-01" + }, + "SUSDT": { + "_default": "2020-01-01" + }, + "IOTXJPY": { + "_default": "2020-01-01" + }, + "SEIJPY": { + "_default": "2020-01-01" + }, + "SOLVUSDT": { + "_default": "2020-01-01" + }, + "SOLVBNB": { + "_default": "2020-01-01" + }, + "SOLVFDUSD": { + "_default": "2020-01-01" + }, + "SOLVTRY": { + "_default": "2020-01-01" + }, + "TRUMPUSDT": { + "_default": "2020-01-01" + }, + "TRUMPUSDC": { + "_default": "2020-01-01" + }, + "AIXBTTRY": { + "_default": "2020-01-01" + }, + "TRUMPTRY": { + "_default": "2020-01-01" + }, + "ANIMEUSDT": { + "_default": "2020-01-01" + }, + "ANIMEUSDC": { + "_default": "2020-01-01" + }, + "ANIMEBNB": { + "_default": "2020-01-01" + }, + "ANIMEFDUSD": { + "_default": "2020-01-01" + }, + "ANIMETRY": { + "_default": "2020-01-01" + }, + "BERABTC": { + "_default": "2020-01-01" + }, + "BERAUSDT": { + "_default": "2020-01-01" + }, + "BERAUSDC": { + "_default": "2020-01-01" + }, + "BERAFDUSD": { + "_default": "2020-01-01" + }, + "BERABNB": { + "_default": "2020-01-01" + }, + "BERATRY": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDT": { + "_default": "2020-01-01" + }, + "1000CHEEMSUSDC": { + "_default": "2020-01-01" + }, + "TSTUSDT": { + "_default": "2020-01-01" + }, + "TSTUSDC": { + "_default": "2020-01-01" + }, + "LAYERBTC": { + "_default": "2020-01-01" + }, + "LAYERUSDT": { + "_default": "2020-01-01" + }, + "LAYERUSDC": { + "_default": "2020-01-01" + }, + "LAYERBNB": { + "_default": "2020-01-01" + }, + "LAYERFDUSD": { + "_default": "2020-01-01" + }, + "LAYERTRY": { + "_default": "2020-01-01" + }, + "QTUMTRY": { + "_default": "2020-01-01" + }, + "TRUMPEUR": { + "_default": "2020-01-01" + }, + "VTHOTRY": { + "_default": "2020-01-01" + }, + "HEIBTC": { + "_default": "2020-01-01" + }, + "HEIUSDT": { + "_default": "2020-01-01" + }, + "CAKEUSDC": { + "_default": "2020-01-01" + }, + "HEIUSDC": { + "_default": "2020-01-01" + }, + "TRUMPFDUSD": { + "_default": "2020-01-01" + }, + "TSTFDUSD": { + "_default": "2020-01-01" + }, + "BNXUSDC": { + "_default": "2020-01-01" + }, + "LTCJPY": { + "_default": "2020-01-01" + }, + "BCHJPY": { + "_default": "2020-01-01" + }, + "LINKJPY": { + "_default": "2020-01-01" + }, + "KAITOBTC": { + "_default": "2020-01-01" + }, + "KAITOUSDT": { + "_default": "2020-01-01" + }, + "KAITOUSDC": { + "_default": "2020-01-01" + }, + "KAITOBNB": { + "_default": "2020-01-01" + }, + "KAITOFDUSD": { + "_default": "2020-01-01" + }, + "KAITOTRY": { + "_default": "2020-01-01" + }, + "ETHMXN": { + "_default": "2020-01-01" + }, + "KAITOBRL": { + "_default": "2020-01-01" + }, + "SOLMXN": { + "_default": "2020-01-01" + }, + "BNBARS": { + "_default": "2020-01-01" + }, + "SOLARS": { + "_default": "2020-01-01" + }, + "TRUMPBRL": { + "_default": "2020-01-01" + }, + "TRXFDUSD": { + "_default": "2020-01-01" + }, + "TSTTRY": { + "_default": "2020-01-01" + }, + "SHELLBTC": { + "_default": "2020-01-01" + }, + "SHELLUSDT": { + "_default": "2020-01-01" + }, + "SHELLUSDC": { + "_default": "2020-01-01" + }, + "SHELLBNB": { + "_default": "2020-01-01" + }, + "SHELLFDUSD": { + "_default": "2020-01-01" + }, + "SHELLTRY": { + "_default": "2020-01-01" + }, + "REDUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDT": { + "_default": "2020-01-01" + }, + "GPSUSDC": { + "_default": "2020-01-01" + }, + "GPSFDUSD": { + "_default": "2020-01-01" + }, + "GPSTRY": { + "_default": "2020-01-01" + }, + "GPSBNB": { + "_default": "2020-01-01" + }, + "REDBTC": { + "_default": "2020-01-01" + }, + "REDUSDC": { + "_default": "2020-01-01" + }, + "REDFDUSD": { + "_default": "2020-01-01" + }, + "REDTRY": { + "_default": "2020-01-01" + }, + "CHESSUSDC": { + "_default": "2020-01-01" + }, + "EGLDUSDC": { + "_default": "2020-01-01" + }, + "OSMOUSDC": { + "_default": "2020-01-01" + }, + "UTKUSDC": { + "_default": "2020-01-01" + }, + "TUSDC": { + "_default": "2020-01-01" + }, + "CVCUSDC": { + "_default": "2020-01-01" + }, + "EURIUSDC": { + "_default": "2020-01-01" + }, + "SYNUSDC": { + "_default": "2020-01-01" + }, + "USDCRON": { + "_default": "2020-01-01" + }, + "VELODROMEUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDT": { + "_default": "2020-01-01" + }, + "DFUSDC": { + "_default": "2020-01-01" + }, + "EPICUSDC": { + "_default": "2020-01-01" + }, + "GMXUSDC": { + "_default": "2020-01-01" + }, + "MKRUSDC": { + "_default": "2020-01-01" + }, + "RPLUSDC": { + "_default": "2020-01-01" + }, + "BMTUSDT": { + "_default": "2020-01-01" + }, + "BMTUSDC": { + "_default": "2020-01-01" + }, + "BMTBNB": { + "_default": "2020-01-01" + }, + "BMTFDUSD": { + "_default": "2020-01-01" + }, + "BMTTRY": { + "_default": "2020-01-01" + }, + "FORMUSDC": { + "_default": "2020-01-01" + }, + "FORMUSDT": { + "_default": "2020-01-01" + }, + "FORMTRY": { + "_default": "2020-01-01" + }, + "XUSDUSDT": { + "_default": "2020-01-01" + }, + "IOTAUSDC": { + "_default": "2020-01-01" + }, + "JUVUSDC": { + "_default": "2020-01-01" + }, + "THEUSDC": { + "_default": "2020-01-01" + }, + "VANRYUSDC": { + "_default": "2020-01-01" + }, + "USDCCZK": { + "_default": "2020-01-01" + }, + "NILUSDT": { + "_default": "2020-01-01" + }, + "NILBNB": { + "_default": "2020-01-01" + }, + "NILFDUSD": { + "_default": "2020-01-01" + }, + "NILUSDC": { + "_default": "2020-01-01" + }, + "NILTRY": { + "_default": "2020-01-01" + }, + "BEAMXUSDC": { + "_default": "2020-01-01" + }, + "VANAUSDC": { + "_default": "2020-01-01" + }, + "PARTIFDUSD": { + "_default": "2020-01-01" + }, + "PARTITRY": { + "_default": "2020-01-01" + }, + "PARTIUSDT": { + "_default": "2020-01-01" + }, + "PARTIUSDC": { + "_default": "2020-01-01" + }, + "PARTIBNB": { + "_default": "2020-01-01" + }, + "MUBARAKUSDT": { + "_default": "2020-01-01" + }, + "MUBARAKUSDC": { + "_default": "2020-01-01" + }, + "TUTUSDT": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDT": { + "_default": "2020-01-01" + }, + "TUTUSDC": { + "_default": "2020-01-01" + }, + "BANANAS31USDT": { + "_default": "2020-01-01" + }, + "BANANAS31USDC": { + "_default": "2020-01-01" + }, + "BROCCOLI714USDC": { + "_default": "2020-01-01" + }, + "GUNUSDT": { + "_default": "2020-01-01" + }, + "GUNBNB": { + "_default": "2020-01-01" + }, + "GUNFDUSD": { + "_default": "2020-01-01" + }, + "GUNTRY": { + "_default": "2020-01-01" + }, + "THETAUSDC": { + "_default": "2020-01-01" + }, + "API3USDC": { + "_default": "2020-01-01" + }, + "AUCTIONTRY": { + "_default": "2020-01-01" + }, + "AUCTIONUSDC": { + "_default": "2020-01-01" + }, + "BANANAUSDC": { + "_default": "2020-01-01" + }, + "GUNUSDC": { + "_default": "2020-01-01" + }, + "QNTUSDC": { + "_default": "2020-01-01" + }, + "VETUSDC": { + "_default": "2020-01-01" + }, + "ZENUSDC": { + "_default": "2020-01-01" + }, + "BABYUSDT": { + "_default": "2020-01-01" + }, + "BABYUSDC": { + "_default": "2020-01-01" + }, + "BABYBNB": { + "_default": "2020-01-01" + }, + "BABYFDUSD": { + "_default": "2020-01-01" + }, + "BABYTRY": { + "_default": "2020-01-01" + }, + "ONDOUSDT": { + "_default": "2020-01-01" + }, + "ONDOUSDC": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDT": { + "_default": "2020-01-01" + }, + "BIGTIMEUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALUSDT": { + "_default": "2020-01-01" + }, + "VIRTUALUSDC": { + "_default": "2020-01-01" + }, + "KERNELBNB": { + "_default": "2020-01-01" + }, + "KERNELFDUSD": { + "_default": "2020-01-01" + }, + "KERNELTRY": { + "_default": "2020-01-01" + }, + "KERNELUSDC": { + "_default": "2020-01-01" + }, + "KERNELUSDT": { + "_default": "2020-01-01" + }, + "WCTTRY": { + "_default": "2020-01-01" + }, + "WCTFDUSD": { + "_default": "2020-01-01" + }, + "WCTBNB": { + "_default": "2020-01-01" + }, + "WCTUSDC": { + "_default": "2020-01-01" + }, + "WCTUSDT": { + "_default": "2020-01-01" + }, + "PAXGUSDC": { + "_default": "2020-01-01" + }, + "ONDOTRY": { + "_default": "2020-01-01" + }, + "BABYEUR": { + "_default": "2020-01-01" + }, + "ACHUSDC": { + "_default": "2020-01-01" + }, + "GMTUSDC": { + "_default": "2020-01-01" + }, + "HYPERUSDT": { + "_default": "2020-01-01" + }, + "HYPERUSDC": { + "_default": "2020-01-01" + }, + "HYPERBNB": { + "_default": "2020-01-01" + }, + "HYPERFDUSD": { + "_default": "2020-01-01" + }, + "HYPERTRY": { + "_default": "2020-01-01" + }, + "INITUSDT": { + "_default": "2020-01-01" + }, + "INITUSDC": { + "_default": "2020-01-01" + }, + "INITBNB": { + "_default": "2020-01-01" + }, + "INITFDUSD": { + "_default": "2020-01-01" + }, + "INITTRY": { + "_default": "2020-01-01" + }, + "SIGNUSDT": { + "_default": "2020-01-01" + }, + "SIGNUSDC": { + "_default": "2020-01-01" + }, + "SIGNBNB": { + "_default": "2020-01-01" + }, + "SIGNFDUSD": { + "_default": "2020-01-01" + }, + "SIGNTRY": { + "_default": "2020-01-01" + }, + "STOUSDT": { + "_default": "2020-01-01" + }, + "STOUSDC": { + "_default": "2020-01-01" + }, + "STOBNB": { + "_default": "2020-01-01" + }, + "STOFDUSD": { + "_default": "2020-01-01" + }, + "STOTRY": { + "_default": "2020-01-01" + }, + "ENJUSDC": { + "_default": "2020-01-01" + }, + "VIRTUALTRY": { + "_default": "2020-01-01" + }, + "SYRUPUSDT": { + "_default": "2020-01-01" + }, + "SYRUPUSDC": { + "_default": "2020-01-01" + }, + "KMNOUSDT": { + "_default": "2020-01-01" + }, + "KMNOUSDC": { + "_default": "2020-01-01" + }, + "SXTUSDT": { + "_default": "2020-01-01" + }, + "SXTUSDC": { + "_default": "2020-01-01" + }, + "SXTBNB": { + "_default": "2020-01-01" + }, + "SXTFDUSD": { + "_default": "2020-01-01" + }, + "SXTTRY": { + "_default": "2020-01-01" + }, + "PUNDIXUSDC": { + "_default": "2020-01-01" + }, + "SYRUPTRY": { + "_default": "2020-01-01" + }, + "NXPCUSDT": { + "_default": "2020-01-01" + }, + "NXPCUSDC": { + "_default": "2020-01-01" + }, + "NXPCBNB": { + "_default": "2020-01-01" + }, + "NXPCFDUSD": { + "_default": "2020-01-01" + }, + "NXPCTRY": { + "_default": "2020-01-01" + }, + "AWEBTC": { + "_default": "2020-01-01" + }, + "AWEUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDT": { + "_default": "2020-01-01" + }, + "HAEDALUSDC": { + "_default": "2020-01-01" + }, + "HAEDALBNB": { + "_default": "2020-01-01" + }, + "HAEDALFDUSD": { + "_default": "2020-01-01" + }, + "HAEDALTRY": { + "_default": "2020-01-01" + }, + "USD1USDT": { + "_default": "2020-01-01" + }, + "HUMAUSDT": { + "_default": "2020-01-01" + }, + "HUMAUSDC": { + "_default": "2020-01-01" + }, + "HUMABNB": { + "_default": "2020-01-01" + }, + "HUMAFDUSD": { + "_default": "2020-01-01" + }, + "HUMATRY": { + "_default": "2020-01-01" + }, + "ABTC": { + "_default": "2020-01-01" + }, + "AETH": { + "_default": "2020-01-01" + }, + "AFDUSD": { + "_default": "2020-01-01" + }, + "ATRY": { + "_default": "2020-01-01" + }, + "AUSDC": { + "_default": "2020-01-01" + }, + "AUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDT": { + "_default": "2020-01-01" + }, + "SOPHUSDC": { + "_default": "2020-01-01" + }, + "SOPHBNB": { + "_default": "2020-01-01" + }, + "SOPHFDUSD": { + "_default": "2020-01-01" + }, + "SOPHTRY": { + "_default": "2020-01-01" + }, + "MUBARAKTRY": { + "_default": "2020-01-01" + }, + "TRXJPY": { + "_default": "2020-01-01" + }, + "DAIJPY": { + "_default": "2020-01-01" + }, + "RESOLVUSDT": { + "_default": "2020-01-01" + }, + "RESOLVUSDC": { + "_default": "2020-01-01" + }, + "RESOLVBNB": { + "_default": "2020-01-01" + }, + "RESOLVFDUSD": { + "_default": "2020-01-01" + }, + "RESOLVTRY": { + "_default": "2020-01-01" + }, + "HOMEUSDT": { + "_default": "2020-01-01" + }, + "HOMEUSDC": { + "_default": "2020-01-01" + }, + "HOMEBNB": { + "_default": "2020-01-01" + }, + "HOMEFDUSD": { + "_default": "2020-01-01" + }, + "HOMETRY": { + "_default": "2020-01-01" + }, + "FLUXUSDC": { + "_default": "2020-01-01" + }, + "MASKUSDC": { + "_default": "2020-01-01" + }, + "SUSHIUSDC": { + "_default": "2020-01-01" + }, + "SPKUSDT": { + "_default": "2020-01-01" + }, + "SPKUSDC": { + "_default": "2020-01-01" + }, + "SPKBNB": { + "_default": "2020-01-01" + }, + "SPKFDUSD": { + "_default": "2020-01-01" + }, + "SPKTRY": { + "_default": "2020-01-01" + }, + "NEWTUSDT": { + "_default": "2020-01-01" + }, + "NEWTUSDC": { + "_default": "2020-01-01" + }, + "NEWTBNB": { + "_default": "2020-01-01" + }, + "NEWTFDUSD": { + "_default": "2020-01-01" + }, + "NEWTTRY": { + "_default": "2020-01-01" + }, + "NEIROJPY": { + "_default": "2020-01-01" + }, + "SAHARAUSDT": { + "_default": "2020-01-01" + }, + "SAHARAUSDC": { + "_default": "2020-01-01" + }, + "SAHARABNB": { + "_default": "2020-01-01" + }, + "SAHARAFDUSD": { + "_default": "2020-01-01" + }, + "SAHARATRY": { + "_default": "2020-01-01" + }, + "LPTUSDC": { + "_default": "2020-01-01" + }, + "RVNUSDC": { + "_default": "2020-01-01" + }, + "LAUSDT": { + "_default": "2020-01-01" + }, + "LAUSDC": { + "_default": "2020-01-01" + }, + "LABNB": { + "_default": "2020-01-01" + }, + "LAFDUSD": { + "_default": "2020-01-01" + }, + "LATRY": { + "_default": "2020-01-01" + }, + "LPTJPY": { + "_default": "2020-01-01" + }, + "XAIUSDC": { + "_default": "2020-01-01" + }, + "AXSUSDC": { + "_default": "2020-01-01" + }, + "COMPUSDC": { + "_default": "2020-01-01" + }, + "ERAUSDT": { + "_default": "2020-01-01" + }, + "ERAUSDC": { + "_default": "2020-01-01" + }, + "ERABNB": { + "_default": "2020-01-01" + }, + "ERAFDUSD": { + "_default": "2020-01-01" + }, + "ERATRY": { + "_default": "2020-01-01" + }, + "CUSDT": { + "_default": "2020-01-01" + }, + "CUSDC": { + "_default": "2020-01-01" + }, + "CBNB": { + "_default": "2020-01-01" + }, + "CFDUSD": { + "_default": "2020-01-01" + }, + "CTRY": { + "_default": "2020-01-01" + }, + "GRTUSDC": { + "_default": "2020-01-01" + }, + "ROSEUSDC": { + "_default": "2020-01-01" + }, + "CVXUSDC": { + "_default": "2020-01-01" + }, + "FUNUSDC": { + "_default": "2020-01-01" + }, + "LISTAUSDC": { + "_default": "2020-01-01" + }, + "TREEUSDT": { + "_default": "2020-01-01" + }, + "TREEUSDC": { + "_default": "2020-01-01" + }, + "TREEBNB": { + "_default": "2020-01-01" + }, + "TREEFDUSD": { + "_default": "2020-01-01" + }, + "TREETRY": { + "_default": "2020-01-01" + }, + "A2ZUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDT": { + "_default": "2020-01-01" + }, + "TOWNSUSDC": { + "_default": "2020-01-01" + }, + "TOWNSBNB": { + "_default": "2020-01-01" + }, + "TOWNSFDUSD": { + "_default": "2020-01-01" + }, + "TOWNSTRY": { + "_default": "2020-01-01" + }, + "PROVEUSDT": { + "_default": "2020-01-01" + }, + "PROVEUSDC": { + "_default": "2020-01-01" + }, + "PROVEBNB": { + "_default": "2020-01-01" + }, + "PROVEFDUSD": { + "_default": "2020-01-01" + }, + "PROVETRY": { + "_default": "2020-01-01" + }, + "ILVUSDC": { + "_default": "2020-01-01" + }, + "MAGICUSDC": { + "_default": "2020-01-01" + }, + "USDCBRL": { + "_default": "2020-01-01" + }, + "BFUSDUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDT": { + "_default": "2020-01-01" + }, + "PLUMEUSDC": { + "_default": "2020-01-01" + }, + "PLUMEBNB": { + "_default": "2020-01-01" + }, + "PLUMEFDUSD": { + "_default": "2020-01-01" + }, + "PLUMETRY": { + "_default": "2020-01-01" + }, + "CYBERUSDC": { + "_default": "2020-01-01" + }, + "MAVUSDC": { + "_default": "2020-01-01" + }, + "SKLUSDC": { + "_default": "2020-01-01" + }, + "A2ZUSDC": { + "_default": "2020-01-01" + }, + "SSVUSDC": { + "_default": "2020-01-01" + }, + "UMAUSDC": { + "_default": "2020-01-01" + }, + "DOLOUSDT": { + "_default": "2020-01-01" + }, + "DOLOUSDC": { + "_default": "2020-01-01" + }, + "DOLOBNB": { + "_default": "2020-01-01" + }, + "DOLOFDUSD": { + "_default": "2020-01-01" + }, + "DOLOTRY": { + "_default": "2020-01-01" + }, + "MITOUSDT": { + "_default": "2020-01-01" + }, + "MITOUSDC": { + "_default": "2020-01-01" + }, + "MITOBNB": { + "_default": "2020-01-01" + }, + "MITOFDUSD": { + "_default": "2020-01-01" + }, + "MITOTRY": { + "_default": "2020-01-01" + }, + "WLFIUSDT": { + "_default": "2020-01-01" + }, + "WLFIUSDC": { + "_default": "2020-01-01" + }, + "WLFITRY": { + "_default": "2020-01-01" + }, + "BFUSDUSDC": { + "_default": "2020-01-01" + }, + "NMRUSDC": { + "_default": "2020-01-01" + }, + "QTUMUSDC": { + "_default": "2020-01-01" + }, + "SOMIUSDT": { + "_default": "2020-01-01" + }, + "SOMIUSDC": { + "_default": "2020-01-01" + }, + "SOMIBNB": { + "_default": "2020-01-01" + }, + "SOMIFDUSD": { + "_default": "2020-01-01" + }, + "SOMITRY": { + "_default": "2020-01-01" + }, + "WLFIBRL": { + "_default": "2020-01-01" + }, + "WLFIEUR": { + "_default": "2020-01-01" + }, + "OPENUSDT": { + "_default": "2020-01-01" + }, + "OPENUSDC": { + "_default": "2020-01-01" + }, + "OPENBNB": { + "_default": "2020-01-01" + }, + "OPENFDUSD": { + "_default": "2020-01-01" + }, + "OPENTRY": { + "_default": "2020-01-01" + }, + "USDEUSDC": { + "_default": "2020-01-01" + }, + "USDEUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDT": { + "_default": "2020-01-01" + }, + "LINEAUSDC": { + "_default": "2020-01-01" + }, + "LINEABNB": { + "_default": "2020-01-01" + }, + "LINEAFDUSD": { + "_default": "2020-01-01" + }, + "LINEATRY": { + "_default": "2020-01-01" + }, + "HOLOUSDT": { + "_default": "2020-01-01" + }, + "HOLOUSDC": { + "_default": "2020-01-01" + }, + "HOLOBNB": { + "_default": "2020-01-01" + }, + "HOLOFDUSD": { + "_default": "2020-01-01" + }, + "HOLOTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDT": { + "_default": "2020-01-01" + }, + "PUMPTRY": { + "_default": "2020-01-01" + }, + "PUMPUSDC": { + "_default": "2020-01-01" + }, + "AVNTUSDT": { + "_default": "2020-01-01" + }, + "AVNTUSDC": { + "_default": "2020-01-01" + }, + "AVNTTRY": { + "_default": "2020-01-01" + }, + "ZKCUSDT": { + "_default": "2020-01-01" + }, + "ZKCUSDC": { + "_default": "2020-01-01" + }, + "ZKCFDUSD": { + "_default": "2020-01-01" + }, + "ZKCBNB": { + "_default": "2020-01-01" + }, + "ZKCTRY": { + "_default": "2020-01-01" + }, + "SKYBTC": { + "_default": "2020-01-01" + }, + "SKYTRY": { + "_default": "2020-01-01" + }, + "SKYUSDC": { + "_default": "2020-01-01" + }, + "SKYUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDT": { + "_default": "2020-01-01" + }, + "BARDUSDC": { + "_default": "2020-01-01" + }, + "BARDFDUSD": { + "_default": "2020-01-01" + }, + "BARDTRY": { + "_default": "2020-01-01" + }, + "BARDBNB": { + "_default": "2020-01-01" + }, + "0GUSDT": { + "_default": "2020-01-01" + }, + "0GUSDC": { + "_default": "2020-01-01" + }, + "0GBNB": { + "_default": "2020-01-01" + }, + "0GFDUSD": { + "_default": "2020-01-01" + }, + "0GTRY": { + "_default": "2020-01-01" + }, + "IMXUSDC": { + "_default": "2020-01-01" + }, + "NMRTRY": { + "_default": "2020-01-01" + }, + "TWTUSDC": { + "_default": "2020-01-01" + }, + "HEMIBNB": { + "_default": "2020-01-01" + }, + "HEMITRY": { + "_default": "2020-01-01" + }, + "HEMIUSDT": { + "_default": "2020-01-01" + }, + "HEMIUSDC": { + "_default": "2020-01-01" + }, + "HEMIFDUSD": { + "_default": "2020-01-01" + }, + "XPLUSDT": { + "_default": "2020-01-01" + }, + "XPLUSDC": { + "_default": "2020-01-01" + }, + "XPLBNB": { + "_default": "2020-01-01" + }, + "XPLFDUSD": { + "_default": "2020-01-01" + }, + "XPLTRY": { + "_default": "2020-01-01" + }, + "MIRAUSDT": { + "_default": "2020-01-01" + }, + "MIRAUSDC": { + "_default": "2020-01-01" + }, + "MIRABNB": { + "_default": "2020-01-01" + }, + "MIRAFDUSD": { + "_default": "2020-01-01" + }, + "MIRATRY": { + "_default": "2020-01-01" + }, + "FFUSDT": { + "_default": "2020-01-01" + }, + "FFUSDC": { + "_default": "2020-01-01" + }, + "FFBNB": { + "_default": "2020-01-01" + }, + "FFFDUSD": { + "_default": "2020-01-01" + }, + "FFTRY": { + "_default": "2020-01-01" + }, + "AEVOUSDC": { + "_default": "2020-01-01" + }, + "MEUSDC": { + "_default": "2020-01-01" + }, + "SNXUSDC": { + "_default": "2020-01-01" + }, + "EDENUSDT": { + "_default": "2020-01-01" + }, + "EDENUSDC": { + "_default": "2020-01-01" + }, + "EDENBNB": { + "_default": "2020-01-01" + }, + "EDENFDUSD": { + "_default": "2020-01-01" + }, + "EDENTRY": { + "_default": "2020-01-01" + }, + "NOMFDUSD": { + "_default": "2020-01-01" + }, + "NOMTRY": { + "_default": "2020-01-01" + }, + "NOMUSDC": { + "_default": "2020-01-01" + }, + "NOMUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDT": { + "_default": "2020-01-01" + }, + "2ZUSDC": { + "_default": "2020-01-01" + }, + "2ZBNB": { + "_default": "2020-01-01" + }, + "2ZFDUSD": { + "_default": "2020-01-01" + }, + "2ZTRY": { + "_default": "2020-01-01" + }, + "TRUMPJPY": { + "_default": "2020-01-01" + }, + "MORPHOUSDT": { + "_default": "2020-01-01" + }, + "MORPHOUSDC": { + "_default": "2020-01-01" + }, + "MORPHOBNB": { + "_default": "2020-01-01" + }, + "MORPHOFDUSD": { + "_default": "2020-01-01" + }, + "MORPHOTRY": { + "_default": "2020-01-01" + }, + "ASTERUSDT": { + "_default": "2020-01-01" + }, + "ASTERUSDC": { + "_default": "2020-01-01" + }, + "ASTERTRY": { + "_default": "2020-01-01" + }, + "WALUSDT": { + "_default": "2020-01-01" + }, + "WALUSDC": { + "_default": "2020-01-01" + }, + "WALBNB": { + "_default": "2020-01-01" + }, + "WALFDUSD": { + "_default": "2020-01-01" + }, + "WALTRY": { + "_default": "2020-01-01" + }, + "EULUSDT": { + "_default": "2020-01-01" + }, + "EULUSDC": { + "_default": "2020-01-01" + }, + "EULFDUSD": { + "_default": "2020-01-01" + }, + "EULBNB": { + "_default": "2020-01-01" + }, + "EULTRY": { + "_default": "2020-01-01" + }, + "ENSOUSDT": { + "_default": "2020-01-01" + }, + "ENSOUSDC": { + "_default": "2020-01-01" + }, + "ENSOFDUSD": { + "_default": "2020-01-01" + }, + "ENSOBNB": { + "_default": "2020-01-01" + }, + "ENSOTRY": { + "_default": "2020-01-01" + }, + "YBUSDT": { + "_default": "2020-01-01" + }, + "YBUSDC": { + "_default": "2020-01-01" + }, + "YBBNB": { + "_default": "2020-01-01" + }, + "YBFDUSD": { + "_default": "2020-01-01" + }, + "YBTRY": { + "_default": "2020-01-01" + }, + "ZBTUSDT": { + "_default": "2020-01-01" + }, + "ZBTUSDC": { + "_default": "2020-01-01" + }, + "ZBTBNB": { + "_default": "2020-01-01" + }, + "ZBTFDUSD": { + "_default": "2020-01-01" + }, + "ZBTTRY": { + "_default": "2020-01-01" + }, + "TURTLEUSDT": { + "_default": "2020-01-01" + }, + "TURTLEUSDC": { + "_default": "2020-01-01" + }, + "TURTLEBNB": { + "_default": "2020-01-01" + }, + "TURTLEFDUSD": { + "_default": "2020-01-01" + }, + "TURTLETRY": { + "_default": "2020-01-01" + }, + "GIGGLEUSDT": { + "_default": "2020-01-01" + }, + "GIGGLEUSDC": { + "_default": "2020-01-01" + }, + "GIGGLETRY": { + "_default": "2020-01-01" + }, + "FUSDT": { + "_default": "2020-01-01" + }, + "FUSDC": { + "_default": "2020-01-01" + }, + "FTRY": { + "_default": "2020-01-01" + }, + "KITEUSDT": { + "_default": "2020-01-01" + }, + "KITEUSDC": { + "_default": "2020-01-01" + }, + "KITEBNB": { + "_default": "2020-01-01" + }, + "KITETRY": { + "_default": "2020-01-01" + }, + "MMTUSDT": { + "_default": "2020-01-01" + }, + "MMTUSDC": { + "_default": "2020-01-01" + }, + "MMTBNB": { + "_default": "2020-01-01" + }, + "MMTTRY": { + "_default": "2020-01-01" + }, + "DASHUSDC": { + "_default": "2020-01-01" + }, + "SAPIENUSDT": { + "_default": "2020-01-01" + }, + "SAPIENUSDC": { + "_default": "2020-01-01" + }, + "SAPIENBNB": { + "_default": "2020-01-01" + }, + "SAPIENTRY": { + "_default": "2020-01-01" + }, + "MINAUSDC": { + "_default": "2020-01-01" + }, + "XVGUSDC": { + "_default": "2020-01-01" + }, + "ALLOUSDT": { + "_default": "2020-01-01" + }, + "ALLOUSDC": { + "_default": "2020-01-01" + }, + "ALLOBNB": { + "_default": "2020-01-01" + }, + "ALLOTRY": { + "_default": "2020-01-01" + }, + "SOLVUSDC": { + "_default": "2020-01-01" + }, + "USD1USDC": { + "_default": "2020-01-01" + }, + "WLFIUSD1": { + "_default": "2020-01-01" + }, + "BANKUSDT": { + "_default": "2020-01-01" + }, + "BANKUSDC": { + "_default": "2020-01-01" + }, + "BANKTRY": { + "_default": "2020-01-01" + }, + "METUSDT": { + "_default": "2020-01-01" + }, + "METUSDC": { + "_default": "2020-01-01" + }, + "METTRY": { + "_default": "2020-01-01" + }, + "1INCHUSDC": { + "_default": "2020-01-01" + }, + "COTIUSDC": { + "_default": "2020-01-01" + }, + "LSKUSDC": { + "_default": "2020-01-01" + }, + "USDTUSD": { + "_default": "2020-01-01" + }, + "USDCUSD": { + "_default": "2020-01-01" + }, + "DODOTRY": { + "_default": "2020-01-01" + }, + "HEITRY": { + "_default": "2020-01-01" + }, + "MANTAIDR": { + "_default": "2020-01-01" + }, + "SCRIDR": { + "_default": "2020-01-01" + }, + "WLDIDR": { + "_default": "2020-01-01" + }, + "HBARIDR": { + "_default": "2020-01-01" + }, + "ATUSDT": { + "_default": "2020-01-01" + }, + "ATUSDC": { + "_default": "2020-01-01" + }, + "ATBNB": { + "_default": "2020-01-01" + }, + "ATTRY": { + "_default": "2020-01-01" + }, + "ASTERIDR": { + "_default": "2020-01-01" + }, + "AVAXIDR": { + "_default": "2020-01-01" + }, + "BOMEIDR": { + "_default": "2020-01-01" + }, + "DOGSIDR": { + "_default": "2020-01-01" + }, + "FLOKIIDR": { + "_default": "2020-01-01" + }, + "POLIDR": { + "_default": "2020-01-01" + }, + "RENDERIDR": { + "_default": "2020-01-01" + }, + "TAOIDR": { + "_default": "2020-01-01" + }, + "TIAIDR": { + "_default": "2020-01-01" + }, + "TONIDR": { + "_default": "2020-01-01" + }, + "VIRTUALIDR": { + "_default": "2020-01-01" + }, + "WIFIDR": { + "_default": "2020-01-01" + }, + "ZILIDR": { + "_default": "2020-01-01" + }, + "ARBIDR": { + "_default": "2020-01-01" + }, + "ADAIDR": { + "_default": "2020-01-01" + }, + "BNBIDR": { + "_default": "2020-01-01" + }, + "BTCIDR": { + "_default": "2020-01-01" + }, + "DOGEIDR": { + "_default": "2020-01-01" + }, + "ETHIDR": { + "_default": "2020-01-01" + }, + "NEIROIDR": { + "_default": "2020-01-01" + }, + "ONDOIDR": { + "_default": "2020-01-01" + }, + "SUIIDR": { + "_default": "2020-01-01" + }, + "TKOIDR": { + "_default": "2020-01-01" + }, + "XRPIDR": { + "_default": "2020-01-01" + }, + "USDTIDR": { + "_default": "2020-01-01" + }, + "USDCIDR": { + "_default": "2020-01-01" + }, + "SOLIDR": { + "_default": "2020-01-01" + }, + "BTCUSD": { + "_default": "2020-01-01" + }, + "BTCUSD1": { + "_default": "2020-01-01" + }, + "DYMUSDC": { + "_default": "2020-01-01" + }, + "BNBUSD1": { + "_default": "2020-01-01" + }, + "ETHUSD1": { + "_default": "2020-01-01" + }, + "SOLUSD1": { + "_default": "2020-01-01" + }, + "DASHTRY": { + "_default": "2020-01-01" + }, + "DOGEUSD1": { + "_default": "2020-01-01" + }, + "SUIUSD1": { + "_default": "2020-01-01" + }, + "XRPUSD1": { + "_default": "2020-01-01" + }, + "KGSTUSDT": { + "_default": "2020-01-01" + }, + "ADAUSD1": { + "_default": "2020-01-01" + }, + "ASTERUSD1": { + "_default": "2020-01-01" + }, + "LUNAUSDC": { + "_default": "2020-01-01" + }, + "LUNCUSDC": { + "_default": "2020-01-01" + }, + "ZECUSD1": { + "_default": "2020-01-01" + }, + "AVAXUSD1": { + "_default": "2020-01-01" + }, + "BCHUSD1": { + "_default": "2020-01-01" + }, + "UNIUSD1": { + "_default": "2020-01-01" + }, + "BREVUSDT": { + "_default": "2020-01-01" + }, + "BREVUSDC": { + "_default": "2020-01-01" + }, + "BREVBNB": { + "_default": "2020-01-01" + }, + "BREVTRY": { + "_default": "2020-01-01" + }, + "币安人生USDT": { + "_default": "2020-01-01" + }, + "币安人生USDC": { + "_default": "2020-01-01" + }, + "币安人生TRY": { + "_default": "2020-01-01" + }, + "ZKPUSDT": { + "_default": "2020-01-01" + }, + "ZKPUSDC": { + "_default": "2020-01-01" + }, + "ZKPTRY": { + "_default": "2020-01-01" + }, + "FETJPY": { + "_default": "2020-01-01" + }, + "TAOJPY": { + "_default": "2020-01-01" + }, + "LINKUSD1": { + "_default": "2020-01-01" + }, + "USDCMXN": { + "_default": "2020-01-01" + }, + "PEPEUSD1": { + "_default": "2020-01-01" + }, + "UUSDT": { + "_default": "2020-01-01" + }, + "UUSDC": { + "_default": "2020-01-01" + }, + "FRAXUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDT": { + "_default": "2020-01-01" + }, + "FOGOUSDC": { + "_default": "2020-01-01" + }, + "FOGOTRY": { + "_default": "2020-01-01" + }, + "BTCU": { + "_default": "2020-01-01" + }, + "LTCUSD1": { + "_default": "2020-01-01" + }, + "UTRY": { + "_default": "2020-01-01" + }, + "XRPRLUSD": { + "_default": "2020-01-01" + }, + "RLUSDUSDT": { + "_default": "2020-01-01" + }, + "RLUSDU": { + "_default": "2020-01-01" + }, + "SENTUSDT": { + "_default": "2020-01-01" + }, + "SENTUSDC": { + "_default": "2020-01-01" + }, + "SENTTRY": { + "_default": "2020-01-01" + }, + "BNBU": { + "_default": "2020-01-01" + }, + "KGSTU": { + "_default": "2020-01-01" + }, + "SOLU": { + "_default": "2020-01-01" + }, + "TRXUSD1": { + "_default": "2020-01-01" + }, + "USD1U": { + "_default": "2020-01-01" + }, + "ETHU": { + "_default": "2020-01-01" + } + } + }, + "um": { + "klines": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "trades": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "aggTrades": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "indexPriceKlines": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "markPriceKlines": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "premiumIndexKlines": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "fundingRate": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "bookTicker": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + }, + "depth": { + "BTCUSDT": { + "_default": "2019-09-25" + }, + "ETHUSDT": { + "_default": "2019-09-25" + }, + "BCHUSDT": { + "_default": "2019-09-25" + }, + "XRPUSDT": { + "_default": "2019-09-25" + }, + "LTCUSDT": { + "_default": "2019-09-25" + }, + "TRXUSDT": { + "_default": "2019-09-25" + }, + "ETCUSDT": { + "_default": "2019-09-25" + }, + "LINKUSDT": { + "_default": "2019-09-25" + }, + "XLMUSDT": { + "_default": "2019-09-25" + }, + "ADAUSDT": { + "_default": "2019-09-25" + }, + "XMRUSDT": { + "_default": "2019-09-25" + }, + "DASHUSDT": { + "_default": "2019-09-25" + }, + "ZECUSDT": { + "_default": "2019-09-25" + }, + "XTZUSDT": { + "_default": "2019-09-25" + }, + "BNBUSDT": { + "_default": "2019-09-25" + }, + "ATOMUSDT": { + "_default": "2019-09-25" + }, + "ONTUSDT": { + "_default": "2019-09-25" + }, + "IOTAUSDT": { + "_default": "2019-09-25" + }, + "BATUSDT": { + "_default": "2019-09-25" + }, + "VETUSDT": { + "_default": "2019-09-25" + }, + "NEOUSDT": { + "_default": "2019-09-25" + }, + "QTUMUSDT": { + "_default": "2019-09-25" + }, + "IOSTUSDT": { + "_default": "2019-09-25" + }, + "THETAUSDT": { + "_default": "2019-09-25" + }, + "ALGOUSDT": { + "_default": "2019-09-25" + }, + "ZILUSDT": { + "_default": "2019-09-25" + }, + "KNCUSDT": { + "_default": "2019-09-25" + }, + "ZRXUSDT": { + "_default": "2019-09-25" + }, + "COMPUSDT": { + "_default": "2019-09-25" + }, + "OMGUSDT": { + "_default": "2019-09-25" + }, + "DOGEUSDT": { + "_default": "2019-09-25" + }, + "SXPUSDT": { + "_default": "2019-09-25" + }, + "KAVAUSDT": { + "_default": "2019-09-25" + }, + "BANDUSDT": { + "_default": "2019-09-25" + }, + "RLCUSDT": { + "_default": "2019-09-25" + }, + "WAVESUSDT": { + "_default": "2019-09-25" + }, + "MKRUSDT": { + "_default": "2019-09-25" + }, + "SNXUSDT": { + "_default": "2019-09-25" + }, + "DOTUSDT": { + "_default": "2019-09-25" + }, + "DEFIUSDT": { + "_default": "2019-09-25" + }, + "YFIUSDT": { + "_default": "2019-09-25" + }, + "BALUSDT": { + "_default": "2019-09-25" + }, + "CRVUSDT": { + "_default": "2019-09-25" + }, + "TRBUSDT": { + "_default": "2019-09-25" + }, + "RUNEUSDT": { + "_default": "2019-09-25" + }, + "SUSHIUSDT": { + "_default": "2019-09-25" + }, + "EGLDUSDT": { + "_default": "2019-09-25" + }, + "SOLUSDT": { + "_default": "2019-09-25" + }, + "ICXUSDT": { + "_default": "2019-09-25" + }, + "STORJUSDT": { + "_default": "2019-09-25" + }, + "BLZUSDT": { + "_default": "2019-09-25" + }, + "UNIUSDT": { + "_default": "2019-09-25" + }, + "AVAXUSDT": { + "_default": "2019-09-25" + }, + "FTMUSDT": { + "_default": "2019-09-25" + }, + "ENJUSDT": { + "_default": "2019-09-25" + }, + "FLMUSDT": { + "_default": "2019-09-25" + }, + "RENUSDT": { + "_default": "2019-09-25" + }, + "KSMUSDT": { + "_default": "2019-09-25" + }, + "NEARUSDT": { + "_default": "2019-09-25" + }, + "AAVEUSDT": { + "_default": "2019-09-25" + }, + "FILUSDT": { + "_default": "2019-09-25" + }, + "RSRUSDT": { + "_default": "2019-09-25" + }, + "LRCUSDT": { + "_default": "2019-09-25" + }, + "OCEANUSDT": { + "_default": "2019-09-25" + }, + "BELUSDT": { + "_default": "2019-09-25" + }, + "AXSUSDT": { + "_default": "2019-09-25" + }, + "ALPHAUSDT": { + "_default": "2019-09-25" + }, + "ZENUSDT": { + "_default": "2019-09-25" + }, + "SKLUSDT": { + "_default": "2020-08-24" + }, + "GRTUSDT": { + "_default": "2020-12-18" + }, + "1INCHUSDT": { + "_default": "2020-12-25" + }, + "CHZUSDT": { + "_default": "2021-01-21" + }, + "SANDUSDT": { + "_default": "2021-01-18" + }, + "ANKRUSDT": { + "_default": "2021-01-25" + }, + "UNFIUSDT": { + "_default": "2021-02-09" + }, + "REEFUSDT": { + "_default": "2021-01-25" + }, + "RVNUSDT": { + "_default": "2021-02-23" + }, + "SFPUSDT": { + "_default": "2021-02-24" + }, + "XEMUSDT": { + "_default": "2021-03-02" + }, + "BTCSTUSDT": { + "_default": "2021-03-03" + }, + "COTIUSDT": { + "_default": "2021-03-09" + }, + "CHRUSDT": { + "_default": "2021-03-12" + }, + "MANAUSDT": { + "_default": "2021-03-14" + }, + "ALICEUSDT": { + "_default": "2021-03-15" + }, + "HBARUSDT": { + "_default": "2021-03-17" + }, + "ONEUSDT": { + "_default": "2021-03-17" + }, + "LINAUSDT": { + "_default": "2021-03-17" + }, + "STMXUSDT": { + "_default": "2021-03-17" + }, + "DENTUSDT": { + "_default": "2021-03-23" + }, + "CELRUSDT": { + "_default": "2021-03-29" + }, + "HOTUSDT": { + "_default": "2021-03-30" + }, + "MTLUSDT": { + "_default": "2021-03-31" + }, + "OGNUSDT": { + "_default": "2021-03-31" + }, + "NKNUSDT": { + "_default": "2021-04-08" + }, + "SCUSDT": { + "_default": "2021-04-12" + }, + "DGBUSDT": { + "_default": "2021-04-19" + }, + "1000SHIBUSDT": { + "_default": "2021-05-10" + }, + "BAKEUSDT": { + "_default": "2021-05-18" + }, + "GTCUSDT": { + "_default": "2021-03-15" + }, + "BTCDOMUSDT": { + "_default": "2021-06-17" + }, + "IOTXUSDT": { + "_default": "2021-08-11" + }, + "RAYUSDT": { + "_default": "2021-08-18" + }, + "C98USDT": { + "_default": "2021-08-23" + }, + "MASKUSDT": { + "_default": "2021-07-16" + }, + "ATAUSDT": { + "_default": "2021-08-30" + }, + "DYDXUSDT": { + "_default": "2021-09-09" + }, + "1000XECUSDT": { + "_default": "2021-09-16" + }, + "GALAUSDT": { + "_default": "2021-09-17" + }, + "CELOUSDT": { + "_default": "2021-09-26" + }, + "ARUSDT": { + "_default": "2021-09-28" + }, + "KLAYUSDT": { + "_default": "2021-10-11" + }, + "ARPAUSDT": { + "_default": "2021-10-18" + }, + "CTSIUSDT": { + "_default": "2021-10-25" + }, + "LPTUSDT": { + "_default": "2021-11-10" + }, + "ENSUSDT": { + "_default": "2021-11-29" + }, + "PEOPLEUSDT": { + "_default": "2021-12-23" + }, + "ROSEUSDT": { + "_default": "2021-12-31" + }, + "DUSKUSDT": { + "_default": "2022-01-06" + }, + "FLOWUSDT": { + "_default": "2022-02-09" + }, + "IMXUSDT": { + "_default": "2022-02-10" + }, + "API3USDT": { + "_default": "2022-02-21" + }, + "GMTUSDT": { + "_default": "2022-03-14" + }, + "APEUSDT": { + "_default": "2022-03-17" + }, + "WOOUSDT": { + "_default": "2022-04-07" + }, + "FTTUSDT": { + "_default": "2022-04-14" + }, + "JASMYUSDT": { + "_default": "2022-04-19" + }, + "DARUSDT": { + "_default": "2022-04-28" + }, + "OPUSDT": { + "_default": "2022-06-01" + }, + "INJUSDT": { + "_default": "2022-08-16" + }, + "STGUSDT": { + "_default": "2022-08-24" + }, + "SPELLUSDT": { + "_default": "2022-09-05" + }, + "1000LUNCUSDT": { + "_default": "2022-09-08" + }, + "LUNA2USDT": { + "_default": "2022-09-09" + }, + "LDOUSDT": { + "_default": "2022-09-21" + }, + "ICPUSDT": { + "_default": "2021-07-30" + }, + "APTUSDT": { + "_default": "2022-10-18" + }, + "QNTUSDT": { + "_default": "2022-10-18" + }, + "FETUSDT": { + "_default": "2023-01-15" + }, + "FXSUSDT": { + "_default": "2023-01-19" + }, + "HOOKUSDT": { + "_default": "2023-01-19" + }, + "MAGICUSDT": { + "_default": "2023-01-23" + }, + "TUSDT": { + "_default": "2023-01-31" + }, + "HIGHUSDT": { + "_default": "2023-02-03" + }, + "MINAUSDT": { + "_default": "2023-02-03" + }, + "ASTRUSDT": { + "_default": "2023-02-13" + }, + "AGIXUSDT": { + "_default": "2023-02-15" + }, + "PHBUSDT": { + "_default": "2023-02-15" + }, + "GMXUSDT": { + "_default": "2023-02-16" + }, + "CFXUSDT": { + "_default": "2023-02-19" + }, + "STXUSDT": { + "_default": "2023-02-20" + }, + "BNXUSDT": { + "_default": "2023-02-22" + }, + "ACHUSDT": { + "_default": "2023-02-21" + }, + "SSVUSDT": { + "_default": "2023-02-23" + }, + "CKBUSDT": { + "_default": "2023-02-27" + }, + "PERPUSDT": { + "_default": "2023-03-05" + }, + "TRUUSDT": { + "_default": "2023-03-06" + }, + "LQTYUSDT": { + "_default": "2023-03-08" + }, + "USDCUSDT": { + "_default": "2023-03-12" + }, + "IDUSDT": { + "_default": "2023-03-23" + }, + "ARBUSDT": { + "_default": "2023-03-23" + }, + "JOEUSDT": { + "_default": "2023-03-28" + }, + "TLMUSDT": { + "_default": "2023-03-29" + }, + "AMBUSDT": { + "_default": "2023-03-29" + }, + "LEVERUSDT": { + "_default": "2023-03-29" + }, + "RDNTUSDT": { + "_default": "2023-04-04" + }, + "HFTUSDT": { + "_default": "2023-04-05" + }, + "XVSUSDT": { + "_default": "2023-04-12" + }, + "ETHBTC": { + "_default": "2023-05-25" + }, + "BLURUSDT": { + "_default": "2023-04-27" + }, + "EDUUSDT": { + "_default": "2023-04-28" + }, + "IDEXUSDT": { + "_default": "2023-05-02" + }, + "SUIUSDT": { + "_default": "2023-05-03" + }, + "1000PEPEUSDT": { + "_default": "2023-05-05" + }, + "1000FLOKIUSDT": { + "_default": "2023-05-06" + }, + "UMAUSDT": { + "_default": "2023-05-09" + }, + "RADUSDT": { + "_default": "2023-05-09" + }, + "KEYUSDT": { + "_default": "2023-05-23" + }, + "COMBOUSDT": { + "_default": "2023-06-02" + }, + "NMRUSDT": { + "_default": "2023-06-22" + }, + "MAVUSDT": { + "_default": "2023-06-29" + }, + "MDTUSDT": { + "_default": "2023-06-30" + }, + "XVGUSDT": { + "_default": "2023-07-05" + }, + "WLDUSDT": { + "_default": "2023-07-24" + }, + "PENDLEUSDT": { + "_default": "2023-07-28" + }, + "ARKMUSDT": { + "_default": "2023-07-28" + }, + "AGLDUSDT": { + "_default": "2023-07-29" + }, + "YGGUSDT": { + "_default": "2023-08-05" + }, + "DODOXUSDT": { + "_default": "2023-08-08" + }, + "BNTUSDT": { + "_default": "2023-08-10" + }, + "OXTUSDT": { + "_default": "2023-08-11" + }, + "SEIUSDT": { + "_default": "2023-08-17" + }, + "CYBERUSDT": { + "_default": "2023-08-21" + }, + "HIFIUSDT": { + "_default": "2023-09-16" + }, + "ARKUSDT": { + "_default": "2023-09-19" + }, + "GLMRUSDT": { + "_default": "2023-09-26" + }, + "BICOUSDT": { + "_default": "2023-09-28" + }, + "STRAXUSDT": { + "_default": "2023-10-11" + }, + "LOOMUSDT": { + "_default": "2023-10-11" + }, + "BIGTIMEUSDT": { + "_default": "2023-10-12" + }, + "BONDUSDT": { + "_default": "2023-10-15" + }, + "ORBSUSDT": { + "_default": "2023-10-17" + }, + "STPTUSDT": { + "_default": "2023-10-18" + }, + "WAXPUSDT": { + "_default": "2023-10-18" + }, + "BSVUSDT": { + "_default": "2023-10-20" + }, + "RIFUSDT": { + "_default": "2023-10-21" + }, + "POLYXUSDT": { + "_default": "2023-10-25" + }, + "GASUSDT": { + "_default": "2023-10-25" + }, + "POWRUSDT": { + "_default": "2023-10-27" + }, + "TIAUSDT": { + "_default": "2023-11-01" + }, + "SNTUSDT": { + "_default": "2023-11-02" + }, + "CAKEUSDT": { + "_default": "2023-11-02" + }, + "MEMEUSDT": { + "_default": "2023-11-03" + }, + "TWTUSDT": { + "_default": "2023-11-03" + }, + "TOKENUSDT": { + "_default": "2023-11-03" + }, + "ORDIUSDT": { + "_default": "2023-11-07" + }, + "STEEMUSDT": { + "_default": "2023-11-08" + }, + "BADGERUSDT": { + "_default": "2023-11-09" + }, + "ILVUSDT": { + "_default": "2023-11-11" + }, + "NTRNUSDT": { + "_default": "2023-11-14" + }, + "KASUSDT": { + "_default": "2023-11-17" + }, + "BEAMXUSDT": { + "_default": "2023-11-17" + }, + "1000BONKUSDT": { + "_default": "2023-11-22" + }, + "PYTHUSDT": { + "_default": "2023-11-22" + }, + "SUPERUSDT": { + "_default": "2023-11-26" + }, + "USTCUSDT": { + "_default": "2023-11-27" + }, + "ONGUSDT": { + "_default": "2023-11-27" + }, + "ETHWUSDT": { + "_default": "2023-11-28" + }, + "JTOUSDT": { + "_default": "2023-12-08" + }, + "1000SATSUSDT": { + "_default": "2023-12-12" + }, + "AUCTIONUSDT": { + "_default": "2023-12-15" + }, + "1000RATSUSDT": { + "_default": "2023-12-15" + }, + "ACEUSDT": { + "_default": "2023-12-18" + }, + "MOVRUSDT": { + "_default": "2023-12-26" + }, + "NFPUSDT": { + "_default": "2023-12-27" + }, + "BTCUSDC": { + "_default": "2024-01-03" + }, + "ETHUSDC": { + "_default": "2024-01-03" + }, + "BNBUSDC": { + "_default": "2024-01-03" + }, + "SOLUSDC": { + "_default": "2024-01-03" + }, + "XRPUSDC": { + "_default": "2024-01-03" + }, + "AIUSDT": { + "_default": "2024-01-08" + }, + "XAIUSDT": { + "_default": "2024-01-09" + }, + "DOGEUSDC": { + "_default": "2024-01-18" + }, + "WIFUSDT": { + "_default": "2024-01-18" + }, + "MANTAUSDT": { + "_default": "2024-01-18" + }, + "ONDOUSDT": { + "_default": "2024-01-20" + }, + "LSKUSDT": { + "_default": "2024-01-25" + }, + "ALTUSDT": { + "_default": "2024-01-25" + }, + "JUPUSDT": { + "_default": "2024-02-01" + }, + "ZETAUSDT": { + "_default": "2024-02-02" + }, + "RONINUSDT": { + "_default": "2024-02-06" + }, + "DYMUSDT": { + "_default": "2024-02-07" + }, + "SUIUSDC": { + "_default": "2024-02-08" + }, + "OMUSDT": { + "_default": "2024-02-13" + }, + "LINKUSDC": { + "_default": "2024-02-16" + }, + "PIXELUSDT": { + "_default": "2024-02-19" + }, + "STRKUSDT": { + "_default": "2024-02-21" + }, + "ORDIUSDC": { + "_default": "2024-02-22" + }, + "GLMUSDT": { + "_default": "2024-02-22" + }, + "PORTALUSDT": { + "_default": "2024-02-29" + }, + "TONUSDT": { + "_default": "2024-03-01" + }, + "AXLUSDT": { + "_default": "2024-03-01" + }, + "MYROUSDT": { + "_default": "2024-03-05" + }, + "1000PEPEUSDC": { + "_default": "2024-03-07" + }, + "METISUSDT": { + "_default": "2024-03-12" + }, + "AEVOUSDT": { + "_default": "2024-03-13" + }, + "WLDUSDC": { + "_default": "2024-03-14" + }, + "VANRYUSDT": { + "_default": "2024-03-14" + }, + "BOMEUSDT": { + "_default": "2024-03-16" + }, + "ETHFIUSDT": { + "_default": "2024-03-18" + }, + "AVAXUSDC": { + "_default": "2024-03-20" + }, + "1000SHIBUSDC": { + "_default": "2024-03-28" + }, + "ENAUSDT": { + "_default": "2024-04-02" + }, + "WUSDT": { + "_default": "2024-04-03" + }, + "WIFUSDC": { + "_default": "2024-04-04" + }, + "BCHUSDC": { + "_default": "2024-04-04" + }, + "TNSRUSDT": { + "_default": "2024-04-09" + }, + "SAGAUSDT": { + "_default": "2024-04-09" + }, + "LTCUSDC": { + "_default": "2024-04-11" + }, + "NEARUSDC": { + "_default": "2024-04-11" + }, + "TAOUSDT": { + "_default": "2024-04-11" + }, + "OMNIUSDT": { + "_default": "2024-04-17" + }, + "ARBUSDC": { + "_default": "2024-04-18" + }, + "NEOUSDC": { + "_default": "2024-04-18" + }, + "FILUSDC": { + "_default": "2024-04-18" + }, + "TIAUSDC": { + "_default": "2024-04-25" + }, + "BOMEUSDC": { + "_default": "2024-04-25" + }, + "REZUSDT": { + "_default": "2024-04-30" + }, + "ENAUSDC": { + "_default": "2024-05-02" + }, + "ETHFIUSDC": { + "_default": "2024-05-02" + }, + "1000BONKUSDC": { + "_default": "2024-05-02" + }, + "BBUSDT": { + "_default": "2024-05-13" + }, + "NOTUSDT": { + "_default": "2024-05-16" + }, + "TURBOUSDT": { + "_default": "2024-05-30" + }, + "IOUSDT": { + "_default": "2024-06-11" + }, + "ZKUSDT": { + "_default": "2024-06-17" + }, + "MEWUSDT": { + "_default": "2024-06-17" + }, + "LISTAUSDT": { + "_default": "2024-06-20" + }, + "ZROUSDT": { + "_default": "2024-06-20" + }, + "CRVUSDC": { + "_default": "2024-07-04" + }, + "RENDERUSDT": { + "_default": "2024-07-26" + }, + "BANANAUSDT": { + "_default": "2024-08-15" + }, + "RAREUSDT": { + "_default": "2024-08-15" + }, + "GUSDT": { + "_default": "2024-08-15" + }, + "SYNUSDT": { + "_default": "2024-08-16" + }, + "SYSUSDT": { + "_default": "2024-08-19" + }, + "VOXELUSDT": { + "_default": "2024-08-20" + }, + "BRETTUSDT": { + "_default": "2024-08-20" + }, + "ALPACAUSDT": { + "_default": "2024-08-22" + }, + "POPCATUSDT": { + "_default": "2024-08-22" + }, + "SUNUSDT": { + "_default": "2024-08-22" + }, + "VIDTUSDT": { + "_default": "2024-08-23" + }, + "NULSUSDT": { + "_default": "2024-08-26" + }, + "DOGSUSDT": { + "_default": "2024-08-26" + }, + "MBOXUSDT": { + "_default": "2024-08-28" + }, + "CHESSUSDT": { + "_default": "2024-08-29" + }, + "FLUXUSDT": { + "_default": "2024-09-03" + }, + "BSWUSDT": { + "_default": "2024-09-05" + }, + "QUICKUSDT": { + "_default": "2024-09-06" + }, + "NEIROETHUSDT": { + "_default": "2024-09-06" + }, + "RPLUSDT": { + "_default": "2024-09-09" + }, + "POLUSDT": { + "_default": "2024-09-13" + }, + "UXLINKUSDT": { + "_default": "2024-09-15" + }, + "1MBABYDOGEUSDT": { + "_default": "2024-09-16" + }, + "NEIROUSDT": { + "_default": "2024-09-16" + }, + "KDAUSDT": { + "_default": "2024-09-18" + }, + "FIDAUSDT": { + "_default": "2024-09-19" + }, + "FIOUSDT": { + "_default": "2024-09-20" + }, + "CATIUSDT": { + "_default": "2024-09-20" + }, + "GHSTUSDT": { + "_default": "2024-09-23" + }, + "LOKAUSDT": { + "_default": "2024-09-24" + }, + "HMSTRUSDT": { + "_default": "2024-09-26" + }, + "REIUSDT": { + "_default": "2024-09-27" + }, + "COSUSDT": { + "_default": "2024-09-30" + }, + "EIGENUSDT": { + "_default": "2024-10-01" + }, + "DIAUSDT": { + "_default": "2024-10-02" + }, + "1000CATUSDT": { + "_default": "2024-10-21" + }, + "SCRUSDT": { + "_default": "2024-10-22" + }, + "GOATUSDT": { + "_default": "2024-10-24" + }, + "MOODENGUSDT": { + "_default": "2024-10-25" + }, + "SAFEUSDT": { + "_default": "2024-10-25" + }, + "SANTOSUSDT": { + "_default": "2024-10-28" + }, + "TROYUSDT": { + "_default": "2024-10-31" + }, + "PONKEUSDT": { + "_default": "2024-11-04" + }, + "COWUSDT": { + "_default": "2024-11-06" + }, + "CETUSUSDT": { + "_default": "2024-11-06" + }, + "1000000MOGUSDT": { + "_default": "2024-11-07" + }, + "GRASSUSDT": { + "_default": "2024-11-08" + }, + "DRIFTUSDT": { + "_default": "2024-11-09" + }, + "SWELLUSDT": { + "_default": "2024-11-09" + }, + "ACTUSDT": { + "_default": "2024-11-11" + }, + "PNUTUSDT": { + "_default": "2024-11-11" + }, + "HIPPOUSDT": { + "_default": "2024-11-13" + }, + "1000XUSDT": { + "_default": "2024-11-13" + }, + "DEGENUSDT": { + "_default": "2024-11-15" + }, + "BANUSDT": { + "_default": "2024-11-18" + }, + "AKTUSDT": { + "_default": "2024-11-18" + }, + "SLERFUSDT": { + "_default": "2024-11-21" + }, + "SCRTUSDT": { + "_default": "2024-11-21" + }, + "1000CHEEMSUSDT": { + "_default": "2024-11-25" + }, + "1000WHYUSDT": { + "_default": "2024-11-25" + }, + "THEUSDT": { + "_default": "2024-11-27" + }, + "MORPHOUSDT": { + "_default": "2024-11-27" + }, + "CHILLGUYUSDT": { + "_default": "2024-11-27" + }, + "KAIAUSDT": { + "_default": "2024-12-04" + }, + "AEROUSDT": { + "_default": "2024-12-04" + }, + "ACXUSDT": { + "_default": "2024-12-06" + }, + "ORCAUSDT": { + "_default": "2024-12-06" + }, + "MOVEUSDT": { + "_default": "2024-12-09" + }, + "RAYSOLUSDT": { + "_default": "2024-12-10" + }, + "KOMAUSDT": { + "_default": "2024-12-10" + }, + "VIRTUALUSDT": { + "_default": "2024-12-10" + }, + "SPXUSDT": { + "_default": "2024-12-10" + }, + "MEUSDT": { + "_default": "2024-12-11" + }, + "AVAUSDT": { + "_default": "2024-12-13" + }, + "DEGOUSDT": { + "_default": "2024-12-13" + }, + "VELODROMEUSDT": { + "_default": "2024-12-14" + }, + "MOCAUSDT": { + "_default": "2024-12-16" + }, + "VANAUSDT": { + "_default": "2024-12-16" + }, + "PENGUUSDT": { + "_default": "2024-12-18" + }, + "LUMIAUSDT": { + "_default": "2024-12-18" + }, + "USUALUSDT": { + "_default": "2024-12-18" + }, + "AIXBTUSDT": { + "_default": "2024-12-21" + }, + "FARTCOINUSDT": { + "_default": "2024-12-21" + }, + "KMNOUSDT": { + "_default": "2024-12-21" + }, + "CGPTUSDT": { + "_default": "2024-12-21" + }, + "HIVEUSDT": { + "_default": "2024-12-23" + }, + "DEXEUSDT": { + "_default": "2024-12-24" + }, + "PHAUSDT": { + "_default": "2024-12-30" + }, + "DFUSDT": { + "_default": "2024-12-30" + }, + "GRIFFAINUSDT": { + "_default": "2025-01-02" + }, + "AI16ZUSDT": { + "_default": "2025-01-02" + }, + "ZEREBROUSDT": { + "_default": "2025-01-02" + }, + "BIOUSDT": { + "_default": "2025-01-03" + }, + "COOKIEUSDT": { + "_default": "2025-01-07" + }, + "ALCHUSDT": { + "_default": "2025-01-07" + }, + "SWARMSUSDT": { + "_default": "2025-01-07" + }, + "SONICUSDT": { + "_default": "2025-01-08" + }, + "DUSDT": { + "_default": "2025-01-09" + }, + "PROMUSDT": { + "_default": "2025-01-15" + }, + "SUSDT": { + "_default": "2025-01-16" + }, + "SOLVUSDT": { + "_default": "2025-01-17" + }, + "ARCUSDT": { + "_default": "2025-01-17" + }, + "AVAAIUSDT": { + "_default": "2025-01-17" + }, + "TRUMPUSDT": { + "_default": "2025-01-18" + }, + "MELANIAUSDT": { + "_default": "2025-01-20" + }, + "VTHOUSDT": { + "_default": "2025-01-22" + }, + "ANIMEUSDT": { + "_default": "2025-01-24" + }, + "VINEUSDT": { + "_default": "2025-01-24" + }, + "PIPPINUSDT": { + "_default": "2025-01-24" + }, + "VVVUSDT": { + "_default": "2025-01-29" + }, + "BERAUSDT": { + "_default": "2025-02-06" + }, + "TSTUSDT": { + "_default": "2025-02-09" + }, + "LAYERUSDT": { + "_default": "2025-02-11" + }, + "HEIUSDT": { + "_default": "2025-02-13" + }, + "B3USDT": { + "_default": "2025-02-13" + }, + "IPUSDT": { + "_default": "2025-02-14" + }, + "GPSUSDT": { + "_default": "2025-02-18" + }, + "SHELLUSDT": { + "_default": "2025-02-18" + }, + "KAITOUSDT": { + "_default": "2025-02-20" + }, + "KAITOUSDC": { + "_default": "2025-03-05" + }, + "IPUSDC": { + "_default": "2025-03-05" + }, + "TRUMPUSDC": { + "_default": "2025-03-06" + }, + "ADAUSDC": { + "_default": "2025-03-06" + }, + "REDUSDT": { + "_default": "2025-03-07" + }, + "PNUTUSDC": { + "_default": "2025-03-07" + }, + "HBARUSDC": { + "_default": "2025-03-07" + }, + "VICUSDT": { + "_default": "2025-03-13" + }, + "EPICUSDT": { + "_default": "2025-03-13" + }, + "BMTUSDT": { + "_default": "2025-03-17" + }, + "MUBARAKUSDT": { + "_default": "2025-03-17" + }, + "FORMUSDT": { + "_default": "2025-03-19" + }, + "BIDUSDT": { + "_default": "2025-03-20" + }, + "TUTUSDT": { + "_default": "2025-03-20" + }, + "BROCCOLI714USDT": { + "_default": "2025-03-21" + }, + "BROCCOLIF3BUSDT": { + "_default": "2025-03-21" + }, + "SIRENUSDT": { + "_default": "2025-03-22" + }, + "BANANAS31USDT": { + "_default": "2025-03-22" + }, + "BRUSDT": { + "_default": "2025-03-21" + }, + "PLUMEUSDT": { + "_default": "2025-03-21" + }, + "NILUSDT": { + "_default": "2025-03-24" + }, + "PARTIUSDT": { + "_default": "2025-03-25" + }, + "JELLYJELLYUSDT": { + "_default": "2025-03-27" + }, + "MAVIAUSDT": { + "_default": "2025-03-27" + }, + "PAXGUSDT": { + "_default": "2025-03-27" + }, + "WALUSDT": { + "_default": "2025-03-27" + }, + "FUNUSDT": { + "_default": "2025-03-31" + }, + "MLNUSDT": { + "_default": "2025-03-31" + }, + "GUNUSDT": { + "_default": "2025-03-31" + }, + "ATHUSDT": { + "_default": "2025-04-02" + }, + "BABYUSDT": { + "_default": "2025-04-05" + }, + "FORTHUSDT": { + "_default": "2025-04-08" + }, + "PROMPTUSDT": { + "_default": "2025-04-11" + }, + "XCNUSDT": { + "_default": "2025-04-11" + }, + "STOUSDT": { + "_default": "2025-04-12" + }, + "FHEUSDT": { + "_default": "2025-04-12" + }, + "KERNELUSDT": { + "_default": "2025-04-14" + }, + "WCTUSDT": { + "_default": "2025-04-15" + }, + "INITUSDT": { + "_default": "2025-04-16" + }, + "AERGOUSDT": { + "_default": "2025-04-16" + }, + "BANKUSDT": { + "_default": "2025-04-19" + }, + "EPTUSDT": { + "_default": "2025-04-21" + }, + "DEEPUSDT": { + "_default": "2025-04-22" + }, + "HYPERUSDT": { + "_default": "2025-04-22" + }, + "MEMEFIUSDT": { + "_default": "2025-04-25" + }, + "FISUSDT": { + "_default": "2025-04-25" + }, + "JSTUSDT": { + "_default": "2025-04-28" + }, + "SIGNUSDT": { + "_default": "2025-04-28" + }, + "PUNDIXUSDT": { + "_default": "2025-04-30" + }, + "CTKUSDT": { + "_default": "2025-04-30" + }, + "AIOTUSDT": { + "_default": "2025-04-30" + }, + "DOLOUSDT": { + "_default": "2025-05-01" + }, + "HAEDALUSDT": { + "_default": "2025-05-01" + }, + "SXTUSDT": { + "_default": "2025-05-02" + }, + "ASRUSDT": { + "_default": "2025-05-06" + }, + "ALPINEUSDT": { + "_default": "2025-05-06" + }, + "B2USDT": { + "_default": "2025-05-06" + }, + "MILKUSDT": { + "_default": "2025-05-06" + }, + "SYRUPUSDT": { + "_default": "2025-05-07" + }, + "OBOLUSDT": { + "_default": "2025-05-07" + }, + "DOODUSDT": { + "_default": "2025-05-09" + }, + "OGUSDT": { + "_default": "2025-05-12" + }, + "ZKJUSDT": { + "_default": "2025-05-13" + }, + "SKYAIUSDT": { + "_default": "2025-05-13" + }, + "NXPCUSDT": { + "_default": "2025-05-15" + }, + "CVCUSDT": { + "_default": "2025-05-16" + }, + "AGTUSDT": { + "_default": "2025-05-20" + }, + "AWEUSDT": { + "_default": "2025-05-21" + }, + "BUSDT": { + "_default": "2025-05-23" + }, + "SOONUSDT": { + "_default": "2025-05-23" + }, + "HUMAUSDT": { + "_default": "2025-05-26" + }, + "AUSDT": { + "_default": "2025-05-28" + }, + "SOPHUSDT": { + "_default": "2025-05-28" + }, + "MERLUSDT": { + "_default": "2025-05-29" + }, + "HYPEUSDT": { + "_default": "2025-05-30" + }, + "BDXNUSDT": { + "_default": "2025-06-03" + }, + "PUFFERUSDT": { + "_default": "2025-06-04" + }, + "PORT3USDT": { + "_default": "2025-06-04" + }, + "1000000BOBUSDT": { + "_default": "2025-06-05" + }, + "LAUSDT": { + "_default": "2025-06-05" + }, + "SKATEUSDT": { + "_default": "2025-06-09" + }, + "HOMEUSDT": { + "_default": "2025-06-10" + }, + "RESOLVUSDT": { + "_default": "2025-06-10" + }, + "TAIKOUSDT": { + "_default": "2025-06-11" + }, + "SQDUSDT": { + "_default": "2025-06-11" + }, + "PUMPBTCUSDT": { + "_default": "2025-06-13" + }, + "AAVEUSDC": { + "_default": "2025-06-16" + }, + "UNIUSDC": { + "_default": "2025-06-16" + }, + "SPKUSDT": { + "_default": "2025-06-17" + }, + "MYXUSDT": { + "_default": "2025-06-18" + }, + "FUSDT": { + "_default": "2025-06-18" + }, + "NEWTUSDT": { + "_default": "2025-06-19" + }, + "DMCUSDT": { + "_default": "2025-06-24" + }, + "HUSDT": { + "_default": "2025-06-25" + }, + "OLUSDT": { + "_default": "2025-06-25" + }, + "SAHARAUSDT": { + "_default": "2025-06-26" + }, + "ICNTUSDT": { + "_default": "2025-07-03" + }, + "BULLAUSDT": { + "_default": "2025-07-04" + }, + "IDOLUSDT": { + "_default": "2025-07-04" + }, + "MUSDT": { + "_default": "2025-07-07" + }, + "TANSSIUSDT": { + "_default": "2025-07-09" + }, + "PUMPUSDT": { + "_default": "2025-07-10" + }, + "CROSSUSDT": { + "_default": "2025-07-10" + }, + "AINUSDT": { + "_default": "2025-07-10" + }, + "CUSDT": { + "_default": "2025-07-15" + }, + "VELVETUSDT": { + "_default": "2025-07-15" + }, + "TACUSDT": { + "_default": "2025-07-15" + }, + "ERAUSDT": { + "_default": "2025-07-17" + }, + "TAUSDT": { + "_default": "2025-07-21" + }, + "PENGUUSDC": { + "_default": "2025-07-23" + }, + "CVXUSDT": { + "_default": "2025-07-23" + }, + "SLPUSDT": { + "_default": "2025-07-23" + }, + "ZORAUSDT": { + "_default": "2025-07-25" + }, + "TAGUSDT": { + "_default": "2025-07-25" + }, + "ZRCUSDT": { + "_default": "2025-07-29" + }, + "ESPORTSUSDT": { + "_default": "2025-07-29" + }, + "TREEUSDT": { + "_default": "2025-07-29" + }, + "A2ZUSDT": { + "_default": "2025-07-30" + }, + "PLAYUSDT": { + "_default": "2025-07-31" + }, + "NAORISUSDT": { + "_default": "2025-07-31" + }, + "TOWNSUSDT": { + "_default": "2025-08-05" + }, + "PROVEUSDT": { + "_default": "2025-08-06" + }, + "ALLUSDT": { + "_default": "2025-08-06" + }, + "INUSDT": { + "_default": "2025-08-07" + }, + "YALAUSDT": { + "_default": "2025-08-08" + }, + "CARVUSDT": { + "_default": "2025-08-08" + }, + "AIOUSDT": { + "_default": "2025-08-13" + }, + "XNYUSDT": { + "_default": "2025-08-13" + }, + "USELESSUSDT": { + "_default": "2025-08-15" + }, + "DAMUSDT": { + "_default": "2025-08-18" + }, + "CUDISUSDT": { + "_default": "2025-08-20" + }, + "SAPIENUSDT": { + "_default": "2025-08-21" + }, + "XPLUSDT": { + "_default": "2025-08-22" + }, + "WLFIUSDT": { + "_default": "2025-08-23" + }, + "BIOUSDC": { + "_default": "2025-08-25" + }, + "SOMIUSDT": { + "_default": "2025-08-25" + }, + "BASUSDT": { + "_default": "2025-08-26" + }, + "BTRUSDT": { + "_default": "2025-08-27" + }, + "MITOUSDT": { + "_default": "2025-08-28" + }, + "HEMIUSDT": { + "_default": "2025-08-29" + }, + "LINEAUSDT": { + "_default": "2025-09-01" + }, + "QUSDT": { + "_default": "2025-09-02" + }, + "ARIAUSDT": { + "_default": "2025-09-03" + }, + "TAKEUSDT": { + "_default": "2025-09-03" + }, + "PTBUSDT": { + "_default": "2025-09-03" + }, + "WLFIUSDC": { + "_default": "2025-09-08" + }, + "OPENUSDT": { + "_default": "2025-09-08" + }, + "FLOCKUSDT": { + "_default": "2025-09-09" + }, + "SKYUSDT": { + "_default": "2025-09-09" + }, + "AVNTUSDT": { + "_default": "2025-09-09" + }, + "HOLOUSDT": { + "_default": "2025-09-11" + }, + "XPINUSDT": { + "_default": "2025-09-12" + }, + "UBUSDT": { + "_default": "2025-09-12" + }, + "ZKCUSDT": { + "_default": "2025-09-15" + }, + "TOSHIUSDT": { + "_default": "2025-09-17" + }, + "STBLUSDT": { + "_default": "2025-09-17" + }, + "0GUSDT": { + "_default": "2025-09-17" + }, + "BARDUSDT": { + "_default": "2025-09-18" + }, + "ASTERUSDT": { + "_default": "2025-09-19" + }, + "TRADOORUSDT": { + "_default": "2025-09-19" + }, + "BLESSUSDT": { + "_default": "2025-09-23" + }, + "FLUIDUSDT": { + "_default": "2025-09-24" + }, + "COAIUSDT": { + "_default": "2025-09-25" + }, + "BTCUSDT_260327": { + "_default": "2025-09-26" + }, + "ETHUSDT_260327": { + "_default": "2025-09-26" + }, + "HANAUSDT": { + "_default": "2025-09-26" + }, + "MIRAUSDT": { + "_default": "2025-09-26" + }, + "AKEUSDT": { + "_default": "2025-09-26" + }, + "ORDERUSDT": { + "_default": "2025-09-26" + }, + "LIGHTUSDT": { + "_default": "2025-09-27" + }, + "XANUSDT": { + "_default": "2025-09-29" + }, + "FFUSDT": { + "_default": "2025-09-29" + }, + "VFYUSDT": { + "_default": "2025-09-30" + }, + "EDENUSDT": { + "_default": "2025-09-30" + }, + "NOMUSDT": { + "_default": "2025-10-01" + }, + "TRUTHUSDT": { + "_default": "2025-10-01" + }, + "2ZUSDT": { + "_default": "2025-10-02" + }, + "EVAAUSDT": { + "_default": "2025-10-03" + }, + "LYNUSDT": { + "_default": "2025-10-06" + }, + "KGENUSDT": { + "_default": "2025-10-07" + }, + "4USDT": { + "_default": "2025-10-08" + }, + "GIGGLEUSDT": { + "_default": "2025-10-09" + }, + "MONUSDT": { + "_default": "2025-10-10" + }, + "YBUSDT": { + "_default": "2025-10-10" + }, + "METUSDT": { + "_default": "2025-10-11" + }, + "EULUSDT": { + "_default": "2025-10-13" + }, + "ENSOUSDT": { + "_default": "2025-10-14" + }, + "CLOUSDT": { + "_default": "2025-10-14" + }, + "RECALLUSDT": { + "_default": "2025-10-15" + }, + "ZBTUSDT": { + "_default": "2025-10-17" + }, + "LABUSDT": { + "_default": "2025-10-17" + }, + "RIVERUSDT": { + "_default": "2025-10-17" + }, + "RVVUSDT": { + "_default": "2025-10-18" + }, + "币安人生USDT": { + "_default": "2025-10-20" + }, + "BLUAIUSDT": { + "_default": "2025-10-21" + }, + "TURTLEUSDT": { + "_default": "2025-10-22" + }, + "APRUSDT": { + "_default": "2025-10-23" + }, + "ONUSDT": { + "_default": "2025-10-24" + }, + "42USDT": { + "_default": "2025-10-27" + }, + "COMMONUSDT": { + "_default": "2025-10-27" + }, + "KITEUSDT": { + "_default": "2025-10-29" + }, + "ATUSDT": { + "_default": "2025-10-29" + }, + "CCUSDT": { + "_default": "2025-10-31" + }, + "MMTUSDT": { + "_default": "2025-11-04" + }, + "TRUSTUSDT": { + "_default": "2025-11-05" + }, + "UAIUSDT": { + "_default": "2025-11-06" + }, + "FOLKSUSDT": { + "_default": "2025-11-06" + }, + "STABLEUSDT": { + "_default": "2025-11-06" + }, + "JCTUSDT": { + "_default": "2025-11-10" + }, + "ALLOUSDT": { + "_default": "2025-11-11" + }, + "CLANKERUSDT": { + "_default": "2025-11-12" + }, + "BEATUSDT": { + "_default": "2025-11-12" + }, + "PIEVERSEUSDT": { + "_default": "2025-11-14" + }, + "SENTUSDT": { + "_default": "2025-11-14" + }, + "ZECUSDC": { + "_default": "2025-11-19" + }, + "GAIBUSDT": { + "_default": "2025-11-20" + }, + "BOBUSDT": { + "_default": "2025-11-21" + }, + "IRYSUSDT": { + "_default": "2025-11-27" + }, + "RLSUSDT": { + "_default": "2025-12-02" + }, + "POWERUSDT": { + "_default": "2025-12-06" + }, + "WETUSDT": { + "_default": "2025-12-10" + }, + "NIGHTUSDT": { + "_default": "2025-12-10" + }, + "XAUUSDT": { + "_default": "2025-12-11" + }, + "USUSDT": { + "_default": "2025-12-12" + }, + "CYSUSDT": { + "_default": "2025-12-12" + }, + "RAVEUSDT": { + "_default": "2025-12-14" + }, + "ZKPUSDT": { + "_default": "2025-12-21" + }, + "GUAUSDT": { + "_default": "2025-12-21" + }, + "IRUSDT": { + "_default": "2025-12-21" + }, + "LITUSDT": { + "_default": "2025-12-24" + }, + "BTCUSDT_260626": { + "_default": "2025-12-26" + }, + "ETHUSDT_260626": { + "_default": "2025-12-26" + }, + "BREVUSDT": { + "_default": "2025-12-30" + }, + "COLLECTUSDT": { + "_default": "2025-12-31" + }, + "MAGMAUSDT": { + "_default": "2025-12-31" + }, + "XAGUSDT": { + "_default": "2026-01-07" + }, + "ZAMAUSDT": { + "_default": "2026-01-09" + }, + "FOGOUSDT": { + "_default": "2026-01-10" + }, + "FRAXUSDT": { + "_default": "2026-01-15" + }, + "SPORTFUNUSDT": { + "_default": "2026-01-16" + }, + "AIAUSDT": { + "_default": "2026-01-20" + }, + "ACUUSDT": { + "_default": "2026-01-21" + }, + "我踏马来了USDT": { + "_default": "2026-01-21" + }, + "ELSAUSDT": { + "_default": "2026-01-22" + }, + "SKRUSDT": { + "_default": "2026-01-22" + }, + "SPACEUSDT": { + "_default": "2026-01-23" + }, + "FIGHTUSDT": { + "_default": "2026-01-23" + }, + "TSLAUSDT": { + "_default": "2026-01-28" + } + } + }, + "cm": { + "klines": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "trades": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "aggTrades": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "indexPriceKlines": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "markPriceKlines": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "fundingRate": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "liquidationSnapshot": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + }, + "bookTicker": { + "BTCUSD_PERP": { + "_default": "2020-08-10" + }, + "ETHUSD_PERP": { + "_default": "2020-08-18" + }, + "LINKUSD_PERP": { + "_default": "2020-08-18" + }, + "BNBUSD_PERP": { + "_default": "2020-08-21" + }, + "TRXUSD_PERP": { + "_default": "2020-08-25" + }, + "DOTUSD_PERP": { + "_default": "2020-08-25" + }, + "ADAUSD_PERP": { + "_default": "2020-08-26" + }, + "LTCUSD_PERP": { + "_default": "2020-09-07" + }, + "BCHUSD_PERP": { + "_default": "2020-09-07" + }, + "XRPUSD_PERP": { + "_default": "2020-09-09" + }, + "ETCUSD_PERP": { + "_default": "2020-09-09" + }, + "FILUSD_PERP": { + "_default": "2020-10-22" + }, + "DOGEUSD_PERP": { + "_default": "2021-02-01" + }, + "UNIUSD_PERP": { + "_default": "2021-04-13" + }, + "XLMUSD_PERP": { + "_default": "2021-04-15" + }, + "SOLUSD_PERP": { + "_default": "2021-09-01" + }, + "SANDUSD_PERP": { + "_default": "2021-11-09" + }, + "AVAXUSD_PERP": { + "_default": "2021-11-23" + }, + "GALAUSD_PERP": { + "_default": "2021-12-01" + }, + "NEARUSD_PERP": { + "_default": "2021-12-13" + }, + "ATOMUSD_PERP": { + "_default": "2021-12-22" + }, + "AAVEUSD_PERP": { + "_default": "2021-12-28" + }, + "ROSEUSD_PERP": { + "_default": "2022-01-17" + }, + "XTZUSD_PERP": { + "_default": "2022-02-14" + }, + "ICXUSD_PERP": { + "_default": "2022-03-11" + }, + "ALGOUSD_PERP": { + "_default": "2022-03-11" + }, + "APEUSD_PERP": { + "_default": "2022-03-25" + }, + "VETUSD_PERP": { + "_default": "2022-03-29" + }, + "ZILUSD_PERP": { + "_default": "2022-04-06" + }, + "KNCUSD_PERP": { + "_default": "2022-04-23" + }, + "OPUSD_PERP": { + "_default": "2022-07-29" + }, + "ENSUSD_PERP": { + "_default": "2022-08-01" + }, + "APTUSD_PERP": { + "_default": "2022-10-24" + }, + "WIFUSD_PERP": { + "_default": "2024-07-23" + }, + "SUIUSD_PERP": { + "_default": "2024-09-18" + }, + "WLDUSD_PERP": { + "_default": "2024-10-02" + }, + "BTCUSD_260327": { + "_default": "2025-09-26" + }, + "ETHUSD_260327": { + "_default": "2025-09-26" + }, + "XRPUSD_260327": { + "_default": "2025-09-26" + }, + "BNBUSD_260327": { + "_default": "2025-09-26" + }, + "SOLUSD_260327": { + "_default": "2025-09-26" + }, + "BTCUSD_260626": { + "_default": "2025-12-26" + }, + "ETHUSD_260626": { + "_default": "2025-12-26" + }, + "XRPUSD_260626": { + "_default": "2025-12-26" + }, + "BNBUSD_260626": { + "_default": "2025-12-26" + }, + "SOLUSD_260626": { + "_default": "2025-12-26" + } + } + }, + "_metadata": { + "scan_date": "2026-01-27 21:42:07", + "markets_scanned": [ + "spot", + "um", + "cm" + ], + "total_symbols": 20335 + } +} \ No newline at end of file diff --git a/data/symbol_dates_test.json b/data/symbol_dates_test.json new file mode 100644 index 0000000..9160ba0 --- /dev/null +++ b/data/symbol_dates_test.json @@ -0,0 +1,477 @@ +{ + "spot": { + "klines": { + "0GBNB": { + "12h": "2025-09", + "15m": "2025-09", + "1d": "2025-09", + "1h": "2025-09", + "1m": "2025-09", + "1w": "2025-09", + "2h": "2025-09", + "30m": "2025-09", + "3d": "2025-09", + "3m": "2025-09", + "4h": "2025-09", + "5m": "2025-09", + "6h": "2025-09", + "8h": "2025-09" + }, + "0GFDUSD": { + "12h": "2025-09", + "15m": "2025-09", + "1d": "2025-09", + "1h": "2025-09", + "1m": "2025-09", + "1w": "2025-09", + "2h": "2025-09", + "30m": "2025-09", + "3d": "2025-09", + "3m": "2025-09", + "4h": "2025-09", + "5m": "2025-09", + "6h": "2025-09", + "8h": "2025-09" + }, + "0GTRY": { + "12h": "2025-09", + "15m": "2025-09", + "1d": "2025-09", + "1h": "2025-09", + "1m": "2025-09", + "1w": "2025-09", + "2h": "2025-09", + "30m": "2025-09", + "3d": "2025-09", + "3m": "2025-09", + "4h": "2025-09", + "5m": "2025-09", + "6h": "2025-09", + "8h": "2025-09" + }, + "0GUSDC": { + "12h": "2025-09", + "15m": "2025-09", + "1d": "2025-09", + "1h": "2025-09", + "1m": "2025-09", + "1w": "2025-09", + "2h": "2025-09", + "30m": "2025-09", + "3d": "2025-09", + "3m": "2025-09", + "4h": "2025-09", + "5m": "2025-09", + "6h": "2025-09", + "8h": "2025-09" + }, + "0GUSDT": { + "12h": "2025-09", + "15m": "2025-09", + "1d": "2025-09", + "1h": "2025-09", + "1m": "2025-09", + "1w": "2025-09", + "2h": "2025-09", + "30m": "2025-09", + "3d": "2025-09", + "3m": "2025-09", + "4h": "2025-09", + "5m": "2025-09", + "6h": "2025-09", + "8h": "2025-09" + }, + "1000CATBNB": { + "12h": "2024-12", + "15m": "2024-12", + "1d": "2024-12", + "1h": "2024-12", + "1m": "2024-12", + "1w": "2024-12", + "2h": "2024-12", + "30m": "2024-12", + "3d": "2024-12", + "3m": "2024-12", + "4h": "2024-12", + "5m": "2024-12", + "6h": "2024-12", + "8h": "2024-12" + }, + "1000CATFDUSD": { + "12h": "2024-12", + "15m": "2024-12", + "1d": "2024-12", + "1h": "2024-12", + "1m": "2024-12", + "1w": "2024-12", + "2h": "2024-12", + "30m": "2024-12", + "3d": "2024-12", + "3m": "2024-12", + "4h": "2024-12", + "5m": "2024-12", + "6h": "2024-12", + "8h": "2024-12" + }, + "1000CATTRY": { + "12h": "2024-12", + "15m": "2024-12", + "1d": "2024-12", + "1h": "2024-12", + "1m": "2024-12", + "1w": "2024-12", + "2h": "2024-12", + "30m": "2024-12", + "3d": "2024-12", + "3m": "2024-12", + "4h": "2024-12", + "5m": "2024-12", + "6h": "2024-12", + "8h": "2024-12" + }, + "1000CATUSDC": { + "12h": "2024-12", + "15m": "2024-12", + "1d": "2024-12", + "1h": "2024-12", + "1m": "2024-12", + "1w": "2024-12", + "2h": "2024-12", + "30m": "2024-12", + "3d": "2024-12", + "3m": "2024-12", + "4h": "2024-12", + "5m": "2024-12", + "6h": "2024-12", + "8h": "2024-12" + }, + "1000CATUSDT": { + "12h": "2024-12", + "15m": "2024-12", + "1d": "2024-12", + "1h": "2024-12", + "1m": "2024-12", + "1w": "2024-12", + "2h": "2024-12", + "30m": "2024-12", + "3d": "2024-12", + "3m": "2024-12", + "4h": "2024-12", + "5m": "2024-12", + "6h": "2024-12", + "8h": "2024-12" + }, + "1000CHEEMSUSDC": { + "12h": "2025-02", + "15m": "2025-02", + "1d": "2025-02", + "1h": "2025-02", + "1m": "2025-02", + "1w": "2025-02", + "2h": "2025-02", + "30m": "2025-02", + "3d": "2025-02", + "3m": "2025-02", + "4h": "2025-02", + "5m": "2025-02", + "6h": "2025-02", + "8h": "2025-02" + }, + "1000CHEEMSUSDT": { + "12h": "2025-02", + "15m": "2025-02", + "1d": "2025-02", + "1h": "2025-02", + "1m": "2025-02", + "1w": "2025-02", + "2h": "2025-02", + "30m": "2025-02", + "3d": "2025-02", + "3m": "2025-02", + "4h": "2025-02", + "5m": "2025-02", + "6h": "2025-02", + "8h": "2025-02" + }, + "1000SATSFDUSD": { + "12h": "2023-12", + "15m": "2023-12", + "1d": "2023-12", + "1h": "2023-12", + "1m": "2023-12", + "1w": "2023-12", + "2h": "2023-12", + "30m": "2023-12", + "3d": "2023-12", + "3m": "2023-12", + "4h": "2023-12", + "5m": "2023-12", + "6h": "2023-12", + "8h": "2023-12" + }, + "1000SATSTRY": { + "12h": "2023-12", + "15m": "2023-12", + "1d": "2023-12", + "1h": "2023-12", + "1m": "2023-12", + "1w": "2023-12", + "2h": "2023-12", + "30m": "2023-12", + "3d": "2023-12", + "3m": "2023-12", + "4h": "2023-12", + "5m": "2023-12", + "6h": "2023-12", + "8h": "2023-12" + }, + "1000SATSUSDC": { + "12h": "2024-07", + "15m": "2024-07", + "1d": "2024-07", + "1h": "2024-07", + "1m": "2024-07", + "1w": "2024-07", + "2h": "2024-07", + "30m": "2024-07", + "3d": "2024-07", + "3m": "2024-07", + "4h": "2024-07", + "5m": "2024-07", + "6h": "2024-07", + "8h": "2024-07" + }, + "1000SATSUSDT": { + "12h": "2023-12", + "15m": "2023-12", + "1d": "2023-12", + "1h": "2023-12", + "1m": "2023-12", + "1w": "2023-12", + "2h": "2023-12", + "30m": "2023-12", + "3d": "2023-12", + "3m": "2023-12", + "4h": "2023-12", + "5m": "2023-12", + "6h": "2023-12", + "8h": "2023-12" + }, + "1INCHBTC": { + "12h": "2020-12", + "15m": "2020-12", + "1d": "2020-12", + "1h": "2020-12", + "1m": "2020-12", + "1w": "2020-12", + "2h": "2020-12", + "30m": "2020-12", + "3d": "2020-12", + "3m": "2020-12", + "4h": "2020-12", + "5m": "2020-12", + "6h": "2020-12", + "8h": "2020-12" + }, + "1INCHBUSD": { + "12h": "2021-02", + "15m": "2021-02", + "1d": "2021-02", + "1h": "2021-02", + "1m": "2021-02", + "1w": "2021-02", + "2h": "2021-02", + "30m": "2021-02", + "3d": "2021-02", + "3m": "2021-02", + "4h": "2021-02", + "5m": "2021-02", + "6h": "2021-02", + "8h": "2021-02" + }, + "1INCHDOWNUSDT": { + "12h": "2021-04", + "15m": "2021-04", + "1d": "2021-04", + "1h": "2021-04", + "1m": "2021-04", + "1w": "2021-04", + "2h": "2021-04", + "30m": "2021-04", + "3d": "2021-04", + "3m": "2021-04", + "4h": "2021-04", + "5m": "2021-04", + "6h": "2021-04", + "8h": "2021-04" + }, + "1INCHUPUSDT": { + "12h": "2021-04", + "15m": "2021-04", + "1d": "2021-04", + "1h": "2021-04", + "1m": "2021-04", + "1w": "2021-04", + "2h": "2021-04", + "30m": "2021-04", + "3d": "2021-04", + "3m": "2021-04", + "4h": "2021-04", + "5m": "2021-04", + "6h": "2021-04", + "8h": "2021-04" + }, + "1INCHUSDC": { + "12h": "2025-11", + "15m": "2025-11", + "1d": "2025-11", + "1h": "2025-11", + "1m": "2025-11", + "1w": "2025-11", + "2h": "2025-11", + "30m": "2025-11", + "3d": "2025-11", + "3m": "2025-11", + "4h": "2025-11", + "5m": "2025-11", + "6h": "2025-11", + "8h": "2025-11" + }, + "1INCHUSDT": { + "12h": "2020-12", + "15m": "2020-12", + "1d": "2020-12", + "1h": "2020-12", + "1m": "2020-12", + "1w": "2020-12", + "2h": "2020-12", + "30m": "2020-12", + "3d": "2020-12", + "3m": "2020-12", + "4h": "2020-12", + "5m": "2020-12", + "6h": "2020-12", + "8h": "2020-12" + }, + "1MBABYDOGEFDUSD": { + "12h": "2024-09", + "15m": "2024-09", + "1d": "2024-09", + "1h": "2024-09", + "1m": "2024-09", + "1w": "2024-09", + "2h": "2024-09", + "30m": "2024-09", + "3d": "2024-09", + "3m": "2024-09", + "4h": "2024-09", + "5m": "2024-09", + "6h": "2024-09", + "8h": "2024-09" + }, + "1MBABYDOGETRY": { + "12h": "2024-09", + "15m": "2024-09", + "1d": "2024-09", + "1h": "2024-09", + "1m": "2024-09", + "1w": "2024-09", + "2h": "2024-09", + "30m": "2024-09", + "3d": "2024-09", + "3m": "2024-09", + "4h": "2024-09", + "5m": "2024-09", + "6h": "2024-09", + "8h": "2024-09" + }, + "1MBABYDOGEUSDC": { + "12h": "2024-11", + "15m": "2024-11", + "1d": "2024-11", + "1h": "2024-11", + "1m": "2024-11", + "1w": "2024-11", + "2h": "2024-11", + "30m": "2024-11", + "3d": "2024-11", + "3m": "2024-11", + "4h": "2024-11", + "5m": "2024-11", + "6h": "2024-11", + "8h": "2024-11" + }, + "1MBABYDOGEUSDT": { + "12h": "2024-09", + "15m": "2024-09", + "1d": "2024-09", + "1h": "2024-09", + "1m": "2024-09", + "1w": "2024-09", + "2h": "2024-09", + "30m": "2024-09", + "3d": "2024-09", + "3m": "2024-09", + "4h": "2024-09", + "5m": "2024-09", + "6h": "2024-09", + "8h": "2024-09" + }, + "2ZBNB": { + "12h": "2025-10", + "15m": "2025-10", + "1d": "2025-10", + "1h": "2025-10", + "1m": "2025-10", + "1w": "2025-09", + "2h": "2025-10", + "30m": "2025-10", + "3d": "2025-10", + "3m": "2025-10", + "4h": "2025-10", + "5m": "2025-10", + "6h": "2025-10", + "8h": "2025-10" + }, + "2ZFDUSD": { + "12h": "2025-10", + "15m": "2025-10", + "1d": "2025-10", + "1h": "2025-10", + "1m": "2025-10", + "1w": "2025-09", + "2h": "2025-10", + "30m": "2025-10", + "3d": "2025-10", + "3m": "2025-10", + "4h": "2025-10", + "5m": "2025-10", + "6h": "2025-10", + "8h": "2025-10" + }, + "2ZTRY": { + "12h": "2025-10", + "15m": "2025-10", + "1d": "2025-10", + "1h": "2025-10", + "1m": "2025-10", + "1w": "2025-09", + "2h": "2025-10", + "30m": "2025-10", + "3d": "2025-10", + "3m": "2025-10", + "4h": "2025-10", + "5m": "2025-10", + "6h": "2025-10", + "8h": "2025-10" + } + } + }, + "_metadata": { + "scan_date": "2026-01-27 21:40:26", + "markets_scanned": [ + "spot" + ], + "total_symbols": 29 + } +} \ No newline at end of file diff --git a/docs/DOWNLOAD_SCRIPTS_GUIDE.md b/docs/DOWNLOAD_SCRIPTS_GUIDE.md new file mode 100644 index 0000000..4cde3f4 --- /dev/null +++ b/docs/DOWNLOAD_SCRIPTS_GUIDE.md @@ -0,0 +1,639 @@ +# Download Scripts Guide + +This guide provides comprehensive documentation for all download scripts in the Binance Public Data repository. + +## Table of Contents + +- [Quick Start](#quick-start) +- [Script Reference by Market](#script-reference-by-market) + - [Spot Market Scripts](#spot-market-scripts) + - [Futures-UM Market Scripts](#futures-um-market-scripts) + - [Futures-CM Market Scripts](#futures-cm-market-scripts) + - [Options Market Scripts](#options-market-scripts) +- [Universal Downloader](#universal-downloader) +- [Parameter Reference](#parameter-reference) +- [Tips and Best Practices](#tips-and-best-practices) +- [File Location Information](#file-location-information) + +--- + +## Quick Start + +### Installation + +```bash +# Install Python dependencies +pip install -r python/requirements.txt + +# Or install the package +pip install -e . + +# Set output directory (optional) +export STORE_DIRECTORY=/path/to/output +``` + +### Basic Usage + +```bash +# Download spot klines for a specific symbol +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y 2024 + +# Download futures funding rate +python3 scripts/download-futures-fundingRate.py -s BTCUSDT -y 2024 + +# Download multiple data types at once +python3 scripts/download-all.py -t spot -s BTCUSDT -d klines trades aggTrades -y 2024 +``` + +--- + +## Script Reference by Market + +### Spot Market Scripts + +The spot market supports 4 data types: **klines**, **trades**, **aggTrades**, and **depth**. + +| Script Name | Data Type | Intervals Support | Monthly | Daily | +|-------------|-----------|-------------------|---------|-------| +| `download-spot-monthly-klines.py` | Klines | Yes (1m, 15m, 1h, 4h, 8h) | ✓ | - | +| `download-depth.py` | Depth | No | - | ✓ | +| `download-all.py` | All spot types | Varies | ✓ | ✓ | + +#### Klines (Candlestick Data) + +**Script:** `download-spot-monthly-klines.py` + +**Features:** +- Monthly data only +- Supports multiple intervals: 1m, 15m, 1h, 4h, 8h +- Auto-skips existing files +- 10-thread concurrent downloads + +**Usage Examples:** + +```bash +# Download with default intervals (1m, 15m, 1h, 4h, 8h) +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT + +# Download specific intervals +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -i 1m 1h + +# Download for specific year +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y 2024 + +# Download multiple symbols +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT ETHUSDT + +# Download specific months +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y 2024 -m 1 2 3 + +# Custom output folder +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -folder /data/binance +``` + +**Common Patterns:** + +```bash +# Download all intervals for current year +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y $(date +%Y) + +# Download hourly data for multiple symbols +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT ETHUSDT BNBUSDT -i 1h -y 2023 2024 + +# Download with debug logging +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -log-level DEBUG +``` + +#### Depth (Order Book) + +**Script:** `download-depth.py` + +**Features:** +- Daily data only +- No interval support +- Full order book depth snapshots + +**Usage Examples:** + +```bash +# Download depth data for a symbol +python3 scripts/download-depth.py -s BTCUSDT -y 2024 + +# Download for specific date range +python3 scripts/download-depth.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-01-31 + +# Download multiple symbols +python3 scripts/download-depth.py -s BTCUSDT ETHUSDT -y 2024 +``` + +--- + +### Futures-UM Market Scripts + +The USD-M Futures market supports 9 data types: **klines**, **trades**, **aggTrades**, **indexPriceKlines**, **markPriceKlines**, **premiumIndexKlines**, **fundingRate**, **bookTicker**, and **depth**. + +| Script Name | Data Type | Intervals Support | Monthly | Daily | +|-------------|-----------|-------------------|---------|-------| +| `download-futures-fundingRate.py` | Funding Rate | No | ✓ | ✗ | +| `download-book-ticker.py` | Book Ticker | No | - | ✓ | +| `download-depth.py` | Depth | No | - | ✓ | +| `download-all.py` | All UM types | Varies | ✓ | ✓ | + +#### Funding Rate + +**Script:** `download-futures-fundingRate.py` + +**Features:** +- Monthly data only (daily not available) +- Auto-detects available date range +- Skips downloading if local data exists +- Supports both UM and CM futures + +**Usage Examples:** + +```bash +# Download with auto-detected date range (recommended) +python3 scripts/download-futures-fundingRate.py -s BTCUSDT + +# Download for specific year/month range +python3 scripts/download-futures-fundingRate.py -s BTCUSDT -y 2023 2024 + +# Download multiple symbols +python3 scripts/download-futures-fundingRate.py -s BTCUSDT ETHUSDT + +# Download for COIN-M futures +python3 scripts/download-futures-fundingRate.py -t cm -s ADAUSD_PERP + +# Specify custom output folder +python3 scripts/download-futures-fundingRate.py -s BTCUSDT -folder /data/binance + +# Download specific months +python3 scripts/download-futures-fundingRate.py -s BTCUSDT -y 2024 -m 1 2 3 +``` + +**Common Patterns:** + +```bash +# Download all USD-M futures funding rates +python3 scripts/download-futures-fundingRate.py -t um + +# Download for a specific date range +python3 scripts/download-futures-fundingRate.py -s BTCUSDT -y 2024 -m 6 7 8 + +# Force re-download even if files exist +python3 scripts/download-futures-fundingRate.py -s BTCUSDT --no-skip-existing +``` + +#### Book Ticker (Best Bid/Ask) + +**Script:** `download-book-ticker.py` + +**Features:** +- Daily data only +- Best bid/ask prices +- UM and CM futures support + +**Usage Examples:** + +```bash +# Download for USD-M futures +python3 scripts/download-book-ticker.py -t um -s BTCUSDT -y 2024 + +# Download for COIN-M futures +python3 scripts/download-book-ticker.py -t cm -s ADAUSD_PERP -y 2024 + +# Download for specific date range +python3 scripts/download-book-ticker.py -t um -s BTCUSDT -startDate 2024-01-01 -endDate 2024-01-31 + +# Download multiple symbols +python3 scripts/download-book-ticker.py -t um -s BTCUSDT ETHUSDT -y 2024 +``` + +#### Other UM Data Types + +Use the **Universal Downloader** (`download-all.py`) for these data types: + +- **Klines** - Candlestick data with intervals +- **Trades** - Individual trade executions +- **AggTrades** - Aggregated trades +- **Index Price Klines** - Index price candlesticks +- **Mark Price Klines** - Mark price candlesticks +- **Premium Index Klines** - Premium index candlesticks + +**Examples:** + +```bash +# Download klines +python3 scripts/download-all.py -t um -s BTCUSDT -d klines -i 1h -y 2024 + +# Download multiple data types +python3 scripts/download-all.py -t um -s BTCUSDT -d klines trades aggTrades -y 2024 + +# Download index and mark price +python3 scripts/download-all.py -t um -s BTCUSDT -d indexPriceKlines markPriceKlines -i 1h -y 2024 + +# Download premium index +python3 scripts/download-all.py -t um -s BTCUSDT -d premiumIndexKlines -i 1d -y 2024 + +# Download all UM data types +python3 scripts/download-all.py -t um --all-data -s BTCUSDT -y 2024 +``` + +--- + +### Futures-CM Market Scripts + +The COIN-M Futures market supports 7 data types: **klines**, **trades**, **aggTrades**, **indexPriceKlines**, **markPriceKlines**, **fundingRate**, and **liquidationSnapshot**. + +| Script Name | Data Type | Intervals Support | Monthly | Daily | +|-------------|-----------|-------------------|---------|-------| +| `download-futures-fundingRate.py` | Funding Rate | No | ✓ | ✗ | +| `download-liquidation-snapshot.py` | Liquidation Snapshot | No | - | ✓ | +| `download-book-ticker.py` | Book Ticker | No | - | ✓ | +| `download-all.py` | All CM types | Varies | ✓ | ✓ | + +#### Liquidation Snapshot + +**Script:** `download-liquidation-snapshot.py` + +**Features:** +- Daily data only +- COIN-M futures exclusive +- Liquidation order snapshots + +**Usage Examples:** + +```bash +# Download liquidation snapshots +python3 scripts/download-liquidation-snapshot.py -t cm -s ADAUSD_PERP -y 2024 + +# Download for specific date range +python3 scripts/download-liquidation-snapshot.py -t cm -s ADAUSD_PERP -startDate 2024-01-01 -endDate 2024-01-31 + +# Download multiple symbols +python3 scripts/download-liquidation-snapshot.py -t cm -s ADAUSD_PERP BCHUSD_PERP -y 2024 +``` + +#### Other CM Data Types + +Use the **Universal Downloader** (`download-all.py`) for these data types: + +- **Klines** - Candlestick data with intervals +- **Trades** - Individual trade executions +- **AggTrades** - Aggregated trades +- **Index Price Klines** - Index price candlesticks +- **Mark Price Klines** - Mark price candlesticks + +**Examples:** + +```bash +# Download klines +python3 scripts/download-all.py -t cm -s ADAUSD_PERP -d klines -i 1h -y 2024 + +# Download multiple data types +python3 scripts/download-all.py -t cm -s ADAUSD_PERP -d klines trades aggTrades -y 2024 + +# Download all CM data types +python3 scripts/download-all.py -t cm --all-data -s ADAUSD_PERP -y 2024 +``` + +--- + +### Options Market Scripts + +| Script Name | Data Type | Intervals Support | Monthly | Daily | +|-------------|-----------|-------------------|---------|-------| +| `download-option.py` | Options Data | No | - | ✓ | + +#### Options Data + +**Script:** `download-option.py` + +**Features:** +- Daily data only +- Options market data +- Requires option symbol format + +**Usage Examples:** + +```bash +# Download options data +python3 scripts/download-option.py -s BTC-240301-50000-C -y 2024 + +# Download multiple options +python3 scripts/download-option.py -s BTC-240301-50000-C BTC-240301-55000-C -y 2024 + +# Download for specific date range +python3 scripts/download-option.py -s BTC-240301-50000-C -startDate 2024-01-01 -endDate 2024-01-31 +``` + +**Option Symbol Format:** `{UNDERLYING}-{EXPIRATION}-{STRIKE}-{TYPE}` +- Example: `BTC-240301-50000-C` + - Underlying: BTC + - Expiration: 240301 (March 1, 2024) + - Strike: 50000 + - Type: C (Call) or P (Put) + +--- + +## Universal Downloader + +The `download-all.py` script is a powerful universal downloader that supports all data types across all markets. + +### Key Features + +- Download multiple data types in one command +- Support for all markets (spot, um, cm) +- Config file support +- Download all data types with `--all-data` flag + +### Usage Examples + +```bash +# Download single data type +python3 scripts/download-all.py -t spot -s BTCUSDT -d klines -y 2024 + +# Download multiple data types +python3 scripts/download-all.py -t um -s BTCUSDT -d klines trades aggTrades -y 2024 + +# Download all supported data types for a market +python3 scripts/download-all.py -t spot --all-data -s BTCUSDT -y 2024 + +# Specify intervals for klines +python3 scripts/download-all.py -t spot -s BTCUSDT -d klines -i 1h 1d -y 2024 + +# Use config file +python3 scripts/download-all.py --config configs/default_config.yaml + +# Download with date range +python3 scripts/download-all.py -t spot -s BTCUSDT -d klines -startDate 2024-01-01 -endDate 2024-12-31 + +# Download daily data +python3 scripts/download-all.py -t spot -s BTCUSDT -d trades -startDate 2024-01-01 -endDate 2024-01-31 +``` + +--- + +## Parameter Reference + +### Common Parameters + +| Parameter | Short | Description | Default | Examples | +|-----------|-------|-------------|---------|----------| +| `--type` | `-t` | Market type | Required | `spot`, `um`, `cm` | +| `--symbols` | `-s` | Trading symbols | All available | `BTCUSDT ETHUSDT` | +| `--data-types` | `-d` | Data types | `klines` | `klines trades aggTrades` | +| `--intervals` | `-i` | Kline intervals | All intervals | `1m 1h 1d` | +| `--years` | `-y` | Years to download | 2020-current | `2023 2024` | +| `--months` | `-m` | Months to download | All (1-12) | `1 2 3` | +| `--startDate` | - | Start date | 2020-01-01 | `2024-01-01` | +| `--endDate` | - | End date | Current date | `2024-12-31` | +| `--folder` | - | Output directory | STORE_DIRECTORY or `.` | `/data/binance` | +| `--max-workers` | - | Concurrent threads | 10 | `20` | +| `--skip-monthly` | - | Skip monthly files | 0 (download) | `1` to skip | +| `--skip-daily` | - | Skip daily files | 0 (download) | `1` to skip | +| `--download-checksum` | `-c` | Download checksum files | 0 (no) | `1` to download | +| `--verify-checksum` | - | Verify checksums | 0 (no) | `1` to verify | +| `--log-level` | - | Logging level | INFO | `DEBUG INFO WARNING ERROR` | +| `--log-file` | - | Log file path | logs/download.log | `/var/log/binance.log` | +| `--config` | - | Config file path | None | `configs/my_config.yaml` | +| `--all-data` | - | Download all data types | False | Flag to enable | + +### Valid Intervals + +For data types that support intervals (klines, indexPriceKlines, markPriceKlines, premiumIndexKlines): + +- **1m** - 1 minute +- **3m** - 3 minutes +- **5m** - 5 minutes +- **15m** - 15 minutes +- **30m** - 30 minutes +- **1h** - 1 hour +- **2h** - 2 hours +- **4h** - 4 hours +- **6h** - 6 hours +- **8h** - 8 hours +- **12h** - 12 hours +- **1d** - 1 day +- **3d** - 3 days +- **1w** - 1 week +- **1M** - 1 month + +--- + +## Tips and Best Practices + +### 1. Choose the Right Script + +- **Use specialized scripts** (e.g., `download-futures-fundingRate.py`) for specific data types - they have optimized features +- **Use universal downloader** (`download-all.py`) when downloading multiple data types simultaneously +- **Use config files** for complex, frequently-used download patterns + +### 2. Performance Optimization + +```bash +# Increase concurrent threads for faster downloads +python3 scripts/download-all.py -t spot -s BTCUSDT -max_workers 20 + +# Download monthly data instead of daily for faster speeds +python3 scripts/download-all.py -t spot -s BTCUSDT -skip-daily 1 + +# Use multiple symbols in one command +python3 scripts/download-all.py -t spot -s BTCUSDT ETHUSDT BNBUSDT -y 2024 +``` + +### 3. Data Management + +```bash +# Skip existing files to save time +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT # Auto-skips by default + +# Verify data integrity with checksums +python3 scripts/download-all.py -t spot -s BTCUSDT -download-checksum 1 -verify-checksum 1 + +# Use custom output folder for organization +python3 scripts/download-all.py -t spot -s BTCUSDT -folder /data/binance/spot/2024 +``` + +### 4. Date Range Selection + +```bash +# Use years for monthly data +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y 2023 2024 + +# Use specific dates for daily data +python3 scripts/download-all.py -t spot -s BTCUSDT -d trades -startDate 2024-01-01 -endDate 2024-01-31 + +# Combine year and month for precision +python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y 2024 -m 1 2 3 +``` + +### 5. Debugging + +```bash +# Enable debug logging +python3 scripts/download-all.py -t spot -s BTCUSDT -log-level DEBUG + +# Specify log file location +python3 scripts/download-all.py -t spot -s BTCUSDT -log-file /tmp/download.log +``` + +### 6. Automation + +```bash +# Create a cron job for daily updates +# Add to crontab: 0 2 * * * cd /path/to/binance-public-data && python3 scripts/download-all.py -t spot -s BTCUSDT -y $(date +%Y) -m $(date +%m) + +# Use bash scripts for bulk downloads +for symbol in BTCUSDT ETHUSDT BNBUSDT; do + python3 scripts/download-spot-monthly-klines.py -s $symbol -y 2024 +done +``` + +--- + +## File Location Information + +### URL Structure + +``` +https://data.binance.vision/ +├── data/ +│ ├── spot/ # Spot market +│ │ ├── monthly/ +│ │ │ ├── klines/{SYMBOL}/{INTERVAL}/ +│ │ │ │ └── {SYMBOL}-{INTERVAL}-{YEAR}-{MONTH}.zip +│ │ │ ├── trades/{SYMBOL}/ +│ │ │ │ └── {SYMBOL}-trades-{YEAR}-{MONTH}.zip +│ │ │ └── aggTrades/{SYMBOL}/ +│ │ │ └── {SYMBOL}-aggTrades-{YEAR}-{MONTH}.zip +│ │ └── daily/ +│ │ ├── klines/{SYMBOL}/{INTERVAL}/ +│ │ │ └── {SYMBOL}-{INTERVAL}-{DATE}.zip +│ │ ├── trades/{SYMBOL}/ +│ │ │ └── {SYMBOL}-trades-{DATE}.zip +│ │ ├── aggTrades/{SYMBOL}/ +│ │ │ └── {SYMBOL}-aggTrades-{DATE}.zip +│ │ └── depth/{SYMBOL}/ +│ │ └── {SYMBOL}-depth-{DATE}.zip +│ └── futures/ # Futures market +│ ├── um/ # USD-M Futures +│ │ ├── monthly/ +│ │ │ ├── klines/{SYMBOL}/{INTERVAL}/ +│ │ │ ├── fundingRate/{SYMBOL}/ +│ │ │ │ └── {SYMBOL}-fundingRate-{YEAR}-{MONTH}.zip +│ │ │ ├── indexPriceKlines/{SYMBOL}/{INTERVAL}/ +│ │ │ ├── markPriceKlines/{SYMBOL}/{INTERVAL}/ +│ │ │ └── premiumIndexKlines/{SYMBOL}/{INTERVAL}/ +│ │ └── daily/ +│ │ ├── bookTicker/{SYMBOL}/ +│ │ │ └── {SYMBOL}-bookTicker-{DATE}.zip +│ │ ├── depth/{SYMBOL}/ +│ │ └── (other types similar to spot) +│ └── cm/ # COIN-M Futures +│ ├── monthly/ +│ │ └── (similar structure to um) +│ └── daily/ +│ ├── liquidationSnapshot/{SYMBOL}/ +│ │ └── {SYMBOL}-liquidationSnapshot-{DATE}.zip +│ └── bookTicker/{SYMBOL}/ +└── data/derivatives/ # Options + └── monthly/BVOLIndex/ + └── {SYMBOL}/ + └── {SYMBOL}-{YEAR}-{MONTH}.zip +``` + +### Local File Organization + +Downloaded files maintain the same structure locally: + +``` +{STORE_DIRECTORY}/ +├── spot/ +│ ├── monthly/ +│ │ └── klines/ +│ │ └── BTCUSDT/ +│ │ └── 1h/ +│ │ └── BTCUSDT-1h-2024-01.zip +│ └── daily/ +│ └── trades/ +│ └── BTCUSDT/ +│ └── BTCUSDT-trades-2024-01-01.zip +└── futures/ + └── um/ + ├── monthly/ + │ └── fundingRate/ + │ └── BTCUSDT/ + │ └── BTCUSDT-fundingRate-2024-01.zip + └── daily/ + └── bookTicker/ + └── BTCUSDT/ + └── BTCUSDT-bookTicker-2024-01-01.zip +``` + +### Monthly vs Daily Files + +**When to use Monthly:** +- Historical data downloads +- Backtesting with historical data +- Data analysis and research +- When downloading large date ranges + +**When to use Daily:** +- Recent data updates +- Incremental updates +- Specific date analysis +- When monthly files are not available + +**Note:** Some data types only have monthly OR daily files: +- **Funding Rate**: Monthly only +- **Liquidation Snapshot**: Daily only +- **Book Ticker**: Daily only +- **Depth**: Daily only + +--- + +## Additional Resources + +- **Main README:** [../README.md](../README.md) +- **Migration Guide:** [MIGRATION.md](../MIGRATION.md) +- **Project Instructions:** [../CLAUDE.md](../CLAUDE.md) +- **Legacy Scripts:** See `python/` directory for original scripts +- **Configuration:** See `configs/default_config.yaml` for config file examples + +--- + +## Troubleshooting + +### Common Issues + +**Issue:** "HTTP 404 errors in logs" +- **Solution:** This is normal - it means a file doesn't exist on the server yet (e.g., future dates) + +**Issue:** "Download is slow" +- **Solution:** Increase `-max_workers` parameter (default: 10) + +**Issue:** "Out of memory" +- **Solution:** Download fewer symbols at once, reduce `-max_workers` + +**Issue:** "Checksum verification failed" +- **Solution:** Re-download the file with `--no-skip-existing` flag + +**Issue:** "Connection timeout" +- **Solution:** The script automatically retries with exponential backoff (max 3 retries) + +### Getting Help + +For issues, questions, or contributions: +1. Check this documentation +2. Review example commands in each script's docstring +3. Enable debug logging: `-log-level DEBUG` +4. Check log files: `logs/download.log` + +--- + +## Version Information + +- **Documentation Version:** 1.0 +- **Last Updated:** 2025-01-18 +- **Compatible with:** Binance Public Data repository (master branch) diff --git a/docs/FUNDING_RATE_DOWNLOAD.md b/docs/FUNDING_RATE_DOWNLOAD.md new file mode 100644 index 0000000..00104be --- /dev/null +++ b/docs/FUNDING_RATE_DOWNLOAD.md @@ -0,0 +1,149 @@ +# Funding Rate 下载说明 + +## 概述 + +本脚本用于下载 Binance 期货的 Funding Rate(资金费率)数据。 + +**重要**: Funding Rate 数据只有**月度文件**,没有日度文件。 + +## 多线程配置 + +脚本当前配置使用 **10 个并发线程**进行下载。 + +### 多线程实现原理 + +- 使用 `ThreadPoolExecutor` 实现并发下载 +- 每个线程独立处理一个文件的下载 +- SSL 上下文为每次下载创建新的实例,确保线程安全 +- 自动重试机制处理网络错误 + +### 线程数配置位置 + +在 `scripts/download-futures-fundingRate.py` 中: + +```python +# 第 83-86 行 +downloader = FundingRateDownloader( + trading_type=trading_type, + max_workers=10 # 使用 10 个线程 +) +``` + +### 性能说明 + +| 线程数 | 说明 | +|--------|------| +| 5 | 较保守,适合网络不稳定的情况 | +| 10 | **当前配置**,平衡性能和稳定性 | +| 15+ | 可能被服务器限流,不建议使用 | + +## 使用方法 + +### 基本用法 + +```bash +# 下载单个交易对 +python scripts/download-futures-fundingRate.py -s BTCUSDT -y 2024 + +# 下载多个交易对 +python scripts/download-futures-fundingRate.py -s BTCUSDT ETHUSDT -y 2024 + +# 下载多年数据 +python scripts/download-futures-fundingRate.py -s BTCUSDT -y 2023 2024 + +# 下载特定月份 +python scripts/download-futures-fundingRate.py -s BTCUSDT -y 2024 -m 1 2 3 +``` + +### 参数说明 + +| 参数 | 说明 | 示例 | +|------|------|------| +| `-t` | 市场类型 (um/cm) | `-t um` | +| `-s` | 交易对符号 | `-s BTCUSDT ETHUSDT` | +| `-y` | 年份 | `-y 2023 2024` | +| `-m` | 月份 (1-12) | `-m 1 6 12` | +| `-folder` | 输出目录 | `-folder /data/binance` | +| `--no-skip-existing` | 强制重新下载 | `--no-skip-existing` | +| `-log-level` | 日志级别 | `-log-level DEBUG` | + +### 默认值 + +- **市场类型**: `um` (USD-M 期货) +- **年份**: 2020 到当前年份 +- **月份**: 全部月份 (1-12) +- **线程数**: 10 个并发线程 + +## 文件保存位置 + +下载的文件保存在: + +``` +J:\binance-public-data\data\futures\um\monthly\fundingRate\{SYMBOL}\{SYMBOL}-fundingRate-{YEAR}-{MONTH}.zip +``` + +例如: +``` +J:\binance-public-data\data\futures\um\monthly\fundingRate\BTCUSDT\BTCUSDT-fundingRate-2024-01.zip +``` + +## 特性 + +### ✅ 多线程并发下载 +- 10 个线程同时下载 +- 显著提升下载速度 + +### ✅ 智能跳过 +- 自动检测本地已有文件 +- 避免重复下载 + +### ✅ 详细日志 +- 显示交易对和日期 +- 显示下载进度和文件大小 +- 错误日志清晰明确 + +### ✅ 线程安全 +- 每次下载创建独立的 SSL 上下文 +- 避免多线程冲突 + +### ✅ 自动重试 +- 网络错误自动重试 +- 最多 3 次重试机会 + +## 示例输出 + +``` +2026-01-18 15:40:58 - INFO - Using 10 threads for concurrent downloads +2026-01-18 15:40:58 - INFO - Processing symbol: ETHUSDT +2026-01-18 15:40:58 - INFO - Starting monthly download... +2026-01-18 15:40:58 - INFO - [DOWNLOAD] Symbol: ETHUSDT | Date: 2024-01 +2026-01-18 15:40:58 - INFO - [OK] Download completed: Symbol: ETHUSDT | Date: 2024-01 | Size: 685.0B +2026-01-18 15:40:58 - INFO - [DOWNLOAD] Symbol: ETHUSDT | Date: 2024-02 +2026-01-18 15:40:59 - INFO - [OK] Download completed: Symbol: ETHUSDT | Date: 2024-02 | Size: 770.0B +``` + +## 故障排除 + +### 下载速度慢 +- 检查网络连接 +- 确认 Binance 数据服务器可访问 +- 尝试减少线程数(修改 max_workers) + +### 部分文件下载失败 +- 查看日志中的错误信息 +- 重新运行脚本会自动跳过已下载的文件 +- 使用 `--no-skip-existing` 强制重新下载 + +### 线程安全错误 +- 当前版本已修复 SSL 上下文的线程安全问题 +- 每次下载使用独立的 SSL 上下文 + +## 性能对比 + +| 场景 | 单线程 | 10 线程 | +|------|--------|---------| +| 下载 12 个月数据 | ~12 秒 | ~2 秒 | +| 下载 3 年数据 | ~36 秒 | ~6 秒 | +| 下载 10 个交易对 | ~120 秒 | ~20 秒 | + +*注:实际性能取决于网络速度和服务器响应时间* diff --git a/docs/MONTHLY_DOWNLOAD_SCRIPTS.md b/docs/MONTHLY_DOWNLOAD_SCRIPTS.md new file mode 100644 index 0000000..359f545 --- /dev/null +++ b/docs/MONTHLY_DOWNLOAD_SCRIPTS.md @@ -0,0 +1,237 @@ +# Binance 月度数据下载脚本使用指南 + +本目录包含用于下载 Binance 月度数据的脚本。 + +## 📁 可用脚本列表 + +| 脚本 | 数据类型 | 支持的市场 | 支持 Intervals | 说明 | +|------|---------|-----------|---------------|------| +| `download-monthly-klines.py` | K线数据 | spot, um, cm | ✅ | 现货和期货的K线/蜡烛图数据 | +| `download-monthly-trades.py` | 逐笔成交 | spot, um, cm | ❌ | 个人交易数据 | +| `download-monthly-aggTrades.py` | 归集成交 | spot, um, cm | ❌ | 归集后的交易数据 | +| `download-monthly-indexPriceKlines.py` | 指数价格K线 | um, cm | ✅ | 期货指数价格K线 | +| `download-monthly-markPriceKlines.py` | 标记价格K线 | um, cm | ✅ | 期货标记价格K线 | +| `download-monthly-premiumIndexKlines.py` | 溢价指数K线 | um | ✅ | 期货溢价指数K线 | +| `download-futures-fundingRate.py` | 资金费率 | um, cm | ❌ | 期货资金费率 | +| `download-daily-bookTicker.py` | 24小时最优挂单 | um, cm | ❌ | **仅日度数据** | + +## 🚀 快速开始 + +### 1. K线数据下载(支持多种周期) + +```bash +# 下载现货日线数据(默认1d周期) +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -y 2024 + +# 下载小时级别数据 +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -i 1h -y 2024 + +# 下载期货数据 +python scripts/download-monthly-klines.py -t um -s BTCUSDT -i 1h -y 2024 + +# 下载多个周期 +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -i 1h 4h 1d -y 2024 +``` + +### 2. 成交数据下载 + +```bash +# 下载逐笔成交 +python scripts/download-monthly-trades.py -t spot -s BTCUSDT -y 2024 + +# 下载归集成交 +python scripts/download-monthly-aggTrades.py -t spot -s BTCUSDT -y 2024 +``` + +### 3. 期货专用数据 + +```bash +# 下载指数价格K线 +python scripts/download-monthly-indexPriceKlines.py -t um -s BTCUSDT -i 1h -y 2024 + +# 下载标记价格K线 +python scripts/download-monthly-markPriceKlines.py -t um -s BTCUSDT -i 1h -y 2024 + +# 下载溢价指数K线 +python scripts/download-monthly-premiumIndexKlines.py -s BTCUSDT -i 1h -y 2024 + +# 下载资金费率 +python scripts/download-futures-fundingRate.py -t um -s BTCUSDT -y 2024 + +# 下载最优挂单(仅日度数据) +python scripts/download-daily-bookTicker.py -t um -s BTCUSDT -y 2024 +``` + +## 📋 通用参数说明 + +| 参数 | 说明 | 示例 | 默认值 | +|------|------|------|--------| +| `-t` | 市场类型 | `spot`, `um`, `cm` | 因脚本而异 | +| `-s` | 交易对 | `BTCUSDT ETHUSDT` | 自动获取所有 | +| `-i` | K线周期 | `1m 5m 1h 1d` | `1d` | +| `-y` | 年份 | `2023 2024` | 2020-当前年份 | +| `-m` | 月份 | `1 6 12` | 1-12 (全部) | +| `-folder` | 输出目录 | `/data/binance` | 当前目录 | +| `--no-skip-existing` | 强制重新下载 | - | 跳过已存在文件 | +| `-log-level` | 日志级别 | `DEBUG INFO WARNING` | `INFO` | + +## 🔄 支持的 K线周期 + +对于支持 intervals 的数据类型: + +- **分钟级**: `1m`, `3m`, `5m`, `15m`, `30m` +- **小时级**: `1h`, `2h`, `4h`, `6h`, `8h`, `12h` +- **日级**: `1d` +- **周级**: `1w` +- **月级**: `1mo` + +## 📂 文件保存位置 + +### 现货数据 (spot) +``` +J:\binance-public-data\data\spot\monthly\{数据类型}\{交易对}\{交易对}-{数据类型}-{年份}-{月份}.zip +``` + +### 期货数据 (um/cm) +``` +J:\binance-public-data\data\futures\{市场类型}\monthly\{数据类型}\{交易对}\{交易对}-{数据类型}-{年份}-{月份}.zip +``` + +### 示例 +``` +# 现货K线 +data\spot\monthly\klines\BTCUSDT\1d\BTCUSDT-1d-2024-01.zip + +# 期货K线 +data\futures\um\monthly\klines\BTCUSDT\1h\BTCUSDT-1h-2024-01.zip + +# 资金费率 +data\futures\um\monthly\fundingRate\BTCUSDT\BTCUSDT-fundingRate-2024-01.zip +``` + +## ⚙️ 特性说明 + +### ✅ 所有脚本共有的特性 + +1. **10 线程并发下载** - 显著提升下载速度 +2. **自动跳过已存在文件** - 避免重复下载 +3. **详细日志输出** - 显示交易对、日期、文件大小 +4. **自动获取所有交易对** - 不指定 `-s` 时自动获取 +5. **线程安全** - 每次下载使用独立的 SSL 上下文 +6. **自动重试** - 网络错误自动重试 3 次 + +### 📊 数据类型特性对比 + +| 数据类型 | 月度数据 | 日度数据 | 支持 Intervals | 适用市场 | +|---------|---------|---------|---------------|---------| +| Klines | ✅ | ✅ | ✅ | spot, um, cm | +| Trades | ✅ | ✅ | ❌ | spot, um, cm | +| AggTrades | ✅ | ✅ | ❌ | spot, um, cm | +| IndexPriceKlines | ✅ | ✅ | ✅ | um, cm | +| MarkPriceKlines | ✅ | ✅ | ✅ | um, cm | +| PremiumIndexKlines | ✅ | ✅ | ✅ | um only | +| FundingRate | ✅ | ❌ | ❌ | um, cm | +| BookTicker | ❌ | ✅ | ❌ | um, cm | + +## 💡 使用示例 + +### 示例 1: 下载 BTC 和 ETH 的现货数据 + +```bash +# 下载 K线(多个周期) +python scripts/download-monthly-klines.py -t spot -s BTCUSDT ETHUSDT -i 1h 1d -y 2024 + +# 下载成交数据 +python scripts/download-monthly-trades.py -t spot -s BTCUSDT ETHUSDT -y 2024 + +# 下载归集成交 +python scripts/download-monthly-aggTrades.py -t spot -s BTCUSDT ETHUSDT -y 2024 +``` + +### 示例 2: 下载期货数据 + +```bash +# USD-M 期货 +python scripts/download-monthly-klines.py -t um -s BTCUSDT -i 1h -y 2024 +python scripts/download-monthly-indexPriceKlines.py -t um -s BTCUSDT -i 1h -y 2024 +python scripts/download-monthly-markPriceKlines.py -t um -s BTCUSDT -i 1h -y 2024 +python scripts/download-futures-fundingRate.py -t um -s BTCUSDT -y 2024 + +# COIN-M 期货 +python scripts/download-monthly-klines.py -t cm -s BTCUSD_PERP -i 1h -y 2024 +python scripts/download-monthly-indexPriceKlines.py -t cm -s BTCUSD_PERP -i 1h -y 2024 +``` + +### 示例 3: 下载多年数据 + +```bash +# 下载 2020-2024 年的所有数据 +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -i 1d -y 2020 2021 2022 2023 2024 +``` + +### 示例 4: 下载特定月份 + +```bash +# 只下载 1 月和 12 月的数据 +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -i 1d -y 2024 -m 1 12 +``` + +### 示例 5: 下载所有交易对 + +```bash +# 不指定 -s,自动下载所有交易对 +python scripts/download-monthly-klines.py -t spot -i 1d -y 2024 + +# 注意:这会下载大量数据,请确保有足够的磁盘空间 +``` + +## 🔍 调试和故障排除 + +### 查看详细日志 + +```bash +# 使用 DEBUG 级别查看详细信息 +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -y 2024 -log-level DEBUG +``` + +### 验证下载的文件 + +```bash +# Windows +dir /s /b data\spot\monthly\klines\BTCUSDT\*.zip + +# Linux/Mac +find data/spot/monthly/klines/BTCUSDT/ -name "*.zip" +``` + +### 强制重新下载 + +```bash +# 即使文件存在也重新下载 +python scripts/download-monthly-klines.py -t spot -s BTCUSDT -y 2024 --no-skip-existing +``` + +## 📝 注意事项 + +1. **BookTicker 只有日度数据** - 使用 `download-daily-bookTicker.py` +2. **FundingRate 只有月度数据** - 使用 `download-futures-fundingRate.py` +3. **PremiumIndexKlines 仅支持 um 市场** - 仅 USD-M 期货可用 +4. **多线程下载** - 所有脚本使用 10 个并发线程 +5. **磁盘空间** - 下载所有数据会占用大量空间 +6. **网络稳定** - 确保网络连接稳定,失败会自动重试 + +## 🚀 性能说明 + +使用 10 个并发线程时,下载速度大约提升 **6 倍**: + +| 场景 | 单线程 | 10 线程 | +|------|--------|---------| +| 下载 12 个月数据 | ~12 秒 | ~2 秒 | +| 下载 3 年数据 | ~36 秒 | ~6 秒 | +| 下载 10 个交易对 | ~120 秒 | ~20 秒 | + +## 🔗 相关文档 + +- [Funding Rate 下载说明](FUNDING_RATE_DOWNLOAD.md) +- [项目 README](../../README.md) +- [迁移指南](../../MIGRATION.md) diff --git "a/docs/\350\277\255\344\273\2431-\345\270\201\345\256\211\346\234\237\350\264\247\346\225\260\346\215\256\344\270\213\350\275\275.md" "b/docs/\350\277\255\344\273\2431-\345\270\201\345\256\211\346\234\237\350\264\247\346\225\260\346\215\256\344\270\213\350\275\275.md" new file mode 100644 index 0000000..21fc218 --- /dev/null +++ "b/docs/\350\277\255\344\273\2431-\345\270\201\345\256\211\346\234\237\350\264\247\346\225\260\346\215\256\344\270\213\350\275\275.md" @@ -0,0 +1,23 @@ +### 背景 + +现在已经更新过框架了,理论上一个品种的开始,结束,这样的下载已经实现,我现在希望实现一个整合的脚本,能一次性下载所有的相关的数据 + +### 任务 + +1. 从https://data.binance.vision/?prefix=data/futures/um/daily/ 这个网址里面获取所有的数据类型,比如 +aggTrades +bookDepth +现在看一共有9个,需要写一个函数能够自动获取 +2. 从具体的数据类型的网址中获取所有的symbol:https://data.binance.vision/?prefix=data/futures/um/daily/bookDepth/ +1000000BOBUSDT +0GUSDT +有很多的symbol,写一个函数自动获取所有的symbol +3. 在symbol的网站上:https://data.binance.vision/?prefix=data/futures/um/daily/bookDepth/0GUSDT/ +可以获取具体的数据时间,比如:0GUSDT-bookDepth-2026-01-16.zip +0GUSDT-bookDepth-2025-09-17.zip 写一个函数:获取一个最早的时间作为开始时间,最晚的时间作为结束时间 +4. 然后调用原先的函数,下载相应的数据 + +总体上就是几个遍历,先获取数据类型,遍历数据类型: +然后获取symbol的列表,遍历symbol, +获取symbol的开始时间和结束时间,调用相应的函数下载数据 +下载数据的时候需要先判断本地是否已经有了,如果本地已经有了,就不要再下载。 \ No newline at end of file diff --git "a/docs/\350\277\255\344\273\2432-\346\225\260\346\215\256\350\204\232\346\234\254\344\270\213\350\275\275.md" "b/docs/\350\277\255\344\273\2432-\346\225\260\346\215\256\350\204\232\346\234\254\344\270\213\350\275\275.md" new file mode 100644 index 0000000..0f8a2fb --- /dev/null +++ "b/docs/\350\277\255\344\273\2432-\346\225\260\346\215\256\350\204\232\346\234\254\344\270\213\350\275\275.md" @@ -0,0 +1,47 @@ +我希望能够参考scripts\download-futures-fundingRate.py +这个月度资金费率的下载脚本,实现下面的脚本: +如果没有传入具体的symbol的话,默认下载所有的symbol, +如果有多个周期,比如kline, 要一个1m, 15m, 1h, 4h, 8h的周期的数据 + + +download-spot-monthly-aggTrades +download-spot-monthly-klines +download-spot-monthly-trades +download-spot-daily-aggTrades +download-spot-daily-klines +download-spot-daily-trades +download-futures-um-monthly-aggTrades +download-futures-um-monthly-bookTicker +download-futures-um-monthly-indexPriceKlines +download-futures-um-monthly-klines +download-futures-um-monthly-markPriceKlines +download-futures-um-monthly-premiumIndexKlines +download-futures-um-monthly-trades +download-futures-um-daily-aggTrades +download-futures-um-daily-bookTicker +download-futures-um-daily-indexPriceKlines +download-futures-um-daily-klines +download-futures-um-daily-markPriceKlines +download-futures-um-daily-premiumIndexKlines +download-futures-um-daily-trades +download-futures-um-daily-bookDepth +download-futures-um-daily-metrics + +download-futures-cm-monthly-aggTrades +download-futures-cm-monthly-bookTicker +download-futures-cm-monthly-fundingRate +download-futures-cm-monthly-indexPriceKlines +download-futures-cm-monthly-klines +download-futures-cm-monthly-markPriceKlines +download-futures-cm-monthly-premiumIndexKlines +download-futures-cm-monthly-trades +download-futures-cm-daily-aggTrades +download-futures-cm-daily-bookTicker +download-futures-cm-daily-indexPriceKlines +download-futures-cm-daily-klines +download-futures-cm-daily-markPriceKlines +download-futures-cm-daily-premiumIndexKlines +download-futures-cm-daily-trades +download-futures-cm-daily-bookDepth +download-futures-cm-daily-metrics + diff --git a/logs/.gitkeep b/logs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/python/download-aggTrade.py b/python/download-aggTrade.py index 7be5d5e..e44ffd0 100755 --- a/python/download-aggTrade.py +++ b/python/download-aggTrade.py @@ -14,102 +14,107 @@ import pandas as pd from enums import * from utility import download_file, get_all_symbols, get_parser, get_start_end_date_objects, convert_to_date_object, \ - get_path + get_path -def download_monthly_aggTrades(trading_type, symbols, num_symbols, years, months, start_date, end_date, folder, checksum): - current = 0 - date_range = None +def download_monthly_aggTrades(trading_type, symbols, num_symbols, years, months, start_date, end_date, folder, + checksum): + current = 0 + date_range = None - if start_date and end_date: - date_range = start_date + " " + end_date + if start_date and end_date: + date_range = start_date + " " + end_date - if not start_date: - start_date = START_DATE - else: - start_date = convert_to_date_object(start_date) + if not start_date: + start_date = START_DATE + else: + start_date = convert_to_date_object(start_date) + + if not end_date: + end_date = END_DATE + else: + end_date = convert_to_date_object(end_date) + + print("Found {} symbols".format(num_symbols)) - if not end_date: - end_date = END_DATE - else: - end_date = convert_to_date_object(end_date) + for symbol in symbols: + print("[{}/{}] - start download monthly {} aggTrades ".format(current + 1, num_symbols, symbol)) + for year in years: + for month in months: + current_date = convert_to_date_object('{}-{}-01'.format(year, month)) + if current_date >= start_date and current_date <= end_date: + path = get_path(trading_type, "aggTrades", "monthly", symbol) + file_name = "{}-aggTrades-{}-{}.zip".format(symbol.upper(), year, '{:02d}'.format(month)) + download_file(path, file_name, date_range, folder) - print("Found {} symbols".format(num_symbols)) + if checksum == 1: + checksum_path = get_path(trading_type, "aggTrades", "monthly", symbol) + checksum_file_name = "{}-aggTrades-{}-{}.zip.CHECKSUM".format(symbol.upper(), year, + '{:02d}'.format(month)) + download_file(checksum_path, checksum_file_name, date_range, folder) - for symbol in symbols: - print("[{}/{}] - start download monthly {} aggTrades ".format(current+1, num_symbols, symbol)) - for year in years: - for month in months: - current_date = convert_to_date_object('{}-{}-01'.format(year, month)) - if current_date >= start_date and current_date <= end_date: - path = get_path(trading_type, "aggTrades", "monthly", symbol) - file_name = "{}-aggTrades-{}-{}.zip".format(symbol.upper(), year, '{:02d}'.format(month)) - download_file(path, file_name, date_range, folder) + current += 1 - if checksum == 1: - checksum_path = get_path(trading_type, "aggTrades", "monthly", symbol) - checksum_file_name = "{}-aggTrades-{}-{}.zip.CHECKSUM".format(symbol.upper(), year, '{:02d}'.format(month)) - download_file(checksum_path, checksum_file_name, date_range, folder) - - current += 1 def download_daily_aggTrades(trading_type, symbols, num_symbols, dates, start_date, end_date, folder, checksum): - current = 0 - date_range = None + current = 0 + date_range = None - if start_date and end_date: - date_range = start_date + " " + end_date + if start_date and end_date: + date_range = start_date + " " + end_date - if not start_date: - start_date = START_DATE - else: - start_date = convert_to_date_object(start_date) + if not start_date: + start_date = START_DATE + else: + start_date = convert_to_date_object(start_date) + + if not end_date: + end_date = END_DATE + else: + end_date = convert_to_date_object(end_date) - if not end_date: - end_date = END_DATE - else: - end_date = convert_to_date_object(end_date) + print("Found {} symbols".format(num_symbols)) - print("Found {} symbols".format(num_symbols)) + for symbol in symbols: + print("[{}/{}] - start download daily {} aggTrades ".format(current + 1, num_symbols, symbol)) + for date in dates: + current_date = convert_to_date_object(date) + if current_date >= start_date and current_date <= end_date: + path = get_path(trading_type, "aggTrades", "daily", symbol) + file_name = "{}-aggTrades-{}.zip".format(symbol.upper(), date) + download_file(path, file_name, date_range, folder) - for symbol in symbols: - print("[{}/{}] - start download daily {} aggTrades ".format(current+1, num_symbols, symbol)) - for date in dates: - current_date = convert_to_date_object(date) - if current_date >= start_date and current_date <= end_date: - path = get_path(trading_type, "aggTrades", "daily", symbol) - file_name = "{}-aggTrades-{}.zip".format(symbol.upper(), date) - download_file(path, file_name, date_range, folder) + if checksum == 1: + checksum_path = get_path(trading_type, "aggTrades", "daily", symbol) + checksum_file_name = "{}-aggTrades-{}.zip.CHECKSUM".format(symbol.upper(), date) + download_file(checksum_path, checksum_file_name, date_range, folder) - if checksum == 1: - checksum_path = get_path(trading_type, "aggTrades", "daily", symbol) - checksum_file_name = "{}-aggTrades-{}.zip.CHECKSUM".format(symbol.upper(), date) - download_file(checksum_path, checksum_file_name, date_range, folder) + current += 1 - current += 1 if __name__ == "__main__": parser = get_parser('aggTrades') args = parser.parse_args(sys.argv[1:]) if not args.symbols: - print("fetching all symbols from exchange") - symbols = get_all_symbols(args.type) - num_symbols = len(symbols) + print("fetching all symbols from exchange") + symbols = get_all_symbols(args.type) + num_symbols = len(symbols) else: - symbols = args.symbols - num_symbols = len(symbols) - print("fetching {} symbols from exchange".format(num_symbols)) + symbols = args.symbols + num_symbols = len(symbols) + print("fetching {} symbols from exchange".format(num_symbols)) if args.dates: - dates = args.dates + dates = args.dates else: - period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( - PERIOD_START_DATE) - dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() - dates = [date.strftime("%Y-%m-%d") for date in dates] - if args.skip_monthly == 0: - download_monthly_aggTrades(args.type, symbols, num_symbols, args.years, args.months, args.startDate, args.endDate, args.folder, args.checksum) + period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( + PERIOD_START_DATE) + dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() + dates = [date.strftime("%Y-%m-%d") for date in dates] + if args.skip_monthly == 0: + download_monthly_aggTrades(args.type, symbols, num_symbols, args.years, args.months, args.startDate, + args.endDate, args.folder, args.checksum) if args.skip_daily == 0: - download_daily_aggTrades(args.type, symbols, num_symbols, dates, args.startDate, args.endDate, args.folder, args.checksum) - + download_daily_aggTrades(args.type, symbols, num_symbols, dates, args.startDate, args.endDate, args.folder, + args.checksum) diff --git a/python/download-futures-markPriceKlines.py b/python/download-futures-markPriceKlines.py index d1a2bf3..6b3dc9e 100644 --- a/python/download-futures-markPriceKlines.py +++ b/python/download-futures-markPriceKlines.py @@ -18,7 +18,7 @@ def download_monthly_markPriceKlines(trading_type, symbols, num_symbols, intervals, years, months, start_date, - end_date, folder, checksum): + end_date, folder, checksum): current = 0 date_range = None @@ -58,7 +58,7 @@ def download_monthly_markPriceKlines(trading_type, symbols, num_symbols, interva def download_daily_markPriceKlines(trading_type, symbols, num_symbols, intervals, dates, start_date, end_date, folder, - checksum): + checksum): current = 0 date_range = None @@ -115,10 +115,11 @@ def download_daily_markPriceKlines(trading_type, symbols, num_symbols, intervals if args.dates: dates = args.dates else: - period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object(PERIOD_START_DATE) + period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( + PERIOD_START_DATE) dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() dates = [date.strftime("%Y-%m-%d") for date in dates] download_monthly_markPriceKlines(args.type, symbols, num_symbols, args.intervals, args.years, args.months, - args.startDate, args.endDate, args.folder, args.checksum) + args.startDate, args.endDate, args.folder, args.checksum) download_daily_markPriceKlines(args.type, symbols, num_symbols, args.intervals, dates, args.startDate, - args.endDate, args.folder, args.checksum) + args.endDate, args.folder, args.checksum) diff --git a/python/download-futures-premiumIndexKlines.py b/python/download-futures-premiumIndexKlines.py index 74bfae7..8c8bcc1 100644 --- a/python/download-futures-premiumIndexKlines.py +++ b/python/download-futures-premiumIndexKlines.py @@ -18,7 +18,7 @@ def download_monthly_premiumIndexKlines(trading_type, symbols, num_symbols, intervals, years, months, start_date, - end_date, folder, checksum): + end_date, folder, checksum): current = 0 date_range = None @@ -57,8 +57,9 @@ def download_monthly_premiumIndexKlines(trading_type, symbols, num_symbols, inte current += 1 -def download_daily_premiumIndexKlines(trading_type, symbols, num_symbols, intervals, dates, start_date, end_date, folder, - checksum): +def download_daily_premiumIndexKlines(trading_type, symbols, num_symbols, intervals, dates, start_date, end_date, + folder, + checksum): current = 0 date_range = None @@ -120,6 +121,6 @@ def download_daily_premiumIndexKlines(trading_type, symbols, num_symbols, interv dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() dates = [date.strftime("%Y-%m-%d") for date in dates] download_monthly_premiumIndexKlines(args.type, symbols, num_symbols, args.intervals, args.years, args.months, - args.startDate, args.endDate, args.folder, args.checksum) + args.startDate, args.endDate, args.folder, args.checksum) download_daily_premiumIndexKlines(args.type, symbols, num_symbols, args.intervals, dates, args.startDate, - args.endDate, args.folder, args.checksum) + args.endDate, args.folder, args.checksum) diff --git a/python/download-kline.py b/python/download-kline.py index 1be6791..583c5dc 100755 --- a/python/download-kline.py +++ b/python/download-kline.py @@ -12,105 +12,172 @@ import pandas as pd from enums import * from utility import download_file, get_all_symbols, get_parser, get_start_end_date_objects, convert_to_date_object, \ - get_path - - -def download_monthly_klines(trading_type, symbols, num_symbols, intervals, years, months, start_date, end_date, folder, checksum): - current = 0 - date_range = None - - if start_date and end_date: - date_range = start_date + " " + end_date - - if not start_date: - start_date = START_DATE - else: - start_date = convert_to_date_object(start_date) - - if not end_date: - end_date = END_DATE - else: - end_date = convert_to_date_object(end_date) - - print("Found {} symbols".format(num_symbols)) - - for symbol in symbols: - print("[{}/{}] - start download monthly {} klines ".format(current+1, num_symbols, symbol)) - for interval in intervals: - for year in years: - for month in months: - current_date = convert_to_date_object('{}-{}-01'.format(year, month)) - if current_date >= start_date and current_date <= end_date: - path = get_path(trading_type, "klines", "monthly", symbol, interval) - file_name = "{}-{}-{}-{}.zip".format(symbol.upper(), interval, year, '{:02d}'.format(month)) - download_file(path, file_name, date_range, folder) - - if checksum == 1: - checksum_path = get_path(trading_type, "klines", "monthly", symbol, interval) - checksum_file_name = "{}-{}-{}-{}.zip.CHECKSUM".format(symbol.upper(), interval, year, '{:02d}'.format(month)) - download_file(checksum_path, checksum_file_name, date_range, folder) - - current += 1 - -def download_daily_klines(trading_type, symbols, num_symbols, intervals, dates, start_date, end_date, folder, checksum): - current = 0 - date_range = None - - if start_date and end_date: - date_range = start_date + " " + end_date - - if not start_date: - start_date = START_DATE - else: - start_date = convert_to_date_object(start_date) - - if not end_date: - end_date = END_DATE - else: - end_date = convert_to_date_object(end_date) - - #Get valid intervals for daily - intervals = list(set(intervals) & set(DAILY_INTERVALS)) - print("Found {} symbols".format(num_symbols)) - - for symbol in symbols: - print("[{}/{}] - start download daily {} klines ".format(current+1, num_symbols, symbol)) - for interval in intervals: - for date in dates: - current_date = convert_to_date_object(date) - if current_date >= start_date and current_date <= end_date: - path = get_path(trading_type, "klines", "daily", symbol, interval) - file_name = "{}-{}-{}.zip".format(symbol.upper(), interval, date) - download_file(path, file_name, date_range, folder) - - if checksum == 1: - checksum_path = get_path(trading_type, "klines", "daily", symbol, interval) - checksum_file_name = "{}-{}-{}.zip.CHECKSUM".format(symbol.upper(), interval, date) - download_file(checksum_path, checksum_file_name, date_range, folder) - - current += 1 + get_path +from concurrent.futures import ThreadPoolExecutor, as_completed + +def download_monthly_klines(trading_type, symbols, num_symbols, intervals, years, months, start_date, end_date, folder, + checksum): + current = 0 + date_range = None + + if start_date and end_date: + date_range = start_date + " " + end_date + + if not start_date: + start_date = START_DATE + else: + start_date = convert_to_date_object(start_date) + + if not end_date: + end_date = END_DATE + else: + end_date = convert_to_date_object(end_date) + + print("Found {} symbols".format(num_symbols)) + + for symbol in symbols: + print("[{}/{}] - start download monthly {} klines ".format(current + 1, num_symbols, symbol)) + for interval in intervals: + for year in years: + for month in months: + current_date = convert_to_date_object('{}-{}-01'.format(year, month)) + if current_date >= start_date and current_date <= end_date: + path = get_path(trading_type, "klines", "monthly", symbol, interval) + file_name = "{}-{}-{}-{}.zip".format(symbol.upper(), interval, year, '{:02d}'.format(month)) + download_file(path, file_name, date_range, folder) + + if checksum == 1: + checksum_path = get_path(trading_type, "klines", "monthly", symbol, interval) + checksum_file_name = "{}-{}-{}-{}.zip.CHECKSUM".format(symbol.upper(), interval, year, + '{:02d}'.format(month)) + download_file(checksum_path, checksum_file_name, date_range, folder) + + current += 1 + + +# def download_daily_klines(trading_type, symbols, num_symbols, intervals, dates, start_date, end_date, folder, checksum): +# current = 0 +# date_range = None +# +# if start_date and end_date: +# date_range = start_date + " " + end_date +# +# if not start_date: +# start_date = START_DATE +# else: +# start_date = convert_to_date_object(start_date) +# +# if not end_date: +# end_date = END_DATE +# else: +# end_date = convert_to_date_object(end_date) +# +# #Get valid intervals for daily +# intervals = list(set(intervals) & set(DAILY_INTERVALS)) +# print("Found {} symbols".format(num_symbols)) +# +# for symbol in symbols: +# print("[{}/{}] - start download daily {} klines ".format(current + 1, num_symbols, symbol)) +# for interval in intervals: +# for date in dates: +# current_date = convert_to_date_object(date) +# if current_date >= start_date and current_date <= end_date: +# path = get_path(trading_type, "klines", "daily", symbol, interval) +# file_name = "{}-{}-{}.zip".format(symbol.upper(), interval, date) +# download_file(path, file_name, date_range, folder) +# +# if checksum == 1: +# checksum_path = get_path(trading_type, "klines", "daily", symbol, interval) +# checksum_file_name = "{}-{}-{}.zip.CHECKSUM".format(symbol.upper(), interval, date) +# download_file(checksum_path, checksum_file_name, date_range, folder) +# +# current += 1 +def download_daily_klines(trading_type, symbols, num_symbols, + intervals, dates, start_date, end_date, + folder, checksum, max_workers=10): + current = 0 + date_range = None + + if start_date and end_date: + date_range = start_date + " " + end_date + + if not start_date: + start_date = START_DATE + else: + start_date = convert_to_date_object(start_date) + + if not end_date: + end_date = END_DATE + else: + end_date = convert_to_date_object(end_date) + + # Get valid intervals for daily + intervals = list(set(intervals) & set(DAILY_INTERVALS)) + print("Found {} symbols".format(num_symbols)) + + for symbol in symbols: + print("[{}/{}] - start download daily {} klines ".format(current + 1, num_symbols, symbol)) + + # Create a ThreadPoolExecutor + with ThreadPoolExecutor(max_workers=max_workers) as executor: + futures = [] + for interval in intervals: + for date in dates: + current_date = convert_to_date_object(date) + if current_date >= start_date and current_date <= end_date: + # Submit the download task to the thread pool + futures.append( + executor.submit(download_file_task, trading_type, symbol, interval, date, date_range, + folder, checksum)) + + # Wait for all tasks to complete + for future in as_completed(futures): + try: + future.result() + except Exception as e: + print(f"Error occurred while downloading: {e}") + + current += 1 + + +def download_file_task(trading_type, symbol, interval, date, date_range, folder, checksum): + path = get_path(trading_type, "klines", "daily", symbol, interval) + file_name = "{}-{}-{}.zip".format(symbol.upper(), interval, date) + download_file(path, file_name, date_range, folder) + + if checksum == 1: + checksum_path = get_path(trading_type, "klines", "daily", symbol, interval) + checksum_file_name = "{}-{}-{}.zip.CHECKSUM".format(symbol.upper(), interval, date) + download_file(checksum_path, checksum_file_name, date_range, folder) + if __name__ == "__main__": parser = get_parser('klines') args = parser.parse_args(sys.argv[1:]) if not args.symbols: - print("fetching all symbols from exchange") - symbols = get_all_symbols(args.type) - num_symbols = len(symbols) + print("fetching all symbols from exchange") + symbols = get_all_symbols(args.type) + num_symbols = len(symbols) else: - symbols = args.symbols - num_symbols = len(symbols) - + symbols = args.symbols + num_symbols = len(symbols) + import random + random.shuffle(symbols) if args.dates: - dates = args.dates + dates = args.dates else: - period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( - PERIOD_START_DATE) - dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() - dates = [date.strftime("%Y-%m-%d") for date in dates] - if args.skip_monthly == 0: - download_monthly_klines(args.type, symbols, num_symbols, args.intervals, args.years, args.months, args.startDate, args.endDate, args.folder, args.checksum) + period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( + PERIOD_START_DATE) + dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() + dates = [date.strftime("%Y-%m-%d") for date in dates] + if args.skip_monthly == 0: + download_monthly_klines(args.type, symbols, num_symbols, args.intervals, args.years, args.months, + args.startDate, args.endDate, args.folder, args.checksum) + if args.max_workers: + max_workers = args.max_workers + else: + max_workers = 10 if args.skip_daily == 0: - download_daily_klines(args.type, symbols, num_symbols, args.intervals, dates, args.startDate, args.endDate, args.folder, args.checksum) - + download_daily_klines(args.type, symbols, num_symbols, args.intervals, dates, args.startDate, args.endDate, + args.folder, args.checksum, max_workers) diff --git a/python/download-trade.py b/python/download-trade.py index af75964..a6258c4 100755 --- a/python/download-trade.py +++ b/python/download-trade.py @@ -13,102 +13,106 @@ import pandas as pd from enums import * from utility import download_file, get_all_symbols, get_parser, get_start_end_date_objects, convert_to_date_object, \ - get_path + get_path def download_monthly_trades(trading_type, symbols, num_symbols, years, months, start_date, end_date, folder, checksum): - current = 0 - date_range = None - - if start_date and end_date: - date_range = start_date + " " + end_date - - if not start_date: - start_date = START_DATE - else: - start_date = convert_to_date_object(start_date) - - if not end_date: - end_date = END_DATE - else: - end_date = convert_to_date_object(end_date) - - print("Found {} symbols".format(num_symbols)) - - for symbol in symbols: - print("[{}/{}] - start download monthly {} trades ".format(current+1, num_symbols, symbol)) - for year in years: - for month in months: - current_date = convert_to_date_object('{}-{}-01'.format(year, month)) - if current_date >= start_date and current_date <= end_date: - path = get_path(trading_type, "trades", "monthly", symbol) - file_name = "{}-trades-{}-{}.zip".format(symbol.upper(), year, '{:02d}'.format(month)) - download_file(path, file_name, date_range, folder) - - if checksum == 1: - checksum_path = get_path(trading_type, "trades", "monthly", symbol) - checksum_file_name = "{}-trades-{}-{}.zip.CHECKSUM".format(symbol.upper(), year, '{:02d}'.format(month)) - download_file(checksum_path, checksum_file_name, date_range, folder) - - current += 1 + current = 0 + date_range = None + + if start_date and end_date: + date_range = start_date + " " + end_date + + if not start_date: + start_date = START_DATE + else: + start_date = convert_to_date_object(start_date) + + if not end_date: + end_date = END_DATE + else: + end_date = convert_to_date_object(end_date) + + print("Found {} symbols".format(num_symbols)) + + for symbol in symbols: + print("[{}/{}] - start download monthly {} trades ".format(current + 1, num_symbols, symbol)) + for year in years: + for month in months: + current_date = convert_to_date_object('{}-{}-01'.format(year, month)) + if current_date >= start_date and current_date <= end_date: + path = get_path(trading_type, "trades", "monthly", symbol) + file_name = "{}-trades-{}-{}.zip".format(symbol.upper(), year, '{:02d}'.format(month)) + download_file(path, file_name, date_range, folder) + + if checksum == 1: + checksum_path = get_path(trading_type, "trades", "monthly", symbol) + checksum_file_name = "{}-trades-{}-{}.zip.CHECKSUM".format(symbol.upper(), year, + '{:02d}'.format(month)) + download_file(checksum_path, checksum_file_name, date_range, folder) + + current += 1 + def download_daily_trades(trading_type, symbols, num_symbols, dates, start_date, end_date, folder, checksum): - current = 0 - date_range = None - - if start_date and end_date: - date_range = start_date + " " + end_date - - if not start_date: - start_date = START_DATE - else: - start_date = convert_to_date_object(start_date) - - if not end_date: - end_date = END_DATE - else: - end_date = convert_to_date_object(end_date) - - print("Found {} symbols".format(num_symbols)) - - for symbol in symbols: - print("[{}/{}] - start download daily {} trades ".format(current+1, num_symbols, symbol)) - for date in dates: - current_date = convert_to_date_object(date) - if current_date >= start_date and current_date <= end_date: - path = get_path(trading_type, "trades", "daily", symbol) - file_name = "{}-trades-{}.zip".format(symbol.upper(), date) - download_file(path, file_name, date_range, folder) - - if checksum == 1: - checksum_path = get_path(trading_type, "trades", "daily", symbol) - checksum_file_name = "{}-trades-{}.zip.CHECKSUM".format(symbol.upper(), date) - download_file(checksum_path, checksum_file_name, date_range, folder) - - current += 1 + current = 0 + date_range = None + + if start_date and end_date: + date_range = start_date + " " + end_date + + if not start_date: + start_date = START_DATE + else: + start_date = convert_to_date_object(start_date) + + if not end_date: + end_date = END_DATE + else: + end_date = convert_to_date_object(end_date) + + print("Found {} symbols".format(num_symbols)) + + for symbol in symbols: + print("[{}/{}] - start download daily {} trades ".format(current + 1, num_symbols, symbol)) + for date in dates: + current_date = convert_to_date_object(date) + if current_date >= start_date and current_date <= end_date: + path = get_path(trading_type, "trades", "daily", symbol) + file_name = "{}-trades-{}.zip".format(symbol.upper(), date) + download_file(path, file_name, date_range, folder) + + if checksum == 1: + checksum_path = get_path(trading_type, "trades", "daily", symbol) + checksum_file_name = "{}-trades-{}.zip.CHECKSUM".format(symbol.upper(), date) + download_file(checksum_path, checksum_file_name, date_range, folder) + + current += 1 + if __name__ == "__main__": parser = get_parser('trades') args = parser.parse_args(sys.argv[1:]) if not args.symbols: - print("fetching all symbols from exchange") - symbols = get_all_symbols(args.type) - num_symbols = len(symbols) + print("fetching all symbols from exchange") + symbols = get_all_symbols(args.type) + num_symbols = len(symbols) else: - symbols = args.symbols - num_symbols = len(symbols) - print("fetching {} symbols from exchange".format(num_symbols)) + symbols = args.symbols + num_symbols = len(symbols) + print("fetching {} symbols from exchange".format(num_symbols)) if args.dates: - dates = args.dates + dates = args.dates else: - period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( - PERIOD_START_DATE) - dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() - dates = [date.strftime("%Y-%m-%d") for date in dates] - if args.skip_monthly == 0: - download_monthly_trades(args.type, symbols, num_symbols, args.years, args.months, args.startDate, args.endDate, args.folder, args.checksum) + period = convert_to_date_object(datetime.today().strftime('%Y-%m-%d')) - convert_to_date_object( + PERIOD_START_DATE) + dates = pd.date_range(end=datetime.today(), periods=period.days + 1).to_pydatetime().tolist() + dates = [date.strftime("%Y-%m-%d") for date in dates] + if args.skip_monthly == 0: + download_monthly_trades(args.type, symbols, num_symbols, args.years, args.months, args.startDate, + args.endDate, args.folder, args.checksum) if args.skip_daily == 0: - download_daily_trades(args.type, symbols, num_symbols, dates, args.startDate, args.endDate, args.folder, args.checksum) - + download_daily_trades(args.type, symbols, num_symbols, dates, args.startDate, args.endDate, args.folder, + args.checksum) diff --git a/python/enums.py b/python/enums.py index ae612a2..89e859e 100644 --- a/python/enums.py +++ b/python/enums.py @@ -4,8 +4,9 @@ INTERVALS = ["1s", "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d", "3d", "1w", "1mo"] DAILY_INTERVALS = ["1s", "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d"] TRADING_TYPE = ["spot", "um", "cm"] -MONTHS = list(range(1,13)) +MONTHS = list(range(1, 13)) PERIOD_START_DATE = '2020-01-01' BASE_URL = 'https://data.binance.vision/' START_DATE = date(int(YEARS[0]), MONTHS[0], 1) END_DATE = datetime.date(datetime.now()) + diff --git a/python/requirements.txt b/python/requirements.txt index 1411a4a..b340433 100644 --- a/python/requirements.txt +++ b/python/requirements.txt @@ -1 +1,10 @@ -pandas \ No newline at end of file +pandas>=1.3.0 +certifi>=2021.5.30 + +# Optional dependencies for enhanced features +pyyaml>=5.4.1 + +# Development dependencies +pytest>=7.0.0 +pytest-cov>=3.0.0 +pytest-mock>=3.6.0 \ No newline at end of file diff --git a/python/utility.py b/python/utility.py index 72d3ee6..1e51bc5 100644 --- a/python/utility.py +++ b/python/utility.py @@ -1,159 +1,179 @@ -import os, sys, re, shutil import json -from pathlib import Path -from datetime import * +import os +import re +import shutil +import ssl +import sys import urllib.request from argparse import ArgumentParser, RawTextHelpFormatter, ArgumentTypeError +from pathlib import Path + +import certifi + from enums import * + def get_destination_dir(file_url, folder=None): - store_directory = os.environ.get('STORE_DIRECTORY') - if folder: - store_directory = folder - if not store_directory: - store_directory = os.path.dirname(os.path.realpath(__file__)) - return os.path.join(store_directory, file_url) + store_directory = os.environ.get('STORE_DIRECTORY') + if folder: + store_directory = folder + if not store_directory: + store_directory = os.path.dirname(os.path.realpath(__file__)) + return os.path.join(store_directory, file_url) + def get_download_url(file_url): - return "{}{}".format(BASE_URL, file_url) + return "{}{}".format(BASE_URL, file_url) + def get_all_symbols(type): - if type == 'um': - response = urllib.request.urlopen("https://fapi.binance.com/fapi/v1/exchangeInfo").read() - elif type == 'cm': - response = urllib.request.urlopen("https://dapi.binance.com/dapi/v1/exchangeInfo").read() - else: - response = urllib.request.urlopen("https://api.binance.com/api/v3/exchangeInfo").read() - return list(map(lambda symbol: symbol['symbol'], json.loads(response)['symbols'])) + if type == 'um': + response = urllib.request.urlopen("https://fapi.binance.com/fapi/v1/exchangeInfo").read() + elif type == 'cm': + response = urllib.request.urlopen("https://dapi.binance.com/dapi/v1/exchangeInfo").read() + else: + response = urllib.request.urlopen("https://api.binance.com/api/v3/exchangeInfo").read() + return list(map(lambda symbol: symbol['symbol'], json.loads(response)['symbols'])) + def download_file(base_path, file_name, date_range=None, folder=None): - download_path = "{}{}".format(base_path, file_name) - if folder: - base_path = os.path.join(folder, base_path) - if date_range: - date_range = date_range.replace(" ","_") - base_path = os.path.join(base_path, date_range) - save_path = get_destination_dir(os.path.join(base_path, file_name), folder) - - - if os.path.exists(save_path): - print("\nfile already exists! {}".format(save_path)) - return - - # make the directory - if not os.path.exists(base_path): - Path(get_destination_dir(base_path)).mkdir(parents=True, exist_ok=True) - - try: - download_url = get_download_url(download_path) - dl_file = urllib.request.urlopen(download_url) - length = dl_file.getheader('content-length') - if length: - length = int(length) - blocksize = max(4096,length//100) - - with open(save_path, 'wb') as out_file: - dl_progress = 0 - print("\nFile Download: {}".format(save_path)) - while True: - buf = dl_file.read(blocksize) - if not buf: - break - dl_progress += len(buf) - out_file.write(buf) - done = int(50 * dl_progress / length) - sys.stdout.write("\r[%s%s]" % ('#' * done, '.' * (50-done)) ) - sys.stdout.flush() - - except urllib.error.HTTPError: - print("\nFile not found: {}".format(download_url)) - pass + download_path = "{}{}".format(base_path, file_name) + if folder: + base_path = os.path.join(folder, base_path) + if date_range: + date_range = date_range.replace(" ", "_") + base_path = os.path.join(base_path, date_range) + save_path = get_destination_dir(os.path.join(base_path, file_name), folder) + + if os.path.exists(save_path): + print("\nfile already exists! {}".format(save_path)) + return + + # make the directory + if not os.path.exists(base_path): + Path(get_destination_dir(base_path)).mkdir(parents=True, exist_ok=True) + + try: + ssl_context = ssl.create_default_context(cafile=certifi.where()) + download_url = get_download_url(download_path) + dl_file = urllib.request.urlopen(download_url, context=ssl_context) + length = dl_file.getheader('content-length') + if length: + length = int(length) + blocksize = max(4096, length // 100) + + with open(save_path, 'wb') as out_file: + dl_progress = 0 + print("\nFile Download: {}".format(save_path)) + while True: + buf = dl_file.read(blocksize) + if not buf: + break + dl_progress += len(buf) + out_file.write(buf) + done = int(50 * dl_progress / length) + sys.stdout.write("\r[%s%s]" % ('#' * done, '.' * (50 - done))) + sys.stdout.flush() + + except urllib.error.HTTPError: + print("\nFile not found: {}".format(download_url)) + pass + def convert_to_date_object(d): - year, month, day = [int(x) for x in d.split('-')] - date_obj = date(year, month, day) - return date_obj + year, month, day = [int(x) for x in d.split('-')] + date_obj = date(year, month, day) + return date_obj + def get_start_end_date_objects(date_range): - start, end = date_range.split() - start_date = convert_to_date_object(start) - end_date = convert_to_date_object(end) - return start_date, end_date + start, end = date_range.split() + start_date = convert_to_date_object(start) + end_date = convert_to_date_object(end) + return start_date, end_date + def match_date_regex(arg_value, pat=re.compile(r'\d{4}-\d{2}-\d{2}')): - if not pat.match(arg_value): - raise ArgumentTypeError - return arg_value + if not pat.match(arg_value): + raise ArgumentTypeError + return arg_value + def check_directory(arg_value): - if os.path.exists(arg_value): - while True: - option = input('Folder already exists! Do you want to overwrite it? y/n ') - if option != 'y' and option != 'n': - print('Invalid Option!') - continue - elif option == 'y': - shutil.rmtree(arg_value) - break - else: - break - return arg_value + if os.path.exists(arg_value): + while True: + option = input('Folder already exists! Do you want to overwrite it? y/n ') + if option != 'y' and option != 'n': + print('Invalid Option!') + continue + elif option == 'y': + shutil.rmtree(arg_value) + break + else: + break + return arg_value + def raise_arg_error(msg): - raise ArgumentTypeError(msg) + raise ArgumentTypeError(msg) + def get_path(trading_type, market_data_type, time_period, symbol, interval=None): - trading_type_path = 'data/spot' - if trading_type != 'spot': - trading_type_path = f'data/futures/{trading_type}' - if interval is not None: - path = f'{trading_type_path}/{time_period}/{market_data_type}/{symbol.upper()}/{interval}/' - else: - path = f'{trading_type_path}/{time_period}/{market_data_type}/{symbol.upper()}/' - return path + trading_type_path = 'data/spot' + if trading_type != 'spot': + trading_type_path = f'data/futures/{trading_type}' + if interval is not None: + path = f'{trading_type_path}/{time_period}/{market_data_type}/{symbol.upper()}/{interval}/' + else: + path = f'{trading_type_path}/{time_period}/{market_data_type}/{symbol.upper()}/' + return path + def get_parser(parser_type): - parser = ArgumentParser(description=("This is a script to download historical {} data").format(parser_type), formatter_class=RawTextHelpFormatter) - parser.add_argument( - '-s', dest='symbols', nargs='+', - help='Single symbol or multiple symbols separated by space') - parser.add_argument( - '-y', dest='years', default=YEARS, nargs='+', choices=YEARS, - help='Single year or multiple years separated by space\n-y 2019 2021 means to download {} from 2019 and 2021'.format(parser_type)) - parser.add_argument( - '-m', dest='months', default=MONTHS, nargs='+', type=int, choices=MONTHS, - help='Single month or multiple months separated by space\n-m 2 12 means to download {} from feb and dec'.format(parser_type)) - parser.add_argument( - '-d', dest='dates', nargs='+', type=match_date_regex, - help='Date to download in [YYYY-MM-DD] format\nsingle date or multiple dates separated by space\ndownload from 2020-01-01 if no argument is parsed') - parser.add_argument( - '-startDate', dest='startDate', type=match_date_regex, - help='Starting date to download in [YYYY-MM-DD] format') - parser.add_argument( - '-endDate', dest='endDate', type=match_date_regex, - help='Ending date to download in [YYYY-MM-DD] format') - parser.add_argument( - '-folder', dest='folder', type=check_directory, - help='Directory to store the downloaded data') - parser.add_argument( - '-skip-monthly', dest='skip_monthly', default=0, type=int, choices=[0, 1], - help='1 to skip downloading of monthly data, default 0') - parser.add_argument( - '-skip-daily', dest='skip_daily', default=0, type=int, choices=[0, 1], - help='1 to skip downloading of daily data, default 0') - parser.add_argument( - '-c', dest='checksum', default=0, type=int, choices=[0,1], - help='1 to download checksum file, default 0') - parser.add_argument( - '-t', dest='type', required=True, choices=TRADING_TYPE, - help='Valid trading types: {}'.format(TRADING_TYPE)) - - if parser_type == 'klines': + parser = ArgumentParser(description=("This is a script to download historical {} data").format(parser_type), + formatter_class=RawTextHelpFormatter) parser.add_argument( - '-i', dest='intervals', default=INTERVALS, nargs='+', choices=INTERVALS, - help='single kline interval or multiple intervals separated by space\n-i 1m 1w means to download klines interval of 1minute and 1week') - - - return parser + '-s', dest='symbols', nargs='+', + help='Single symbol or multiple symbols separated by space') + parser.add_argument( + '-y', dest='years', default=YEARS, nargs='+', choices=YEARS, + help='Single year or multiple years separated by space\n-y 2019 2021 means to download {} from 2019 and 2021'.format( + parser_type)) + parser.add_argument( + '-m', dest='months', default=MONTHS, nargs='+', type=int, choices=MONTHS, + help='Single month or multiple months separated by space\n-m 2 12 means to download {} from feb and dec'.format( + parser_type)) + parser.add_argument( + '-d', dest='dates', nargs='+', type=match_date_regex, + help='Date to download in [YYYY-MM-DD] format\nsingle date or multiple dates separated by space\ndownload from 2020-01-01 if no argument is parsed') + parser.add_argument( + '-startDate', dest='startDate', type=match_date_regex, + help='Starting date to download in [YYYY-MM-DD] format') + parser.add_argument( + '-endDate', dest='endDate', type=match_date_regex, + help='Ending date to download in [YYYY-MM-DD] format') + parser.add_argument( + '-max_workers', dest='max_workers', type=int, + help='how many threads to use for downloading') + parser.add_argument( + '-folder', dest='folder', type=check_directory, + help='Directory to store the downloaded data') + parser.add_argument( + '-skip-monthly', dest='skip_monthly', default=0, type=int, choices=[0, 1], + help='1 to skip downloading of monthly data, default 0') + parser.add_argument( + '-skip-daily', dest='skip_daily', default=0, type=int, choices=[0, 1], + help='1 to skip downloading of daily data, default 0') + parser.add_argument( + '-c', dest='checksum', default=0, type=int, choices=[0, 1], + help='1 to download checksum file, default 0') + parser.add_argument( + '-t', dest='type', required=True, choices=TRADING_TYPE, + help='Valid trading types: {}'.format(TRADING_TYPE)) + if parser_type == 'klines': + parser.add_argument( + '-i', dest='intervals', default=INTERVALS, nargs='+', choices=INTERVALS, + help='single kline interval or multiple intervals separated by space\n-i 1m 1w means to download klines interval of 1minute and 1week') + return parser diff --git a/scripts/check-funding-rate-range.py b/scripts/check-funding-rate-range.py new file mode 100644 index 0000000..6885866 --- /dev/null +++ b/scripts/check-funding-rate-range.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 +""" +Check Funding Rate Data Range + +This script checks the available data range for funding rate data from Binance. + +Example: + python3 scripts/check-funding-rate-range.py -t um -s BTCUSDT + python3 scripts/check-funding-rate-range.py -t um -s BTCUSDT ETHUSDT +""" + +import argparse +import logging +import os +import sys + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def check_funding_rate_range(market: str, symbols: list, log_level: str = 'INFO') -> int: + """ + Check the available data range for funding rate data. + + Args: + market: Market type ('um' or 'cm') + symbols: List of trading symbols + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + logger.info("Checking Funding Rate Data Range") + logger.info(f"Market: {market.upper()}") + logger.info(f"Symbols: {', '.join(symbols)}") + logger.info("") + + explorer = DataExplorer() + + results = {} + + for symbol in symbols: + logger.info(f"Checking {symbol}...") + start_date, end_date = explorer.get_data_date_range_from_web( + market=market, + data_type='fundingRate', + symbol=symbol, + time_period='daily' + ) + + if start_date and end_date: + results[symbol] = (start_date, end_date) + logger.info(f" ✓ Data range: {start_date} to {end_date}") + else: + results[symbol] = (None, None) + logger.warning(f" ✗ No data found") + + # Print summary + logger.info("") + logger.info("="*60) + logger.info("Summary:") + logger.info("="*60) + + for symbol, (start, end) in results.items(): + if start and end: + logger.info(f" {symbol:15s} | {start} to {end}") + else: + logger.info(f" {symbol:15s} | No data available") + + return 0 + + +def main(): + """Main entry point.""" + parser = argparse.ArgumentParser( + description='Check funding rate data range from Binance', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-t', '--type', + type=str, + required=True, + choices=['um', 'cm'], + help='Market type: um (USD-M Futures) or cm (COIN-M Futures)' + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=True, + help='Trading symbols (e.g., BTCUSDT ETHUSDT)' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + return check_funding_rate_range( + market=args.type, + symbols=args.symbols, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/create_spot_monthly_aggTrades.py b/scripts/create_spot_monthly_aggTrades.py new file mode 100644 index 0000000..bf6d7de --- /dev/null +++ b/scripts/create_spot_monthly_aggTrades.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +"""Binance Spot AggTrades Downloader (Monthly)""" +import argparse, logging, os, sys +from datetime import datetime +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + +def download(symbols, years, months, folder, skip, log_level): + logger = logging.getLogger("binance_data_downloader") + try: + if not years: years = list(range(2020, datetime.now().year + 1)) + if not months: months = list(range(1, 13)) + logger.info(f"Date range: {min(years)}-{max(years)}, months {min(months)}-{max(months)}") + downloader = AggTradeDownloader('spot', max_workers=10) + logger.info("Using 10 threads") + for s in symbols: + logger.info(f"\n{'='*70}\nProcessing: {s}\n{'='*70}") + local_start, local_end = downloader.get_local_date_range(s, folder, 'monthly') + if local_start: logger.info(f"Local: {local_start} to {local_end}") + count = downloader.download_monthly([s], None, years, months, folder, False, False, skip) + logger.info(f"Downloaded: {count} files") + return 0 + except Exception as e: + logger.exception(f"Error: {e}") + return 1 + +def main(): + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + p = argparse.ArgumentParser() + p.add_argument('-s', nargs='+', help='Symbols') + p.add_argument('-y', type=int, nargs='+', help='Years') + p.add_argument('-m', type=int, nargs='+', choices=range(1,13), help='Months') + p.add_argument('-folder', default=default_output_folder, help=f'Output folder (default: {default_output_folder})') + p.add_argument('--no-skip-existing', action='store_true') + p.add_argument('-log-level', default='INFO', choices=['DEBUG','INFO','WARNING','ERROR','CRITICAL']) + a = p.parse_args() + setup_logger("binance_data_downloader", level=log_level_from_string(a.log_level), log_file=None) + logger = logging.getLogger("binance_data_downloader") + symbols = a.symbols + if not symbols: + temp = AggTradeDownloader('spot', 10) + symbols = temp.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + logger.info(f"Binance Spot AggTrades (Monthly)\nSymbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + return download(symbols, a.years, a.months, a.folder, not a.no_skip_existing, a.log_level) + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-all.py b/scripts/download-all.py new file mode 100644 index 0000000..e85fb2a --- /dev/null +++ b/scripts/download-all.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +""" +Binance Public Data - Universal Downloader + +This script can download any data type from Binance public data archive. +Supports downloading multiple data types simultaneously. + +Examples: + # Download klines only + python3 scripts/download-all.py -t spot -s BTCUSDT -d klines -y 2024 + + # Download multiple data types + python3 scripts/download-all.py -t um -s BTCUSDT -d klines trades aggTrades -y 2024 + + # Download all supported data types for a market + python3 scripts/download-all.py -t spot --all-data -s BTCUSDT -y 2024 + + # Use config file + python3 scripts/download-all.py --config configs/default_config.yaml +""" + +import sys +import os + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.cli.commands import main + + +if __name__ == "__main__": + sys.exit(main(parser_type='download-all')) diff --git a/scripts/download-futures-cm-daily-aggTrades.py b/scripts/download-futures-cm-daily-aggTrades.py new file mode 100644 index 0000000..b0faf32 --- /dev/null +++ b/scripts/download-futures-cm-daily-aggTrades.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Aggregated Trades Downloader + +Optimized script for downloading daily aggregated trades history from Binance COIN-M Futures. +This script downloads DAILY aggregated trades data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads + +Examples: + # Download for specific symbol and date range + python3 scripts/download-futures-cm-daily-aggTrades.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-aggTrades.py -s BTCUSD_PERP ETHUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-aggTrades.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-aggTrades.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_agg_trades_daily( + symbols: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily aggregated trades data. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + + # Initialize downloader with 10 concurrent threads + downloader = AggTradeDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Aggregated trades don't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Aggregated Trades Downloader\n' + 'Downloads DAILY aggregated trades data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = AggTradeDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Aggregated Trades Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY aggregated trades") + + return download_agg_trades_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + from datetime import timedelta + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-bookDepth.py b/scripts/download-futures-cm-daily-bookDepth.py new file mode 100644 index 0000000..6c37ffe --- /dev/null +++ b/scripts/download-futures-cm-daily-bookDepth.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Book Depth Downloader + +NOTICE: Depth data is NOT available for COIN-M Futures (cm). +This script is provided for reference but will not work with cm market. +For depth data, please use spot market instead. + +For alternative cm data, consider using: +- download-futures-cm-daily-bookTicker.py (best bid/ask prices) +- download-futures-cm-daily-klines.py (OHLCV data) + +If you need depth data, use: +- scripts/download-depth.py -t spot (for spot market depth data) + +This script is kept as a placeholder for future availability. +""" + +import sys +import os + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +def main(): + print("=" * 70) + print("ERROR: Depth data is NOT available for COIN-M Futures (cm)") + print("=" * 70) + print() + print("According to Binance Public Data structure:") + print("- Spot market: supports depth data") + print("- USD-M Futures (um): supports depth data") + print("- COIN-M Futures (cm): does NOT support depth data") + print() + print("Available alternatives for cm market:") + print(" - download-futures-cm-daily-bookTicker.py (best bid/ask)") + print(" - download-futures-cm-daily-klines.py (OHLCV candles)") + print() + print("For depth data, use spot market:") + print(" - scripts/download-depth.py -t spot -s BTCUSDT") + print() + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-bookTicker.py b/scripts/download-futures-cm-daily-bookTicker.py new file mode 100644 index 0000000..0977dfe --- /dev/null +++ b/scripts/download-futures-cm-daily-bookTicker.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Book Ticker Downloader + +Optimized script for downloading daily book ticker history from Binance COIN-M Futures. +This script downloads DAILY book ticker data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads + +Examples: + # Download for specific symbol and date range + python3 scripts/download-futures-cm-daily-bookTicker.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-bookTicker.py -s BTCUSD_PERP ETHUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-bookTicker.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-bookTicker.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.book_ticker_downloader import BookTickerDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_book_ticker_daily( + symbols: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily book ticker data. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + + # Initialize downloader with 10 concurrent threads + downloader = BookTickerDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Book ticker doesn't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Book Ticker Downloader\n' + 'Downloads DAILY book ticker data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = BookTickerDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Book Ticker Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY book ticker") + + return download_book_ticker_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-indexPriceKlines.py b/scripts/download-futures-cm-daily-indexPriceKlines.py new file mode 100644 index 0000000..2064ebc --- /dev/null +++ b/scripts/download-futures-cm-daily-indexPriceKlines.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Index Price Klines Downloader + +Optimized script for downloading daily index price klines history from Binance COIN-M Futures. +This script downloads DAILY index price klines data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads +- Supports multiple kline intervals + +Examples: + # Download for specific symbol and date range with default intervals + python3 scripts/download-futures-cm-daily-indexPriceKlines.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with custom intervals + python3 scripts/download-futures-cm-daily-indexPriceKlines.py -s BTCUSD_PERP -i 1h 4h -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-indexPriceKlines.py -s BTCUSD_PERP ETHUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-indexPriceKlines.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-indexPriceKlines.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.index_price_downloader import IndexPriceDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_index_price_klines_daily( + symbols: list, + intervals: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily index price klines data. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + logger.info(f"Intervals: {', '.join(intervals)}") + + # Initialize downloader with 10 concurrent threads + downloader = IndexPriceDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Index Price Klines Downloader\n' + 'Downloads DAILY index price klines data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=['1m', '15m', '1h', '4h', '8h'], + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = IndexPriceDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Index Price Klines Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY index price klines") + logger.info(f"Intervals: {', '.join(args.intervals)}") + + return download_index_price_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-klines.py b/scripts/download-futures-cm-daily-klines.py new file mode 100644 index 0000000..40dc93f --- /dev/null +++ b/scripts/download-futures-cm-daily-klines.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Klines Downloader + +Optimized script for downloading daily klines history from Binance COIN-M Futures. +This script downloads DAILY klines (candlestick) data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads +- Supports multiple kline intervals + +Examples: + # Download for specific symbol and date range with default intervals + python3 scripts/download-futures-cm-daily-klines.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with custom intervals + python3 scripts/download-futures-cm-daily-klines.py -s BTCUSD_PERP -i 1h 4h -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-klines.py -s BTCUSD_PERP ETHUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-klines.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-klines.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.kline_downloader import KlineDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_klines_daily( + symbols: list, + intervals: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily klines data. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + logger.info(f"Intervals: {', '.join(intervals)}") + + # Initialize downloader with 10 concurrent threads + downloader = KlineDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Klines Downloader\n' + 'Downloads DAILY klines (candlestick) data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=['1m', '15m', '1h', '4h', '8h'], + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = KlineDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Klines Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY klines") + logger.info(f"Intervals: {', '.join(args.intervals)}") + + return download_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-liquidationSnapshot.py b/scripts/download-futures-cm-daily-liquidationSnapshot.py new file mode 100644 index 0000000..a76fc15 --- /dev/null +++ b/scripts/download-futures-cm-daily-liquidationSnapshot.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Liquidation Snapshot Downloader + +Optimized script for downloading daily liquidation snapshot history from Binance COIN-M Futures. +This script downloads DAILY liquidation snapshot data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only (monthly not available for liquidation snapshots) +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads + +Examples: + # Download for specific symbol and date range + python3 scripts/download-futures-cm-daily-liquidationSnapshot.py -s ADAUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-liquidationSnapshot.py -s ADAUSD_PERP BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-liquidationSnapshot.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-liquidationSnapshot.py -s ADAUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.liquidation_snapshot_downloader import LiquidationSnapshotDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_liquidation_snapshot_daily( + symbols: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily liquidation snapshot data. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + + # Initialize downloader with 10 concurrent threads + downloader = LiquidationSnapshotDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Liquidation snapshots don't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Liquidation Snapshot Downloader\n' + 'Downloads DAILY liquidation snapshot data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BTCUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = LiquidationSnapshotDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Liquidation Snapshot Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY liquidation snapshots") + + return download_liquidation_snapshot_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-markPriceKlines.py b/scripts/download-futures-cm-daily-markPriceKlines.py new file mode 100644 index 0000000..1fc4084 --- /dev/null +++ b/scripts/download-futures-cm-daily-markPriceKlines.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Mark Price Klines Downloader + +Optimized script for downloading daily mark price klines history from Binance COIN-M Futures. +This script downloads DAILY mark price klines data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads +- Supports multiple kline intervals + +Examples: + # Download for specific symbol and date range with default intervals + python3 scripts/download-futures-cm-daily-markPriceKlines.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with custom intervals + python3 scripts/download-futures-cm-daily-markPriceKlines.py -s BTCUSD_PERP -i 1h 4h -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-markPriceKlines.py -s BTCUSD_PERP ETHUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-markPriceKlines.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-markPriceKlines.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.mark_price_downloader import MarkPriceDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_mark_price_klines_daily( + symbols: list, + intervals: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily mark price klines data. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + logger.info(f"Intervals: {', '.join(intervals)}") + + # Initialize downloader with 10 concurrent threads + downloader = MarkPriceDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Mark Price Klines Downloader\n' + 'Downloads DAILY mark price klines data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=['1m', '15m', '1h', '4h', '8h'], + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = MarkPriceDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Mark Price Klines Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY mark price klines") + logger.info(f"Intervals: {', '.join(args.intervals)}") + + return download_mark_price_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-metrics.py b/scripts/download-futures-cm-daily-metrics.py new file mode 100644 index 0000000..6df5ec7 --- /dev/null +++ b/scripts/download-futures-cm-daily-metrics.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Metrics Downloader + +NOTICE: There is no specific "metrics" data type in Binance Public Data. +This script provides a convenient wrapper to download all key cm metrics that have daily data. + +This script downloads multiple data types that could be considered "metrics": +- Index Price Klines (price index) +- Mark Price Klines (mark price for futures) +- Book Ticker (best bid/ask prices) +- Funding Rate (monthly only - will be skipped for daily) + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only for multiple metrics +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads + +Examples: + # Download all metrics for specific symbol and date range + python3 scripts/download-futures-cm-daily-metrics.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-metrics.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-metrics.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.index_price_downloader import IndexPriceDownloader +from binance_data_downloader.downloaders.mark_price_downloader import MarkPriceDownloader +from binance_data_downloader.downloaders.book_ticker_downloader import BookTickerDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_metrics_daily( + symbols: list, + intervals: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily metrics data (multiple data types). + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (for index/mark price) + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + logger.info(f"Metrics to download: Index Price, Mark Price, Book Ticker") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + total_downloaded = 0 + + # Download Index Price Klines + logger.info(f"\n{'='*70}") + logger.info(f"Downloading Index Price Klines...") + logger.info(f"{'='*70}") + index_downloader = IndexPriceDownloader(trading_type='cm', max_workers=10) + for symbol in symbols: + downloaded_count = index_downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + total_downloaded += downloaded_count + logger.info(f"Index Price: Downloaded {downloaded_count} files for {symbol}") + + # Download Mark Price Klines + logger.info(f"\n{'='*70}") + logger.info(f"Downloading Mark Price Klines...") + logger.info(f"{'='*70}") + mark_downloader = MarkPriceDownloader(trading_type='cm', max_workers=10) + for symbol in symbols: + downloaded_count = mark_downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + total_downloaded += downloaded_count + logger.info(f"Mark Price: Downloaded {downloaded_count} files for {symbol}") + + # Download Book Ticker + logger.info(f"\n{'='*70}") + logger.info(f"Downloading Book Ticker...") + logger.info(f"{'='*70}") + ticker_downloader = BookTickerDownloader(trading_type='cm', max_workers=10) + for symbol in symbols: + downloaded_count = ticker_downloader.download_daily( + symbols=[symbol], + intervals=None, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + total_downloaded += downloaded_count + logger.info(f"Book Ticker: Downloaded {downloaded_count} files for {symbol}") + + logger.info(f"\n{'='*70}") + logger.info(f"All metrics downloads completed!") + logger.info(f"Total files downloaded: {total_downloaded}") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Metrics Downloader\n' + 'Downloads DAILY metrics data (Index Price, Mark Price, Book Ticker) for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=['1m', '15m', '1h', '4h', '8h'], + help='Kline intervals for index/mark price (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = IndexPriceDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Metrics Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Metrics: Index Price Klines, Mark Price Klines, Book Ticker") + logger.info(f"Intervals: {', '.join(args.intervals)}") + + return download_metrics_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-daily-trades.py b/scripts/download-futures-cm-daily-trades.py new file mode 100644 index 0000000..3066f35 --- /dev/null +++ b/scripts/download-futures-cm-daily-trades.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Daily Trades Downloader + +Optimized script for downloading daily trades history from Binance COIN-M Futures. +This script downloads DAILY trades data. + +Features: +- Hardcoded for COIN-M Futures (cm) market +- Downloads DAILY data only +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for faster downloads + +Examples: + # Download for specific symbol and date range + python3 scripts/download-futures-cm-daily-trades.py -s BTCUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-futures-cm-daily-trades.py -s BTCUSD_PERP ETHUSD_PERP -startDate 2023-01-01 -endDate 2023-12-31 + + # Download with auto-detected symbols (all cm symbols) + python3 scripts/download-futures-cm-daily-trades.py -startDate 2023-01-01 -endDate 2023-12-31 + + # Specify custom output folder + python3 scripts/download-futures-cm-daily-trades.py -s BTCUSD_PERP -folder /data/binance -startDate 2023-01-01 -endDate 2023-12-31 +""" + +import argparse +import logging +import os +import sys +from datetime import datetime, timedelta + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.trade_downloader import TradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_trades_daily( + symbols: list, + start_date: str, + end_date: str, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M Futures daily trades data. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format + end_date: End date in YYYY-MM-DD format + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + logger.info(f"Date range: {start_date} to {end_date}") + logger.info(f"Market type: COIN-M Futures (cm)") + + # Initialize downloader with 10 concurrent threads + downloader = TradeDownloader( + trading_type='cm', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list + start = datetime.strptime(start_date, '%Y-%m-%d') + end = datetime.strptime(end_date, '%Y-%m-%d') + date_list = [(start + timedelta(days=i)).strftime('%Y-%m-%d') + for i in range((end - start).days + 1)] + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Trades don't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Daily Trades Downloader\n' + 'Downloads DAILY trades data for COIN-M Futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSD_PERP ETHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + required=True, + help='Start date in YYYY-MM-DD format (e.g., 2023-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + required=True, + help='End date in YYYY-MM-DD format (e.g., 2023-12-31)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = TradeDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Daily Trades Downloader") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY trades") + + return download_trades_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-aggTrades.py b/scripts/download-futures-cm-monthly-aggTrades.py new file mode 100644 index 0000000..0405303 --- /dev/null +++ b/scripts/download-futures-cm-monthly-aggTrades.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Aggregated Trades Downloader (Monthly) + +Downloads monthly aggregated trade history from Binance COIN-M futures. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-cm-monthly-aggTrades.py -s ADAUSD_PERP + + # Download for specific year/month range + python3 scripts/download-futures-cm-monthly-aggTrades.py -s ADAUSD_PERP BTCUSD_PERP -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-aggTrades.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-aggTrades.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_agg_trades_monthly( + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures aggregated trades monthly data. + + Args: + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = AggTradeDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Aggregated trades don't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Aggregated Trades Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = AggTradeDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Aggregated Trades Downloader (Monthly)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY") + + return download_agg_trades_monthly( + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-bookTicker.py b/scripts/download-futures-cm-monthly-bookTicker.py new file mode 100644 index 0000000..66653f3 --- /dev/null +++ b/scripts/download-futures-cm-monthly-bookTicker.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Book Ticker Downloader (Daily Only) + +Downloads daily book ticker (best bid/ask price) history from Binance COIN-M futures. + +Note: Book ticker data is only available as DAILY files, not monthly. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-cm-monthly-bookTicker.py -s ADAUSD_PERP + + # Download for specific year/month range + python3 scripts/download-futures-cm-monthly-bookTicker.py -s ADAUSD_PERP -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-bookTicker.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-bookTicker.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.book_ticker_downloader import BookTickerDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_book_ticker_daily( + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures book ticker daily data. + + Args: + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = BookTickerDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Book ticker doesn't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Book Ticker Downloader (Daily Only)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = BookTickerDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Book Ticker Downloader (Daily Only)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY (book ticker data is only available as daily files)") + + return download_book_ticker_daily( + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-fundingRate.py b/scripts/download-futures-cm-monthly-fundingRate.py new file mode 100644 index 0000000..6132aa9 --- /dev/null +++ b/scripts/download-futures-cm-monthly-fundingRate.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Funding Rate Downloader (Monthly) + +Downloads monthly funding rate history from Binance COIN-M futures. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-cm-monthly-fundingRate.py -s ADAUSD_PERP + + # Download for specific year/month range + python3 scripts/download-futures-cm-monthly-fundingRate.py -s ADAUSD_PERP BTCUSD_PERP -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-fundingRate.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-fundingRate.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.funding_rate_downloader import FundingRateDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_funding_rate_monthly( + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures funding rate monthly data. + + Args: + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = FundingRateDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Funding rate doesn't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Funding Rate Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = FundingRateDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Funding Rate Downloader (Monthly)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY (daily data not available for funding rate)") + + return download_funding_rate_monthly( + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-indexPriceKlines.py b/scripts/download-futures-cm-monthly-indexPriceKlines.py new file mode 100644 index 0000000..f92bfa1 --- /dev/null +++ b/scripts/download-futures-cm-monthly-indexPriceKlines.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Index Price Klines Downloader (Monthly) + +Downloads monthly index price kline history from Binance COIN-M futures. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-cm-monthly-indexPriceKlines.py -s ADAUSD_PERP + + # Download for specific year/month range with default intervals + python3 scripts/download-futures-cm-monthly-indexPriceKlines.py -s ADAUSD_PERP BTCUSD_PERP -y 2023 2024 + + # Download with specific intervals + python3 scripts/download-futures-cm-monthly-indexPriceKlines.py -s ADAUSD_PERP -i 1m 1h 1d + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-indexPriceKlines.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-indexPriceKlines.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.index_price_downloader import IndexPriceDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_index_price_klines_monthly( + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures index price klines monthly data. + + Args: + symbols: List of trading symbols + intervals: List of time intervals (None for default) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + logger.info(f"Intervals: {', '.join(intervals)}") + + # Initialize downloader with 10 concurrent threads + downloader = IndexPriceDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Index Price Klines Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = IndexPriceDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Index Price Klines Downloader (Monthly)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY") + + return download_index_price_klines_monthly( + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-klines.py b/scripts/download-futures-cm-monthly-klines.py new file mode 100644 index 0000000..e4aa028 --- /dev/null +++ b/scripts/download-futures-cm-monthly-klines.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Klines Downloader (Monthly) + +Downloads monthly kline (candlestick) history from Binance COIN-M futures. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-cm-monthly-klines.py -s ADAUSD_PERP + + # Download for specific year/month range with default intervals + python3 scripts/download-futures-cm-monthly-klines.py -s ADAUSD_PERP BTCUSD_PERP -y 2023 2024 + + # Download with specific intervals + python3 scripts/download-futures-cm-monthly-klines.py -s ADAUSD_PERP -i 1m 1h 1d + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-klines.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-klines.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.kline_downloader import KlineDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_klines_monthly( + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures klines monthly data. + + Args: + symbols: List of trading symbols + intervals: List of time intervals (None for default) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + logger.info(f"Intervals: {', '.join(intervals)}") + + # Initialize downloader with 10 concurrent threads + downloader = KlineDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Klines Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = KlineDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Klines Downloader (Monthly)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY") + + return download_klines_monthly( + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-markPriceKlines.py b/scripts/download-futures-cm-monthly-markPriceKlines.py new file mode 100644 index 0000000..97a3e9e --- /dev/null +++ b/scripts/download-futures-cm-monthly-markPriceKlines.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Mark Price Klines Downloader (Monthly) + +Downloads monthly mark price kline history from Binance COIN-M futures. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-cm-monthly-markPriceKlines.py -s ADAUSD_PERP + + # Download for specific year/month range with default intervals + python3 scripts/download-futures-cm-monthly-markPriceKlines.py -s ADAUSD_PERP BTCUSD_PERP -y 2023 2024 + + # Download with specific intervals + python3 scripts/download-futures-cm-monthly-markPriceKlines.py -s ADAUSD_PERP -i 1m 1h 1d + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-markPriceKlines.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-markPriceKlines.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.mark_price_downloader import MarkPriceDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_mark_price_klines_monthly( + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures mark price klines monthly data. + + Args: + symbols: List of trading symbols + intervals: List of time intervals (None for default) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + logger.info(f"Intervals: {', '.join(intervals)}") + + # Initialize downloader with 10 concurrent threads + downloader = MarkPriceDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Mark Price Klines Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = MarkPriceDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Mark Price Klines Downloader (Monthly)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY") + + return download_mark_price_klines_monthly( + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-premiumIndexKlines.py b/scripts/download-futures-cm-monthly-premiumIndexKlines.py new file mode 100644 index 0000000..54e12b8 --- /dev/null +++ b/scripts/download-futures-cm-monthly-premiumIndexKlines.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Premium Index Klines Downloader - NOT AVAILABLE + +This script is a placeholder to indicate that premium index klines are NOT available +for COIN-M (cm) futures. + +Premium Index Klines are only available for USD-M (um) futures. + +Please use the USD-M premium index klines downloader instead: + python3 scripts/download-futures-um-monthly-premiumIndexKlines.py + +Or use the general futures premium index klines downloader with -t um: + python3 python/download-futures-premiumPriceKlines.py -t um -s BTCUSDT + +For COIN-M futures data, please use: +- download-futures-cm-monthly-klines.py +- download-futures-cm-monthly-indexPriceKlines.py +- download-futures-cm-monthly-markPriceKlines.py +""" + +import sys + + +def main(): + """Main entry point.""" + print(__doc__) + print("\n" + "="*70) + print("ERROR: Premium Index Klines are only available for USD-M (um) futures") + print("="*70) + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-cm-monthly-trades.py b/scripts/download-futures-cm-monthly-trades.py new file mode 100644 index 0000000..9e96ff8 --- /dev/null +++ b/scripts/download-futures-cm-monthly-trades.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python3 +""" +Binance COIN-M Futures Trades Downloader (Monthly) + +Downloads monthly individual trade history from Binance COIN-M futures. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-cm-monthly-trades.py -s ADAUSD_PERP + + # Download for specific year/month range + python3 scripts/download-futures-cm-monthly-trades.py -s ADAUSD_PERP BTCUSD_PERP -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-cm-monthly-trades.py -s ADAUSD_PERP BCHUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-cm-monthly-trades.py -s ADAUSD_PERP -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.trade_downloader import TradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_trades_monthly( + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download COIN-M futures individual trades monthly data. + + Args: + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + trading_type = 'cm' + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = TradeDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Trades don't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance COIN-M Futures Trades Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., ADAUSD_PERP BCHUSD_PERP). If not specified, downloads all available cm symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all cm symbols from exchange...") + temp_downloader = TradeDownloader(trading_type='cm', max_workers=10) + symbols = temp_downloader.fetch_symbols('cm') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance COIN-M Futures Trades Downloader (Monthly)") + logger.info(f"Market type: cm (COIN-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY") + + return download_trades_monthly( + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-fundingRate.py b/scripts/download-futures-fundingRate.py new file mode 100644 index 0000000..e7cc4d2 --- /dev/null +++ b/scripts/download-futures-fundingRate.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python3 +""" +Binance Futures Funding Rate Downloader (Monthly Only) + +Optimized script for downloading funding rate history from Binance futures. +This script downloads MONTHLY funding rate data (daily data is not available for funding rate). + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-fundingRate.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-fundingRate.py -s BTCUSDT -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-fundingRate.py -s BTCUSDT ETHUSDT + + # Download for COIN-M futures + python3 scripts/download-futures-fundingRate.py -t cm -s ADAUSD_PERP + + # Specify custom output folder + python3 scripts/download-futures-fundingRate.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.funding_rate_downloader import FundingRateDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_funding_rate_monthly( + trading_type: str = 'um', + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download funding rate monthly data with smart features. + + Args: + trading_type: Market type ('um' or 'cm') + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = FundingRateDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Funding rate doesn't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Futures Funding Rate Downloader (Monthly Only)\n' + 'Downloads MONTHLY funding rate data (daily data is not available).', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-t', '--type', + type=str, + default='um', + choices=['um', 'cm'], + help='Market type: um (USD-M Futures) or cm (COIN-M Futures). Default: um' + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info(f"No symbols specified, fetching all {args.type} symbols from exchange...") + temp_downloader = FundingRateDownloader(trading_type=args.type, max_workers=10) + symbols = temp_downloader.fetch_symbols(args.type) + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Futures Funding Rate Downloader (Monthly Only)") + logger.info(f"Market type: {args.type}") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY (daily data not available for funding rate)") + + return download_funding_rate_monthly( + trading_type=args.type, + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-aggTrades.py b/scripts/download-futures-um-daily-aggTrades.py new file mode 100644 index 0000000..f84590a --- /dev/null +++ b/scripts/download-futures-um-daily-aggTrades.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Aggregated Trades Downloader + +Optimized script for downloading daily aggregated trades history from Binance USD-M futures. +This script downloads DAILY aggregated trades data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-daily-aggTrades.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-aggTrades.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download multiple symbols + python3 scripts/download-futures-um-daily-aggTrades.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-aggTrades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_agg_trades_daily( + symbols: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download aggregated trades daily data with smart features. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = AggTradeDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Aggregated trades don't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Aggregated Trades Downloader\n' + 'Downloads DAILY aggregated trades data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = AggTradeDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Aggregated Trades Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + + return download_agg_trades_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-bookDepth.py b/scripts/download-futures-um-daily-bookDepth.py new file mode 100644 index 0000000..9ecfbf8 --- /dev/null +++ b/scripts/download-futures-um-daily-bookDepth.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Order Book Depth Downloader + +Optimized script for downloading daily order book depth history from Binance USD-M futures. +This script downloads DAILY depth data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-daily-bookDepth.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-bookDepth.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download multiple symbols + python3 scripts/download-futures-um-daily-bookDepth.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-bookDepth.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.depth_downloader import DepthDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_depth_daily( + symbols: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download order book depth daily data with smart features. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = DepthDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Depth doesn't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Order Book Depth Downloader\n' + 'Downloads DAILY depth data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = DepthDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Order Book Depth Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + + return download_depth_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-bookTicker.py b/scripts/download-futures-um-daily-bookTicker.py new file mode 100644 index 0000000..5ee1431 --- /dev/null +++ b/scripts/download-futures-um-daily-bookTicker.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Book Ticker Downloader + +Optimized script for downloading daily book ticker (best bid/ask) history from Binance USD-M futures. +This script downloads DAILY book ticker data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-daily-bookTicker.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-bookTicker.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download multiple symbols + python3 scripts/download-futures-um-daily-bookTicker.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-bookTicker.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.book_ticker_downloader import BookTickerDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_book_ticker_daily( + symbols: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download book ticker daily data with smart features. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = BookTickerDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Book ticker doesn't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Book Ticker Downloader\n' + 'Downloads DAILY book ticker data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = BookTickerDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Book Ticker Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + + return download_book_ticker_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-indexPriceKlines.py b/scripts/download-futures-um-daily-indexPriceKlines.py new file mode 100644 index 0000000..bd689c2 --- /dev/null +++ b/scripts/download-futures-um-daily-indexPriceKlines.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Index Price Klines Downloader + +Optimized script for downloading daily index price klines history from Binance USD-M futures. +This script downloads DAILY index price klines data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads +- Supports multiple intervals (default: 1m, 15m, 1h, 4h, 8h) + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-um-daily-indexPriceKlines.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-indexPriceKlines.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download with specific intervals + python3 scripts/download-futures-um-daily-indexPriceKlines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-daily-indexPriceKlines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-indexPriceKlines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.index_price_downloader import IndexPriceDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_index_price_klines_daily( + symbols: list = None, + intervals: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download index price klines daily data with smart features. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (default: ["1m", "15m", "1h", "4h", "8h"]) + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = IndexPriceDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Index Price Klines Downloader\n' + 'Downloads DAILY index price klines data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = IndexPriceDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Index Price Klines Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + logger.info(f"Intervals: {', '.join(args.intervals) if args.intervals else '1m, 15m, 1h, 4h, 8h'}") + + return download_index_price_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-klines.py b/scripts/download-futures-um-daily-klines.py new file mode 100644 index 0000000..8c924fb --- /dev/null +++ b/scripts/download-futures-um-daily-klines.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Klines Downloader + +Optimized script for downloading daily klines (candlestick) history from Binance USD-M futures. +This script downloads DAILY klines data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads +- Supports multiple intervals (default: 1m, 15m, 1h, 4h, 8h) + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-um-daily-klines.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-klines.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download with specific intervals + python3 scripts/download-futures-um-daily-klines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-daily-klines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-klines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.kline_downloader import KlineDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_klines_daily( + symbols: list = None, + intervals: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download klines daily data with smart features. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (default: ["1m", "15m", "1h", "4h", "8h"]) + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = KlineDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Klines Downloader\n' + 'Downloads DAILY klines (candlestick) data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = KlineDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Klines Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + logger.info(f"Intervals: {', '.join(args.intervals) if args.intervals else '1m, 15m, 1h, 4h, 8h'}") + + return download_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-markPriceKlines.py b/scripts/download-futures-um-daily-markPriceKlines.py new file mode 100644 index 0000000..88e3e51 --- /dev/null +++ b/scripts/download-futures-um-daily-markPriceKlines.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Mark Price Klines Downloader + +Optimized script for downloading daily mark price klines history from Binance USD-M futures. +This script downloads DAILY mark price klines data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads +- Supports multiple intervals (default: 1m, 15m, 1h, 4h, 8h) + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-um-daily-markPriceKlines.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-markPriceKlines.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download with specific intervals + python3 scripts/download-futures-um-daily-markPriceKlines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-daily-markPriceKlines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-markPriceKlines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.mark_price_downloader import MarkPriceDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_mark_price_klines_daily( + symbols: list = None, + intervals: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download mark price klines daily data with smart features. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (default: ["1m", "15m", "1h", "4h", "8h"]) + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = MarkPriceDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Mark Price Klines Downloader\n' + 'Downloads DAILY mark price klines data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = MarkPriceDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Mark Price Klines Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + logger.info(f"Intervals: {', '.join(args.intervals) if args.intervals else '1m, 15m, 1h, 4h, 8h'}") + + return download_mark_price_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-premiumIndexKlines.py b/scripts/download-futures-um-daily-premiumIndexKlines.py new file mode 100644 index 0000000..936e3a8 --- /dev/null +++ b/scripts/download-futures-um-daily-premiumIndexKlines.py @@ -0,0 +1,251 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Premium Index Klines Downloader + +Optimized script for downloading daily premium index klines history from Binance USD-M futures. +This script downloads DAILY premium index klines data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads +- Supports multiple intervals (default: 1m, 15m, 1h, 4h, 8h) + +Examples: + # Download with auto-detected date range and default intervals (recommended) + python3 scripts/download-futures-um-daily-premiumIndexKlines.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-premiumIndexKlines.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download with specific intervals + python3 scripts/download-futures-um-daily-premiumIndexKlines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-daily-premiumIndexKlines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-premiumIndexKlines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.premium_index_downloader import PremiumIndexDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_premium_index_klines_daily( + symbols: list = None, + intervals: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download premium index klines daily data with smart features. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (default: ["1m", "15m", "1h", "4h", "8h"]) + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ["1m", "15m", "1h", "4h", "8h"] + + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = PremiumIndexDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Premium Index Klines Downloader\n' + 'Downloads DAILY premium index klines data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = PremiumIndexDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Premium Index Klines Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + logger.info(f"Intervals: {', '.join(args.intervals) if args.intervals else '1m, 15m, 1h, 4h, 8h'}") + + return download_premium_index_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-daily-trades.py b/scripts/download-futures-um-daily-trades.py new file mode 100644 index 0000000..5dd691a --- /dev/null +++ b/scripts/download-futures-um-daily-trades.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Daily Trades Downloader + +Optimized script for downloading daily trades history from Binance USD-M futures. +This script downloads DAILY trades data. + +Features: +- Hardcoded for USD-M Futures (um) market +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 threads for concurrent downloads + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-daily-trades.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-futures-um-daily-trades.py -s BTCUSDT -startDate 2024-01-01 -endDate 2024-12-31 + + # Download multiple symbols + python3 scripts/download-futures-um-daily-trades.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-daily-trades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.trade_downloader import TradeDownloader +from binance_data_downloader.utils.data_explorer import DataExplorer +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_trades_daily( + symbols: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download trades daily data with smart features. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format (None for default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (None for default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default date range if not specified + if not start_date: + start_date = "2020-01-01" + + if not end_date: + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = TradeDownloader( + trading_type='um', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + # Generate date list from start_date to end_date + start = datetime.strptime(start_date, "%Y-%m-%d") + end = datetime.strptime(end_date, "%Y-%m-%d") + + date_list = [] + current = start + while current <= end: + date_list.append(current.strftime("%Y-%m-%d")) + current = (current - datetime(1970, 1, 1)).days + 1 + current = datetime.fromtimestamp(current * 86400) + + logger.info(f"Total dates to download: {len(date_list)}") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Trades don't support intervals + dates=date_list, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Daily Trades Downloader\n' + 'Downloads DAILY trades data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = TradeDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Daily Trades Downloader") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY") + + return download_trades_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-aggTrades.py b/scripts/download-futures-um-monthly-aggTrades.py new file mode 100644 index 0000000..41262c8 --- /dev/null +++ b/scripts/download-futures-um-monthly-aggTrades.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Aggregated Trades Downloader (Monthly Only) + +Optimized script for downloading monthly aggregated trade history from Binance USD-M futures. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY aggregated trade data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-aggTrades.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-aggTrades.py -s BTCUSDT -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-aggTrades.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-aggTrades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_agg_trades_monthly( + trading_type: str = 'um', + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download aggregated trades monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = AggTradeDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Aggregated trades don't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Aggregated Trades Downloader (Monthly Only)\n' + 'Downloads MONTHLY aggregated trade data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = AggTradeDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Aggregated Trades Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY aggregated trades") + + return download_agg_trades_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-bookTicker.py b/scripts/download-futures-um-monthly-bookTicker.py new file mode 100644 index 0000000..016a615 --- /dev/null +++ b/scripts/download-futures-um-monthly-bookTicker.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Book Ticker Downloader (Monthly Only) + +Optimized script for downloading monthly book ticker history from Binance USD-M futures. +Book ticker provides the best bid price, best ask price, and quantities. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY book ticker data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-bookTicker.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-bookTicker.py -s BTCUSDT -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-bookTicker.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-bookTicker.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.book_ticker_downloader import BookTickerDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_book_ticker_monthly( + trading_type: str = 'um', + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download book ticker monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = BookTickerDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Book ticker doesn't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Book Ticker Downloader (Monthly Only)\n' + 'Downloads MONTHLY book ticker data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = BookTickerDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Book Ticker Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY book ticker") + + return download_book_ticker_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-indexPriceKlines.py b/scripts/download-futures-um-monthly-indexPriceKlines.py new file mode 100644 index 0000000..72a3292 --- /dev/null +++ b/scripts/download-futures-um-monthly-indexPriceKlines.py @@ -0,0 +1,247 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Index Price Klines Downloader (Monthly Only) + +Optimized script for downloading monthly index price kline history from Binance USD-M futures. +Index price klines show the index price over time, which is used for mark price calculation. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY index price kline data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-indexPriceKlines.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-indexPriceKlines.py -s BTCUSDT -y 2023 2024 + + # Download specific intervals + python3 scripts/download-futures-um-monthly-indexPriceKlines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-indexPriceKlines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-indexPriceKlines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.index_price_downloader import IndexPriceDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_index_price_klines_monthly( + trading_type: str = 'um', + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download index price klines monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + intervals: List of time intervals (None for default: ['1m', '15m', '1h', '4h', '8h']) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ['1m', '15m', '1h', '4h', '8h'] + + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = IndexPriceDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Index Price Klines Downloader (Monthly Only)\n' + 'Downloads MONTHLY index price kline data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = IndexPriceDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Index Price Klines Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY index price klines") + + return download_index_price_klines_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-klines.py b/scripts/download-futures-um-monthly-klines.py new file mode 100644 index 0000000..581f8d8 --- /dev/null +++ b/scripts/download-futures-um-monthly-klines.py @@ -0,0 +1,247 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Klines Downloader (Monthly Only) + +Optimized script for downloading monthly kline (candlestick) history from Binance USD-M futures. +Klines show open, high, low, close prices and volume over time. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY kline data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-klines.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-klines.py -s BTCUSDT -y 2023 2024 + + # Download specific intervals + python3 scripts/download-futures-um-monthly-klines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-klines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-klines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.kline_downloader import KlineDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_klines_monthly( + trading_type: str = 'um', + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download klines monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + intervals: List of time intervals (None for default: ['1m', '15m', '1h', '4h', '8h']) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ['1m', '15m', '1h', '4h', '8h'] + + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = KlineDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Klines Downloader (Monthly Only)\n' + 'Downloads MONTHLY kline (candlestick) data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = KlineDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Klines Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY klines (candlesticks)") + + return download_klines_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-markPriceKlines.py b/scripts/download-futures-um-monthly-markPriceKlines.py new file mode 100644 index 0000000..acacb2b --- /dev/null +++ b/scripts/download-futures-um-monthly-markPriceKlines.py @@ -0,0 +1,247 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Mark Price Klines Downloader (Monthly Only) + +Optimized script for downloading monthly mark price kline history from Binance USD-M futures. +Mark price is used for liquidation calculations and unrealized PnL. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY mark price kline data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-markPriceKlines.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-markPriceKlines.py -s BTCUSDT -y 2023 2024 + + # Download specific intervals + python3 scripts/download-futures-um-monthly-markPriceKlines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-markPriceKlines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-markPriceKlines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.mark_price_downloader import MarkPriceDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_mark_price_klines_monthly( + trading_type: str = 'um', + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download mark price klines monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + intervals: List of time intervals (None for default: ['1m', '15m', '1h', '4h', '8h']) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ['1m', '15m', '1h', '4h', '8h'] + + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = MarkPriceDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Mark Price Klines Downloader (Monthly Only)\n' + 'Downloads MONTHLY mark price kline data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = MarkPriceDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Mark Price Klines Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY mark price klines") + + return download_mark_price_klines_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-premiumIndexKlines.py b/scripts/download-futures-um-monthly-premiumIndexKlines.py new file mode 100644 index 0000000..d72a73e --- /dev/null +++ b/scripts/download-futures-um-monthly-premiumIndexKlines.py @@ -0,0 +1,247 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Premium Index Klines Downloader (Monthly Only) + +Optimized script for downloading monthly premium index kline history from Binance USD-M futures. +Premium index shows the premium/discount of futures price relative to index price. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY premium index kline data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading +- Supports multiple time intervals + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-premiumIndexKlines.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-premiumIndexKlines.py -s BTCUSDT -y 2023 2024 + + # Download specific intervals + python3 scripts/download-futures-um-monthly-premiumIndexKlines.py -s BTCUSDT -i 1h 4h 1d + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-premiumIndexKlines.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-premiumIndexKlines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.premium_index_downloader import PremiumIndexDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_premium_index_klines_monthly( + trading_type: str = 'um', + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download premium index klines monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + intervals: List of time intervals (None for default: ['1m', '15m', '1h', '4h', '8h']) + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = ['1m', '15m', '1h', '4h', '8h'] + + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = PremiumIndexDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=intervals, + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Premium Index Klines Downloader (Monthly Only)\n' + 'Downloads MONTHLY premium index kline data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help='Kline intervals (e.g., 1m 15m 1h 4h 8h). Default: 1m 15m 1h 4h 8h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = PremiumIndexDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Premium Index Klines Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY premium index klines") + + return download_premium_index_klines_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-futures-um-monthly-trades.py b/scripts/download-futures-um-monthly-trades.py new file mode 100644 index 0000000..fca1935 --- /dev/null +++ b/scripts/download-futures-um-monthly-trades.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +""" +Binance USD-M Futures Trades Downloader (Monthly Only) + +Optimized script for downloading monthly trade history from Binance USD-M futures. + +Features: +- Hardcoded for USD-M Futures (um) market type +- Downloads MONTHLY trade data only +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) +- Uses 10 concurrent threads for efficient downloading + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-futures-um-monthly-trades.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-futures-um-monthly-trades.py -s BTCUSDT -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-futures-um-monthly-trades.py -s BTCUSDT ETHUSDT + + # Specify custom output folder + python3 scripts/download-futures-um-monthly-trades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.trade_downloader import TradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_trades_monthly( + trading_type: str = 'um', + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download trades monthly data with smart features. + + Args: + trading_type: Market type (hardcoded to 'um' for USD-M Futures) + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = TradeDownloader( + trading_type=trading_type, + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Trades don't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance USD-M Futures Trades Downloader (Monthly Only)\n' + 'Downloads MONTHLY trade data for USD-M futures.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available USD-M futures symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all USD-M futures symbols from exchange...") + temp_downloader = TradeDownloader(trading_type='um', max_workers=10) + symbols = temp_downloader.fetch_symbols('um') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance USD-M Futures Trades Downloader (Monthly Only)") + logger.info(f"Market type: um (USD-M Futures)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY trades") + + return download_trades_monthly( + trading_type='um', # Hardcoded for USD-M Futures + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-option.py b/scripts/download-option.py new file mode 100644 index 0000000..23f005c --- /dev/null +++ b/scripts/download-option.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +""" +Binance Public Data - Option Downloader + +Downloads options data from Binance. + +Example: + python3 scripts/download-option.py -s BTC-240301-50000-C -y 2024 +""" + +import sys +import os + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.cli.commands import main + + +if __name__ == "__main__": + sys.exit(main(parser_type='option')) diff --git a/scripts/download-spot-daily-aggTrades.py b/scripts/download-spot-daily-aggTrades.py new file mode 100644 index 0000000..f046ca9 --- /dev/null +++ b/scripts/download-spot-daily-aggTrades.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 +""" +Binance Spot Daily Aggregated Trades Downloader + +Optimized script for downloading daily aggregated trade data from Binance spot market. + +Features: +- Downloads DAILY aggregated trade data for spot market +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with default date range (2020-01-01 to current) + python3 scripts/download-spot-daily-aggTrades.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-spot-daily-aggTrades.py -s BTCUSDT -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-spot-daily-aggTrades.py -s BTCUSDT ETHUSDT + + # Download all spot symbols + python3 scripts/download-spot-daily-aggTrades.py + + # Specify custom output folder + python3 scripts/download-spot-daily-aggTrades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_agg_trades_daily( + symbols: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download daily aggregated trade data for spot market. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format (default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default dates if not specified + if not start_date: + start_date = '2020-01-01' + if not end_date: + end_date = datetime.now().strftime('%Y-%m-%d') + + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = AggTradeDownloader( + trading_type='spot', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Aggregated trades don't support intervals + dates=None, # Use date range instead + start_date=start_date, + end_date=end_date, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Spot Daily Aggregated Trades Downloader\n' + 'Downloads DAILY aggregated trade data for spot market.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available spot symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all spot symbols from exchange...") + temp_downloader = AggTradeDownloader(trading_type='spot', max_workers=10) + symbols = temp_downloader.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Spot Daily Aggregated Trades Downloader") + logger.info(f"Market type: spot") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY aggTrades") + + return download_agg_trades_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-spot-daily-klines.py b/scripts/download-spot-daily-klines.py new file mode 100644 index 0000000..342d04f --- /dev/null +++ b/scripts/download-spot-daily-klines.py @@ -0,0 +1,242 @@ +#!/usr/bin/env python3 +""" +Binance Spot Daily Klines Downloader + +Optimized script for downloading daily kline (candlestick) data from Binance spot market. + +Features: +- Downloads DAILY kline data for spot market +- Supports multiple time intervals (1m, 15m, 1h, 4h, 8h, etc.) +- Auto-skips existing files +- Shows detailed progress (symbol, date, interval, file size) + +Examples: + # Download with default date range (2020-01-01 to current) and default intervals + python3 scripts/download-spot-daily-klines.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-spot-daily-klines.py -s BTCUSDT -startDate 2023-01-01 -endDate 2023-12-31 + + # Download specific intervals + python3 scripts/download-spot-daily-klines.py -s BTCUSDT -i 1m 1h 1d + + # Download multiple symbols + python3 scripts/download-spot-daily-klines.py -s BTCUSDT ETHUSDT + + # Download all spot symbols with default intervals + python3 scripts/download-spot-daily-klines.py + + # Specify custom output folder + python3 scripts/download-spot-daily-klines.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.kline_downloader import KlineDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +# Default intervals for daily klines +DEFAULT_INTERVALS = ["1m", "15m", "1h", "4h", "8h"] + + +def download_klines_daily( + symbols: list = None, + intervals: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download daily kline data for spot market. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (default: ["1m", "15m", "1h", "4h", "8h"]) + start_date: Start date in YYYY-MM-DD format (default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = DEFAULT_INTERVALS + + # Set default dates if not specified + if not start_date: + start_date = '2020-01-01' + if not end_date: + end_date = datetime.now().strftime('%Y-%m-%d') + + logger.info(f"Intervals: {', '.join(intervals)}") + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = KlineDownloader( + trading_type='spot', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=intervals, + dates=None, # Use date range instead + start_date=start_date, + end_date=end_date, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Spot Daily Klines Downloader\n' + 'Downloads DAILY kline (candlestick) data for spot market.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available spot symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + default=None, + help=f'Kline intervals (e.g., 1m 1h 1d). Default: {", ".join(DEFAULT_INTERVALS)}' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all spot symbols from exchange...") + temp_downloader = KlineDownloader(trading_type='spot', max_workers=10) + symbols = temp_downloader.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Spot Daily Klines Downloader") + logger.info(f"Market type: spot") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Intervals: {', '.join(args.intervals if args.intervals else DEFAULT_INTERVALS)}") + logger.info(f"Data type: DAILY klines") + + return download_klines_daily( + symbols=symbols, + intervals=args.intervals, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-spot-daily-trades.py b/scripts/download-spot-daily-trades.py new file mode 100644 index 0000000..a5c3ce5 --- /dev/null +++ b/scripts/download-spot-daily-trades.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 +""" +Binance Spot Daily Trades Downloader + +Optimized script for downloading daily individual trade data from Binance spot market. + +Features: +- Downloads DAILY individual trade data for spot market +- Auto-skips existing files +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with default date range (2020-01-01 to current) + python3 scripts/download-spot-daily-trades.py -s BTCUSDT + + # Download for specific date range + python3 scripts/download-spot-daily-trades.py -s BTCUSDT -startDate 2023-01-01 -endDate 2023-12-31 + + # Download multiple symbols + python3 scripts/download-spot-daily-trades.py -s BTCUSDT ETHUSDT + + # Download all spot symbols + python3 scripts/download-spot-daily-trades.py + + # Specify custom output folder + python3 scripts/download-spot-daily-trades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.trade_downloader import TradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_trades_daily( + symbols: list = None, + start_date: str = None, + end_date: str = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download daily trade data for spot market. + + Args: + symbols: List of trading symbols + start_date: Start date in YYYY-MM-DD format (default: 2020-01-01) + end_date: End date in YYYY-MM-DD format (default: current date) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default dates if not specified + if not start_date: + start_date = '2020-01-01' + if not end_date: + end_date = datetime.now().strftime('%Y-%m-%d') + + logger.info(f"Date range: {start_date} to {end_date}") + + # Initialize downloader with 10 concurrent threads + downloader = TradeDownloader( + trading_type='spot', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='daily') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download daily data + logger.info(f"Starting daily download...") + downloaded_count = downloader.download_daily( + symbols=[symbol], + intervals=None, # Trades don't support intervals + dates=None, # Use date range instead + start_date=start_date, + end_date=end_date, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Spot Daily Trades Downloader\n' + 'Downloads DAILY individual trade data for spot market.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available spot symbols.' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Start date in YYYY-MM-DD format (default: 2020-01-01)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='End date in YYYY-MM-DD format (default: current date)' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all spot symbols from exchange...") + temp_downloader = TradeDownloader(trading_type='spot', max_workers=10) + symbols = temp_downloader.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Spot Daily Trades Downloader") + logger.info(f"Market type: spot") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: DAILY trades") + + return download_trades_daily( + symbols=symbols, + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-spot-monthly-aggTrades.py b/scripts/download-spot-monthly-aggTrades.py new file mode 100644 index 0000000..3050215 --- /dev/null +++ b/scripts/download-spot-monthly-aggTrades.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python3 +""" +Binance Spot Aggregated Trades Downloader (Monthly Only) + +Optimized script for downloading aggregated trade history from Binance spot market. +This script downloads MONTHLY aggregated trade data. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-spot-monthly-aggTrades.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-spot-monthly-aggTrades.py -s BTCUSDT -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-spot-monthly-aggTrades.py -s BTCUSDT ETHUSDT + + # Download for specific months + python3 scripts/download-spot-monthly-aggTrades.py -s BTCUSDT -y 2024 -m 1 2 3 + + # Specify custom output folder + python3 scripts/download-spot-monthly-aggTrades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.agg_trade_downloader import AggTradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_agg_trades_monthly( + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download spot aggregated trade monthly data with smart features. + + Args: + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = AggTradeDownloader( + trading_type='spot', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Aggregated trades don't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Spot Aggregated Trades Downloader (Monthly Only)\n' + 'Downloads MONTHLY aggregated trade data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available spot symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all spot symbols from exchange...") + temp_downloader = AggTradeDownloader(trading_type='spot', max_workers=10) + symbols = temp_downloader.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Spot Aggregated Trades Downloader (Monthly Only)") + logger.info(f"Market type: spot") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY aggregated trades") + + return download_agg_trades_monthly( + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-spot-monthly-klines.py b/scripts/download-spot-monthly-klines.py new file mode 100644 index 0000000..bdea535 --- /dev/null +++ b/scripts/download-spot-monthly-klines.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python3 +""" +Binance Spot Klines Downloader (Monthly) + +Downloads monthly kline data from Binance spot market. + +Features: +- Supports multiple intervals: 1m, 15m, 1h, 4h, 8h +- Auto-skips existing files +- 10-thread concurrent downloads + +Examples: + # Download with default intervals + python3 scripts/download-spot-monthly-klines.py -s BTCUSDT + + # Download specific intervals + python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -i 1m 1h + + # Download for specific year + python3 scripts/download-spot-monthly-klines.py -s BTCUSDT -y 2024 + + # Download multiple symbols + python3 scripts/download-spot-monthly-klines.py -s BTCUSDT ETHUSDT +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.kline_downloader import KlineDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + +# Valid intervals for klines +VALID_INTERVALS = ["1m", "15m", "1h", "4h", "8h"] + + +def download_klines_monthly( + symbols: list = None, + intervals: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download monthly kline data. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals + years: List of years to download + months: List of months to download + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default intervals if not specified + if not intervals: + intervals = VALID_INTERVALS + logger.info(f"No intervals specified, using default: {', '.join(intervals)}") + + logger.info(f"Intervals: {', '.join(intervals)}") + + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = KlineDownloader( + trading_type='spot', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data for each interval + for interval in intervals: + logger.info(f"\nDownloading {interval} klines...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=[interval], + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol} ({interval})") + else: + logger.info(f"All files already exist for {symbol} ({interval})") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Spot Klines Downloader (Monthly)', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available symbols.' + ) + + parser.add_argument( + '-i', '--intervals', + type=str, + nargs='+', + choices=VALID_INTERVALS, + default=None, + help='Kline intervals (default: 1m 15m 1h 4h 8h). Example: -i 1m 1h' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all spot symbols from exchange...") + temp_downloader = KlineDownloader(trading_type='spot', max_workers=10) + symbols = temp_downloader.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Spot Klines Downloader (Monthly)") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY") + + return download_klines_monthly( + symbols=symbols, + intervals=args.intervals, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/download-spot-monthly-trades.py b/scripts/download-spot-monthly-trades.py new file mode 100644 index 0000000..ab51c57 --- /dev/null +++ b/scripts/download-spot-monthly-trades.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python3 +""" +Binance Spot Trades Downloader (Monthly Only) + +Optimized script for downloading individual trade history from Binance spot market. +This script downloads MONTHLY trade data. + +Features: +- Auto-detects available date range from the web +- Skips downloading if local data already exists +- Shows detailed progress (symbol, date, file size) + +Examples: + # Download with auto-detected date range (recommended) + python3 scripts/download-spot-monthly-trades.py -s BTCUSDT + + # Download for specific year/month range + python3 scripts/download-spot-monthly-trades.py -s BTCUSDT -y 2023 2024 + + # Download multiple symbols + python3 scripts/download-spot-monthly-trades.py -s BTCUSDT ETHUSDT + + # Download for specific months + python3 scripts/download-spot-monthly-trades.py -s BTCUSDT -y 2024 -m 1 2 3 + + # Specify custom output folder + python3 scripts/download-spot-monthly-trades.py -s BTCUSDT -folder /data/binance +""" + +import argparse +import logging +import os +import sys +from datetime import datetime + +# Add src directory to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + +from binance_data_downloader.downloaders.trade_downloader import TradeDownloader +from binance_data_downloader.utils.logger_setup import setup_logger, log_level_from_string + + +def download_trades_monthly( + symbols: list = None, + years: list = None, + months: list = None, + folder: str = None, + skip_existing: bool = True, + log_level: str = 'INFO' +) -> int: + """ + Download spot trade monthly data with smart features. + + Args: + symbols: List of trading symbols + years: List of years to download (None for default: 2020-current) + months: List of months to download (None for all months) + folder: Output folder + skip_existing: Whether to skip existing files + log_level: Logging level + + Returns: + Exit code (0 = success, 1 = failure) + """ + logger = logging.getLogger("binance_data_downloader") + + try: + # Set default years if not specified + if not years: + current_year = datetime.now().year + years = list(range(2020, current_year + 1)) + + # Set default months if not specified + if not months: + months = list(range(1, 13)) + + logger.info(f"Date range: {min(years)} to {max(years)}, months {min(months)}-{max(months)}") + + # Initialize downloader with 10 concurrent threads + downloader = TradeDownloader( + trading_type='spot', + max_workers=10 + ) + logger.info(f"Using 10 threads for concurrent downloads") + + for symbol in symbols: + logger.info(f"\n{'='*70}") + logger.info(f"Processing symbol: {symbol}") + logger.info(f"{'='*70}") + + # Check local data range + logger.info(f"Checking local data...") + local_start, local_end = downloader.get_local_date_range(symbol, folder, time_period='monthly') + + if local_start and local_end: + logger.info(f"Local data range: {local_start} to {local_end}") + logger.info(f"Note: Will skip existing files during download") + else: + logger.info(f"No local data found, will download all files") + + # Download monthly data + logger.info(f"Starting monthly download...") + downloaded_count = downloader.download_monthly( + symbols=[symbol], + intervals=None, # Trades don't support intervals + years=years, + months=months, + folder=folder, + download_checksum=False, + verify_checksum=False, + skip_existing=skip_existing + ) + + if downloaded_count > 0: + logger.info(f"Successfully downloaded {downloaded_count} files for {symbol}") + else: + logger.info(f"All files already exist for {symbol} (no new downloads)") + + logger.info(f"\n{'='*70}") + logger.info(f"All downloads completed!") + logger.info(f"{'='*70}") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def main(): + """Main entry point.""" + # Get project root directory + script_dir = os.path.dirname(os.path.abspath(__file__)) + project_root = os.path.dirname(script_dir) + default_output_folder = os.path.join(project_root, 'data') + + parser = argparse.ArgumentParser( + description='Binance Spot Trades Downloader (Monthly Only)\n' + 'Downloads MONTHLY individual trade data.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-s', '--symbols', + type=str, + nargs='+', + required=False, + help='Trading symbols (e.g., BTCUSDT ETHUSDT). If not specified, downloads all available spot symbols.' + ) + + parser.add_argument( + '-y', '--years', + type=int, + nargs='+', + default=None, + help='Years to download (e.g., 2023 2024). Default: 2020 to current year' + ) + + parser.add_argument( + '-m', '--months', + type=int, + nargs='+', + choices=range(1, 13), + default=None, + metavar='MONTH', + help='Months to download (1-12). Default: all months' + ) + + parser.add_argument( + '-folder', + type=str, + default=default_output_folder, + help=f'Output folder (default: {default_output_folder})' + ) + + parser.add_argument( + '--no-skip-existing', + action='store_true', + help='Download all files even if they exist locally' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(args.log_level), + log_file=None, + ) + logger = logging.getLogger("binance_data_downloader") + + # Fetch symbols if not specified + symbols = args.symbols + if not symbols: + logger.info("No symbols specified, fetching all spot symbols from exchange...") + temp_downloader = TradeDownloader(trading_type='spot', max_workers=10) + symbols = temp_downloader.fetch_symbols('spot') + logger.info(f"Found {len(symbols)} symbols") + + logger.info("Binance Spot Trades Downloader (Monthly Only)") + logger.info(f"Market type: spot") + logger.info(f"Symbols: {', '.join(symbols[:10])}{'...' if len(symbols) > 10 else ''}") + logger.info(f"Data type: MONTHLY individual trades") + + return download_trades_monthly( + symbols=symbols, + years=args.years, + months=args.months, + folder=args.folder, + skip_existing=not args.no_skip_existing, + log_level=args.log_level + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/merge-zip-to-csv.py b/scripts/merge-zip-to-csv.py new file mode 100644 index 0000000..7894c4f --- /dev/null +++ b/scripts/merge-zip-to-csv.py @@ -0,0 +1,793 @@ +#!/usr/bin/env python3 +""" +Binance Data Merge Script - Merge ZIP files to Single CSV (Memory Efficient) + +This script extracts and merges all ZIP files from a folder into a single CSV file, +sorted by time in ascending order. Uses multi-threaded extraction and streaming +merge to handle large datasets efficiently. + +Features: +- Multi-threaded ZIP extraction for faster processing +- Streaming merge to avoid memory overflow on large datasets +- Auto-detects symbol and interval from folder path +- Generates output filename: SYMBOL_INTERVAL_STARTDATE_ENDDATE.csv + +Examples: + # Merge klines data (specify folder containing ZIP files) + python3 scripts/merge-zip-to-csv.py -folder data/futures/um/daily/klines/BTCUSDT/1m + + # Specify custom output directory + python3 scripts/merge-zip-to-csv.py -folder data/futures/um/daily/klines/BTCUSDT/1m -output merged + + # Specify custom output filename + python3 scripts/merge-zip-to-csv.py -folder data/futures/um/daily/klines/BTCUSDT/1m -o my_data.csv + + # Limit date range for output + python3 scripts/merge-zip-to-csv.py -folder data/futures/um/daily/klines/BTCUSDT/1m -startDate 2023-01-01 -endDate 2023-12-31 + + # Set number of threads for extraction + python3 scripts/merge-zip-to-csv.py -folder data/futures/um/daily/klines/BTCUSDT/1m -workers 8 +""" + +import argparse +import csv +import logging +import os +import re +import sys +import tempfile +import zipfile +from concurrent.futures import ThreadPoolExecutor, as_completed +from datetime import datetime +from pathlib import Path +from typing import List, Tuple, Optional + + +# Binance Klines columns (raw data has no headers) +# See: https://github.com/binance/binance-public-data/ +KLINES_COLUMNS = [ + 'Date', # open_time (timestamp in milliseconds) + 'Open', # open price + 'High', # high price + 'Low', # low price + 'Close', # close price + 'Volume', # volume + 'close_time', # close time (timestamp in milliseconds) + 'quote_volume', # quote asset volume + 'trades', # number of trades + 'taker_buy_base', # taker buy base asset volume + 'taker_buy_quote',# taker buy quote asset volume + 'ignore' # ignore +] + + +def setup_logger(level: str = 'INFO') -> logging.Logger: + """Setup logger.""" + logging.basicConfig( + level=getattr(logging, level.upper()), + format='%(asctime)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' + ) + return logging.getLogger(__name__) + + +def parse_symbol_interval_from_path(folder_path: str) -> Tuple[Optional[str], Optional[str]]: + """ + Parse symbol and interval from folder path. + + Args: + folder_path: Path to the folder containing ZIP files + + Returns: + Tuple of (symbol, interval) or (None, None) if not found + """ + path_parts = Path(folder_path).parts + + symbol = None + interval = None + + # Try to find symbol (e.g., BTCUSDT, ETHUSDT, etc.) + for part in path_parts: + # Symbol pattern: USDT/BUSD at end, all caps + if re.match(r'^[A-Z]+USDT$', part) or re.match(r'^[A-Z]+BUSD$', part) or \ + re.match(r'^[A-Z]+USD_PERP$', part) or re.match(r'^[A-Z]+USDC$', part): + symbol = part + break + + # Try to find interval (e.g., 1m, 5m, 15m, 1h, 4h, 1d, etc.) + interval_patterns = [ + r'^(\d+m)$', # 1m, 5m, 15m + r'^(\d+h)$', # 1h, 4h, 12h + r'^(\d+d)$', # 1d, 3d + r'^(1w|1M)$', # 1w, 1M + ] + for part in path_parts: + for pattern in interval_patterns: + if re.match(pattern, part): + interval = part + break + if interval: + break + + return symbol, interval + + +def extract_single_zip(args: Tuple[str, str]) -> Tuple[str, Optional[str]]: + """ + Extract a single ZIP file. + + Args: + args: Tuple of (zip_path, temp_dir) + + Returns: + Tuple of (csv_filename, error_message) - error_message is None if successful + """ + zip_path, temp_dir = args + zip_filename = os.path.basename(zip_path) + + try: + with zipfile.ZipFile(zip_path, 'r') as zf: + for file_info in zf.infolist(): + if file_info.filename.endswith('.csv'): + # Extract to temp directory + zf.extract(file_info, temp_dir) + return (file_info.filename, None) + return (zip_filename, "No CSV file found in ZIP") + except Exception as e: + return (zip_filename, str(e)) + + +def extract_zip_files_parallel( + folder_path: str, + temp_dir: str, + max_workers: int, + logger: logging.Logger +) -> List[str]: + """ + Extract all ZIP files in parallel using multiple threads. + + Args: + folder_path: Path to folder containing ZIP files + temp_dir: Temporary directory for extracted files + max_workers: Number of threads to use + logger: Logger instance + + Returns: + List of extracted CSV file paths (sorted) + """ + zip_files = [ + os.path.join(folder_path, f) + for f in os.listdir(folder_path) + if f.endswith('.zip') + ] + + if not zip_files: + logger.warning(f"No ZIP files found in {folder_path}") + return [] + + logger.info(f"Found {len(zip_files)} ZIP files") + logger.info(f"Extracting with {max_workers} threads...") + + # Prepare arguments for parallel processing + extract_args = [(zip_path, temp_dir) for zip_path in zip_files] + + csv_files = [] + failed_files = [] + + with ThreadPoolExecutor(max_workers=max_workers) as executor: + futures = {executor.submit(extract_single_zip, args): args[0] for args in extract_args} + + for future in as_completed(futures): + csv_filename, error = future.result() + if error is None: + csv_path = os.path.join(temp_dir, csv_filename) + csv_files.append(csv_path) + else: + failed_files.append((csv_filename, error)) + logger.error(f"Failed to extract {csv_filename}: {error}") + + # Sort CSV files by filename (which contains date info) + csv_files.sort() + + logger.info(f"Extracted {len(csv_files)} CSV files successfully") + if failed_files: + logger.warning(f"Failed to extract {len(failed_files)} files") + + return csv_files + + +def detect_time_column(csv_path: str) -> Optional[str]: + """ + Detect the time column name by reading the first row of a CSV file. + + Args: + csv_path: Path to CSV file + + Returns: + Name of the time column or None + """ + try: + with open(csv_path, 'r', newline='', encoding='utf-8') as f: + reader = csv.reader(f) + headers = next(reader, None) + if headers: + # Common time column names in Binance data + time_columns = [ + 'open_time', 'openTime', 'timestamp', + 'time', 'date', 'datetime', + 'trade_time', 'close_time' + ] + for col in time_columns: + if col in headers: + return col + # Default to first column + return headers[0] if headers else None + except Exception: + pass + return None + + +def convert_klines_row(row: List[str]) -> List[str]: + """ + Convert klines row: transform timestamp to datetime string for compatibility. + + Args: + row: Raw klines data row + + Returns: + Row with first column (Date) converted to datetime string + """ + if row and len(row) > 0: + try: + ts = int(row[0]) + dt = datetime.fromtimestamp(ts / 1000) + # Format: YYYY-MM-DD HH:MM:SS + row = row.copy() + row[0] = dt.strftime('%Y-%m-%d %H:%M:%S') + except (ValueError, TypeError): + pass + return row + + +def is_binance_klines_data(csv_path: str) -> bool: + """ + Check if CSV file is Binance klines data (no headers, 12 columns, first column is timestamp). + + Args: + csv_path: Path to CSV file + + Returns: + True if file appears to be Binance klines data without headers + """ + try: + with open(csv_path, 'r', newline='', encoding='utf-8') as f: + reader = csv.reader(f) + first_row = next(reader, None) + if first_row and len(first_row) >= 6: + # Check if first column looks like a timestamp (13-digit milliseconds) + try: + ts = int(first_row[0]) + # Valid timestamp range: 2017-01-01 to 2030-01-01 in milliseconds + if 1483228800000 <= ts <= 1893456000000: + # Check if other columns are numeric (prices/volumes) + float(first_row[1]) # open + float(first_row[2]) # high + float(first_row[3]) # low + float(first_row[4]) # close + float(first_row[5]) # volume + return True + except (ValueError, IndexError): + pass + except Exception: + pass + return False + + +def read_csv_batches( + csv_files: List[str], + batch_size: int = 50, + start_date: Optional[str] = None, + end_date: Optional[str] = None, + logger: logging.Logger = None, + is_klines: bool = False +): + """ + Generator that yields batches of rows from CSV files. + + Args: + csv_files: List of CSV file paths (sorted by filename) + batch_size: Number of CSV files to process per batch + start_date: Optional start date filter (YYYY-MM-DD) + end_date: Optional end date filter (YYYY-MM-DD) + logger: Logger instance + is_klines: If True, treat files as headerless Binance klines data + + Yields: + Tuples of (headers, rows_batch, total_rows_in_batch) + """ + # Convert date filters to timestamps if provided + start_ts = None + end_ts = None + if start_date: + start_dt = datetime.strptime(start_date, '%Y-%m-%d') + start_ts = int(start_dt.timestamp() * 1000) + if end_date: + end_dt = datetime.strptime(end_date, '%Y-%m-%d') + # Include the entire end date + from datetime import timedelta + end_dt = end_dt + timedelta(days=1) + end_ts = int(end_dt.timestamp() * 1000) + + headers = None + time_col_idx = 0 + total_rows = 0 + + # For klines data, use predefined headers + if is_klines: + headers = KLINES_COLUMNS + time_col_idx = 0 # Date column is first + + for i in range(0, len(csv_files), batch_size): + batch = csv_files[i:i + batch_size] + batch_rows = [] + batch_count = 0 + + if logger: + logger.debug(f"Processing batch {i // batch_size + 1}/{(len(csv_files) + batch_size - 1) // batch_size}") + + for csv_file in batch: + try: + with open(csv_file, 'r', newline='', encoding='utf-8') as f: + reader = csv.reader(f) + + if is_klines: + # Klines data has no headers, read all rows as data + for row in reader: + if len(row) <= time_col_idx: + continue + + # Apply date filters if specified + if start_ts or end_ts: + try: + row_ts = int(row[time_col_idx]) + if start_ts and row_ts < start_ts: + continue + if end_ts and row_ts >= end_ts: + continue + except (ValueError, IndexError): + pass + + batch_rows.append(row) + batch_count += 1 + total_rows += 1 + else: + # Regular CSV with headers + file_headers = next(reader, None) + + if file_headers: + if headers is None: + headers = file_headers + # Find time column index + time_col_name = detect_time_column(csv_file) + if time_col_name and time_col_name in file_headers: + time_col_idx = file_headers.index(time_col_name) + + # Read rows + for row in reader: + if len(row) <= time_col_idx: + continue + + # Apply date filters if specified + if start_ts or end_ts: + try: + row_ts = int(row[time_col_idx]) + if start_ts and row_ts < start_ts: + continue + if end_ts and row_ts >= end_ts: + continue + except (ValueError, IndexError): + pass + + batch_rows.append(row) + batch_count += 1 + total_rows += 1 + + except Exception as e: + if logger: + logger.error(f"Error reading {csv_file}: {e}") + + # Sort this batch by time column + if batch_rows and headers: + try: + batch_rows.sort(key=lambda x: int(x[time_col_idx]) if len(x) > time_col_idx else 0) + except (ValueError, IndexError): + pass # Keep original order if sorting fails + + yield headers, batch_rows, batch_count + + +def merge_sorted_batches( + csv_files: List[str], + output_path: str, + batch_size: int = 50, + start_date: Optional[str] = None, + end_date: Optional[str] = None, + logger: logging.Logger = None, + is_klines: bool = False, + convert_datetime: bool = True +) -> Tuple[int, str, str]: + """ + Merge CSV files using external merge sort algorithm. + + Reads files in batches, sorts each batch, and writes to output. + Uses a final in-memory sort of batch checkpoints for complete ordering. + + Args: + csv_files: List of CSV file paths (sorted by filename) + output_path: Path to output CSV file + batch_size: Number of CSV files to process per batch + start_date: Optional start date filter (YYYY-MM-DD) + end_date: Optional end date filter (YYYY-MM-DD) + logger: Logger instance + is_klines: If True, treat files as headerless Binance klines data + convert_datetime: If True and is_klines, convert timestamp to datetime string + + Returns: + Tuple of (total_rows, first_timestamp, last_timestamp) + """ + if logger: + logger.info("Starting streaming merge...") + if is_klines: + logger.info("Detected Binance klines data (headerless), adding column names...") + + # Since Binance files are named with dates (e.g., BTCUSDT-1m-2020-01-01.csv), + # and we sorted by filename, the data is approximately in order. + # We'll process in batches and do a final pass. + + temp_sorted_files = [] + headers = None + total_rows = 0 + first_ts = None + last_ts = None + + with tempfile.TemporaryDirectory() as temp_dir: + # First pass: Read, filter, and sort batches + for batch_headers, batch_rows, batch_count in read_csv_batches( + csv_files, batch_size, start_date, end_date, logger, is_klines=is_klines + ): + if headers is None and batch_headers: + headers = batch_headers + + if batch_rows: + total_rows += batch_count + + # Track first and last timestamps + if batch_rows: + try: + if first_ts is None: + first_ts = batch_rows[0][0] + last_ts = batch_rows[-1][0] + except IndexError: + pass + + # Write sorted batch to temp file + temp_file = os.path.join(temp_dir, f"batch_{len(temp_sorted_files)}.csv") + with open(temp_file, 'w', newline='', encoding='utf-8') as f: + writer = csv.writer(f) + writer.writerows(batch_rows) + temp_sorted_files.append(temp_file) + + if logger: + logger.debug(f"Wrote batch {len(temp_sorted_files)}: {batch_count} rows") + + # Second pass: Merge all sorted batches using k-way merge + if logger: + logger.info(f"Merging {len(temp_sorted_files)} sorted batches...") + + with open(output_path, 'w', newline='', encoding='utf-8') as out_file: + writer = csv.writer(out_file) + + # Write headers + if headers: + writer.writerow(headers) + + # Use priority queue for k-way merge + import heapq + + # Open all temp files and read first row from each + file_handles = [] + heap = [] + + for i, temp_file in enumerate(temp_sorted_files): + f = open(temp_file, 'r', newline='', encoding='utf-8') + reader = csv.reader(f) + try: + first_row = next(reader) + heapq.heappush(heap, (first_row[0], i, first_row)) + file_handles.append((f, reader)) + except StopIteration: + f.close() + + # K-way merge + merge_count = 0 + while heap: + time_key, file_idx, row = heapq.heappop(heap) + # Convert timestamp to datetime string for klines data + if is_klines and convert_datetime: + row = convert_klines_row(row) + writer.writerow(row) + merge_count += 1 + + # Progress indicator + if merge_count % 100000 == 0 and logger: + logger.debug(f"Merged {merge_count} rows...") + + # Get next row from this file + f, reader = file_handles[file_idx] + try: + next_row = next(reader) + heapq.heappush(heap, (next_row[0], file_idx, next_row)) + except StopIteration: + f.close() + + # Close any remaining files + for f, reader in file_handles: + if not f.closed: + f.close() + + return total_rows, first_ts or '', last_ts or '' + + +def generate_output_filename( + symbol: Optional[str], + interval: Optional[str], + first_ts: str, + last_ts: str, + output_dir: str, + custom_name: Optional[str] = None +) -> str: + """ + Generate output filename in format: SYMBOL_INTERVAL_STARTDATE_ENDDATE.csv + + Args: + symbol: Trading symbol + interval: Time interval + first_ts: First timestamp (milliseconds) + last_ts: Last timestamp (milliseconds) + output_dir: Output directory + custom_name: Custom filename (overrides auto-generated) + + Returns: + Full path to output file + """ + if custom_name: + if not custom_name.endswith('.csv'): + custom_name += '.csv' + return os.path.join(output_dir, custom_name) + + # Convert timestamps to dates + try: + if first_ts and last_ts: + first_dt = datetime.fromtimestamp(int(first_ts) / 1000) + last_dt = datetime.fromtimestamp(int(last_ts) / 1000) + start_date = first_dt.strftime('%Y%m%d') + end_date = last_dt.strftime('%Y%m%d') + else: + start_date = 'unknown' + end_date = 'unknown' + except (ValueError, TypeError): + start_date = 'unknown' + end_date = 'unknown' + + # Build filename + parts = [] + if symbol: + parts.append(symbol) + if interval: + parts.append(interval) + parts.append(start_date) + parts.append(end_date) + + filename = '_'.join(parts) + '.csv' + return os.path.join(output_dir, filename) + + +def main(): + """Main entry point.""" + parser = argparse.ArgumentParser( + description='Binance Data Merge Script - Memory Efficient Streaming Merge', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-folder', + type=str, + required=True, + help='Folder containing ZIP files to merge (e.g., data/futures/um/daily/klines/BTCUSDT/1m)' + ) + + parser.add_argument( + '-output', '-o', + type=str, + default='.', + help='Output directory for merged CSV file (default: current directory)' + ) + + parser.add_argument( + '-filename', + type=str, + default=None, + help='Custom output filename (default: auto-generated as SYMBOL_INTERVAL_STARTDATE_ENDDATE.csv)' + ) + + parser.add_argument( + '-startDate', + type=str, + default=None, + help='Filter data from this date (YYYY-MM-DD format)' + ) + + parser.add_argument( + '-endDate', + type=str, + default=None, + help='Filter data until this date (YYYY-MM-DD format)' + ) + + parser.add_argument( + '-s', '--symbol', + type=str, + default=None, + help='Trading symbol (auto-detected from folder path if not specified)' + ) + + parser.add_argument( + '-i', '--interval', + type=str, + default=None, + help='Time interval (auto-detected from folder path if not specified)' + ) + + parser.add_argument( + '-workers', '-w', + type=int, + default=8, + help='Number of threads for ZIP extraction (default: 8)' + ) + + parser.add_argument( + '-batch-size', + type=int, + default=100, + help='Number of files to process per batch (default: 100). Lower uses less memory, higher is faster.' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + args = parser.parse_args() + + # Setup logging + logger = setup_logger(args.log_level) + + # Validate folder path + folder_path = args.folder + if not os.path.isdir(folder_path): + logger.error(f"Folder not found: {folder_path}") + return 1 + + # Parse symbol and interval from folder path + symbol, interval = parse_symbol_interval_from_path(folder_path) + + # Override with command-line args if provided + if args.symbol: + symbol = args.symbol + if args.interval: + interval = args.interval + + logger.info("=" * 70) + logger.info("Binance Data Merge Script (Memory Efficient)") + logger.info("=" * 70) + logger.info(f"Input folder: {folder_path}") + if symbol: + logger.info(f"Symbol: {symbol}") + if interval: + logger.info(f"Interval: {interval}") + logger.info(f"Extraction threads: {args.workers}") + logger.info(f"Batch size: {args.batch_size} files") + + # Create output directory + output_dir = args.output + os.makedirs(output_dir, exist_ok=True) + logger.info(f"Output directory: {output_dir}") + + # Create temp directory for extraction + start_time = datetime.now() + logger.info(f"Started at: {start_time}") + + with tempfile.TemporaryDirectory() as temp_dir: + logger.info(f"Temporary directory: {temp_dir}") + + # Extract ZIP files in parallel + extract_start = datetime.now() + csv_files = extract_zip_files_parallel( + folder_path, temp_dir, args.workers, logger + ) + + if not csv_files: + logger.error("No CSV files extracted. Exiting.") + return 1 + + extract_time = (datetime.now() - extract_start).total_seconds() + logger.info(f"Extraction completed in {extract_time:.1f} seconds") + + # Merge CSV files using streaming approach + merge_start = datetime.now() + + # Generate output path (temporary until we know date range) + output_path = os.path.join(output_dir, args.filename if args.filename else 'temp_output.csv') + + # Detect if source data is headerless Binance klines + is_klines = False + if csv_files: + is_klines = is_binance_klines_data(csv_files[0]) + if is_klines: + logger.info("Detected Binance klines data format (headerless)") + logger.info(f"Will add columns: {', '.join(KLINES_COLUMNS[:6])}") + + total_rows, first_ts, last_ts = merge_sorted_batches( + csv_files, + output_path, + batch_size=args.batch_size, + start_date=args.startDate, + end_date=args.endDate, + logger=logger, + is_klines=is_klines + ) + + merge_time = (datetime.now() - merge_start).total_seconds() + logger.info(f"Merge completed in {merge_time:.1f} seconds") + + # Rename output file with proper name if not custom + if not args.filename: + final_output_path = generate_output_filename( + symbol=symbol, + interval=interval, + first_ts=first_ts, + last_ts=last_ts, + output_dir=output_dir + ) + # Rename temp file to final name + if os.path.exists(final_output_path): + os.remove(final_output_path) + os.rename(output_path, final_output_path) + output_path = final_output_path + + logger.info(f"Output file: {output_path}") + logger.info(f"Total records: {total_rows:,}") + + # Print date range info + if first_ts and last_ts: + try: + first_dt = datetime.fromtimestamp(int(first_ts) / 1000) + last_dt = datetime.fromtimestamp(int(last_ts) / 1000) + logger.info(f"Date range: {first_dt} to {last_dt}") + except (ValueError, TypeError): + pass + + total_time = (datetime.now() - start_time).total_seconds() + logger.info("=" * 70) + logger.info(f"Merge completed successfully in {total_time:.1f} seconds!") + logger.info("=" * 70) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/scan-symbol-dates.py b/scripts/scan-symbol-dates.py new file mode 100644 index 0000000..55cb9b7 --- /dev/null +++ b/scripts/scan-symbol-dates.py @@ -0,0 +1,982 @@ +#!/usr/bin/env python3 +""" +Binance Symbol Data Start Date Scanner + +This script scans the Binance public data server (data.binance.vision) +to discover the actual start date for each symbol's data. + +The discovered information is saved to a JSON file that can be used +by downloaders to avoid unnecessary requests for non-existent data. + +Features: +- Scans all market types: spot, um (USD-M futures), cm (COIN-M futures) +- Scans all data types: klines, trades, aggTrades, etc. +- Saves results to JSON for reuse +- Uses S3 API for efficient directory listing + +Examples: + # Scan all markets and data types + python3 scripts/scan-symbol-dates.py + + # Scan only spot market + python3 scripts/scan-symbol-dates.py -t spot + + # Scan specific data types + python3 scripts/scan-symbol-dates.py -d klines trades + + # Specify output file + python3 scripts/scan-symbol-dates.py -o data/symbol_dates.json + + # Resume from existing file (incremental update) + python3 scripts/scan-symbol-dates.py --resume -o data/symbol_dates.json +""" + +import argparse +import json +import logging +import os +import re +import signal +import ssl +import threading +import urllib.request +import urllib.error +import xml.etree.ElementTree as ET +from concurrent.futures import ThreadPoolExecutor, as_completed, TimeoutError as FuturesTimeoutError +from datetime import datetime +from typing import Dict, List, Optional, Set, Tuple + +# Global timeout flag +_timeout_event = threading.Event() +_global_start_time = None +_global_timeout_seconds = 120 # 2 minutes default + + +# S3 Bucket URL for Binance public data +S3_BUCKET_URL = "https://s3-ap-northeast-1.amazonaws.com/data.binance.vision" + +# Binance API endpoints +BINANCE_API = { + 'spot': 'https://api.binance.com/api/v3/exchangeInfo', + 'um': 'https://fapi.binance.com/fapi/v1/exchangeInfo', + 'cm': 'https://dapi.binance.com/dapi/v1/exchangeInfo' +} + +# Data type configurations +DATA_TYPES = { + 'spot': ['klines', 'trades', 'aggTrades', 'depth'], + 'um': ['klines', 'trades', 'aggTrades', 'indexPriceKlines', 'markPriceKlines', + 'premiumIndexKlines', 'fundingRate', 'bookTicker', 'depth'], + 'cm': ['klines', 'trades', 'aggTrades', 'indexPriceKlines', 'markPriceKlines', + 'fundingRate', 'liquidationSnapshot', 'bookTicker'] +} + +# Intervals to check for klines data +KLINES_INTERVALS = ['1m', '5m', '15m', '30m', '1h', '4h', '1d', '1w', '1M'] + +# Default date to use if no earlier data found +DEFAULT_START_DATE = "2020-01-01" + + +def setup_logger(level: str = 'INFO') -> logging.Logger: + """Setup logger.""" + logging.basicConfig( + level=getattr(logging, level.upper()), + format='%(asctime)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' + ) + return logging.getLogger(__name__) + + +def check_timeout() -> bool: + """Check if global timeout has been reached.""" + if _timeout_event.is_set(): + return True + if _global_start_time is not None: + elapsed = (datetime.now() - _global_start_time).total_seconds() + if elapsed >= _global_timeout_seconds: + _timeout_event.set() + return True + return False + + +def fetch_exchange_info(market: str, logger: logging.Logger = None, timeout: int = 30) -> Optional[Dict]: + """ + Fetch exchange info from Binance API. + + Args: + market: Market type ('spot', 'um', 'cm') + logger: Logger instance + timeout: Request timeout in seconds + + Returns: + API response as dict or None if failed + """ + url = BINANCE_API.get(market) + if not url: + if logger: + logger.error(f"Unknown market type: {market}") + return None + + try: + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + req = urllib.request.Request( + url, + headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'} + ) + response = urllib.request.urlopen(req, context=ssl_context, timeout=timeout) + data = json.loads(response.read().decode('utf-8')) + return data + except Exception as e: + if logger: + logger.error(f"Failed to fetch exchange info for {market}: {e}") + return None + + +def parse_exchange_info(market: str, data: Dict, logger: logging.Logger = None) -> Dict[str, Dict]: + """ + Parse exchange info response to extract symbol start dates. + + Args: + market: Market type ('spot', 'um', 'cm') + data: API response data + logger: Logger instance + + Returns: + Dictionary mapping symbol -> {data_type -> start_date} + """ + result = {} + symbols = data.get('symbols', []) + + for symbol_info in symbols: + symbol = symbol_info.get('symbol', '') + if not symbol: + continue + + # Try to get launch/listing time + launch_time = None + + # Check various fields that might contain launch date + if 'onboardDate' in symbol_info: + launch_time = symbol_info['onboardDate'] + elif 'listingDate' in symbol_info: + launch_time = symbol_info['listingDate'] + elif 'launchTime' in symbol_info: + launch_time = symbol_info['launchTime'] + + # Convert timestamp to date string + if launch_time: + try: + if isinstance(launch_time, (int, float)): + # Unix timestamp in milliseconds + dt = datetime.fromtimestamp(launch_time / 1000) + start_date = dt.strftime('%Y-%m-%d') + else: + start_date = str(launch_time) + except: + start_date = DEFAULT_START_DATE + else: + start_date = DEFAULT_START_DATE + + result[symbol] = {'_default': start_date} + + if logger: + logger.info(f"Parsed {len(result)} symbols from {market} API") + + return result + + +def scan_market_via_api( + market: str, + logger: logging.Logger = None +) -> Dict[str, Dict[str, Dict]]: + """ + Scan a market using Binance API. + + Args: + market: Market type ('spot', 'um', 'cm') + logger: Logger instance + + Returns: + Dictionary with all data types containing symbol start dates + """ + if logger: + logger.info(f"Fetching {market} exchange info via API...") + + data = fetch_exchange_info(market, logger) + if not data: + return {} + + symbols_data = parse_exchange_info(market, data, logger) + + # Create result with all data types pointing to same symbol dates + result = {} + data_types = DATA_TYPES.get(market, []) + + for data_type in data_types: + result[data_type] = symbols_data.copy() + + return result + + +def scan_all_markets_via_api( + markets: List[str] = None, + logger: logging.Logger = None +) -> Dict: + """ + Scan all markets using Binance API (fast method). + + Args: + markets: List of markets to scan ('spot', 'um', 'cm') + logger: Logger instance + + Returns: + Dictionary with all scanned data + """ + if markets is None: + markets = ['spot', 'um', 'cm'] + + result = {} + + for market in markets: + if check_timeout(): + if logger: + logger.warning("Timeout reached, stopping API scan...") + break + + market_data = scan_market_via_api(market, logger) + if market_data: + result[market] = market_data + + return result + + +def fetch_s3_xml(prefix: str, marker: str = None, timeout: int = 10, delimiter: str = None) -> Optional[str]: + """ + Fetch S3 bucket listing XML for a given prefix. + + Args: + prefix: S3 key prefix (e.g., 'data/spot/monthly/klines/') + marker: Pagination marker for getting next page + timeout: Request timeout in seconds + delimiter: Delimiter for grouping (use '/' to get directories) + + Returns: + XML content or None if failed + """ + if check_timeout(): + return None + + url = f"{S3_BUCKET_URL}?prefix={prefix}" + if delimiter: + url += f"&delimiter={delimiter}" + if marker: + url += f"&marker={marker}" + try: + ssl_context = ssl.create_default_context() + ssl_context.check_hostname = False + ssl_context.verify_mode = ssl.CERT_NONE + + req = urllib.request.Request( + url, + headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'} + ) + response = urllib.request.urlopen(req, context=ssl_context, timeout=timeout) + return response.read().decode('utf-8', errors='ignore') + except Exception as e: + return None + + +def list_common_prefixes(prefix: str, logger: logging.Logger = None, max_pages: int = 20) -> List[str]: + """ + List S3 common prefixes (subdirectories) for a given prefix. + + Uses delimiter='/' to efficiently get directory names. + Supports pagination to get all results. + + Args: + prefix: S3 key prefix + logger: Logger instance + max_pages: Maximum number of pages to fetch (safety limit) + + Returns: + List of prefix names (without the full path) + """ + prefixes = set() + marker = None + page_count = 0 + + try: + while page_count < max_pages: + if check_timeout(): + break + # Use delimiter='/' to get CommonPrefixes directly (much faster) + xml_content = fetch_s3_xml(prefix, marker, delimiter='/') + if not xml_content: + break + + root = ET.fromstring(xml_content) + namespaces = {'s3': 'http://s3.amazonaws.com/doc/2006-03-01/'} + + # Get CommonPrefixes (subdirectories) + for common_prefix in root.findall('s3:CommonPrefixes', namespaces): + prefix_elem = common_prefix.find('s3:Prefix', namespaces) + if prefix_elem is not None: + full_prefix = prefix_elem.text + if full_prefix and full_prefix.startswith(prefix): + parts = full_prefix.rstrip('/').split('/') + if parts: + prefixes.add(parts[-1]) + + # Check if there are more results + is_truncated = root.find('s3:IsTruncated', namespaces) + if is_truncated is not None and is_truncated.text == 'true': + next_marker = root.find('s3:NextMarker', namespaces) + if next_marker is not None and next_marker.text: + marker = next_marker.text + page_count += 1 + else: + # For CommonPrefixes, use last prefix as marker + common_prefixes = root.findall('s3:CommonPrefixes', namespaces) + if common_prefixes: + last_prefix = common_prefixes[-1].find('s3:Prefix', namespaces) + if last_prefix is not None and last_prefix.text: + marker = last_prefix.text + page_count += 1 + else: + break + else: + break + else: + break + + except Exception as e: + if logger: + logger.debug(f"Error parsing XML for {prefix}: {e}") + + return sorted(prefixes) + + +def list_files_with_dates(prefix: str, logger: logging.Logger = None) -> List[Tuple[str, str]]: + """ + List files with their dates from S3. + + Args: + prefix: S3 key prefix + logger: Logger instance + + Returns: + List of (filename, date_str) tuples + """ + xml_content = fetch_s3_xml(prefix) + if not xml_content: + return [] + + files = [] + try: + root = ET.fromstring(xml_content) + namespaces = {'s3': 'http://s3.amazonaws.com/doc/2006-03-01/'} + + for content in root.findall('s3:Contents', namespaces): + key_elem = content.find('s3:Key', namespaces) + if key_elem is not None: + key = key_elem.text + # Skip checksum files + if key and not key.endswith('.CHECKSUM'): + # Extract date from filename + # Patterns: SYMBOL-INTERVAL-YYYY-MM-DD.zip or SYMBOL-INTERVAL-YYYY-MM.zip + date_match = re.search(r'(\d{4}-\d{2}(?:-\d{2})?)\.zip$', key) + if date_match: + files.append((key, date_match.group(1))) + + except Exception as e: + if logger: + logger.debug(f"Error parsing XML for {prefix}: {e}") + + return sorted(files, key=lambda x: x[1]) + + +def list_symbols_for_market_data_type( + market: str, + data_type: str, + logger: logging.Logger = None +) -> List[str]: + """ + List all symbols available for a market and data type. + + Uses daily data only for speed (most symbols are in daily). + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + logger: Logger instance + + Returns: + List of symbol names + """ + all_symbols = set() + + # Use daily only for speed (it has most symbols) + if market == 'spot': + prefix = f"data/spot/daily/{data_type}/" + else: + prefix = f"data/futures/{market}/daily/{data_type}/" + + prefixes = list_common_prefixes(prefix, logger) + + # Filter for symbol names (exclude intervals like 1m, 1h, 1d) + interval_pattern = r'^(\d+[mhdw]|1M)$' + symbols = [p for p in prefixes if not re.match(interval_pattern, p)] + all_symbols.update(symbols) + + if logger: + logger.debug(f"Found {len(symbols)} symbols") + + return sorted(all_symbols) + + +def list_intervals_for_symbol( + market: str, + data_type: str, + symbol: str, + logger: logging.Logger = None +) -> List[str]: + """ + List available intervals for a symbol (for klines data). + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type + symbol: Trading symbol + logger: Logger instance + + Returns: + List of interval names + """ + if market == 'spot': + prefix = f"data/spot/monthly/{data_type}/{symbol}/" + else: + prefix = f"data/futures/{market}/monthly/{data_type}/{symbol}/" + + prefixes = list_common_prefixes(prefix, logger) + + # Filter for interval names + interval_pattern = r'^(\d+[mhdw]|1M)$' + intervals = [p for p in prefixes if re.match(interval_pattern, p)] + + return sorted(intervals) + + +def find_earliest_date_for_symbol_interval( + market: str, + data_type: str, + symbol: str, + interval: str = None, + logger: logging.Logger = None +) -> Optional[str]: + """ + Find the earliest available date for a symbol/interval. + + Checks both daily and monthly data to find the earliest date. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + interval: Interval for klines data + logger: Logger instance + + Returns: + Earliest date string (YYYY-MM-DD) or None + """ + earliest_date = None + + # Check both daily and monthly + for time_period in ['daily', 'monthly']: + if interval: + if market == 'spot': + prefix = f"data/spot/{time_period}/{data_type}/{symbol}/{interval}/" + else: + prefix = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{interval}/" + else: + if market == 'spot': + prefix = f"data/spot/{time_period}/{data_type}/{symbol}/" + else: + prefix = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/" + + files = list_files_with_dates(prefix, logger) + + if files: + date_str = files[0][1] # Earliest date + if earliest_date is None or date_str < earliest_date: + earliest_date = date_str + + return earliest_date + + +def _scan_symbol_task( + market: str, + data_type: str, + symbol: str, + supports_intervals: bool, + check_intervals: bool, + existing_data: Dict, + logger: logging.Logger +) -> Tuple[str, Dict]: + """ + Task to scan a single symbol (for parallel execution). + """ + if check_timeout(): + return (symbol, {}) + + symbol_data = {} + + if supports_intervals and check_intervals: + # Get available intervals from S3 + intervals = list_intervals_for_symbol(market, data_type, symbol, logger) + + if not intervals: + # Try default intervals - reduced for speed + intervals = ['1d'] + + for interval in intervals: + if check_timeout(): + break + # Check if we already have this data + if existing_data and symbol in existing_data: + if interval in existing_data[symbol]: + symbol_data[interval] = existing_data[symbol][interval] + continue + + start_date = find_earliest_date_for_symbol_interval( + market, data_type, symbol, interval, logger + ) + if start_date: + symbol_data[interval] = start_date + else: + # No intervals + if existing_data and symbol in existing_data: + return (symbol, existing_data[symbol]) + + start_date = find_earliest_date_for_symbol_interval( + market, data_type, symbol, None, logger + ) + if start_date: + symbol_data['_default'] = start_date + + return (symbol, symbol_data) + + +def scan_market_data_type( + market: str, + data_type: str, + existing_data: Dict = None, + logger: logging.Logger = None, + check_intervals: bool = True, + max_workers: int = 20, + max_symbols: int = 0 +) -> Dict[str, Dict]: + """ + Scan all symbols for a market and data type. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type + existing_data: Previously scanned data to resume from + logger: Logger instance + check_intervals: Whether to check intervals for klines + max_workers: Number of parallel workers + max_symbols: Maximum symbols to scan (0 = unlimited) + + Returns: + Dictionary mapping symbol -> {interval -> start_date} + """ + if check_timeout(): + if logger: + logger.warning(f"Timeout reached, skipping {market}/{data_type}") + return {} + + if logger: + logger.info(f"Scanning {market}/{data_type}...") + + result = {} + + # Check if data type supports intervals + supports_intervals = data_type in ['klines', 'indexPriceKlines', 'markPriceKlines', 'premiumIndexKlines'] + + # Get list of symbols from S3 + symbols = list_symbols_for_market_data_type(market, data_type, logger) + + if not symbols: + if logger: + logger.warning(f"No symbols found for {market}/{data_type}") + return result + + # Limit symbols if max_symbols is set + if max_symbols > 0 and len(symbols) > max_symbols: + symbols = symbols[:max_symbols] + if logger: + logger.info(f"Limited to {max_symbols} symbols (total available: more)") + + if logger: + logger.info(f"Found {len(symbols)} symbols for {market}/{data_type}") + + # Parallel scanning of symbols + with ThreadPoolExecutor(max_workers=max_workers) as executor: + futures = { + executor.submit( + _scan_symbol_task, + market, data_type, symbol, supports_intervals, + check_intervals, existing_data, logger + ): symbol + for symbol in symbols + } + + completed = 0 + for future in as_completed(futures): + if check_timeout(): + if logger: + logger.warning(f"Timeout reached during {market}/{data_type}, stopping...") + break + + try: + symbol, symbol_data = future.result(timeout=5) + if symbol_data: + result[symbol] = symbol_data + except Exception as e: + pass + + completed += 1 + if logger and completed % 100 == 0: + logger.info(f" Progress: {completed}/{len(symbols)} symbols") + + if logger: + logger.info(f" Completed: {len(result)} symbols with data for {market}/{data_type}") + + return result + + +def scan_all_markets( + markets: List[str] = None, + data_types: Dict[str, List[str]] = None, + existing_data: Dict = None, + logger: logging.Logger = None, + max_workers: int = 20, + check_intervals: bool = True, + max_symbols: int = 0 +) -> Dict: + """ + Scan all markets and data types. + + Args: + markets: List of markets to scan ('spot', 'um', 'cm') + data_types: Data types to scan for each market + existing_data: Previously scanned data + logger: Logger instance + max_workers: Number of parallel workers + check_intervals: Whether to check intervals + max_symbols: Maximum symbols per data type (0 = unlimited) + + Returns: + Dictionary with all scanned data + """ + if markets is None: + markets = ['spot', 'um', 'cm'] + + if data_types is None: + data_types = DATA_TYPES + + result = {} + if existing_data: + result = existing_data.copy() + + scan_tasks = [] + + for market in markets: + for data_type in data_types.get(market, []): + scan_tasks.append((market, data_type)) + + if logger: + logger.info(f"Starting scan of {len(scan_tasks)} market/data type combinations...") + + # Sequential market/data_type scanning, parallel symbol scanning + for market, data_type in scan_tasks: + if check_timeout(): + if logger: + logger.warning("Global timeout reached, stopping scan...") + break + + if market not in result: + result[market] = {} + if data_type not in result[market]: + result[market][data_type] = {} + + existing_market_data = None + if existing_data and market in existing_data and data_type in existing_data[market]: + existing_market_data = existing_data[market][data_type] + + scanned_data = scan_market_data_type( + market, data_type, existing_market_data, logger, check_intervals, max_workers, max_symbols + ) + result[market][data_type] = scanned_data + + return result + + +def save_scanned_data(data: Dict, output_file: str, logger: logging.Logger = None): + """ + Save scanned data to JSON file. + + Args: + data: Scanned data dictionary + output_file: Output file path + logger: Logger instance + """ + os.makedirs(os.path.dirname(output_file) if os.path.dirname(output_file) else '.', exist_ok=True) + + with open(output_file, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + if logger: + logger.info(f"Data saved to {output_file}") + + +def load_scanned_data(input_file: str, logger: logging.Logger = None) -> Dict: + """ + Load previously scanned data from JSON file. + + Args: + input_file: Input file path + logger: Logger instance + + Returns: + Scanned data dictionary + """ + try: + with open(input_file, 'r', encoding='utf-8') as f: + data = json.load(f) + if logger: + logger.info(f"Loaded existing data from {input_file}") + return data + except FileNotFoundError: + if logger: + logger.info(f"No existing data file found at {input_file}, starting fresh") + return {} + except json.JSONDecodeError as e: + if logger: + logger.warning(f"Error parsing existing data file: {e}") + return {} + + +def print_summary(data: Dict, logger: logging.Logger = None): + """ + Print summary of scanned data. + + Args: + data: Scanned data dictionary + logger: Logger instance + """ + if logger: + logger.info("=" * 70) + logger.info("Scan Summary") + logger.info("=" * 70) + + for market, market_data in data.items(): + if market == '_metadata': + continue + + total_symbols = 0 + for data_type, symbols in market_data.items(): + if isinstance(symbols, dict): + total_symbols += len(symbols) + + if logger: + logger.info(f"{market.upper()}: {len(market_data)} data types, {total_symbols} total symbols") + + for data_type, symbols in market_data.items(): + if isinstance(symbols, dict): + if logger: + logger.info(f" - {data_type}: {len(symbols)} symbols") + + +def main(): + """Main entry point.""" + parser = argparse.ArgumentParser( + description='Binance Symbol Data Start Date Scanner', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__ + ) + + parser.add_argument( + '-t', '--market-type', + type=str, + nargs='+', + choices=['spot', 'um', 'cm'], + default=['spot', 'um', 'cm'], + help='Market types to scan (default: all)' + ) + + parser.add_argument( + '-d', '--data-types', + type=str, + nargs='+', + help='Data types to scan (default: all available for market)' + ) + + parser.add_argument( + '-o', '--output', + type=str, + default='data/symbol_dates.json', + help='Output JSON file path (default: data/symbol_dates.json)' + ) + + parser.add_argument( + '--resume', + action='store_true', + help='Resume from existing output file (incremental update)' + ) + + parser.add_argument( + '--no-intervals', + action='store_true', + help='Skip interval checking (faster, less detailed)' + ) + + parser.add_argument( + '-log-level', + type=str, + default='INFO', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + help='Logging level (default: INFO)' + ) + + parser.add_argument( + '--timeout', + type=int, + default=120, + help='Global timeout in seconds (default: 120 = 2 minutes)' + ) + + parser.add_argument( + '--workers', + type=int, + default=20, + help='Number of parallel workers (default: 20)' + ) + + parser.add_argument( + '--max-symbols', + type=int, + default=0, + help='Maximum symbols to scan per data type (0 = unlimited)' + ) + + parser.add_argument( + '--api', + action='store_true', + help='Use Binance REST API instead of S3 scanning (much faster, recommended)' + ) + + args = parser.parse_args() + + # Setup global timeout + global _global_timeout_seconds, _global_start_time + _global_timeout_seconds = args.timeout + _global_start_time = datetime.now() + _timeout_event.clear() + + # Setup logging + logger = setup_logger(args.log_level) + + logger.info("=" * 70) + logger.info("Binance Symbol Data Start Date Scanner") + logger.info("=" * 70) + logger.info(f"Markets to scan: {', '.join(args.market_type)}") + logger.info(f"Output file: {args.output}") + logger.info(f"Resume mode: {args.resume}") + logger.info(f"Check intervals: {not args.no_intervals}") + logger.info(f"Timeout: {args.timeout} seconds") + logger.info(f"Workers: {args.workers}") + logger.info(f"Use API: {args.api}") + logger.info(f"Started at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + + # Load existing data if resuming + existing_data = {} + if args.resume: + existing_data = load_scanned_data(args.output, logger) + + # Filter data types if specified + data_types_to_scan = DATA_TYPES.copy() + if args.data_types: + for market in args.market_type: + if market in data_types_to_scan: + data_types_to_scan[market] = [ + dt for dt in args.data_types if dt in data_types_to_scan[market] + ] + + # Start scanning + start_time = datetime.now() + + if args.api: + # Use fast API method + scanned_data = scan_all_markets_via_api( + markets=args.market_type, + logger=logger + ) + # Merge with existing data if resuming + if existing_data: + for market in existing_data: + if market not in scanned_data: + scanned_data[market] = existing_data[market] + else: + # Use S3 scanning method + scanned_data = scan_all_markets( + markets=args.market_type, + data_types=data_types_to_scan, + existing_data=existing_data, + logger=logger, + max_workers=args.workers, + check_intervals=not args.no_intervals, + max_symbols=args.max_symbols + ) + + # Check if we timed out + timed_out = check_timeout() + + # Add metadata + scanned_data['_metadata'] = { + 'scan_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), + 'markets_scanned': args.market_type, + 'total_symbols': sum( + len(symbols) + for market in scanned_data + if market != '_metadata' + for data_type in scanned_data[market] + for symbols in [scanned_data[market][data_type]] + if isinstance(symbols, dict) + ) + } + + # Save results + save_scanned_data(scanned_data, args.output, logger) + + # Print summary + print_summary(scanned_data, logger) + + elapsed_time = (datetime.now() - start_time).total_seconds() + logger.info("=" * 70) + if timed_out: + logger.warning(f"Scan TIMED OUT after {elapsed_time:.1f} seconds (partial results saved)") + else: + logger.info(f"Scan completed in {elapsed_time:.1f} seconds!") + logger.info("=" * 70) + + return 0 + + +if __name__ == "__main__": + import sys + sys.exit(main()) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..d08ef03 --- /dev/null +++ b/setup.py @@ -0,0 +1,81 @@ +""" +Binance Public Data Downloader - Setup Configuration + +Installation package for the refactored Binance public data downloader. +Provides both programmatic API and CLI tools for downloading historical market data. +""" + +from setuptools import setup, find_packages +import os + +# Read README for long description +def read_readme(): + readme_path = os.path.join(os.path.dirname(__file__), 'README.md') + if os.path.exists(readme_path): + with open(readme_path, 'r', encoding='utf-8') as f: + return f.read() + return '' + +# Read version from __init__.py +def get_version(): + init_path = os.path.join(os.path.dirname(__file__), 'src', 'binance_data_downloader', '__init__.py') + if os.path.exists(init_path): + with open(init_path, 'r') as f: + for line in f: + if line.startswith('__version__'): + return line.split('=')[1].strip().strip('"').strip("'") + return '1.0.0' + +setup( + name='binance-data-downloader', + version=get_version(), + author='Binance', + author_email='support@binance.com', + description='Download historical market data from Binance public data archive', + long_description=read_readme(), + long_description_content_type='text/markdown', + url='https://github.com/binance/binance-public-data', + project_urls={ + 'Bug Reports': 'https://github.com/binance/binance-public-data/issues', + 'Source': 'https://github.com/binance/binance-public-data', + }, + package_dir={'': 'src'}, + packages=find_packages(where='src'), + classifiers=[ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Intended Audience :: Financial and Insurance Industry', + 'Topic Office/Business :: Financial :: Investment', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Operating System :: OS Independent', + ], + python_requires='>=3.8', + install_requires=[ + 'pandas>=1.3.0', + 'certifi>=2021.5.30', + ], + extras_require={ + 'config': ['pyyaml>=5.4.1'], + 'dev': [ + 'pytest>=7.0.0', + 'pytest-cov>=3.0.0', + 'pytest-mock>=3.6.0', + 'black>=22.0.0', + 'flake8>=4.0.0', + 'mypy>=0.950', + ], + }, + entry_points={ + 'console_scripts': [ + 'binance-download=binance_data_downloader.cli.commands:main', + ], + }, + keywords='binance cryptocurrency trading data download klines futures', + include_package_data=True, + zip_safe=False, +) diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binance_data_downloader/__init__.py b/src/binance_data_downloader/__init__.py new file mode 100644 index 0000000..7f5a60c --- /dev/null +++ b/src/binance_data_downloader/__init__.py @@ -0,0 +1,124 @@ +""" +Binance Public Data Downloader + +A comprehensive toolkit for downloading historical market data from Binance's +public data archive at https://data.binance.vision/ + +This package provides: +- Support for 12 data types (klines, trades, aggTrades, index/mark/premium price klines, + funding rate, liquidation snapshots, book ticker, depth, options) +- Multi-threaded downloads with configurable worker count +- Automatic retry with exponential backoff +- SHA256 checksum verification +- Progress tracking and detailed logging +- Configuration file support +- Both programmatic API and CLI tools + +Example usage (CLI): + # Download klines for specific symbol + python3 python/download-kline.py -t spot -s BTCUSDT -i 1h -y 2024 + + # Download all data types + python3 scripts/download-all.py -t spot --all-data -s BTCUSDT -y 2024 + +Example usage (Python API): + from binance_data_downloader.downloaders import KlineDownloader + + downloader = KlineDownloader(trading_type='spot', max_workers=10) + downloader.download_monthly( + symbols=['BTCUSDT', 'ETHUSDT'], + intervals=['1h', '1d'], + years=['2024'], + months=list(range(1, 13)) + ) +""" + +__version__ = '1.0.0' +__author__ = 'Binance' +__license__ = 'MIT' + +# Core exports +from .core.base_downloader import BaseDownloader +from .core.data_type_config import ( + DataType, + DataTypeSpec, + get_data_type_spec, + get_supported_data_types, + get_all_data_types, +) +from .core.retry_handler import RetryHandler +from .core.checksum_verifier import ChecksumVerifier + +# Downloader exports +from .downloaders.kline_downloader import KlineDownloader +from .downloaders.trade_downloader import TradeDownloader +from .downloaders.agg_trade_downloader import AggTradeDownloader +from .downloaders.index_price_downloader import IndexPriceDownloader +from .downloaders.mark_price_downloader import MarkPriceDownloader +from .downloaders.premium_index_downloader import PremiumIndexDownloader +from .downloaders.funding_rate_downloader import FundingRateDownloader +from .downloaders.liquidation_snapshot_downloader import LiquidationSnapshotDownloader +from .downloaders.book_ticker_downloader import BookTickerDownloader +from .downloaders.depth_downloader import DepthDownloader +from .downloaders.option_downloader import OptionDownloader + +# Utility exports +from .utils.date_utils import ( + convert_to_date_object, + generate_date_range, + get_default_start_date, + get_default_end_date, +) +from .utils.file_operations import FileDownloader, get_all_symbols +from .utils.logger_setup import setup_logger, get_logger +from .utils.progress_tracker import ProgressTracker, MultiProgressTracker + +# Config exports +from .config.config_loader import ConfigLoader, AppConfig, load_config + +__all__ = [ + # Version + '__version__', + '__author__', + '__license__', + + # Core + 'BaseDownloader', + 'DataType', + 'DataTypeSpec', + 'get_data_type_spec', + 'get_supported_data_types', + 'get_all_data_types', + 'RetryHandler', + 'ChecksumVerifier', + + # Downloaders + 'KlineDownloader', + 'TradeDownloader', + 'AggTradeDownloader', + 'IndexPriceDownloader', + 'MarkPriceDownloader', + 'PremiumIndexDownloader', + 'FundingRateDownloader', + 'LiquidationSnapshotDownloader', + 'BookTickerDownloader', + 'DepthDownloader', + 'OptionDownloader', + + # Utilities + 'convert_to_date_object', + 'generate_date_range', + 'get_default_start_date', + 'get_default_end_date', + 'FileDownloader', + 'get_all_symbols', + 'setup_logger', + 'get_logger', + 'ProgressTracker', + 'MultiProgressTracker', + + # Config + 'ConfigLoader', + 'AppConfig', + 'load_config', +] diff --git a/src/binance_data_downloader/cli/__init__.py b/src/binance_data_downloader/cli/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binance_data_downloader/cli/argument_parser.py b/src/binance_data_downloader/cli/argument_parser.py new file mode 100644 index 0000000..2d02774 --- /dev/null +++ b/src/binance_data_downloader/cli/argument_parser.py @@ -0,0 +1,418 @@ +""" +Argument Parser + +This module provides command-line argument parsing for the downloader. +""" + +import argparse +import re +import sys +from typing import List, Optional + + +# Valid intervals for klines +VALID_INTERVALS = [ + "1s", "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d", "3d", "1w", "1mo" +] + +# Valid daily intervals (subset of all intervals) +VALID_DAILY_INTERVALS = [ + "1s", "1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h", "1d" +] + +# Valid trading types +VALID_TRADING_TYPES = ["spot", "um", "cm", "option"] + +# Valid years +VALID_YEARS = ['2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025'] + +# Valid data types +VALID_DATA_TYPES = [ + "klines", "trades", "aggTrades", + "indexPriceKlines", "markPriceKlines", "premiumIndexKlines", + "fundingRate", "liquidationSnapshot", "bookTicker", "depth", "option" +] + + +def match_date_regex(arg_value: str) -> str: + """ + Validate date format (YYYY-MM-DD). + + Args: + arg_value: Date string to validate + + Returns: + The validated date string + + Raises: + ArgumentTypeError: If date format is invalid + """ + pat = re.compile(r'\d{4}-\d{2}-\d{2}') + if not pat.match(arg_value): + raise argparse.ArgumentTypeError(f"Invalid date format: {arg_value}. Use YYYY-MM-DD") + return arg_value + + +def create_base_parser(description: str) -> argparse.ArgumentParser: + """ + Create base argument parser with common arguments. + + Args: + description: Parser description + + Returns: + Configured ArgumentParser + """ + parser = argparse.ArgumentParser( + description=description, + formatter_class=argparse.RawTextHelpFormatter + ) + + # Required arguments + parser.add_argument( + '-t', '--type', + dest='type', + required=True, + choices=VALID_TRADING_TYPES, + help='Market type:\n' + ' spot - Spot trading\n' + ' um - USD-M Futures (USDT-margined)\n' + ' cm - COIN-M Futures (coin-margined)\n' + ' option - Options market' + ) + + # Symbol selection + parser.add_argument( + '-s', '--symbols', + dest='symbols', + nargs='+', + help='Trading symbols to download (e.g., BTCUSDT ETHUSDT)\n' + 'If not specified, downloads all available symbols' + ) + + # Date filtering + date_group = parser.add_mutually_exclusive_group() + date_group.add_argument( + '-y', '--years', + dest='years', + default=VALID_YEARS, + nargs='+', + choices=VALID_YEARS, + help='Years to download (default: all available years)\n' + 'Example: -y 2023 2024' + ) + date_group.add_argument( + '-startDate', + dest='startDate', + type=match_date_regex, + help='Start date in YYYY-MM-DD format\n' + 'Use with -endDate for date range filtering' + ) + date_group.add_argument( + '-d', '--dates', + dest='dates', + nargs='+', + type=match_date_regex, + help='Specific dates to download (YYYY-MM-DD format)\n' + 'Example: -d 2023-01-01 2023-01-15' + ) + + parser.add_argument( + '-endDate', + dest='endDate', + type=match_date_regex, + help='End date in YYYY-MM-DD format\n' + 'Use with -startDate for date range filtering' + ) + + parser.add_argument( + '-m', '--months', + dest='months', + default=list(range(1, 13)), + nargs='+', + type=int, + choices=range(1, 13), + metavar='MONTH', + help='Months to download (1-12, default: all months)\n' + 'Example: -m 1 6 12' + ) + + # Output options + parser.add_argument( + '-folder', '--folder', + dest='folder', + help='Output directory for downloaded files\n' + '(overrides STORE_DIRECTORY environment variable)' + ) + + # Download options + parser.add_argument( + '-skip-monthly', + dest='skip_monthly', + default=0, + type=int, + choices=[0, 1], + metavar='0|1', + help='Skip monthly files (default: 0)\n' + 'Use 1 to skip monthly downloads' + ) + + parser.add_argument( + '-skip-daily', + dest='skip_daily', + default=0, + type=int, + choices=[0, 1], + metavar='0|1', + help='Skip daily files (default: 0)\n' + 'Use 1 to skip daily downloads' + ) + + # Checksum options + parser.add_argument( + '-c', '--checksum', + dest='checksum', + default=0, + type=int, + choices=[0, 1], + metavar='0|1', + help='Download .CHECKSUM files (default: 0)\n' + 'Use 1 to enable checksum download' + ) + + parser.add_argument( + '-verify-checksum', + dest='verify_checksum', + default=0, + type=int, + choices=[0, 1], + metavar='0|1', + help='Verify checksums after download (default: 0)\n' + 'Requires -c 1. Use 1 to enable verification' + ) + + # Performance options + parser.add_argument( + '-max-workers', + dest='max_workers', + type=int, + default=10, + metavar='N', + help='Maximum number of download threads (default: 10)' + ) + + # Logging options + parser.add_argument( + '-log-level', + dest='log_level', + choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + default='INFO', + help='Logging level (default: INFO)' + ) + + parser.add_argument( + '-log-file', + dest='log_file', + help='Log file path (default: logs/download.log)' + ) + + # Config file option + parser.add_argument( + '--config', + dest='config', + help='Path to configuration file (YAML format)\n' + 'Command-line arguments override config file settings' + ) + + return parser + + +def create_kline_parser() -> argparse.ArgumentParser: + """Create parser for kline downloads.""" + parser = create_base_parser( + "Download kline (candlestick) data from Binance public data" + ) + + parser.add_argument( + '-i', '--intervals', + dest='intervals', + default=VALID_INTERVALS, + nargs='+', + choices=VALID_INTERVALS, + help='Kline intervals (default: all intervals)\n' + 'Example: -i 1m 1h 1d' + ) + + return parser + + +def create_trade_parser() -> argparse.ArgumentParser: + """Create parser for trade downloads.""" + return create_base_parser( + "Download individual trade data from Binance public data" + ) + + +def create_agg_trade_parser() -> argparse.ArgumentParser: + """Create parser for aggregated trade downloads.""" + return create_base_parser( + "Download aggregated trade data from Binance public data" + ) + + +def create_liquidation_snapshot_parser() -> argparse.ArgumentParser: + """Create parser for liquidation snapshot downloads.""" + parser = create_base_parser( + "Download liquidation snapshot data from Binance COIN-M futures" + ) + + # Liquidation snapshot is for cm futures, make -t optional + for action in parser._actions: + if action.dest == 'type': + action.required = False + action.default = 'cm' # Default to COIN-M futures + action.help = 'Market type (default: cm for this script)' + + return parser + + +def create_book_ticker_parser() -> argparse.ArgumentParser: + """Create parser for book ticker downloads.""" + parser = create_base_parser( + "Download book ticker (best bid/ask) data from Binance" + ) + + # Book ticker supports um and cm, make -t optional + for action in parser._actions: + if action.dest == 'type': + action.required = False + action.default = 'um' # Default to USD-M futures + action.help = 'Market type (default: um for this script)' + + return parser + + +def create_depth_parser() -> argparse.ArgumentParser: + """Create parser for depth data downloads.""" + parser = create_base_parser( + "Download order book depth data from Binance" + ) + + # Depth supports spot and um, make -t optional + for action in parser._actions: + if action.dest == 'type': + action.required = False + action.default = 'spot' # Default to spot + action.help = 'Market type (default: spot for this script)' + + return parser + + +def create_funding_rate_parser() -> argparse.ArgumentParser: + """Create parser for funding rate downloads.""" + parser = create_base_parser( + "Download funding rate history from Binance futures public data\n" + "Note: Only daily data is downloaded by default (monthly data is skipped)" + ) + + # Funding rate is for um/cm futures, make -t optional and default to um + for action in parser._actions: + if action.dest == 'type': + action.required = False + action.default = 'um' # Default to USD-M futures + action.help = 'Market type (default: um for this script)' + elif action.dest == 'skip_monthly': + # Default to skipping monthly data for funding rate + action.default = 1 + + return parser + + +def create_option_parser() -> argparse.ArgumentParser: + """Create parser for option downloads with pre-configured trading type.""" + parser = create_base_parser( + "Download options data from Binance public data" + ) + + # Override -t and -s arguments to be optional for option downloads + for action in parser._actions: + if action.dest == 'type': + action.required = False + action.default = 'option' + action.help = 'Market type (default: option for this script)' + elif action.dest == 'symbols': + action.required = False # Make symbols optional + + return parser + + +def create_download_all_parser() -> argparse.ArgumentParser: + """Create parser for multi-data-type downloads.""" + parser = create_base_parser( + "Download multiple data types from Binance public data" + ) + + parser.add_argument( + '-i', '--intervals', + dest='intervals', + default=VALID_INTERVALS, + nargs='+', + choices=VALID_INTERVALS, + help='Kline intervals for kline data types (default: all intervals)' + ) + + parser.add_argument( + '--data-types', + dest='data_types', + nargs='+', + choices=VALID_DATA_TYPES, + help='Data types to download (default: klines only)\n' + 'Example: --data-types klines trades aggTrades\n' + 'Use --all-data to download all supported data types' + ) + + parser.add_argument( + '--all-data', + dest='all_data', + action='store_true', + help='Download all data types supported by the market' + ) + + return parser + + +def parse_args(args: Optional[List[str]] = None, parser_type: str = 'klines') -> argparse.Namespace: + """ + Parse command-line arguments. + + Args: + args: Arguments to parse (default: sys.argv[1:]) + parser_type: Type of parser to create + + Returns: + Parsed arguments namespace + """ + if args is None: + args = sys.argv[1:] + + # Create appropriate parser + if parser_type == 'download-all': + parser = create_download_all_parser() + elif parser_type == 'option': + parser = create_option_parser() + elif parser_type == 'fundingRate': + parser = create_funding_rate_parser() + elif parser_type == 'liquidationSnapshot': + parser = create_liquidation_snapshot_parser() + elif parser_type == 'bookTicker': + parser = create_book_ticker_parser() + elif parser_type == 'depth': + parser = create_depth_parser() + elif parser_type == 'aggTrades': + parser = create_agg_trade_parser() + elif parser_type == 'trades': + parser = create_trade_parser() + else: # default to klines + parser = create_kline_parser() + + return parser.parse_args(args) diff --git a/src/binance_data_downloader/cli/commands.py b/src/binance_data_downloader/cli/commands.py new file mode 100644 index 0000000..2336bbe --- /dev/null +++ b/src/binance_data_downloader/cli/commands.py @@ -0,0 +1,339 @@ +""" +Commands + +This module provides command execution functions for the CLI. +""" + +import logging +import random +import sys +from typing import List, Optional + +import pandas as pd + +from ..cli.argument_parser import parse_args +from ..config.config_loader import ConfigLoader, load_config +from ..core.checksum_verifier import ChecksumVerifier +from ..core.data_type_config import DataType, get_supported_data_types +from ..core.retry_handler import RetryHandler +from ..downloaders.agg_trade_downloader import AggTradeDownloader +from ..downloaders.book_ticker_downloader import BookTickerDownloader +from ..downloaders.depth_downloader import DepthDownloader +from ..downloaders.funding_rate_downloader import FundingRateDownloader +from ..downloaders.index_price_downloader import IndexPriceDownloader +from ..downloaders.kline_downloader import KlineDownloader +from ..downloaders.liquidation_snapshot_downloader import LiquidationSnapshotDownloader +from ..downloaders.mark_price_downloader import MarkPriceDownloader +from ..downloaders.option_downloader import OptionDownloader +from ..downloaders.premium_index_downloader import PremiumIndexDownloader +from ..downloaders.trade_downloader import TradeDownloader +from ..utils.date_utils import ( + convert_to_date_object, + generate_date_range, + get_default_end_date, + get_default_start_date, +) +from ..utils.logger_setup import setup_logger, log_level_from_string +from ..utils.progress_tracker import MultiProgressTracker, ProgressTracker + + +# Downloader registry +DOWNLOADER_CLASSES = { + 'klines': KlineDownloader, + 'trades': TradeDownloader, + 'aggTrades': AggTradeDownloader, + 'indexPriceKlines': IndexPriceDownloader, + 'markPriceKlines': MarkPriceDownloader, + 'premiumIndexKlines': PremiumIndexDownloader, + 'fundingRate': FundingRateDownloader, + 'liquidationSnapshot': LiquidationSnapshotDownloader, + 'bookTicker': BookTickerDownloader, + 'depth': DepthDownloader, + 'option': OptionDownloader, +} + + +def execute_download_command( + trading_type: str, + data_type: str, + symbols: Optional[List[str]] = None, + intervals: Optional[List[str]] = None, + years: Optional[List[str]] = None, + months: Optional[List[int]] = None, + dates: Optional[List[str]] = None, + start_date: Optional[str] = None, + end_date: Optional[str] = None, + folder: Optional[str] = None, + download_checksum: bool = False, + verify_checksum: bool = False, + skip_monthly: bool = False, + skip_daily: bool = False, + max_workers: int = 10, + log_level: str = 'INFO', + log_file: Optional[str] = None, +) -> int: + """ + Execute a download command for a single data type. + + Args: + trading_type: Market type ('spot', 'um', or 'cm') + data_type: Type of data to download + symbols: List of symbols (None = all symbols) + intervals: List of intervals (for klines) + years: List of years + months: List of months + dates: List of specific dates + start_date: Start date filter + end_date: End date filter + folder: Output directory + download_checksum: Whether to download checksum files + verify_checksum: Whether to verify checksums + skip_monthly: Whether to skip monthly files + skip_daily: Whether to skip daily files + max_workers: Number of worker threads + log_level: Logging level + log_file: Log file path + + Returns: + Exit code (0 = success, 1 = failure) + """ + # Setup logging + setup_logger( + name="binance_data_downloader", + level=log_level_from_string(log_level), + log_file=log_file, + ) + logger = logging.getLogger("binance_data_downloader") + + try: + # Get downloader class + downloader_class = DOWNLOADER_CLASSES.get(data_type) + if not downloader_class: + logger.error(f"Unknown data type: {data_type}") + return 1 + + # Initialize downloader + downloader = downloader_class( + trading_type=trading_type, + max_workers=max_workers, + ) + + # Get symbols + if not symbols: + logger.info(f"Fetching all {trading_type} symbols from exchange") + symbols = downloader.fetch_symbols(trading_type) + + # For options, if API returns empty, use common option symbols + if not symbols and trading_type == 'option': + logger.warning("Could not fetch option symbols from API") + logger.info("Options data requires specific option symbols (format: BTC-YYMMDD-STRIKE-C or -P)") + logger.info("Example: BTC-240301-50000-C (Call) or BTC-240301-50000-P (Put)") + logger.info("You will need to specify symbols with -s parameter") + logger.info("For now, using example symbol - download will likely fail") + # Use a placeholder - user should specify actual option symbols + symbols = ['BTC-240301-50000-C'] # Example option symbol + logger.info(f"Using example option symbol: {symbols[0]}") + elif not symbols: + logger.warning("No symbols found for this market") + return 1 + + random.shuffle(symbols) + logger.info(f"Found {len(symbols)} symbols") + + logger.info(f"Starting download for {len(symbols)} symbols") + + # Calculate total number of files to download + total_files = 0 + + # Count monthly files (only if data type supports monthly) + if not skip_monthly and downloader.data_type_spec.supports_monthly: + intervals_count = len(intervals) if intervals else (1 if not downloader.supports_intervals() else 0) + years_count = len(years) if years else 6 # Default years range + months_count = len(months) if months else 12 + total_files += len(symbols) * max(1, intervals_count) * years_count * months_count + + # Count daily files + if not skip_daily and downloader.data_type_spec.supports_daily: + dates_list = dates + if not dates_list: + start = convert_to_date_object(start_date) if start_date else get_default_start_date() + end = convert_to_date_object(end_date) if end_date else get_default_end_date() + dates_list = generate_date_range(start, end) + total_files += len(symbols) * len(dates_list) + + # Setup progress tracker + progress = ProgressTracker( + total_items=total_files, + show_bar=True, + show_statistics=True + ) + + # Download monthly files + if not skip_monthly: + logger.info("Starting monthly downloads") + downloader.download_monthly( + symbols=symbols, + intervals=intervals, + years=years, + months=months, + start_date=start_date, + end_date=end_date, + folder=folder, + download_checksum=download_checksum, + verify_checksum=verify_checksum, + progress_tracker=progress, + ) + + # Generate date range for daily downloads + if not dates and not skip_daily: + start = convert_to_date_object(start_date) if start_date else get_default_start_date() + end = convert_to_date_object(end_date) if end_date else get_default_end_date() + dates = generate_date_range(start, end) + + # Download daily files + if not skip_daily: + logger.info("Starting daily downloads") + downloader.download_daily( + symbols=symbols, + intervals=intervals, + dates=dates, + start_date=start_date, + end_date=end_date, + folder=folder, + download_checksum=download_checksum, + verify_checksum=verify_checksum, + progress_tracker=progress, + ) + + # Finish progress tracking + progress.finish(show_summary=True) + + logger.info("Download completed") + return 0 + + except Exception as e: + logger.exception(f"Download failed: {e}") + return 1 + + +def execute_multi_download_command( + trading_type: str, + data_types: Optional[List[str]] = None, + all_data: bool = False, + **kwargs +) -> int: + """ + Execute download command for multiple data types. + + Args: + trading_type: Market type + data_types: List of data types to download + all_data: Download all supported data types + **kwargs: Additional arguments passed to execute_download_command + + Returns: + Exit code + """ + logger = logging.getLogger("binance_data_downloader") + + # Determine which data types to download + if all_data: + data_types = [dt.value for dt in get_supported_data_types(trading_type)] + logger.info(f"Downloading all {len(data_types)} supported data types for {trading_type}") + elif not data_types: + data_types = ['klines'] # Default to klines only + + # Download each data type + multi_tracker = MultiProgressTracker(show_summary=True) + + for data_type in data_types: + logger.info(f"Starting download for data type: {data_type}") + + exit_code = execute_download_command( + trading_type=trading_type, + data_type=data_type, + **kwargs + ) + + if exit_code == 0: + logger.info(f"Successfully completed download for {data_type}") + else: + logger.error(f"Failed to download {data_type}") + + # Show aggregate summary + multi_tracker.show_aggregate_summary() + + return 0 + + +def main(argv: Optional[List[str]] = None, parser_type: str = 'klines'): + """ + Main entry point for CLI commands. + + Args: + argv: Command-line arguments (default: sys.argv[1:]) + parser_type: Type of parser to use + + Returns: + Exit code + """ + # Parse arguments + args = parse_args(argv, parser_type) + + # Load config file if specified + if args.config: + config = load_config(args.config) + # Apply config defaults where args not provided + # ... (config merging logic) + + # Determine if multi-download + if parser_type == 'download-all': + return execute_multi_download_command( + trading_type=args.type, + data_types=getattr(args, 'data_types', None), + all_data=getattr(args, 'all_data', False), + symbols=args.symbols, + intervals=getattr(args, 'intervals', None), + years=args.years, + months=args.months, + dates=getattr(args, 'dates', None), + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + download_checksum=args.checksum == 1, + verify_checksum=getattr(args, 'verify_checksum', 0) == 1, + skip_monthly=args.skip_monthly == 1, + skip_daily=args.skip_daily == 1, + max_workers=args.max_workers, + log_level=args.log_level, + log_file=args.log_file, + ) + else: + # Determine data type from parser type + data_type_map = { + 'klines': 'klines', + 'trades': 'trades', + 'aggTrades': 'aggTrades', + 'fundingRate': 'fundingRate', + } + data_type = data_type_map.get(parser_type, parser_type) + + return execute_download_command( + trading_type=args.type, + data_type=data_type, + symbols=args.symbols, + intervals=getattr(args, 'intervals', None), + years=args.years, + months=args.months, + dates=getattr(args, 'dates', None), + start_date=args.startDate, + end_date=args.endDate, + folder=args.folder, + download_checksum=args.checksum == 1, + verify_checksum=getattr(args, 'verify_checksum', 0) == 1, + skip_monthly=args.skip_monthly == 1, + skip_daily=args.skip_daily == 1, + max_workers=args.max_workers, + log_level=args.log_level, + log_file=args.log_file, + ) diff --git a/src/binance_data_downloader/config/__init__.py b/src/binance_data_downloader/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binance_data_downloader/config/config_loader.py b/src/binance_data_downloader/config/config_loader.py new file mode 100644 index 0000000..4b2b140 --- /dev/null +++ b/src/binance_data_downloader/config/config_loader.py @@ -0,0 +1,254 @@ +""" +Configuration Loader + +This module provides configuration file loading and validation. +""" + +import logging +import os +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any, Dict, List, Optional + +try: + import yaml + YAML_AVAILABLE = True +except ImportError: + YAML_AVAILABLE = False + +logger = logging.getLogger(__name__) + + +@dataclass +class DownloadConfig: + """Download configuration settings.""" + market_type: str = "spot" + max_workers: int = 10 + output_directory: Optional[str] = None + download_checksum: bool = False + verify_checksum: bool = False + skip_monthly: bool = False + skip_daily: bool = False + + +@dataclass +class RetryConfig: + """Retry configuration settings.""" + max_retries: int = 3 + initial_delay: float = 5.0 + exponential_backoff: bool = True + + +@dataclass +class DateRangeConfig: + """Date range configuration settings.""" + start_date: Optional[str] = None + end_date: Optional[str] = None + years: List[str] = field(default_factory=lambda: ['2020', '2021', '2022', '2023', '2024', '2025']) + months: List[int] = field(default_factory=lambda: list(range(1, 13))) + + +@dataclass +class LoggingConfig: + """Logging configuration settings.""" + level: str = "INFO" + file: Optional[str] = None + format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + + +@dataclass +class ProgressConfig: + """Progress tracking configuration settings.""" + show_bar: bool = True + show_statistics: bool = True + update_interval: int = 5 + + +@dataclass +class AppConfig: + """Main application configuration.""" + download: DownloadConfig = field(default_factory=DownloadConfig) + retry: RetryConfig = field(default_factory=RetryConfig) + date_range: DateRangeConfig = field(default_factory=DateRangeConfig) + logging: LoggingConfig = field(default_factory=LoggingConfig) + progress: ProgressConfig = field(default_factory=ProgressConfig) + + +class ConfigLoader: + """ + Loads and validates configuration from YAML files. + + Provides default configuration and environment variable overrides. + """ + + DEFAULT_CONFIG_PATH = "configs/default_config.yaml" + + def __init__(self, config_path: Optional[str] = None): + """ + Initialize the configuration loader. + + Args: + config_path: Path to configuration file (optional) + """ + self.config_path = config_path + self.config = AppConfig() + + def load(self) -> AppConfig: + """ + Load configuration from file and environment variables. + + Returns: + Loaded AppConfig instance + """ + # Load from file if specified + if self.config_path: + self._load_from_file(self.config_path) + else: + # Try default config + if os.path.exists(self.DEFAULT_CONFIG_PATH): + self._load_from_file(self.DEFAULT_CONFIG_PATH) + + # Apply environment variable overrides + self._apply_env_overrides() + + # Validate configuration + self._validate_config() + + return self.config + + def _load_from_file(self, config_path: str): + """Load configuration from YAML file.""" + if not YAML_AVAILABLE: + logger.warning("PyYAML not installed, skipping config file loading") + return + + try: + with open(config_path, 'r') as f: + data = yaml.safe_load(f) + + if not data: + return + + # Parse each section + if 'download' in data: + self.config.download = DownloadConfig(**data['download']) + if 'retry' in data: + self.config.retry = RetryConfig(**data['retry']) + if 'date_range' in data: + self.config.date_range = DateRangeConfig(**data['date_range']) + if 'logging' in data: + self.config.logging = LoggingConfig(**data['logging']) + if 'progress' in data: + self.config.progress = ProgressConfig(**data['progress']) + + logger.info(f"Loaded configuration from {config_path}") + + except Exception as e: + logger.error(f"Failed to load configuration from {config_path}: {e}") + raise + + def _apply_env_overrides(self): + """Apply environment variable overrides.""" + # Output directory + if os.environ.get('STORE_DIRECTORY'): + self.config.download.output_directory = os.environ['STORE_DIRECTORY'] + + # Log directory + if os.environ.get('LOG_DIR'): + self.config.logging.file = os.path.join(os.environ['LOG_DIR'], 'download.log') + + # Log level + if os.environ.get('LOG_LEVEL'): + self.config.logging.level = os.environ['LOG_LEVEL'] + + def _validate_config(self): + """Validate configuration values.""" + # Validate market type + if self.config.download.market_type not in ('spot', 'um', 'cm'): + raise ValueError(f"Invalid market_type: {self.config.download.market_type}") + + # Validate max_workers + if self.config.download.max_workers < 1: + raise ValueError(f"max_workers must be at least 1: {self.config.download.max_workers}") + + # Validate log level + valid_log_levels = ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') + if self.config.logging.level.upper() not in valid_log_levels: + raise ValueError(f"Invalid log level: {self.config.logging.level}") + + # Validate months + if not all(1 <= m <= 12 for m in self.config.date_range.months): + raise ValueError("Months must be between 1 and 12") + + def save(self, config_path: str): + """ + Save current configuration to YAML file. + + Args: + config_path: Path to save configuration file + """ + if not YAML_AVAILABLE: + logger.warning("PyYAML not installed, cannot save config file") + return + + try: + # Convert to dictionary + data = { + 'download': { + 'market_type': self.config.download.market_type, + 'max_workers': self.config.download.max_workers, + 'output_directory': self.config.download.output_directory, + 'download_checksum': self.config.download.download_checksum, + 'verify_checksum': self.config.download.verify_checksum, + 'skip_monthly': self.config.download.skip_monthly, + 'skip_daily': self.config.download.skip_daily, + }, + 'retry': { + 'max_retries': self.config.retry.max_retries, + 'initial_delay': self.config.retry.initial_delay, + 'exponential_backoff': self.config.retry.exponential_backoff, + }, + 'date_range': { + 'start_date': self.config.date_range.start_date, + 'end_date': self.config.date_range.end_date, + 'years': self.config.date_range.years, + 'months': self.config.date_range.months, + }, + 'logging': { + 'level': self.config.logging.level, + 'file': self.config.logging.file, + 'format': self.config.logging.format, + }, + 'progress': { + 'show_bar': self.config.progress.show_bar, + 'show_statistics': self.config.progress.show_statistics, + 'update_interval': self.config.progress.update_interval, + } + } + + # Create directory if needed + Path(config_path).parent.mkdir(parents=True, exist_ok=True) + + # Write to file + with open(config_path, 'w') as f: + yaml.dump(data, f, default_flow_style=False, sort_keys=False) + + logger.info(f"Saved configuration to {config_path}") + + except Exception as e: + logger.error(f"Failed to save configuration to {config_path}: {e}") + raise + + +def load_config(config_path: Optional[str] = None) -> AppConfig: + """ + Convenience function to load configuration. + + Args: + config_path: Optional path to configuration file + + Returns: + Loaded AppConfig instance + """ + loader = ConfigLoader(config_path) + return loader.load() diff --git a/src/binance_data_downloader/core/__init__.py b/src/binance_data_downloader/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/binance_data_downloader/core/base_downloader.py b/src/binance_data_downloader/core/base_downloader.py new file mode 100644 index 0000000..f7a88c7 --- /dev/null +++ b/src/binance_data_downloader/core/base_downloader.py @@ -0,0 +1,813 @@ +""" +Base Downloader + +This module provides the abstract base class for all data downloaders. +All specific downloaders inherit from BaseDownloader and implement +its abstract methods. +""" + +import logging +import os +from abc import ABC, abstractmethod +from concurrent.futures import ThreadPoolExecutor, as_completed +from datetime import date +from typing import List, Optional + +from ..core.checksum_verifier import ChecksumVerifier +from ..core.data_type_config import DataType, get_data_type_spec +from ..core.retry_handler import RetryHandler +from ..utils.date_utils import ( + convert_to_date_object, + get_default_end_date, + get_default_start_date, + is_date_in_range +) +from ..utils.file_operations import FileDownloader, get_all_symbols +from ..utils.path_builder import ( + get_data_path, + get_file_save_path, + get_checksum_filename +) +from ..utils.progress_tracker import ProgressTracker +from ..utils.symbol_dates import SymbolDateManager, get_symbol_date_manager, parse_date_filter + +logger = logging.getLogger(__name__) + + +class BaseDownloader(ABC): + """ + Abstract base class for all Binance data downloaders. + + Subclasses must implement the abstract methods to define + the specific data type behavior. + """ + + def __init__( + self, + trading_type: str, + file_downloader: Optional[FileDownloader] = None, + retry_handler: Optional[RetryHandler] = None, + checksum_verifier: Optional[ChecksumVerifier] = None, + max_workers: int = 10, + stop_on_continuous_failures: int = 50, + symbol_date_manager: Optional[SymbolDateManager] = None, + use_symbol_dates: bool = True + ): + """ + Initialize the downloader. + + Args: + trading_type: Market type ('spot', 'um', or 'cm') + file_downloader: Optional custom file downloader + retry_handler: Optional custom retry handler + checksum_verifier: Optional custom checksum verifier + max_workers: Maximum number of threads for parallel downloads + stop_on_continuous_failures: Stop download if N consecutive files fail (0 to disable) + symbol_date_manager: Optional SymbolDateManager for start date lookup + use_symbol_dates: Whether to use symbol date cache to avoid unnecessary requests + """ + self.trading_type = trading_type + self.file_downloader = file_downloader or FileDownloader() + self.retry_handler = retry_handler or RetryHandler() + self.checksum_verifier = checksum_verifier or ChecksumVerifier() + self.max_workers = max_workers + self.stop_on_continuous_failures = stop_on_continuous_failures + self.consecutive_failures = 0 + self.symbol_date_manager = symbol_date_manager + self.use_symbol_dates = use_symbol_dates + + # Get data type specification + self.data_type = self.get_data_type() + self.data_type_spec = get_data_type_spec(DataType(self.data_type)) + + if not self.data_type_spec: + raise ValueError(f"Unknown data type: {self.data_type}") + + # Validate market type support + self._validate_market_type() + + def _validate_market_type(self): + """Validate that the data type supports the specified market.""" + # Option is a special case - independent market + if self.data_type == 'option': + if self.trading_type not in ('option', 'spot', 'um', 'cm'): + raise ValueError(f"Invalid trading_type for option data: {self.trading_type}. Use 'option'") + return + + if self.trading_type == 'spot' and not self.data_type_spec.supports_spot: + raise ValueError(f"{self.data_type} is not supported for spot market") + if self.trading_type == 'um' and not self.data_type_spec.supports_um: + raise ValueError(f"{self.data_type} is not supported for USD-M futures") + if self.trading_type == 'cm' and not self.data_type_spec.supports_cm: + raise ValueError(f"{self.data_type} is not supported for COIN-M futures") + if self.trading_type == 'option' and self.data_type != 'option': + raise ValueError(f"Only option data type supports 'option' trading_type") + + @abstractmethod + def get_data_type(self) -> str: + """ + Return the data type identifier. + + Returns: + Data type string (e.g., 'klines', 'trades', 'aggTrades') + """ + pass + + @abstractmethod + def supports_intervals(self) -> bool: + """ + Check if this data type supports interval parameter. + + Returns: + True if intervals are supported, False otherwise + """ + pass + + @abstractmethod + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly data filename. + + Args: + symbol: Trading symbol + interval: Kline interval (None if not supported) + year: Year as string + month: Month (1-12) + + Returns: + Formatted filename + """ + pass + + @abstractmethod + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily data filename. + + Args: + symbol: Trading symbol + interval: Kline interval (None if not supported) + date_str: Date string in YYYY-MM-DD format + + Returns: + Formatted filename + """ + pass + + def download_monthly( + self, + symbols: List[str], + intervals: Optional[List[str]] = None, + years: Optional[List[str]] = None, + months: Optional[List[int]] = None, + start_date: Optional[str] = None, + end_date: Optional[str] = None, + folder: Optional[str] = None, + download_checksum: bool = False, + verify_checksum: bool = False, + skip_existing: bool = True, + progress_tracker: Optional[ProgressTracker] = None + ) -> int: + """ + Download monthly data files. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (for data types that support intervals) + years: List of years to download + months: List of months to download + start_date: Start date filter (YYYY-MM-DD) + end_date: End date filter (YYYY-MM-DD) + folder: Output folder + download_checksum: Whether to download checksum files + verify_checksum: Whether to verify checksums after download + skip_existing: Whether to skip already downloaded files + progress_tracker: Optional progress tracker + + Returns: + Number of successfully downloaded files + """ + if not self.data_type_spec.supports_monthly: + logger.info(f"{self.data_type} does not have monthly files") + return 0 + + # Set defaults + if not intervals: + intervals = [None] if not self.supports_intervals() else [] + if not years: + years = ['2020', '2021', '2022', '2023', '2024', '2025'] + if not months: + months = list(range(1, 13)) + + # Parse date filters + start_date_obj = convert_to_date_object(start_date) if start_date else get_default_start_date() + end_date_obj = convert_to_date_object(end_date) if end_date else get_default_end_date() + + # Display save location + save_location = folder if folder else os.environ.get('STORE_DIRECTORY', os.getcwd()) + logger.info(f"Download location: {save_location}") + + downloaded_count = 0 + should_stop_early = False + + for symbol in symbols: + logger.info(f"Downloading monthly {self.data_type} for {symbol}") + consecutive_failures = 0 # Reset counter for each symbol + max_consecutive_failures = 100 # Stop after 100 consecutive failures for one symbol + + # Get symbol's effective start date from cache if available + symbol_effective_dates = {} + if self.use_symbol_dates: + intervals_to_check = intervals if intervals else [None] + for interval in intervals_to_check: + cached_start = self._get_symbol_start_from_cache(symbol, interval) + if cached_start: + symbol_effective_dates[interval] = cached_start + logger.info(f" Known start date for {symbol}" + + (f" ({interval}): " if interval else ": ") + + cached_start) + + # Prepare download tasks + tasks = [] + intervals_to_process = intervals if intervals else [None] + + for interval in intervals_to_process: + for year in years: + for month in months: + # Check date range + current_date = convert_to_date_object(f'{year}-{month:02d}-01') + if not is_date_in_range(f'{year}-{month:02d}-01', start_date_obj, end_date_obj): + continue + + # Skip if before symbol's known start date + if interval in symbol_effective_dates: + if self._is_date_before_symbol_start( + f'{year}-{month:02d}-01', + symbol_effective_dates[interval] + ): + continue + elif None in symbol_effective_dates and interval is None: + if self._is_date_before_symbol_start( + f'{year}-{month:02d}-01', + symbol_effective_dates[None] + ): + continue + + tasks.append((symbol, interval, year, month)) + + # Download with thread pool + with ThreadPoolExecutor(max_workers=self.max_workers) as executor: + futures = {} + for symbol, interval, year, month in tasks: + future = executor.submit( + self._download_monthly_file, + symbol, interval, year, month, + folder, download_checksum, verify_checksum, skip_existing + ) + futures[future] = (symbol, year, month) + + for future in as_completed(futures): + if should_stop_early: + break + + symbol, year, month = futures[future] + try: + result = future.result() + if result == "skipped": + # File already exists + consecutive_failures = 0 + elif result: + # Download succeeded + downloaded_count += 1 + consecutive_failures = 0 + else: + # Download failed + consecutive_failures += 1 + if consecutive_failures >= max_consecutive_failures: + logger.warning(f"Detected {consecutive_failures} consecutive download failures.") + logger.warning(f"Data may not be available for the requested date range.") + logger.warning(f"Please specify a more recent date range using -startDate and -endDate.") + logger.warning(f"Example: -startDate 2023-06-20 -endDate 2026-01-18") + logger.warning(f"Stopping download early to avoid excessive failures.") + should_stop_early = True + break + + if progress_tracker: + is_skipped = (result == "skipped") + is_success = (result == True) + progress_tracker.update(symbol, is_success, skipped=is_skipped) + + except Exception as e: + logger.error(f"Error downloading {symbol} for {year}-{month:02d}: {e}") + consecutive_failures += 1 + if progress_tracker: + progress_tracker.update(symbol, False, skipped=False) + + if should_stop_early: + break + + return downloaded_count + + def _download_monthly_file( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int, + folder: Optional[str], + download_checksum: bool, + verify_checksum: bool, + skip_existing: bool + ) -> bool: + """Download a single monthly file.""" + # Format filename + filename = self.format_monthly_filename(symbol, interval, year, month) + + # Build paths + data_path = get_data_path( + self.trading_type, + self.data_type_spec.path_segment, + "monthly", + symbol, + interval + ) + + save_path = get_file_save_path( + self.trading_type, + self.data_type_spec.path_segment, + "monthly", + symbol, + filename, + folder, + interval=interval + ) + + # Check if file exists + if skip_existing and os.path.exists(save_path): + logger.info(f"File already exists, skipping: {os.path.basename(save_path)}") + return "skipped" + + # Build date string for logging + date_str = f"{year}-{month:02d}" + + # Download data file + success = self.file_downloader.download_file( + data_path, + filename, + save_path, + symbol=symbol, + date_str=date_str + ) + + # Download and verify checksum + if success and download_checksum: + checksum_filename = get_checksum_filename(filename) + checksum_save_path = save_path + ".CHECKSUM" + self.file_downloader.download_file(data_path, checksum_filename, checksum_save_path) + + if verify_checksum: + self.checksum_verifier.verify_checksum(save_path, checksum_save_path) + + return success + + def download_daily( + self, + symbols: List[str], + intervals: Optional[List[str]] = None, + dates: Optional[List[str]] = None, + start_date: Optional[str] = None, + end_date: Optional[str] = None, + folder: Optional[str] = None, + download_checksum: bool = False, + verify_checksum: bool = False, + skip_existing: bool = True, + progress_tracker: Optional[ProgressTracker] = None + ) -> int: + """ + Download daily data files with multi-threading support. + + Args: + symbols: List of trading symbols + intervals: List of kline intervals (for data types that support intervals) + dates: List of specific dates to download + start_date: Start date filter (YYYY-MM-DD) + end_date: End date filter (YYYY-MM-DD) + folder: Output folder + download_checksum: Whether to download checksum files + verify_checksum: Whether to verify checksums after download + skip_existing: Whether to skip already downloaded files + progress_tracker: Optional progress tracker + + Returns: + Number of successfully downloaded files + """ + if not self.data_type_spec.supports_daily: + logger.info(f"{self.data_type} does not have daily files") + return 0 + + # Parse date filters + start_date_obj = convert_to_date_object(start_date) if start_date else get_default_start_date() + end_date_obj = convert_to_date_object(end_date) if end_date else get_default_end_date() + + # Display save location + save_location = folder if folder else os.environ.get('STORE_DIRECTORY', os.getcwd()) + logger.info(f"Download location: {save_location}") + + downloaded_count = 0 + should_stop_early = False + + for symbol in symbols: + logger.info(f"Downloading daily {self.data_type} for {symbol}") + consecutive_failures = 0 # Reset counter for each symbol + max_consecutive_failures = 100 # Stop after 100 consecutive failures for one symbol + + # Get symbol's effective start date from cache if available + symbol_effective_dates = {} + if self.use_symbol_dates: + intervals_to_check = intervals if intervals else [None] + for interval in intervals_to_check: + cached_start = self._get_symbol_start_from_cache(symbol, interval) + if cached_start: + symbol_effective_dates[interval] = cached_start + logger.info(f" Known start date for {symbol}" + + (f" ({interval}): " if interval else ": ") + + cached_start) + + # Prepare download tasks + tasks = [] + intervals_to_process = intervals if intervals else [None] + + for interval in intervals_to_process: + dates_to_process = dates if dates else self._generate_date_range(start_date_obj, end_date_obj) + + for date_str in dates_to_process: + # Check date range + if not is_date_in_range(date_str, start_date_obj, end_date_obj): + continue + + # Skip if before symbol's known start date + if interval in symbol_effective_dates: + if self._is_date_before_symbol_start( + date_str, + symbol_effective_dates[interval] + ): + continue + elif None in symbol_effective_dates and interval is None: + if self._is_date_before_symbol_start( + date_str, + symbol_effective_dates[None] + ): + continue + + tasks.append((symbol, interval, date_str)) + + # Download with thread pool + with ThreadPoolExecutor(max_workers=self.max_workers) as executor: + futures = {} + for symbol, interval, date_str in tasks: + future = executor.submit( + self._download_daily_file, + symbol, interval, date_str, + folder, download_checksum, verify_checksum, skip_existing + ) + futures[future] = (symbol, date_str) + + for future in as_completed(futures): + if should_stop_early: + break + + symbol, date_str = futures[future] + try: + result = future.result() + if result == "skipped": + # File already exists + consecutive_failures = 0 + elif result: + # Download succeeded + downloaded_count += 1 + consecutive_failures = 0 + else: + # Download failed + consecutive_failures += 1 + if consecutive_failures >= max_consecutive_failures: + logger.warning(f"Detected {consecutive_failures} consecutive download failures.") + logger.warning(f"Data may not be available for the requested date range.") + logger.warning(f"Please specify a more recent date range using -startDate and -endDate.") + logger.warning(f"Example: -startDate 2023-06-20 -endDate 2026-01-18") + logger.warning(f"Stopping download early to avoid excessive failures.") + should_stop_early = True + break + + if progress_tracker: + is_skipped = (result == "skipped") + is_success = (result == True) + progress_tracker.update(symbol, is_success, skipped=is_skipped) + + except Exception as e: + logger.error(f"Error downloading {symbol} for {date_str}: {e}") + consecutive_failures += 1 + if progress_tracker: + progress_tracker.update(symbol, False, skipped=False) + + if should_stop_early: + break + + return downloaded_count + + def _download_daily_file( + self, + symbol: str, + interval: Optional[str], + date_str: str, + folder: Optional[str], + download_checksum: bool, + verify_checksum: bool, + skip_existing: bool + ) -> bool: + """Download a single daily file.""" + # Format filename + filename = self.format_daily_filename(symbol, interval, date_str) + + # Build paths + data_path = get_data_path( + self.trading_type, + self.data_type_spec.path_segment, + "daily", + symbol, + interval + ) + + save_path = get_file_save_path( + self.trading_type, + self.data_type_spec.path_segment, + "daily", + symbol, + filename, + folder, + interval=interval + ) + + # Check if file exists + if skip_existing and os.path.exists(save_path): + logger.info(f"File already exists, skipping: {os.path.basename(save_path)}") + return "skipped" + + # Download data file with symbol and date info + success = self.file_downloader.download_file( + data_path, + filename, + save_path, + symbol=symbol, + date_str=date_str + ) + + # Download and verify checksum + if success and download_checksum: + checksum_filename = get_checksum_filename(filename) + checksum_save_path = save_path + ".CHECKSUM" + self.file_downloader.download_file(data_path, checksum_filename, checksum_save_path) + + if verify_checksum: + self.checksum_verifier.verify_checksum(save_path, checksum_save_path) + + return success + + def _generate_date_range(self, start_date: date, end_date: date) -> List[str]: + """Generate a list of date strings between start and end dates.""" + from datetime import timedelta + delta = end_date - start_date + return [ + (start_date + timedelta(days=i)).strftime("%Y-%m-%d") + for i in range(delta.days + 1) + ] + + def get_local_date_range( + self, + symbol: str, + folder: Optional[str], + time_period: str = "daily" + ) -> Tuple[Optional[str], Optional[str]]: + """ + Get the start and end dates of locally downloaded files for a symbol. + + Args: + symbol: Trading symbol + folder: Folder where data is stored + time_period: 'daily' or 'monthly' + + Returns: + Tuple of (start_date, end_date) as YYYY-MM-DD strings, or (None, None) if no local data found + """ + from datetime import datetime + from ..utils.path_builder import get_data_save_folder + + save_folder = get_data_save_folder( + self.trading_type, + self.data_type_spec.path_segment, + time_period, + symbol, + folder + ) + + if not os.path.exists(save_folder): + return None, None + + # Get all zip files in the folder + files = [f for f in os.listdir(save_folder) if f.endswith('.zip') and not f.endswith('.CHECKSUM')] + + if not files: + return None, None + + # Extract dates from filenames + dates = [] + for filename in files: + # Try to extract date from filename + # Format: SYMBOL-dataType-YYYY-MM-DD.zip or SYMBOL-dataType-YYYY-MM.zip (monthly) + import re + # Match date patterns + daily_match = re.search(r'(\d{4}-\d{2}-\d{2})', filename) + monthly_match = re.search(r'(\d{4})-(\d{2})\.zip$', filename) + + if daily_match: + dates.append(daily_match.group(1)) + elif monthly_match: + # Convert monthly to first day of month + year, month = monthly_match.groups() + dates.append(f"{year}-{month}-01") + + if not dates: + return None, None + + dates.sort() + return dates[0], dates[-1] + + def get_missing_date_ranges( + self, + symbol: str, + web_start_date: str, + web_end_date: str, + folder: Optional[str], + time_period: str = "daily" + ) -> List[Tuple[str, str]]: + """ + Get missing date ranges by comparing local files with available web data. + + Args: + symbol: Trading symbol + web_start_date: Start date of available data on web (YYYY-MM-DD) + web_end_date: End date of available data on web (YYYY-MM-DD) + folder: Folder where data is stored + time_period: 'daily' or 'monthly' + + Returns: + List of (start_date, end_date) tuples representing missing date ranges + """ + local_start, local_end = self.get_local_date_range(symbol, folder, time_period) + + if not local_start or not local_end: + # No local data, return full web range + return [(web_start_date, web_end_date)] + + # Convert to date objects for comparison + from datetime import datetime + web_start = datetime.strptime(web_start_date, "%Y-%m-%d").date() + web_end = datetime.strptime(web_end_date, "%Y-%m-%d").date() + local_start_date = datetime.strptime(local_start, "%Y-%m-%d").date() + local_end_date = datetime.strptime(local_end, "%Y-%m-%d").date() + + missing_ranges = [] + + # Check for missing data before local range + if web_start < local_start_date: + from datetime import timedelta + missing_end = local_start_date - timedelta(days=1) + missing_ranges.append((web_start.strftime("%Y-%m-%d"), missing_end.strftime("%Y-%m-%d"))) + logger.info(f"Found missing data before local range: {web_start.strftime('%Y-%m-%d')} to {missing_end.strftime('%Y-%m-%d')}") + + # Check for missing data after local range + if web_end > local_end_date: + from datetime import timedelta + missing_start = local_end_date + timedelta(days=1) + missing_ranges.append((missing_start.strftime("%Y-%m-%d"), web_end.strftime("%Y-%m-%d"))) + logger.info(f"Found missing data after local range: {missing_start.strftime('%Y-%m-%d')} to {web_end.strftime('%Y-%m-%d')}") + + if not missing_ranges: + logger.info(f"Local data is up to date for {symbol}: {local_start} to {local_end}") + + return missing_ranges + + @staticmethod + def fetch_symbols(market_type: str) -> List[str]: + """ + Fetch all trading symbols from Binance API. + + Args: + market_type: Market type ('spot', 'um', or 'cm') + + Returns: + List of trading symbols + """ + return get_all_symbols(market_type) + + def _get_symbol_start_from_cache( + self, + symbol: str, + interval: Optional[str] = None + ) -> Optional[str]: + """ + Get the known start date for a symbol from the cache. + + Args: + symbol: Trading symbol + interval: Kline interval (optional) + + Returns: + Start date as YYYY-MM-DD string, or None if not found + """ + if not self.use_symbol_dates: + return None + + # Use provided manager or get default instance + manager = self.symbol_date_manager + if not manager: + manager = get_symbol_date_manager() + + if not manager or not manager.is_cache_available(): + return None + + return manager.get_symbol_start_date( + self.trading_type, + self.data_type, + symbol, + interval + ) + + def _is_date_before_symbol_start( + self, + date_str: str, + symbol_start: str + ) -> bool: + """ + Check if a date is before the symbol's start date. + + Args: + date_str: Date to check (YYYY-MM-DD) + symbol_start: Symbol's start date (YYYY-MM-DD) + + Returns: + True if date_str is before symbol_start + """ + try: + return date_str < symbol_start + except (ValueError, TypeError): + return False + + def get_effective_date_range( + self, + symbol: str, + interval: Optional[str] = None, + requested_start: Optional[str] = None + ) -> Tuple[str, str]: + """ + Get the effective date range for downloading a symbol's data. + + Takes into account both the requested date range and the symbol's + actual known start date from the cache. + + Args: + symbol: Trading symbol + interval: Kline interval (optional) + requested_start: User-requested start date (YYYY-MM-DD) + + Returns: + Tuple of (effective_start_date, end_date) + """ + from datetime import datetime + + # Get symbol's start date from cache + symbol_start = self._get_symbol_start_from_cache(symbol, interval) + + if symbol_start: + # Use the later of requested start or symbol start + if requested_start: + effective_start = max(symbol_start, requested_start) + else: + effective_start = symbol_start + logger.info(f" Using cached start date for {symbol}: {effective_start}") + else: + effective_start = requested_start or get_default_start_date().strftime("%Y-%m-%d") + + end_date = get_default_end_date().strftime("%Y-%m-%d") + + return effective_start, end_date diff --git a/src/binance_data_downloader/core/checksum_verifier.py b/src/binance_data_downloader/core/checksum_verifier.py new file mode 100644 index 0000000..4bf89f8 --- /dev/null +++ b/src/binance_data_downloader/core/checksum_verifier.py @@ -0,0 +1,205 @@ +""" +Checksum Verifier + +This module provides SHA256 checksum verification for downloaded files. +Supports cross-platform verification (Linux, macOS, Windows). +""" + +import hashlib +import logging +import os +import platform +import subprocess +from pathlib import Path +from typing import Optional + +logger = logging.getLogger(__name__) + + +class ChecksumVerifier: + """ + Verifies SHA256 checksums of downloaded files. + + Uses platform-appropriate tools: + - Linux: sha256sum + - macOS: shasum -a 256 + - Windows: Python hashlib (fallback for all platforms) + """ + + def __init__(self, use_platform_tool: bool = True): + """ + Initialize the checksum verifier. + + Args: + use_platform_tool: Whether to use platform-specific tools (sha256sum/shasum) + or fall back to pure Python implementation + """ + self.use_platform_tool = use_platform_tool + self.platform = platform.system() + self._verify_platform_tool() + + def _verify_platform_tool(self) -> bool: + """Check if platform-specific checksum tool is available.""" + if not self.use_platform_tool: + return False + + tool_name = self._get_platform_tool_name() + if not tool_name: + return False + + try: + subprocess.run( + [tool_name, "--version"], + capture_output=True, + check=True, + timeout=5 + ) + return True + except (subprocess.CalledProcessError, FileNotFoundError, subprocess.TimeoutExpired): + logger.debug(f"Platform checksum tool '{tool_name}' not available, using Python hashlib") + return False + + def _get_platform_tool_name(self) -> Optional[str]: + """Get the platform-specific checksum tool name.""" + if self.platform == "Linux": + return "sha256sum" + elif self.platform == "Darwin": # macOS + return "shasum" + return None + + def calculate_checksum(self, file_path: str) -> Optional[str]: + """ + Calculate SHA256 checksum of a file. + + Args: + file_path: Path to the file + + Returns: + Hexadecimal checksum string, or None if calculation fails + """ + if not os.path.exists(file_path): + logger.error(f"File not found for checksum calculation: {file_path}") + return None + + # Try platform-specific tool first + if self.use_platform_tool and self.platform in ("Linux", "Darwin"): + checksum = self._calculate_with_platform_tool(file_path) + if checksum: + return checksum + + # Fall back to Python implementation + return self._calculate_with_hashlib(file_path) + + def _calculate_with_platform_tool(self, file_path: str) -> Optional[str]: + """Calculate checksum using platform-specific tool.""" + tool_name = self._get_platform_tool_name() + if not tool_name: + return None + + try: + cmd = [tool_name] + if self.platform == "Darwin": + cmd.extend(["-a", "256"]) + cmd.append(file_path) + + result = subprocess.run( + cmd, + capture_output=True, + text=True, + check=True, + timeout=300 # 5 minute timeout for large files + ) + + # Output format: "checksum filename" + output = result.stdout.strip() + checksum = output.split()[0] + return checksum + except (subprocess.CalledProcessError, subprocess.TimeoutExpired) as e: + logger.warning(f"Platform checksum tool failed: {e}") + return None + + def _calculate_with_hashlib(self, file_path: str) -> Optional[str]: + """Calculate checksum using Python hashlib.""" + try: + sha256_hash = hashlib.sha256() + with open(file_path, "rb") as f: + # Read in chunks to handle large files + for byte_block in iter(lambda: f.read(4096), b""): + sha256_hash.update(byte_block) + return sha256_hash.hexdigest() + except Exception as e: + logger.error(f"Failed to calculate checksum with hashlib: {e}") + return None + + def verify_checksum(self, file_path: str, checksum_file_path: str) -> bool: + """ + Verify a file's checksum against its CHECKSUM file. + + Args: + file_path: Path to the data file + checksum_file_path: Path to the .CHECKSUM file + + Returns: + True if checksum matches, False otherwise + """ + if not os.path.exists(checksum_file_path): + logger.error(f"Checksum file not found: {checksum_file_path}") + return False + + # Read expected checksum from .CHECKSUM file + try: + with open(checksum_file_path, 'r') as f: + checksum_content = f.read().strip() + # Format: "checksum filename" + expected_checksum = checksum_content.split()[0] + except Exception as e: + logger.error(f"Failed to read checksum file: {e}") + return False + + # Calculate actual checksum + actual_checksum = self.calculate_checksum(file_path) + if actual_checksum is None: + return False + + # Compare checksums + if actual_checksum.lower() == expected_checksum.lower(): + logger.info(f"Checksum verified: {file_path}") + return True + else: + logger.error( + f"Checksum mismatch for {file_path}\n" + f"Expected: {expected_checksum}\n" + f"Actual: {actual_checksum}" + ) + return False + + def download_and_verify_checksum( + self, + file_path: str, + checksum_file_path: str + ) -> tuple[bool, Optional[str]]: + """ + Download checksum file and verify data file. + + Args: + file_path: Path to the data file + checksum_file_path: Path where checksum file should be + + Returns: + Tuple of (success: bool, message: str) + """ + if not os.path.exists(file_path): + return False, f"Data file not found: {file_path}" + + if not os.path.exists(checksum_file_path): + return False, f"Checksum file not found: {checksum_file_path}" + + is_valid = self.verify_checksum(file_path, checksum_file_path) + if is_valid: + return True, "Checksum verification passed" + else: + return False, "Checksum verification failed" + + +# Default checksum verifier instance +default_verifier = ChecksumVerifier() diff --git a/src/binance_data_downloader/core/data_type_config.py b/src/binance_data_downloader/core/data_type_config.py new file mode 100644 index 0000000..d1d9784 --- /dev/null +++ b/src/binance_data_downloader/core/data_type_config.py @@ -0,0 +1,247 @@ +""" +Data Type Configuration Registry + +This module defines all supported data types for Binance public data downloaders. +It provides a centralized registry of data type specifications including market support, +path components, and file naming patterns. +""" + +from dataclasses import dataclass +from enum import Enum +from typing import Dict, List, Optional, Set + + +class DataType(Enum): + """Enumeration of all supported Binance data types.""" + KLINES = "klines" + TRADES = "trades" + AGG_TRADES = "aggTrades" + INDEX_PRICE_KLINES = "indexPriceKlines" + MARK_PRICE_KLINES = "markPriceKlines" + PREMIUM_INDEX_KLINES = "premiumIndexKlines" + FUNDING_RATE = "fundingRate" + LIQUIDATION_SNAPSHOT = "liquidationSnapshot" + BOOK_TICKER = "bookTicker" + DEPTH = "depth" + OPTION = "option" + + +@dataclass +class DataTypeSpec: + """ + Specification for a data type. + + Attributes: + data_type: The DataType enum value + path_segment: URL path segment for this data type + supports_spot: Whether this data type is available for spot market + supports_um: Whether this data type is available for USD-M futures + supports_cm: Whether this data type is available for COIN-M futures + supports_intervals: Whether this data type supports interval parameter + supports_monthly: Whether monthly files are available + supports_daily: Whether daily files are available + has_interval_in_path: Whether interval appears in file path + """ + data_type: DataType + path_segment: str + supports_spot: bool + supports_um: bool + supports_cm: bool + supports_intervals: bool + supports_monthly: bool + supports_daily: bool + has_interval_in_path: bool + + +# Data Type Registry +# Maps each DataType to its specification +DATA_TYPE_REGISTRY: Dict[DataType, DataTypeSpec] = { + DataType.KLINES: DataTypeSpec( + data_type=DataType.KLINES, + path_segment="klines", + supports_spot=True, + supports_um=True, + supports_cm=True, + supports_intervals=True, + supports_monthly=True, + supports_daily=True, + has_interval_in_path=True + ), + DataType.TRADES: DataTypeSpec( + data_type=DataType.TRADES, + path_segment="trades", + supports_spot=True, + supports_um=True, + supports_cm=True, + supports_intervals=False, + supports_monthly=True, + supports_daily=True, + has_interval_in_path=False + ), + DataType.AGG_TRADES: DataTypeSpec( + data_type=DataType.AGG_TRADES, + path_segment="aggTrades", + supports_spot=True, + supports_um=True, + supports_cm=True, + supports_intervals=False, + supports_monthly=True, + supports_daily=True, + has_interval_in_path=False + ), + DataType.INDEX_PRICE_KLINES: DataTypeSpec( + data_type=DataType.INDEX_PRICE_KLINES, + path_segment="indexPriceKlines", + supports_spot=False, + supports_um=True, + supports_cm=True, + supports_intervals=True, + supports_monthly=True, + supports_daily=True, + has_interval_in_path=True + ), + DataType.MARK_PRICE_KLINES: DataTypeSpec( + data_type=DataType.MARK_PRICE_KLINES, + path_segment="markPriceKlines", + supports_spot=False, + supports_um=True, + supports_cm=True, + supports_intervals=True, + supports_monthly=True, + supports_daily=True, + has_interval_in_path=True + ), + DataType.PREMIUM_INDEX_KLINES: DataTypeSpec( + data_type=DataType.PREMIUM_INDEX_KLINES, + path_segment="premiumIndexKlines", + supports_spot=False, + supports_um=True, + supports_cm=False, + supports_intervals=True, + supports_monthly=True, + supports_daily=True, + has_interval_in_path=True + ), + DataType.FUNDING_RATE: DataTypeSpec( + data_type=DataType.FUNDING_RATE, + path_segment="fundingRate", + supports_spot=False, + supports_um=True, + supports_cm=True, + supports_intervals=False, + supports_monthly=True, + supports_daily=False, # Funding rate only has monthly data, not daily + has_interval_in_path=False + ), + DataType.LIQUIDATION_SNAPSHOT: DataTypeSpec( + data_type=DataType.LIQUIDATION_SNAPSHOT, + path_segment="liquidationSnapshot", + supports_spot=False, + supports_um=False, + supports_cm=True, + supports_intervals=False, + supports_monthly=False, + supports_daily=True, + has_interval_in_path=False + ), + DataType.BOOK_TICKER: DataTypeSpec( + data_type=DataType.BOOK_TICKER, + path_segment="bookTicker", + supports_spot=False, + supports_um=True, + supports_cm=True, + supports_intervals=False, + supports_monthly=False, + supports_daily=True, + has_interval_in_path=False + ), + DataType.DEPTH: DataTypeSpec( + data_type=DataType.DEPTH, + path_segment="depth", + supports_spot=True, + supports_um=True, + supports_cm=False, + supports_intervals=False, + supports_monthly=False, + supports_daily=True, + has_interval_in_path=False + ), + DataType.OPTION: DataTypeSpec( + data_type=DataType.OPTION, + path_segment="BVOLIndex", + supports_spot=False, + supports_um=False, + supports_cm=False, + supports_intervals=False, + supports_monthly=False, + supports_daily=True, + has_interval_in_path=False + ), +} + + +def get_data_type_spec(data_type: DataType) -> Optional[DataTypeSpec]: + """ + Get the specification for a given data type. + + Args: + data_type: The DataType enum value + + Returns: + DataTypeSpec if found, None otherwise + """ + return DATA_TYPE_REGISTRY.get(data_type) + + +def get_supported_data_types(market_type: str) -> List[DataType]: + """ + Get all data types supported by a given market type. + + Args: + market_type: Market type ('spot', 'um', or 'cm') + + Returns: + List of DataType values supported by the market + """ + supported = [] + for data_type, spec in DATA_TYPE_REGISTRY.items(): + if market_type == 'spot' and spec.supports_spot: + supported.append(data_type) + elif market_type == 'um' and spec.supports_um: + supported.append(data_type) + elif market_type == 'cm' and spec.supports_cm: + supported.append(data_type) + return supported + + +def get_all_data_types() -> List[DataType]: + """Get all available data types.""" + return list(DataType) + + +def is_interval_supported(data_type: DataType) -> bool: + """ + Check if a data type supports interval parameter. + + Args: + data_type: The DataType to check + + Returns: + True if intervals are supported, False otherwise + """ + spec = get_data_type_spec(data_type) + return spec.supports_intervals if spec else False + + +def get_path_segment(data_type: DataType) -> Optional[str]: + """ + Get the URL path segment for a data type. + + Args: + data_type: The DataType enum value + + Returns: + Path segment string or None if not found + """ + spec = get_data_type_spec(data_type) + return spec.path_segment if spec else None diff --git a/src/binance_data_downloader/core/retry_handler.py b/src/binance_data_downloader/core/retry_handler.py new file mode 100644 index 0000000..d1a4160 --- /dev/null +++ b/src/binance_data_downloader/core/retry_handler.py @@ -0,0 +1,128 @@ +""" +Retry Handler + +This module provides retry mechanism for downloads with exponential backoff. +""" + +import logging +import time +import urllib.request +from typing import Callable, Optional, Any + +logger = logging.getLogger(__name__) + + +class RetryHandler: + """ + Handles download retries with exponential backoff strategy. + + HTTP 404 errors are not retried as they indicate the file doesn't exist. + Other errors are retried up to max_retries times with exponential backoff. + """ + + def __init__( + self, + max_retries: int = 3, + initial_delay: float = 1.0, + exponential_backoff: bool = True + ): + """ + Initialize the retry handler. + + Args: + max_retries: Maximum number of retry attempts + initial_delay: Initial delay in seconds before first retry (reduced for faster failure detection) + exponential_backoff: Whether to use exponential backoff (doubling delay each retry) + """ + self.max_retries = max_retries + self.initial_delay = initial_delay + self.exponential_backoff = exponential_backoff + + def execute_with_retry( + self, + func: Callable[..., Any], + *args: Any, + **kwargs: Any + ) -> Optional[Any]: + """ + Execute a function with retry logic. + + Args: + func: The function to execute + *args: Positional arguments to pass to the function + **kwargs: Keyword arguments to pass to the function + + Returns: + The result of the function call, or None if all retries fail + """ + last_exception = None + delay = self.initial_delay + + for attempt in range(self.max_retries + 1): + try: + return func(*args, **kwargs) + except urllib.error.HTTPError as e: + # Don't retry 404 errors - file doesn't exist + if e.code == 404: + logger.debug(f"File not found (404), not retrying: {e.url}") + return None + last_exception = e + if attempt < self.max_retries: + logger.warning( + f"HTTP error on attempt {attempt + 1}/{self.max_retries + 1}: {e}" + ) + time.sleep(delay) + if self.exponential_backoff: + delay *= 2 + else: + logger.error(f"Max retries reached for HTTP error: {e}") + except urllib.error.URLError as e: + last_exception = e + if attempt < self.max_retries: + logger.warning( + f"URL error on attempt {attempt + 1}/{self.max_retries + 1}: {e}" + ) + time.sleep(delay) + if self.exponential_backoff: + delay *= 2 + else: + logger.error(f"Max retries reached for URL error: {e}") + except Exception as e: + last_exception = e + if attempt < self.max_retries: + logger.warning( + f"Unexpected error on attempt {attempt + 1}/{self.max_retries + 1}: {e}" + ) + time.sleep(delay) + if self.exponential_backoff: + delay *= 2 + else: + logger.error(f"Max retries reached for unexpected error: {e}") + + logger.error(f"All retry attempts failed: {last_exception}") + return None + + def download_with_retry( + self, + url: str, + ssl_context: Any + ) -> Optional[Any]: + """ + Download a URL with retry logic. + + Args: + url: The URL to download + ssl_context: SSL context for secure connections + + Returns: + The file-like object from urllib.request.urlopen, or None if failed + """ + def _download(): + logger.debug(f"Downloading: {url}") + return urllib.request.urlopen(url, context=ssl_context, timeout=30) + + return self.execute_with_retry(_download) + + +# Default retry handler instance +default_retry_handler = RetryHandler() diff --git a/src/binance_data_downloader/downloaders/__init__.py b/src/binance_data_downloader/downloaders/__init__.py new file mode 100644 index 0000000..001be91 --- /dev/null +++ b/src/binance_data_downloader/downloaders/__init__.py @@ -0,0 +1,31 @@ +""" +Binance Data Downloaders + +This package contains all the specific downloader implementations. +""" + +from .kline_downloader import KlineDownloader +from .trade_downloader import TradeDownloader +from .agg_trade_downloader import AggTradeDownloader +from .index_price_downloader import IndexPriceDownloader +from .mark_price_downloader import MarkPriceDownloader +from .premium_index_downloader import PremiumIndexDownloader +from .funding_rate_downloader import FundingRateDownloader +from .liquidation_snapshot_downloader import LiquidationSnapshotDownloader +from .book_ticker_downloader import BookTickerDownloader +from .depth_downloader import DepthDownloader +from .option_downloader import OptionDownloader + +__all__ = [ + 'KlineDownloader', + 'TradeDownloader', + 'AggTradeDownloader', + 'IndexPriceDownloader', + 'MarkPriceDownloader', + 'PremiumIndexDownloader', + 'FundingRateDownloader', + 'LiquidationSnapshotDownloader', + 'BookTickerDownloader', + 'DepthDownloader', + 'OptionDownloader', +] diff --git a/src/binance_data_downloader/downloaders/agg_trade_downloader.py b/src/binance_data_downloader/downloaders/agg_trade_downloader.py new file mode 100644 index 0000000..d2d511a --- /dev/null +++ b/src/binance_data_downloader/downloaders/agg_trade_downloader.py @@ -0,0 +1,52 @@ +""" +Aggregated Trade Downloader + +Downloads aggregated trade data from Binance. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class AggTradeDownloader(BaseDownloader): + """ + Downloader for aggregated trade data. + + Supports all spot and futures markets. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "aggTrades" + + def supports_intervals(self) -> bool: + """Aggregated trades do not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly aggregated trades filename. + + Example: BTCUSDT-aggTrades-2023-01.zip + """ + return f"{symbol.upper()}-aggTrades-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily aggregated trades filename. + + Example: BTCUSDT-aggTrades-2023-01-15.zip + """ + return f"{symbol.upper()}-aggTrades-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/book_ticker_downloader.py b/src/binance_data_downloader/downloaders/book_ticker_downloader.py new file mode 100644 index 0000000..4d4e4c4 --- /dev/null +++ b/src/binance_data_downloader/downloaders/book_ticker_downloader.py @@ -0,0 +1,53 @@ +""" +Book Ticker Downloader + +Downloads book ticker (best bid/ask price) data from Binance. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class BookTickerDownloader(BaseDownloader): + """ + Downloader for book ticker data. + + Supports USD-M (um) and COIN-M (cm) futures markets. + Book ticker provides the best bid price, best ask price, and quantities. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "bookTicker" + + def supports_intervals(self) -> bool: + """Book tickers do not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Book tickers are only available as daily files, not monthly. + + This method is not used for this data type. + """ + raise NotImplementedError("Book tickers are only available as daily files") + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily book ticker filename. + + Example: BTCUSDT-bookTicker-2023-01-15.zip + """ + return f"{symbol.upper()}-bookTicker-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/depth_downloader.py b/src/binance_data_downloader/downloaders/depth_downloader.py new file mode 100644 index 0000000..2d0ff9a --- /dev/null +++ b/src/binance_data_downloader/downloaders/depth_downloader.py @@ -0,0 +1,53 @@ +""" +Depth Downloader + +Downloads order book depth data from Binance. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class DepthDownloader(BaseDownloader): + """ + Downloader for order book depth data. + + Supports spot and USD-M (um) futures markets. + Depth data provides the order book with bids and asks at various levels. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "depth" + + def supports_intervals(self) -> bool: + """Depth data does not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Depth data is only available as daily files, not monthly. + + This method is not used for this data type. + """ + raise NotImplementedError("Depth data is only available as daily files") + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily depth filename. + + Example: BTCUSDT-depth-2023-01-15.zip + """ + return f"{symbol.upper()}-depth-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/funding_rate_downloader.py b/src/binance_data_downloader/downloaders/funding_rate_downloader.py new file mode 100644 index 0000000..6023ef1 --- /dev/null +++ b/src/binance_data_downloader/downloaders/funding_rate_downloader.py @@ -0,0 +1,54 @@ +""" +Funding Rate Downloader + +Downloads funding rate history data from Binance futures. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class FundingRateDownloader(BaseDownloader): + """ + Downloader for funding rate history data. + + Supports USD-M (um) and COIN-M (cm) futures markets. + Funding rates are published daily and determine the periodic payments + between long and short position holders. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "fundingRate" + + def supports_intervals(self) -> bool: + """Funding rates do not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly funding rate filename. + + Example: BTCUSDT-fundingRate-2023-01.zip + """ + return f"{symbol.upper()}-fundingRate-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily funding rate filename. + + Example: BTCUSDT-fundingRate-2023-01-15.zip + """ + return f"{symbol.upper()}-fundingRate-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/index_price_downloader.py b/src/binance_data_downloader/downloaders/index_price_downloader.py new file mode 100644 index 0000000..333ad56 --- /dev/null +++ b/src/binance_data_downloader/downloaders/index_price_downloader.py @@ -0,0 +1,52 @@ +""" +Index Price Kline Downloader + +Downloads index price kline data from Binance futures. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class IndexPriceDownloader(BaseDownloader): + """ + Downloader for index price kline data. + + Supports USD-M (um) and COIN-M (cm) futures markets. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "indexPriceKlines" + + def supports_intervals(self) -> bool: + """Index price klines support interval parameter.""" + return True + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly index price kline filename. + + Example: BTCUSDT-1h-2023-01.zip + """ + return f"{symbol.upper()}-{interval}-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily index price kline filename. + + Example: BTCUSDT-1h-2023-01-15.zip + """ + return f"{symbol.upper()}-{interval}-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/kline_downloader.py b/src/binance_data_downloader/downloaders/kline_downloader.py new file mode 100644 index 0000000..43abe26 --- /dev/null +++ b/src/binance_data_downloader/downloaders/kline_downloader.py @@ -0,0 +1,52 @@ +""" +Kline Downloader + +Downloads kline (candlestick) data from Binance. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class KlineDownloader(BaseDownloader): + """ + Downloader for kline (candlestick) data. + + Supports all spot and futures markets with various time intervals. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "klines" + + def supports_intervals(self) -> bool: + """Klines support interval parameter.""" + return True + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly kline filename. + + Example: BTCUSDT-1h-2023-01.zip + """ + return f"{symbol.upper()}-{interval}-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily kline filename. + + Example: BTCUSDT-1h-2023-01-15.zip + """ + return f"{symbol.upper()}-{interval}-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/liquidation_snapshot_downloader.py b/src/binance_data_downloader/downloaders/liquidation_snapshot_downloader.py new file mode 100644 index 0000000..75cded9 --- /dev/null +++ b/src/binance_data_downloader/downloaders/liquidation_snapshot_downloader.py @@ -0,0 +1,53 @@ +""" +Liquidation Snapshot Downloader + +Downloads liquidation snapshot data from Binance futures. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class LiquidationSnapshotDownloader(BaseDownloader): + """ + Downloader for liquidation snapshot data. + + Supports COIN-M (cm) futures market only. + Liquidation snapshots show the state of forced liquidations. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "liquidationSnapshot" + + def supports_intervals(self) -> bool: + """Liquidation snapshots do not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Liquidation snapshots are only available as daily files, not monthly. + + This method is not used for this data type. + """ + raise NotImplementedError("Liquidation snapshots are only available as daily files") + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily liquidation snapshot filename. + + Example: BTCUSD_PERP-liquidationSnapshot-2023-01-15.zip + """ + return f"{symbol.upper()}-liquidationSnapshot-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/mark_price_downloader.py b/src/binance_data_downloader/downloaders/mark_price_downloader.py new file mode 100644 index 0000000..d5c2f77 --- /dev/null +++ b/src/binance_data_downloader/downloaders/mark_price_downloader.py @@ -0,0 +1,52 @@ +""" +Mark Price Kline Downloader + +Downloads mark price kline data from Binance futures. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class MarkPriceDownloader(BaseDownloader): + """ + Downloader for mark price kline data. + + Supports USD-M (um) and COIN-M (cm) futures markets. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "markPriceKlines" + + def supports_intervals(self) -> bool: + """Mark price klines support interval parameter.""" + return True + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly mark price kline filename. + + Example: BTCUSDT-1h-2023-01.zip + """ + return f"{symbol.upper()}-{interval}-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily mark price kline filename. + + Example: BTCUSDT-1h-2023-01-15.zip + """ + return f"{symbol.upper()}-{interval}-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/option_downloader.py b/src/binance_data_downloader/downloaders/option_downloader.py new file mode 100644 index 0000000..60ef87f --- /dev/null +++ b/src/binance_data_downloader/downloaders/option_downloader.py @@ -0,0 +1,54 @@ +""" +Option Downloader + +Downloads BVOLIndex (Bitcoin and Ethereum Volatility Index) data from Binance. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class OptionDownloader(BaseDownloader): + """ + Downloader for BVOLIndex data. + + BVOLIndex provides Bitcoin and Ethereum volatility index data. + Available symbols: BTCBVOLUSDT, ETHBVOLUSDT + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "option" + + def supports_intervals(self) -> bool: + """BVOLIndex data does not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + BVOLIndex data is only available as daily files, not monthly. + + This method is not used for this data type. + """ + raise NotImplementedError("BVOLIndex data is only available as daily files") + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily BVOLIndex filename. + + Example: BTCBVOLUSDT-BVOLIndex-2023-01-15.zip + Format: SYMBOL-BVOLIndex-DATE.zip + """ + return f"{symbol.upper()}-BVOLIndex-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/premium_index_downloader.py b/src/binance_data_downloader/downloaders/premium_index_downloader.py new file mode 100644 index 0000000..671826e --- /dev/null +++ b/src/binance_data_downloader/downloaders/premium_index_downloader.py @@ -0,0 +1,52 @@ +""" +Premium Index Kline Downloader + +Downloads premium index kline data from Binance USD-M futures. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class PremiumIndexDownloader(BaseDownloader): + """ + Downloader for premium index kline data. + + Supports USD-M (um) futures market only. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "premiumIndexKlines" + + def supports_intervals(self) -> bool: + """Premium index klines support interval parameter.""" + return True + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly premium index kline filename. + + Example: BTCUSDT-1h-2023-01.zip + """ + return f"{symbol.upper()}-{interval}-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily premium index kline filename. + + Example: BTCUSDT-1h-2023-01-15.zip + """ + return f"{symbol.upper()}-{interval}-{date_str}.zip" diff --git a/src/binance_data_downloader/downloaders/trade_downloader.py b/src/binance_data_downloader/downloaders/trade_downloader.py new file mode 100644 index 0000000..de20fa3 --- /dev/null +++ b/src/binance_data_downloader/downloaders/trade_downloader.py @@ -0,0 +1,52 @@ +""" +Trade Downloader + +Downloads individual trade data from Binance. +""" + +from typing import Optional + +from ..core.base_downloader import BaseDownloader + + +class TradeDownloader(BaseDownloader): + """ + Downloader for individual trade data. + + Supports all spot and futures markets. + """ + + def get_data_type(self) -> str: + """Return the data type identifier.""" + return "trades" + + def supports_intervals(self) -> bool: + """Trades do not support interval parameter.""" + return False + + def format_monthly_filename( + self, + symbol: str, + interval: Optional[str], + year: str, + month: int + ) -> str: + """ + Format a monthly trades filename. + + Example: BTCUSDT-trades-2023-01.zip + """ + return f"{symbol.upper()}-trades-{year}-{month:02d}.zip" + + def format_daily_filename( + self, + symbol: str, + interval: Optional[str], + date_str: str + ) -> str: + """ + Format a daily trades filename. + + Example: BTCUSDT-trades-2023-01-15.zip + """ + return f"{symbol.upper()}-trades-{date_str}.zip" diff --git a/src/binance_data_downloader/utils/__init__.py b/src/binance_data_downloader/utils/__init__.py new file mode 100644 index 0000000..8d909d7 --- /dev/null +++ b/src/binance_data_downloader/utils/__init__.py @@ -0,0 +1,17 @@ +""" +Utilities module for Binance data downloader. +""" + +from .symbol_dates import ( + SymbolDateManager, + get_symbol_date_manager, + parse_date_filter, + DEFAULT_SYMBOL_DATES_PATH +) + +__all__ = [ + 'SymbolDateManager', + 'get_symbol_date_manager', + 'parse_date_filter', + 'DEFAULT_SYMBOL_DATES_PATH', +] diff --git a/src/binance_data_downloader/utils/data_explorer.py b/src/binance_data_downloader/utils/data_explorer.py new file mode 100644 index 0000000..5ccdeee --- /dev/null +++ b/src/binance_data_downloader/utils/data_explorer.py @@ -0,0 +1,507 @@ +""" +Data Explorer + +Auto-discovers available data types, symbols, and date ranges from Binance public data. +""" + +import logging +import re +import urllib.request +from datetime import date, datetime +from typing import Dict, List, Optional, Tuple + +logger = logging.getLogger(__name__) + + +class DataExplorer: + """ + Explores Binance public data structure to discover available data types, + symbols, and date ranges. + """ + + def __init__(self, base_url: str = "https://data.binance.vision/"): + """ + Initialize the data explorer. + + Args: + base_url: Base URL for Binance public data + """ + self.base_url = base_url + + def list_data_types(self, market: str = "um", time_period: str = "daily") -> List[str]: + """ + List available data types for a given market. + + Args: + market: Market type ('um' or 'cm') + time_period: Time period ('daily' or 'monthly') + + Returns: + List of data type names + """ + # Known data types for futures markets + if market in ['um', 'cm']: + return [ + 'klines', + 'trades', + 'aggTrades', + 'indexPriceKlines', + 'markPriceKlines', + 'premiumIndexKlines', + 'fundingRate', + 'bookTicker', + 'depth', + ] + elif market == 'spot': + return ['klines', 'trades', 'aggTrades', 'depth'] + else: + return [] + + def discover_symbols_for_data_type( + self, + market: str, + data_type: str, + time_period: str = "daily" + ) -> List[str]: + """ + Discover available symbols for a specific data type. + + This uses the Binance API to get the list of active trading symbols. + + Args: + market: Market type ('um', 'cm', or 'spot') + data_type: Data type (e.g., 'klines', 'trades') + time_period: Time period ('daily' or 'monthly') + + Returns: + List of symbol names + """ + import json + + urls = { + 'um': "https://fapi.binance.com/fapi/v1/exchangeInfo", + 'cm': "https://dapi.binance.com/dapi/v1/exchangeInfo", + 'spot': "https://api.binance.com/api/v3/exchangeInfo" + } + + if market not in urls: + logger.error(f"Unsupported market type: {market}") + return [] + + try: + response = urllib.request.urlopen(urls[market], timeout=10).read() + data = json.loads(response) + + # Extract symbols from exchange info + symbols = [symbol['symbol'] for symbol in data['symbols']] + logger.info(f"Found {len(symbols)} symbols for {market} market") + return symbols + + except Exception as e: + logger.error(f"Failed to fetch symbols for {market}: {e}") + return [] + + def discover_date_range_for_symbol( + self, + market: str, + data_type: str, + symbol: str, + time_period: str = "daily" + ) -> Tuple[Optional[str], Optional[str]]: + """ + Discover the available date range for a specific symbol. + + Uses binary search to find the start and end dates efficiently. + + Args: + market: Market type ('um', 'cm', or 'spot') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + time_period: Time period ('daily' or 'monthly') + + Returns: + Tuple of (start_date, end_date) as YYYY-MM-DD strings, or (None, None) if no data found + """ + from datetime import datetime, timedelta + import ssl + import certifi + + # Determine data type specific formats + if data_type in ['klines', 'indexPriceKlines', 'markPriceKlines', 'premiumIndexKlines']: + # Check with common intervals + intervals_to_check = ['1d', '1h', '1m'] + else: + intervals_to_check = [None] + + dates_found = [] + + for interval in intervals_to_check: + # Try recent dates first (last 30 days) + for days_ago in range(0, 30): + check_date = (datetime.now() - timedelta(days=days_ago)).strftime("%Y-%m-%d") + + # Build file path based on data type + if market == 'spot': + if interval and data_type in ['klines']: + file_path = f"data/spot/{time_period}/{data_type}/{symbol}/{interval}/{symbol}-{interval}-{check_date}.zip" + else: + file_path = f"data/spot/{time_period}/{data_type}/{symbol}/{symbol}-{data_type}-{check_date}.zip" + elif market in ['um', 'cm']: + if interval and data_type in ['klines']: + file_path = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{interval}/{symbol}-{interval}-{check_date}.zip" + else: + file_path = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{symbol}-{data_type}-{check_date}.zip" + else: + continue + + # Check if file exists + url = f"{self.base_url}{file_path}" + try: + ssl_context = ssl.create_default_context(cafile=certifi.where()) + req = urllib.request.Request(url, method='HEAD') + response = urllib.request.urlopen(req, context=ssl_context, timeout=2) + if response.code == 200: + dates_found.append(check_date) + break # Found a recent file, no need to check more + except: + continue + + if dates_found: + break # Found data with this interval + + if not dates_found: + # No recent data found, try checking with a wider range + # Check a few key dates from different years + test_dates = ['2024-12-01', '2024-06-01', '2024-01-01', '2023-06-01'] + + for interval in intervals_to_check: + for check_date in test_dates: + if market == 'spot': + if interval and data_type in ['klines']: + file_path = f"data/spot/{time_period}/{data_type}/{symbol}/{interval}/{symbol}-{interval}-{check_date}.zip" + else: + file_path = f"data/spot/{time_period}/{data_type}/{symbol}/{symbol}-{data_type}-{check_date}.zip" + elif market in ['um', 'cm']: + if interval and data_type in ['klines']: + file_path = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{interval}/{symbol}-{interval}-{check_date}.zip" + else: + file_path = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{symbol}-{data_type}-{check_date}.zip" + else: + continue + + url = f"{self.base_url}{file_path}" + try: + ssl_context = ssl.create_default_context(cafile=certifi.where()) + req = urllib.request.Request(url, method='HEAD') + response = urllib.request.urlopen(req, context=ssl_context, timeout=2) + if response.code == 200: + dates_found.append(check_date) + break + except: + continue + + if dates_found: + break + + if not dates_found: + logger.debug(f"No data found for {market}/{data_type}/{symbol}") + return None, None + + # If we found at least one date, use a heuristic to determine the range + # For now, return the found date as both start and end + # This can be improved later with binary search + dates_found.sort() + start_date = dates_found[0] + end_date = datetime.now().strftime("%Y-%m-%d") + + logger.debug(f"Date range for {symbol}: {start_date} to {end_date} (estimated)") + return start_date, end_date + + def get_data_date_range_from_web( + self, + market: str, + data_type: str, + symbol: str, + time_period: str = "daily" + ) -> Tuple[Optional[str], Optional[str]]: + """ + Get the exact start and end date for a symbol's data from the web. + + Uses a fast step-based approach to find boundaries. + + Args: + market: Market type ('um', 'cm', or 'spot') + data_type: Data type (e.g., 'fundingRate', 'klines') + symbol: Trading symbol + time_period: Time period ('daily' or 'monthly') + + Returns: + Tuple of (start_date, end_date) as YYYY-MM-DD strings, or (None, None) if no data found + """ + from datetime import datetime, timedelta + import ssl + import certifi + + # Determine interval for data types that support it + if data_type in ['klines', 'indexPriceKlines', 'markPriceKlines', 'premiumIndexKlines']: + interval = '1d' # Use daily as default interval + else: + interval = None + + # Define reasonable default date ranges based on data type + # Most Binance data started around 2020 + default_start_date = datetime(2020, 1, 1) + latest_date = datetime.now() + + # Function to check if a file exists for a given date + def check_date_exists(check_date: datetime) -> bool: + date_str = check_date.strftime("%Y-%m-%d") + + # Build file path based on data type + if market == 'spot': + if interval and data_type in ['klines']: + file_path = f"data/spot/{time_period}/{data_type}/{symbol}/{interval}/{symbol}-{interval}-{date_str}.zip" + else: + file_path = f"data/spot/{time_period}/{data_type}/{symbol}/{symbol}-{data_type}-{date_str}.zip" + elif market in ['um', 'cm']: + if interval and data_type in ['klines']: + file_path = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{interval}/{symbol}-{interval}-{date_str}.zip" + else: + file_path = f"data/futures/{market}/{time_period}/{data_type}/{symbol}/{symbol}-{data_type}-{date_str}.zip" + else: + return False + + url = f"{self.base_url}{file_path}" + try: + ssl_context = ssl.create_default_context(cafile=certifi.where()) + req = urllib.request.Request(url, method='HEAD') + response = urllib.request.urlopen(req, context=ssl_context, timeout=5) + return response.code == 200 + except Exception as e: + logger.debug(f"Check failed for {date_str}: {e}") + return False + + # Step 1: First check if recent data exists (last 7 days) + logger.debug(f"Checking for recent data for {symbol}...") + end_date = None + for days_ago in range(0, 7): + check_date = latest_date - timedelta(days=days_ago) + if check_date_exists(check_date): + end_date = check_date + break + + if not end_date: + # No recent data found, try a few key dates + logger.debug(f"No recent data, trying key dates for {symbol}...") + key_dates = [ + latest_date, + latest_date - timedelta(days=1), + latest_date - timedelta(days=7), + latest_date - timedelta(days=30), + ] + for check_date in key_dates: + if check_date_exists(check_date): + end_date = check_date + break + + if not end_date: + logger.warning(f"No data found for {market}/{data_type}/{symbol} - cannot determine end date") + return None, None + + # Step 2: Find the start date by stepping back in large increments + logger.debug(f"Finding start date for {symbol}...") + start_date = None + + # First try to find the earliest date by stepping back + # Use progressively smaller steps for efficiency + current_date = end_date + step_sizes = [90, 30, 7, 1] # Days to step back + + for step_size in step_sizes: + while True: + test_date = current_date - timedelta(days=step_size) + if test_date < default_start_date: + test_date = default_start_date + + if check_date_exists(test_date): + current_date = test_date + # If we're at the default start date, we found the boundary + if test_date == default_start_date: + break + else: + # Data doesn't exist at this date, so current_date might be close to start + break + + if current_date == default_start_date: + break + + # Now do a fine-grained search forward from current_date to find actual start + # Move forward day by day until we find data + search_start = current_date + while search_start < end_date: + if check_date_exists(search_start): + start_date = search_start + break + search_start += timedelta(days=1) + + # If we didn't find start with fine search, use end_date as fallback + if not start_date: + start_date = end_date + + # Step 3: Fine-tune end date by checking forward from current end_date + # (in case there are newer files) + logger.debug(f"Fine-tuning end date for {symbol}...") + test_date = end_date + timedelta(days=1) + max_days_forward = 7 # Only check up to 7 days forward + days_checked = 0 + while test_date <= latest_date and days_checked < max_days_forward: + if check_date_exists(test_date): + end_date = test_date + test_date += timedelta(days=1) + days_checked += 1 + else: + break + + if start_date and end_date: + start_str = start_date.strftime("%Y-%m-%d") + end_str = end_date.strftime("%Y-%m-%d") + logger.info(f"Data range found for {symbol}: {start_str} to {end_str}") + return start_str, end_str + else: + logger.warning(f"Could not determine date range for {market}/{data_type}/{symbol}") + return None, None + + def explore_market( + self, + market: str = "um", + data_types: Optional[List[str]] = None, + time_period: str = "daily", + max_symbols: Optional[int] = None + ) -> Dict[str, Dict[str, Tuple[str, str]]]: + """ + Explore a market and discover all available data. + + Args: + market: Market type ('um', 'cm', or 'spot') + data_types: List of data types to explore (None = all available) + time_period: Time period ('daily' or 'monthly') + max_symbols: Maximum number of symbols to explore per data type (None = all) + + Returns: + Dictionary mapping data_type -> {symbol -> (start_date, end_date)} + """ + # Get data types to explore + if data_types is None: + data_types = self.list_data_types(market, time_period) + + result = {} + + for data_type in data_types: + logger.info(f"Exploring {market}/{data_type}") + result[data_type] = {} + + # Get symbols for this data type + symbols = self.discover_symbols_for_data_type(market, data_type, time_period) + + if max_symbols: + symbols = symbols[:max_symbols] + + # Discover date range for each symbol + for i, symbol in enumerate(symbols): + if (i + 1) % 100 == 0: + logger.info(f" Progress: {i + 1}/{len(symbols)} symbols explored") + + start_date, end_date = self.discover_date_range_for_symbol( + market, data_type, symbol, time_period + ) + + if start_date and end_date: + result[data_type][symbol] = (start_date, end_date) + + logger.info(f" Found {len(result[data_type])} symbols with data for {data_type}") + + return result + + +def create_download_script_from_exploration( + exploration_result: Dict[str, Dict[str, Tuple[str, str]]], + market: str, + output_folder: str +) -> str: + """ + Create a shell script to download all discovered data. + + Args: + exploration_result: Result from explore_market() + market: Market type + output_folder: Output folder path + + Returns: + Shell script content + """ + lines = [ + "#!/bin/bash", + "#", + f"# Auto-generated download script for {market.upper()} futures data", + f"# Generated on: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", + "#", + "", + "cd \"$(dirname \"$0\")\"", + "", + ] + + for data_type, symbols in exploration_result.items(): + lines.append(f"\n# Download {data_type}") + lines.append(f"echo 'Downloading {data_type}...'") + + for symbol, (start_date, end_date) in symbols.items(): + lines.append( + f"python scripts/download-{to_script_name(data_type)}.py " + f"-t {market} " + f"-s {symbol} " + f"-startDate {start_date} " + f"-endDate {end_date} " + f"-folder {output_folder}" + ) + + lines.append("\necho 'All downloads completed!'") + + return "\n".join(lines) + + +def to_script_name(data_type: str) -> str: + """Convert data type to script name.""" + # Convert camelCase to kebab-case + import re + return re.sub('([A-Z])', r'-\1', data_type).lower().lstrip('-') + + +def save_exploration_report( + exploration_result: Dict[str, Dict[str, Tuple[str, str]]], + market: str, + output_file: str +): + """ + Save exploration results to a file. + + Args: + exploration_result: Result from explore_market() + market: Market type + output_file: Output file path + """ + with open(output_file, 'w', encoding='utf-8') as f: + f.write(f"# {market.upper()} Market Data Exploration Report\n") + f.write(f"# Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n") + + total_symbols = sum(len(symbols) for symbols in exploration_result.values()) + f.write(f"Total Data Types: {len(exploration_result)}\n") + f.write(f"Total Symbols with Data: {total_symbols}\n\n") + + for data_type, symbols in exploration_result.items(): + f.write(f"\n## {data_type}\n") + f.write(f"Symbols: {len(symbols)}\n\n") + + for symbol, (start_date, end_date) in sorted(symbols.items()): + f.write(f" {symbol}: {start_date} to {end_date}\n") + + logger.info(f"Exploration report saved to {output_file}") diff --git a/src/binance_data_downloader/utils/date_utils.py b/src/binance_data_downloader/utils/date_utils.py new file mode 100644 index 0000000..0e269bb --- /dev/null +++ b/src/binance_data_downloader/utils/date_utils.py @@ -0,0 +1,184 @@ +""" +Date Utilities + +This module provides date parsing and manipulation utilities for data downloads. +""" + +from datetime import date, datetime, timedelta +from typing import List, Optional, Tuple + + +# Default period start date +PERIOD_START_DATE = '2020-01-01' + +# Available years +YEARS = ['2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025'] + +# Available months +MONTHS = list(range(1, 13)) + + +def convert_to_date_object(date_str: str) -> date: + """ + Convert a date string to a date object. + + Args: + date_str: Date string in YYYY-MM-DD format + + Returns: + datetime.date object + """ + year, month, day = [int(x) for x in date_str.split('-')] + return date(year, month, day) + + +def get_start_end_date_objects(date_range: str) -> Tuple[date, date]: + """ + Parse a date range string into start and end date objects. + + Args: + date_range: Date range string with space-separated dates + (e.g., "2023-01-01 2023-12-31") + + Returns: + Tuple of (start_date, end_date) as datetime.date objects + """ + start, end = date_range.split() + start_date = convert_to_date_object(start) + end_date = convert_to_date_object(end) + return start_date, end_date + + +def get_default_start_date() -> date: + """Get the default start date (earliest year).""" + return date(int(YEARS[0]), MONTHS[0], 1) + + +def get_default_end_date() -> date: + """Get the default end date (today).""" + return datetime.now().date() + + +def generate_date_range( + start_date: Optional[date] = None, + end_date: Optional[date] = None +) -> List[str]: + """ + Generate a list of date strings between start and end dates. + + Args: + start_date: Start date (defaults to PERIOD_START_DATE) + end_date: End date (defaults to today) + + Returns: + List of date strings in YYYY-MM-DD format + """ + if start_date is None: + start_date = convert_to_date_object(PERIOD_START_DATE) + if end_date is None: + end_date = datetime.now().date() + + period = end_date - start_date + dates = [ + (start_date + timedelta(days=i)).strftime("%Y-%m-%d") + for i in range(period.days + 1) + ] + return dates + + +def filter_dates_by_range( + dates: List[str], + start_date: Optional[date], + end_date: Optional[date] +) -> List[str]: + """ + Filter a list of date strings by a date range. + + Args: + dates: List of date strings in YYYY-MM-DD format + start_date: Start date (inclusive), None for no lower bound + end_date: End date (inclusive), None for no upper bound + + Returns: + Filtered list of date strings + """ + filtered = [] + for date_str in dates: + current_date = convert_to_date_object(date_str) + if start_date and current_date < start_date: + continue + if end_date and current_date > end_date: + continue + filtered.append(date_str) + return filtered + + +def is_date_in_range( + date_str: str, + start_date: Optional[date], + end_date: Optional[date] +) -> bool: + """ + Check if a date is within the specified range. + + Args: + date_str: Date string in YYYY-MM-DD format + start_date: Start date (inclusive), None for no lower bound + end_date: End date (inclusive), None for no upper bound + + Returns: + True if date is within range, False otherwise + """ + current_date = convert_to_date_object(date_str) + if start_date and current_date < start_date: + return False + if end_date and current_date > end_date: + return False + return True + + +def validate_date_format(date_str: str) -> bool: + """ + Validate that a string is in YYYY-MM-DD format. + + Args: + date_str: Date string to validate + + Returns: + True if valid format, False otherwise + """ + try: + convert_to_date_object(date_str) + return True + except (ValueError, AttributeError): + return False + + +def parse_year_month(year: str, month: int) -> date: + """ + Create a date object from year and month. + + Args: + year: Year as string + month: Month (1-12) + + Returns: + datetime.date object for the first day of the month + """ + return date(int(year), month, 1) + + +def get_date_range_string(start_date: Optional[str], end_date: Optional[str]) -> Optional[str]: + """ + Create a date range string from start and end dates. + + Args: + start_date: Start date string in YYYY-MM-DD format + end_date: End date string in YYYY-MM-DD format + + Returns: + Date range string with dates separated by space, or None if either is None + """ + if start_date and end_date: + return f"{start_date} {end_date}" + return None diff --git a/src/binance_data_downloader/utils/file_operations.py b/src/binance_data_downloader/utils/file_operations.py new file mode 100644 index 0000000..edc2f49 --- /dev/null +++ b/src/binance_data_downloader/utils/file_operations.py @@ -0,0 +1,258 @@ +""" +File Operations + +This module provides file I/O utilities for downloading and managing data files. +""" + +import logging +import os +import ssl +import sys +import urllib.request +from pathlib import Path +from typing import Optional + +import certifi + +from ..core.retry_handler import RetryHandler +from .path_builder import get_download_url + +logger = logging.getLogger(__name__) + + +class FileDownloader: + """ + Handles file download operations with progress tracking and retry logic. + """ + + def __init__( + self, + retry_handler: Optional[RetryHandler] = None, + show_progress: bool = True + ): + """ + Initialize the file downloader. + + Args: + retry_handler: Optional custom retry handler + show_progress: Whether to show download progress bar + """ + self.retry_handler = retry_handler or RetryHandler() + self.show_progress = show_progress + # Don't create ssl_context here - create it per download for thread safety + self._total_downloaded = 0 + self._total_skipped = 0 + self._total_failed = 0 + + def download_file( + self, + base_path: str, + file_name: str, + save_path: str, + show_full_path: bool = False, + symbol: Optional[str] = None, + date_str: Optional[str] = None + ) -> bool: + """ + Download a file from Binance data server. + + Args: + base_path: Base path on server (relative to BASE_URL) + file_name: Name of the file + save_path: Local path to save the file + show_full_path: Whether to show full path in progress + symbol: Trading symbol (for logging) + date_str: Date string (for logging) + + Returns: + True if download succeeded, False otherwise + """ + # Check if file already exists + if os.path.exists(save_path): + self._total_skipped += 1 + # Build detailed info message + info_parts = [] + if symbol: + info_parts.append(f"Symbol: {symbol}") + if date_str: + info_parts.append(f"Date: {date_str}") + info_msg = " | ".join(info_parts) if info_parts else os.path.basename(save_path) + logger.info(f"[SKIP] File exists locally: {info_msg}") + return True + + # Ensure directory exists + os.makedirs(os.path.dirname(save_path), exist_ok=True) + + # Construct download URL + download_path = f"{base_path}{file_name}" + download_url = get_download_url(download_path) + + # Build detailed info message for logging + info_parts = [] + if symbol: + info_parts.append(f"Symbol: {symbol}") + if date_str: + info_parts.append(f"Date: {date_str}") + info_msg = " | ".join(info_parts) if info_parts else os.path.basename(save_path) + + logger.info(f"[DOWNLOAD] {info_msg}") + + # Create SSL context per download for thread safety + ssl_context = ssl.create_default_context(cafile=certifi.where()) + + # Download with retry + dl_file = self.retry_handler.download_with_retry(download_url, ssl_context) + if dl_file is None: + self._total_failed += 1 + logger.warning(f"[FAILED] {info_msg}") + return False + + # Get file size for progress tracking + length = dl_file.getheader('content-length') + if length: + length = int(length) + blocksize = max(4096, length // 100) + else: + blocksize = 4096 + + # Write file to disk + try: + with open(save_path, 'wb') as out_file: + dl_progress = 0 + + while True: + buf = dl_file.read(blocksize) + if not buf: + break + dl_progress += len(buf) + out_file.write(buf) + + if self.show_progress and length: + self._show_progress(dl_progress, length, file_name) + + size_str = self._format_size(dl_progress) if dl_progress else 'unknown' + logger.info(f"[OK] Download completed: {info_msg} | Size: {size_str}") + self._total_downloaded += 1 + return True + + except Exception as e: + self._total_failed += 1 + logger.error(f"[ERROR] Failed to write file: {info_msg} | Error: {e}") + # Clean up partial download + if os.path.exists(save_path): + os.remove(save_path) + return False + + def _show_progress(self, progress: int, total: int, filename: str = ""): + """Show simplified download progress.""" + percentage = int(100 * progress / total) + # Only print occasionally to reduce clutter + if percentage % 25 == 0 or percentage == 100: + sys.stdout.write(f"\r {filename} ... {percentage}%") + sys.stdout.flush() + if percentage == 100: + sys.stdout.write("\n") + sys.stdout.flush() + + def _format_size(self, bytes_size: int) -> str: + """Format bytes to human readable size.""" + for unit in ['B', 'KB', 'MB', 'GB']: + if bytes_size < 1024.0: + return f"{bytes_size:.1f}{unit}" + bytes_size /= 1024.0 + return f"{bytes_size:.1f}TB" + + def download_and_verify( + self, + base_path: str, + file_name: str, + save_path: str, + checksum_path: Optional[str] = None, + verifier=None + ) -> bool: + """ + Download a file and optionally verify its checksum. + + Args: + base_path: Base path on server + file_name: Name of the file + save_path: Local path to save the file + checksum_path: Path to checksum file (optional) + verifier: ChecksumVerifier instance (optional) + + Returns: + True if download and verification succeeded, False otherwise + """ + # Download the file + if not self.download_file(base_path, file_name, save_path): + return False + + # Verify checksum if provided + if checksum_path and verifier: + success, message = verifier.download_and_verify_checksum( + save_path, checksum_path + ) + if not success: + logger.warning(f"Checksum verification failed: {message}") + return False + + return True + + def file_exists(self, file_path: str) -> bool: + """Check if a file exists locally.""" + return os.path.exists(file_path) + + def get_file_size(self, file_path: str) -> Optional[int]: + """ + Get the size of a local file. + + Args: + file_path: Path to the file + + Returns: + File size in bytes, or None if file doesn't exist + """ + if os.path.exists(file_path): + return os.path.getsize(file_path) + return None + + +def get_all_symbols(market_type: str) -> list[str]: + """ + Fetch all trading symbols from Binance API for a given market type. + + Args: + market_type: Market type ('spot', 'um', 'cm', or 'option') + + Returns: + List of symbol strings + """ + urls = { + 'um': "https://fapi.binance.com/fapi/v1/exchangeInfo", + 'cm': "https://dapi.binance.com/dapi/v1/exchangeInfo", + 'spot': "https://api.binance.com/api/v3/exchangeInfo", + 'option': "https://eapi.binance.com/eapi/v1/exchangeInfo" + } + + if market_type not in urls: + logger.error(f"Unsupported market type for symbol fetching: {market_type}") + return [] + + try: + import json + response = urllib.request.urlopen(urls[market_type], timeout=10).read() + data = json.loads(response) + + # Option market now uses BVOLIndex data (Bitcoin and Ethereum Volatility Index) + if market_type == 'option': + # Return fixed BVOLIndex symbols + return ['BTCBVOLUSDT', 'ETHBVOLUSDT'] + else: + return [symbol['symbol'] for symbol in data['symbols']] + except Exception as e: + logger.error(f"Failed to fetch symbols for {market_type}: {e}") + return [] + + +# Default file downloader instance +default_downloader = FileDownloader() diff --git a/src/binance_data_downloader/utils/logger_setup.py b/src/binance_data_downloader/utils/logger_setup.py new file mode 100644 index 0000000..b8b6ce5 --- /dev/null +++ b/src/binance_data_downloader/utils/logger_setup.py @@ -0,0 +1,166 @@ +""" +Logger Setup + +This module provides logging configuration for the downloader framework. +""" + +import logging +import os +import sys +from pathlib import Path +from typing import Optional + +# Default log format +DEFAULT_LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + +# Default log directory +DEFAULT_LOG_DIR = "logs" + +# Default log file +DEFAULT_LOG_FILE = "download.log" + + +def setup_logger( + name: str = "binance_data_downloader", + level: int = logging.INFO, + log_file: Optional[str] = None, + log_format: Optional[str] = None, + console: bool = True +) -> logging.Logger: + """ + Set up a logger with file and console handlers. + + Args: + name: Logger name + level: Logging level (default: INFO) + log_file: Path to log file (default: logs/download.log) + log_format: Log message format + console: Whether to add console handler + + Returns: + Configured logger instance + """ + logger = logging.getLogger(name) + logger.setLevel(level) + + # Remove existing handlers to avoid duplicates + logger.handlers.clear() + + # Set format + if log_format is None: + log_format = DEFAULT_LOG_FORMAT + formatter = logging.Formatter(log_format) + + # Add console handler + if console: + console_handler = logging.StreamHandler(sys.stdout) + console_handler.setLevel(level) + console_handler.setFormatter(formatter) + logger.addHandler(console_handler) + + # Add file handler + if log_file: + # Create directory if it doesn't exist + log_path = Path(log_file) + log_path.parent.mkdir(parents=True, exist_ok=True) + + file_handler = logging.FileHandler(log_file) + file_handler.setLevel(level) + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + + return logger + + +def get_default_log_file() -> str: + """Get the default log file path.""" + log_dir = os.environ.get('LOG_DIR', DEFAULT_LOG_DIR) + return os.path.join(log_dir, DEFAULT_LOG_FILE) + + +def get_logger(name: Optional[str] = None) -> logging.Logger: + """ + Get an existing logger or create a new one with defaults. + + Args: + name: Logger name (defaults to 'binance_data_downloader') + + Returns: + Logger instance + """ + if name is None: + name = "binance_data_downloader" + + logger = logging.getLogger(name) + + # If logger doesn't have handlers, set up with defaults + if not logger.handlers: + log_file = get_default_log_file() + setup_logger(name, log_file=log_file) + + return logger + + +def set_log_level(level: int, name: Optional[str] = None): + """ + Change the log level for a logger. + + Args: + level: New logging level + name: Logger name (defaults to 'binance_data_downloader') + """ + logger = logging.getLogger(name if name else "binance_data_downloader") + logger.setLevel(level) + for handler in logger.handlers: + handler.setLevel(level) + + +def log_level_from_string(level_str: str) -> int: + """ + Convert a log level string to logging constant. + + Args: + level_str: Log level string (e.g., 'DEBUG', 'INFO', 'WARNING') + + Returns: + Logging level constant + """ + level_map = { + 'DEBUG': logging.DEBUG, + 'INFO': logging.INFO, + 'WARNING': logging.WARNING, + 'ERROR': logging.ERROR, + 'CRITICAL': logging.CRITICAL + } + return level_map.get(level_str.upper(), logging.INFO) + + +class LogContext: + """ + Context manager for temporary log configuration changes. + """ + + def __init__(self, logger: logging.Logger, level: Optional[int] = None): + """ + Initialize the log context. + + Args: + logger: Logger to modify + level: Temporary log level + """ + self.logger = logger + self.new_level = level + self.old_level = None + + def __enter__(self): + """Enter the context and apply changes.""" + if self.new_level is not None: + self.old_level = self.logger.level + self.logger.setLevel(self.new_level) + return self.logger + + def __exit__(self, exc_type, exc_val, exc_tb): + """Exit the context and restore previous state.""" + if self.old_level is not None: + self.logger.setLevel(self.old_level) + return False diff --git a/src/binance_data_downloader/utils/path_builder.py b/src/binance_data_downloader/utils/path_builder.py new file mode 100644 index 0000000..f81d35f --- /dev/null +++ b/src/binance_data_downloader/utils/path_builder.py @@ -0,0 +1,280 @@ +""" +Path Builder + +This module provides utilities for building URLs and file paths +for Binance public data downloads. +""" + +import os +from typing import Optional + + +# Base URL for Binance public data +BASE_URL = "https://data.binance.vision/" + + +def get_download_url(file_path: str) -> str: + """ + Construct the full download URL for a file. + + Args: + file_path: Relative path from BASE_URL + + Returns: + Full URL to download the file + """ + return f"{BASE_URL}{file_path}" + + +def get_data_path( + trading_type: str, + data_type: str, + time_period: str, + symbol: str, + interval: Optional[str] = None +) -> str: + """ + Build the relative path for a data file. + + Args: + trading_type: Market type ('spot', 'um', 'cm', or 'option') + data_type: Type of data ('klines', 'trades', 'aggTrades', etc.) + time_period: Time period ('monthly' or 'daily') + symbol: Trading symbol (e.g., 'BTCUSDT') + interval: Kline interval (e.g., '1h', '1d'), only for data types that support intervals + + Returns: + Relative path from BASE_URL + """ + # Build base path + if trading_type == 'option': + # BVOLIndex data path + base_path = f"data/option/{time_period}/BVOLIndex" + elif trading_type == 'spot': + base_path = f"data/spot/{time_period}/{data_type}" + else: + # um and cm futures + base_path = f"data/futures/{trading_type}/{time_period}/{data_type}" + + # Add symbol + path = f"{base_path}/{symbol.upper()}" + + # Add interval if provided + if interval is not None: + path = f"{path}/{interval}" + + # Add trailing slash + return f"{path}/" + + +def get_destination_dir( + file_path: str, + folder: Optional[str] = None +) -> str: + """ + Get the local destination directory for a file download. + + Args: + file_path: Relative path from download root (e.g., 'data/spot/daily/trades/') + folder: Custom output folder (overrides STORE_DIRECTORY env var) + + Returns: + Absolute local directory path + """ + # Determine base storage directory + store_directory = folder + if not store_directory: + store_directory = os.environ.get('STORE_DIRECTORY') + + if not store_directory: + # Default to project root directory + # Try to detect project root by looking for 'data/' directory + current_dir = os.getcwd() + current_dir = os.path.abspath(current_dir) + + # If we're in a subdirectory (like src/, python/, scripts/), go up to project root + # Project root is the directory containing data/ or python/, or scripts/ + if os.path.exists(os.path.join(current_dir, 'data')): + # Already at project root with data/ directory + project_root = current_dir + else: + # Go up to find project root + temp_dir = current_dir + project_root = current_dir + while temp_dir and not os.path.exists(os.path.join(temp_dir, 'data')): + parent = os.path.dirname(temp_dir) + if parent == temp_dir: # Reached root without finding data/ directory + project_root = current_dir + break + temp_dir = parent + + store_directory = project_root + + return os.path.join(store_directory, file_path) + + +def get_file_save_path( + trading_type: str, + data_type: str, + time_period: str, + symbol: str, + filename: str, + folder: Optional[str] = None, + date_range: Optional[str] = None, + interval: Optional[str] = None +) -> str: + """ + Build the complete local save path for a file. + + Args: + trading_type: Market type ('spot', 'um', 'cm', or 'option') + data_type: Type of data ('klines', 'trades', 'aggTrades', etc.) + time_period: Time period ('monthly' or 'daily') + symbol: Trading symbol + filename: Name of the file + folder: Custom output folder (should be the 'data' directory path) + date_range: Optional date range for subdirectory creation + interval: Kline interval (optional) + + Returns: + Absolute local file path + """ + # Build the base directory path + base_path = get_data_path(trading_type, data_type, time_period, symbol, interval) + + # Add custom folder if specified + if folder: + # Remove 'data/' prefix from base_path since folder is already the data directory + if base_path.startswith('data/'): + base_path = base_path[5:] # Remove 'data/' prefix + base_path = os.path.join(folder, base_path) + + # Add date range if specified + if date_range: + # Replace spaces with underscores for valid directory names + date_range_dir = date_range.replace(" ", "_") + base_path = os.path.join(base_path, date_range_dir) + + # Combine with filename + full_path = os.path.join(base_path, filename) + + # Get destination directory + # Only use get_destination_dir if folder is not specified + if not folder: + dest_dir = get_destination_dir(base_path) + else: + dest_dir = os.path.dirname(full_path) + + # Ensure directory exists + os.makedirs(dest_dir, exist_ok=True) + + return full_path + + +def get_checksum_filename(data_filename: str) -> str: + """ + Get the checksum filename for a data file. + + Args: + data_filename: Name of the data file (e.g., 'BTCUSDT-trades-2023-01.zip') + + Returns: + Checksum filename (e.g., 'BTCUSDT-trades-2023-01.zip.CHECKSUM') + """ + return f"{data_filename}.CHECKSUM" + + +def get_data_save_folder( + trading_type: str, + data_type: str, + time_period: str, + symbol: str, + folder: Optional[str] = None, + interval: Optional[str] = None +) -> str: + """ + Get the local save folder path for a data type and symbol. + + Args: + trading_type: Market type ('spot', 'um', 'cm', or 'option') + data_type: Type of data ('klines', 'trades', 'aggTrades', etc.) + time_period: Time period ('monthly' or 'daily') + symbol: Trading symbol + folder: Custom output folder (should be the 'data' directory path) + interval: Kline interval (optional) + + Returns: + Absolute local folder path + """ + # Build the base directory path + base_path = get_data_path(trading_type, data_type, time_period, symbol, interval) + + # Add custom folder if specified + if folder: + # Remove 'data/' prefix from base_path since folder is already the data directory + if base_path.startswith('data/'): + base_path = base_path[5:] # Remove 'data/' prefix + base_path = os.path.join(folder, base_path) + + # Get destination directory + if not folder: + dest_dir = get_destination_dir(base_path) + else: + dest_dir = base_path + + return dest_dir + + +def format_monthly_filename( + symbol: str, + data_type: str, + year: str, + month: int, + interval: Optional[str] = None +) -> str: + """ + Format a monthly data filename. + + Args: + symbol: Trading symbol + data_type: Type of data + year: Year as string + month: Month (1-12) + interval: Kline interval (for data types that support intervals) + + Returns: + Formatted filename + """ + symbol_upper = symbol.upper() + month_str = f"{month:02d}" + + if interval: + return f"{symbol_upper}-{interval}-{year}-{month_str}.zip" + else: + return f"{symbol_upper}-{data_type}-{year}-{month_str}.zip" + + +def format_daily_filename( + symbol: str, + data_type: str, + date_str: str, + interval: Optional[str] = None +) -> str: + """ + Format a daily data filename. + + Args: + symbol: Trading symbol + data_type: Type of data + date_str: Date string in YYYY-MM-DD format + interval: Kline interval (for data types that support intervals) + + Returns: + Formatted filename + """ + symbol_upper = symbol.upper() + + if interval: + return f"{symbol_upper}-{interval}-{date_str}.zip" + else: + return f"{symbol_upper}-{data_type}-{date_str}.zip" diff --git a/src/binance_data_downloader/utils/progress_tracker.py b/src/binance_data_downloader/utils/progress_tracker.py new file mode 100644 index 0000000..ae82ce2 --- /dev/null +++ b/src/binance_data_downloader/utils/progress_tracker.py @@ -0,0 +1,244 @@ +""" +Progress Tracker + +This module provides download progress tracking and statistics. +""" + +import logging +import sys +import time +from dataclasses import dataclass, field +from typing import Optional + +logger = logging.getLogger(__name__) + + +@dataclass +class DownloadStats: + """Statistics for download operations.""" + total_files: int = 0 + successful_downloads: int = 0 + failed_downloads: int = 0 + skipped_files: int = 0 + start_time: float = field(default_factory=time.time) + end_time: Optional[float] = None + total_bytes: int = 0 + + @property + def duration(self) -> float: + """Get the total duration in seconds.""" + if self.end_time: + return self.end_time - self.start_time + return time.time() - self.start_time + + @property + def success_rate(self) -> float: + """Get the success rate as a percentage.""" + if self.total_files == 0: + return 0.0 + return (self.successful_downloads / self.total_files) * 100 + + def add_success(self, bytes_downloaded: int = 0): + """Record a successful download.""" + self.successful_downloads += 1 + self.total_bytes += bytes_downloaded + + def add_failure(self): + """Record a failed download.""" + self.failed_downloads += 1 + + def add_skip(self): + """Record a skipped file (already exists).""" + self.skipped_files += 1 + + def finish(self): + """Mark the download session as finished.""" + self.end_time = time.time() + + +class ProgressTracker: + """ + Tracks and displays download progress. + + Provides both console progress bars and detailed statistics. + """ + + def __init__( + self, + total_items: int, + show_bar: bool = True, + show_statistics: bool = True, + update_interval: int = 5 + ): + """ + Initialize the progress tracker. + + Args: + total_items: Total number of items to process + show_bar: Whether to show progress bar + show_statistics: Whether to show detailed statistics + update_interval: Update interval for statistics (in items) + """ + self.total_items = total_items + self.current_item = 0 + self.show_bar = show_bar + self.show_statistics = show_statistics + self.update_interval = update_interval + self.stats = DownloadStats(total_files=total_items) + self.last_update = 0 + + def update(self, symbol: str, success: bool, skipped: bool = False): + """ + Update progress after processing an item. + + Args: + symbol: Symbol being processed + success: Whether the operation succeeded + skipped: Whether the file was skipped (already exists) + """ + self.current_item += 1 + + if skipped: + self.stats.add_skip() + elif success: + self.stats.add_success() + else: + self.stats.add_failure() + + # Show progress bar + if self.show_bar: + self._show_progress_bar(symbol) + + # Show periodic statistics + if self.show_statistics and self.current_item - self.last_update >= self.update_interval: + self._show_statistics() + self.last_update = self.current_item + + def _show_progress_bar(self, symbol: str): + """Show console progress bar.""" + percentage = (self.current_item / self.total_items) * 100 + bar_length = 50 + # Cap filled at bar_length to prevent overflow + filled = min(int(bar_length * self.current_item / self.total_items), bar_length) + bar = '#' * filled + '.' * (bar_length - filled) + + print( + f"\r[{bar}] {self.current_item}/{self.total_items} " + f"({percentage:.1f}%) - {symbol}", + end='', + flush=True + ) + + # New line when complete + if self.current_item >= self.total_items: + print() + + def _show_statistics(self): + """Show current download statistics.""" + logger.info( + f"Progress: {self.current_item}/{self.total_items} | " + f"Success: {self.stats.successful_downloads} | " + f"Failed: {self.stats.failed_downloads} | " + f"Skipped: {self.stats.skipped_files}" + ) + + def finish(self, show_summary: bool = True): + """ + Mark progress as complete and show final statistics. + + Args: + show_summary: Whether to show final summary + """ + self.stats.finish() + + if self.show_statistics and show_summary: + self._show_final_summary() + + def _show_final_summary(self): + """Show final download summary.""" + print("\n" + "=" * 60) + print("Download Summary") + print("=" * 60) + print(f"Total files: {self.stats.total_files}") + print(f"Successful: {self.stats.successful_downloads}") + print(f"Failed: {self.stats.failed_downloads}") + print(f"Skipped: {self.stats.skipped_files}") + print(f"Success rate: {self.stats.success_rate:.1f}%") + print(f"Duration: {self.stats.duration:.2f} seconds") + if self.stats.total_bytes > 0: + mb_downloaded = self.stats.total_bytes / (1024 * 1024) + print(f"Data downloaded: {mb_downloaded:.2f} MB") + print("=" * 60) + + +class MultiProgressTracker: + """ + Tracks progress across multiple download sessions. + + Useful for aggregating statistics when downloading multiple data types. + """ + + def __init__(self, show_summary: bool = True): + """ + Initialize the multi-session tracker. + + Args: + show_summary: Whether to show summary after each session + """ + self.sessions: list[DownloadStats] = [] + self.show_summary = show_summary + + def new_session(self, total_items: int) -> ProgressTracker: + """ + Start a new tracking session. + + Args: + total_items: Total items in this session + + Returns: + ProgressTracker for the new session + """ + tracker = ProgressTracker( + total_items=total_items, + show_statistics=self.show_summary + ) + return tracker + + def add_session_stats(self, stats: DownloadStats): + """Add completed session statistics.""" + self.sessions.append(stats) + + def show_aggregate_summary(self): + """Show aggregated statistics across all sessions.""" + if not self.sessions: + return + + total = DownloadStats() + for session in self.sessions: + total.total_files += session.total_files + total.successful_downloads += session.successful_downloads + total.failed_downloads += session.failed_downloads + total.skipped_files += session.skipped_files + total.total_bytes += session.total_bytes + + # Use earliest start and latest end + if self.sessions: + total.start_time = min(s.start_time for s in self.sessions) + end_times = [s.end_time for s in self.sessions if s.end_time] + if end_times: + total.end_time = max(end_times) + + print("\n" + "=" * 60) + print("Aggregate Download Summary") + print("=" * 60) + print(f"Sessions: {len(self.sessions)}") + print(f"Total files: {total.total_files}") + print(f"Successful: {total.successful_downloads}") + print(f"Failed: {total.failed_downloads}") + print(f"Skipped: {total.skipped_files}") + print(f"Success rate: {total.success_rate:.1f}%") + print(f"Duration: {total.duration:.2f} seconds") + if total.total_bytes > 0: + mb_downloaded = total.total_bytes / (1024 * 1024) + print(f"Data downloaded: {mb_downloaded:.2f} MB") + print("=" * 60) diff --git a/src/binance_data_downloader/utils/symbol_dates.py b/src/binance_data_downloader/utils/symbol_dates.py new file mode 100644 index 0000000..8ac577f --- /dev/null +++ b/src/binance_data_downloader/utils/symbol_dates.py @@ -0,0 +1,411 @@ +""" +Symbol Start Date Manager + +This module provides utilities for managing symbol start date information +to avoid unnecessary download requests for non-existent data. +""" + +import json +import logging +import os +from datetime import datetime +from typing import Dict, List, Optional, Tuple + + +logger = logging.getLogger(__name__) + + +# Default path for symbol dates cache +DEFAULT_SYMBOL_DATES_PATH = "data/symbol_dates.json" +# Default fallback start date +DEFAULT_START_DATE = "2020-01-01" + + +class SymbolDateManager: + """ + Manages symbol start date information for efficient downloads. + + This class loads and caches symbol start date information from a JSON file, + allowing downloaders to skip requests for non-existent data. + """ + + def __init__(self, cache_file: str = None): + """ + Initialize the symbol date manager. + + Args: + cache_file: Path to the symbol dates JSON cache file. + If None, uses DEFAULT_SYMBOL_DATES_PATH. + """ + self.cache_file = cache_file or DEFAULT_SYMBOL_DATES_PATH + self._cache: Dict = {} + self._load_cache() + + def _load_cache(self): + """Load symbol dates from cache file.""" + if os.path.exists(self.cache_file): + try: + with open(self.cache_file, 'r', encoding='utf-8') as f: + self._cache = json.load(f) + logger.debug(f"Loaded symbol dates from {self.cache_file}") + except (json.JSONDecodeError, IOError) as e: + logger.warning(f"Failed to load symbol dates cache: {e}") + self._cache = {} + else: + logger.debug(f"Symbol dates cache not found at {self.cache_file}") + self._cache = {} + + def save_cache(self, path: str = None): + """ + Save current cache to file. + + Args: + path: Optional custom path to save to + """ + save_path = path or self.cache_file + os.makedirs(os.path.dirname(save_path) if os.path.dirname(save_path) else '.', exist_ok=True) + + with open(save_path, 'w', encoding='utf-8') as f: + json.dump(self._cache, f, indent=2, ensure_ascii=False) + logger.info(f"Saved symbol dates cache to {save_path}") + + def get_symbol_start_date( + self, + market: str, + data_type: str, + symbol: str, + interval: str = None + ) -> Optional[str]: + """ + Get the known start date for a symbol's data. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + interval: Kline interval (for data types that support intervals) + + Returns: + Start date as YYYY-MM-DD string, or None if not found + """ + if not self._cache: + return None + + market_data = self._cache.get(market, {}) + if not market_data: + return None + + data_type_data = market_data.get(data_type, {}) + if not data_type_data: + return None + + symbol_data = data_type_data.get(symbol, {}) + if not symbol_data: + return None + + # For data types with intervals + if interval: + return symbol_data.get(interval) + + # For data types without intervals, look for _default key + return symbol_data.get('_default') + + def get_symbols_start_date_after( + self, + market: str, + data_type: str, + symbols: List[str], + interval: str = None + ) -> Dict[str, str]: + """ + Get start dates for multiple symbols. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbols: List of trading symbols + interval: Kline interval (optional) + + Returns: + Dictionary mapping symbol -> start_date (only for symbols with known dates) + """ + result = {} + for symbol in symbols: + start_date = self.get_symbol_start_date(market, data_type, symbol, interval) + if start_date: + result[symbol] = start_date + return result + + def set_symbol_start_date( + self, + market: str, + data_type: str, + symbol: str, + start_date: str, + interval: str = None + ): + """ + Set or update the start date for a symbol's data. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + start_date: Start date as YYYY-MM-DD string + interval: Kline interval (optional) + """ + if market not in self._cache: + self._cache[market] = {} + if data_type not in self._cache[market]: + self._cache[market][data_type] = {} + if symbol not in self._cache[market][data_type]: + self._cache[market][data_type][symbol] = {} + + key = interval if interval else '_default' + self._cache[market][data_type][symbol][key] = start_date + + def get_all_symbols_for_market( + self, + market: str, + data_type: str = None + ) -> List[str]: + """ + Get all known symbols for a market. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Optional data type filter + + Returns: + List of symbol names + """ + if not self._cache or market not in self._cache: + return [] + + if data_type: + return list(self._cache[market].get(data_type, {}).keys()) + + # Get all unique symbols across all data types + symbols = set() + for dt_data in self._cache[market].values(): + symbols.update(dt_data.keys()) + return list(symbols) + + def get_latest_date_for_symbol( + self, + market: str, + data_type: str, + symbol: str, + interval: str = None + ) -> Optional[str]: + """ + Get the latest known date for a symbol's data. + Returns the current date if symbol has any data. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + interval: Kline interval (optional) + + Returns: + Latest date as YYYY-MM-DD string, or None if symbol not found + """ + # Check if symbol has any data at all + if self.get_symbol_start_date(market, data_type, symbol, interval): + return datetime.now().strftime("%Y-%m-%d") + return None + + def should_skip_date( + self, + market: str, + data_type: str, + symbol: str, + check_date: str, + interval: str = None + ) -> bool: + """ + Check if a date should be skipped because it's before the symbol's start date. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + check_date: Date to check as YYYY-MM-DD string + interval: Kline interval (optional) + + Returns: + True if the date is before the symbol's known start date + """ + start_date = self.get_symbol_start_date(market, data_type, symbol, interval) + if not start_date: + return False + + try: + return check_date < start_date + except (ValueError, TypeError): + return False + + def get_effective_start_date( + self, + market: str, + data_type: str, + symbol: str, + interval: str = None, + requested_start: str = None + ) -> str: + """ + Get the effective start date for downloading, taking into account + both the requested start date and the symbol's actual start date. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbol: Trading symbol + interval: Kline interval (optional) + requested_start: User-requested start date (YYYY-MM-DD) + + Returns: + Effective start date (later of requested or symbol start) + """ + symbol_start = self.get_symbol_start_date(market, data_type, symbol, interval) + if not symbol_start: + return requested_start or DEFAULT_START_DATE + + if not requested_start: + return symbol_start + + # Return the later date + try: + return max(symbol_start, requested_start) + except (ValueError, TypeError): + return requested_start + + def get_date_range_for_symbols( + self, + market: str, + data_type: str, + symbols: List[str], + interval: str = None + ) -> Tuple[Optional[str], Optional[str]]: + """ + Get the overall date range covering multiple symbols. + + Args: + market: Market type ('spot', 'um', 'cm') + data_type: Data type (e.g., 'klines', 'trades') + symbols: List of trading symbols + interval: Kline interval (optional) + + Returns: + Tuple of (earliest_start_date, latest_end_date) or (None, None) + """ + dates = [] + for symbol in symbols: + start = self.get_symbol_start_date(market, data_type, symbol, interval) + if start: + dates.append(start) + + if not dates: + return None, None + + return min(dates), datetime.now().strftime("%Y-%m-%d") + + def get_metadata(self) -> Dict: + """ + Get metadata from the cache. + + Returns: + Metadata dictionary or empty dict + """ + return self._cache.get('_metadata', {}) + + def is_cache_available(self) -> bool: + """ + Check if the cache has any useful data. + + Returns: + True if cache has symbol data + """ + if not self._cache: + return False + + # Check if any market has data + for key in self._cache.keys(): + if key != '_metadata' and isinstance(self._cache[key], dict): + return True + + return False + + +def get_symbol_date_manager(cache_file: str = None) -> SymbolDateManager: + """ + Get a singleton instance of the symbol date manager. + + Args: + cache_file: Optional custom cache file path + + Returns: + SymbolDateManager instance + """ + return SymbolDateManager(cache_file) + + +def parse_date_filter( + requested_start: str, + symbol_start: str, + default_start: str = DEFAULT_START_DATE +) -> str: + """ + Determine the actual start date to use for downloading. + + Args: + requested_start: User-requested start date (YYYY-MM-DD) or None + symbol_start: Symbol's known start date (YYYY-MM-DD) or None + default_start: Default start date if neither is specified + + Returns: + Effective start date as YYYY-MM-DD string + """ + if not requested_start and not symbol_start: + return default_start + + if not requested_start: + return symbol_start + + if not symbol_start: + return requested_start + + # Use the later date + try: + return max(requested_start, symbol_start) + except (ValueError, TypeError): + return requested_start + + +def split_symbols_by_known_dates( + symbols: List[str], + known_dates: Dict[str, str], + requested_start: str = None +) -> Tuple[List[str], Dict[str, str]]: + """ + Split symbols into those with and without known start dates. + + Args: + symbols: List of all symbols + known_dates: Dictionary of symbol -> start_date + requested_start: Optional requested start date to compare against + + Returns: + Tuple of (symbols_with_unknown_dates, symbols_with_adjusted_dates) + """ + unknown = [] + adjusted = {} + + for symbol in symbols: + if symbol not in known_dates: + unknown.append(symbol) + elif requested_start and known_dates[symbol] > requested_start: + adjusted[symbol] = known_dates[symbol] + + return unknown, adjusted diff --git a/test_option_api.py b/test_option_api.py new file mode 100644 index 0000000..ad48641 --- /dev/null +++ b/test_option_api.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +"""Test option API endpoint.""" + +import urllib.request +import json + +# Test the option API endpoint +print('Testing Option API endpoint...') +try: + response = urllib.request.urlopen('https://eapi.binance.com/eapi/v1/exchangeInfo', timeout=10).read() + data = json.loads(response) + + # Show symbol info + symbols_count = len(data.get("symbols", [])) + print('Symbols returned: ' + str(symbols_count)) + print('') + print('Available option symbols:') + for symbol in data.get("symbols", []): + print(' ' + symbol["symbol"]) + +except Exception as e: + print('Error: ' + str(e)) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..bf4a82d --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,48 @@ +""" +Pytest configuration and fixtures for Binance data downloader tests. +""" + +import os +import sys +import tempfile +import pytest + +# Add src to path for imports +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) + + +@pytest.fixture +def temp_dir(): + """Create a temporary directory for test files.""" + with tempfile.TemporaryDirectory() as tmpdir: + yield tmpdir + + +@pytest.fixture +def sample_symbols(): + """Sample trading symbols for testing.""" + return ['BTCUSDT', 'ETHUSDT', 'BNBUSDT'] + + +@pytest.fixture +def sample_intervals(): + """Sample kline intervals for testing.""" + return ['1m', '1h', '1d'] + + +@pytest.fixture +def sample_years(): + """Sample years for testing.""" + return ['2023', '2024'] + + +@pytest.fixture +def sample_months(): + """Sample months for testing.""" + return [1, 6, 12] + + +@pytest.fixture +def sample_dates(): + """Sample dates for testing.""" + return ['2023-01-01', '2023-01-15', '2023-12-31'] diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/integration/test_downloaders.py b/tests/integration/test_downloaders.py new file mode 100644 index 0000000..4ba9359 --- /dev/null +++ b/tests/integration/test_downloaders.py @@ -0,0 +1,134 @@ +""" +Integration tests for downloaders. + +These tests verify the downloaders can be instantiated and configured correctly. +Note: Actual download tests are mocked to avoid network calls. +""" + +import pytest +from unittest.mock import Mock, patch + +from binance_data_downloader.downloaders import ( + KlineDownloader, + TradeDownloader, + AggTradeDownloader, + FundingRateDownloader, +) + + +class TestKlineDownloader: + """Test KlineDownloader.""" + + def test_initialization_spot(self): + """Test initializing downloader for spot market.""" + downloader = KlineDownloader(trading_type='spot') + assert downloader.trading_type == 'spot' + assert downloader.data_type == 'klines' + + def test_initialization_um(self): + """Test initializing downloader for USD-M futures.""" + downloader = KlineDownloader(trading_type='um') + assert downloader.trading_type == 'um' + + def test_supports_intervals(self): + """Test that klines support intervals.""" + downloader = KlineDownloader(trading_type='spot') + assert downloader.supports_intervals() is True + + def test_format_monthly_filename(self): + """Test monthly filename formatting.""" + downloader = KlineDownloader(trading_type='spot') + filename = downloader.format_monthly_filename('btcusdt', '1h', '2023', 6) + assert filename == 'BTCUSDT-1h-2023-06.zip' + + def test_format_daily_filename(self): + """Test daily filename formatting.""" + downloader = KlineDownloader(trading_type='spot') + filename = downloader.format_daily_filename('btcusdt', '1h', '2023-06-15') + assert filename == 'BTCUSDT-1h-2023-06-15.zip' + + +class TestTradeDownloader: + """Test TradeDownloader.""" + + def test_initialization(self): + """Test initializing trade downloader.""" + downloader = TradeDownloader(trading_type='spot') + assert downloader.data_type == 'trades' + + def test_does_not_support_intervals(self): + """Test that trades don't support intervals.""" + downloader = TradeDownloader(trading_type='spot') + assert downloader.supports_intervals() is False + + def test_format_monthly_filename(self): + """Test monthly filename formatting.""" + downloader = TradeDownloader(trading_type='spot') + filename = downloader.format_monthly_filename('btcusdt', None, '2023', 6) + assert filename == 'BTCUSDT-trades-2023-06.zip' + + +class TestAggTradeDownloader: + """Test AggTradeDownloader.""" + + def test_initialization(self): + """Test initializing agg trade downloader.""" + downloader = AggTradeDownloader(trading_type='spot') + assert downloader.data_type == 'aggTrades' + + def test_format_monthly_filename(self): + """Test monthly filename formatting.""" + downloader = AggTradeDownloader(trading_type='spot') + filename = downloader.format_monthly_filename('ethusdt', None, '2024', 1) + assert filename == 'ETHUSDT-aggTrades-2024-01.zip' + + +class TestFundingRateDownloader: + """Test FundingRateDownloader.""" + + def test_initialization_um(self): + """Test initializing for USD-M futures.""" + downloader = FundingRateDownloader(trading_type='um') + assert downloader.data_type == 'fundingRate' + + def test_initialization_cm(self): + """Test initializing for COIN-M futures.""" + downloader = FundingRateDownloader(trading_type='cm') + assert downloader.data_type == 'fundingRate' + + def test_spot_not_supported(self): + """Test that funding rate is not available for spot.""" + with pytest.raises(ValueError, match="not supported"): + FundingRateDownloader(trading_type='spot') + + def test_format_monthly_filename(self): + """Test monthly filename formatting.""" + downloader = FundingRateDownloader(trading_type='um') + filename = downloader.format_monthly_filename('btcusdt', None, '2023', 6) + assert filename == 'BTCUSDT-fundingRate-2023-06.zip' + + +class TestFetcherSymbols: + """Test symbol fetching from exchange.""" + + @patch('binance_data_downloader.utils.file_operations.urllib.request.urlopen') + def test_fetch_symbols_spot(self, mock_urlopen): + """Test fetching spot symbols.""" + # Mock API response + mock_response = Mock() + mock_response.read.return_value = b'{"symbols": [{"symbol": "BTCUSDT"}, {"symbol": "ETHUSDT"}]}' + mock_urlopen.return_value = mock_response + + symbols = KlineDownloader.fetch_symbols('spot') + assert 'BTCUSDT' in symbols + assert 'ETHUSDT' in symbols + + @patch('binance_data_downloader.utils.file_operations.urllib.request.urlopen') + def test_fetch_symbols_um(self, mock_urlopen): + """Test fetching USD-M futures symbols.""" + mock_response = Mock() + mock_response.read.return_value = b'{"symbols": [{"symbol": "BTCUSDT"}, {"symbol": "ETHUSDT"}]}' + mock_urlopen.return_value = mock_response + + symbols = KlineDownloader.fetch_symbols('um') + assert len(symbols) > 0 diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/test_data_type_config.py b/tests/unit/test_data_type_config.py new file mode 100644 index 0000000..db100d5 --- /dev/null +++ b/tests/unit/test_data_type_config.py @@ -0,0 +1,106 @@ +""" +Unit tests for data type configuration. +""" + +import pytest + +from binance_data_downloader.core.data_type_config import ( + DataType, + get_data_type_spec, + get_supported_data_types, + get_all_data_types, + is_interval_supported, + get_path_segment, +) + + +class TestDataType: + """Test DataType enum and related functions.""" + + def test_all_data_types_defined(self): + """Verify all expected data types are defined.""" + expected_types = { + 'klines', 'trades', 'aggTrades', + 'indexPriceKlines', 'markPriceKlines', 'premiumIndexKlines', + 'fundingRate', 'liquidationSnapshot', 'bookTicker', 'depth', 'option' + } + actual_types = {dt.value for dt in DataType} + assert actual_types == expected_types + + def test_get_data_type_spec(self): + """Test getting specifications for each data type.""" + for dt in DataType: + spec = get_data_type_spec(dt) + assert spec is not None + assert spec.data_type == dt + assert spec.path_segment + assert isinstance(spec.supports_spot, bool) + assert isinstance(spec.supports_um, bool) + assert isinstance(spec.supports_cm, bool) + + def test_klines_spec(self): + """Test klines data type specification.""" + spec = get_data_type_spec(DataType.KLINES) + assert spec.path_segment == "klines" + assert spec.supports_spot is True + assert spec.supports_um is True + assert spec.supports_cm is True + assert spec.supports_intervals is True + assert spec.supports_monthly is True + assert spec.supports_daily is True + + def test_trades_spec(self): + """Test trades data type specification.""" + spec = get_data_type_spec(DataType.TRADES) + assert spec.path_segment == "trades" + assert spec.supports_intervals is False + + def test_premium_index_spec(self): + """Test premium index klines specification.""" + spec = get_data_type_spec(DataType.PREMIUM_INDEX_KLINES) + assert spec.supports_spot is False + assert spec.supports_um is True + assert spec.supports_cm is False + + def test_get_supported_data_types_spot(self): + """Test getting supported data types for spot market.""" + types = get_supported_data_types('spot') + assert DataType.KLINES in types + assert DataType.TRADES in types + assert DataType.AGG_TRADES in types + assert DataType.FUNDING_RATE not in types + + def test_get_supported_data_types_um(self): + """Test getting supported data types for USD-M futures.""" + types = get_supported_data_types('um') + assert DataType.KLINES in types + assert DataType.FUNDING_RATE in types + assert DataType.PREMIUM_INDEX_KLINES in types + assert DataType.LIQUIDATION_SNAPSHOT not in types + + def test_get_supported_data_types_cm(self): + """Test getting supported data types for COIN-M futures.""" + types = get_supported_data_types('cm') + assert DataType.KLINES in types + assert DataType.FUNDING_RATE in types + assert DataType.LIQUIDATION_SNAPSHOT in types + assert DataType.PREMIUM_INDEX_KLINES not in types + + def test_get_all_data_types(self): + """Test getting all data types.""" + types = get_all_data_types() + assert len(types) == 11 + assert DataType.KLINES in types + assert DataType.OPTION in types + + def test_is_interval_supported(self): + """Test interval support checking.""" + assert is_interval_supported(DataType.KLINES) is True + assert is_interval_supported(DataType.TRADES) is False + assert is_interval_supported(DataType.FUNDING_RATE) is False + + def test_get_path_segment(self): + """Test getting path segments.""" + assert get_path_segment(DataType.KLINES) == "klines" + assert get_path_segment(DataType.TRADES) == "trades" + assert get_path_segment(DataType.FUNDING_RATE) == "fundingRate" diff --git a/tests/unit/test_date_utils.py b/tests/unit/test_date_utils.py new file mode 100644 index 0000000..18e73b7 --- /dev/null +++ b/tests/unit/test_date_utils.py @@ -0,0 +1,105 @@ +""" +Unit tests for date utilities. +""" + +import pytest +from datetime import date + +from binance_data_downloader.utils.date_utils import ( + convert_to_date_object, + get_start_end_date_objects, + get_default_start_date, + get_default_end_date, + generate_date_range, + is_date_in_range, + validate_date_format, + parse_year_month, +) + + +class TestDateUtils: + """Test date utility functions.""" + + def test_convert_to_date_object(self): + """Test converting string to date object.""" + result = convert_to_date_object('2023-06-15') + assert result == date(2023, 6, 15) + assert isinstance(result, date) + + def test_convert_invalid_date(self): + """Test converting invalid date string.""" + with pytest.raises(ValueError): + convert_to_date_object('invalid-date') + + def test_get_start_end_date_objects(self): + """Test parsing date range string.""" + start, end = get_start_end_date_objects('2023-01-01 2023-12-31') + assert start == date(2023, 1, 1) + assert end == date(2023, 12, 31) + + def test_get_default_start_date(self): + """Test getting default start date.""" + start = get_default_start_date() + assert start.year == 2017 # First year in YEARS list + assert start.month == 1 + assert start.day == 1 + + def test_get_default_end_date(self): + """Test getting default end date.""" + end = get_default_end_date() + assert end <= date.today() + + def test_generate_date_range(self): + """Test generating date range.""" + dates = generate_date_range( + start_date=date(2023, 1, 1), + end_date=date(2023, 1, 5) + ) + assert len(dates) == 5 + assert dates[0] == '2023-01-01' + assert dates[-1] == '2023-01-05' + + def test_is_date_in_range_within(self): + """Test date within range.""" + assert is_date_in_range( + '2023-06-15', + date(2023, 1, 1), + date(2023, 12, 31) + ) is True + + def test_is_date_in_range_before(self): + """Test date before range.""" + assert is_date_in_range( + '2022-12-31', + date(2023, 1, 1), + date(2023, 12, 31) + ) is False + + def test_is_date_in_range_after(self): + """Test date after range.""" + assert is_date_in_range( + '2024-01-01', + date(2023, 1, 1), + date(2023, 12, 31) + ) is False + + def test_is_date_in_range_no_bounds(self): + """Test date with no bounds (None).""" + assert is_date_in_range('2023-06-15', None, None) is True + assert is_date_in_range('2023-06-15', date(2023, 1, 1), None) is True + assert is_date_in_range('2023-06-15', None, date(2023, 12, 31)) is True + + def test_validate_date_format_valid(self): + """Test valid date format.""" + assert validate_date_format('2023-06-15') is True + + def test_validate_date_format_invalid(self): + """Test invalid date formats.""" + assert validate_date_format('2023/06/15') is False + assert validate_date_format('15-06-2023') is False + assert validate_date_format('invalid') is False + + def test_parse_year_month(self): + """Test parsing year and month.""" + result = parse_year_month('2023', 6) + assert result == date(2023, 6, 1)