7.3 KiB
7.3 KiB
MEXC API Fee Synchronization Implementation
Overview
This implementation adds automatic synchronization of trading fees between the MEXC API and your local configuration files. The system will:
- Fetch current trading fees from MEXC API on startup
- Automatically update your
config.yaml
with the latest fees - Periodically sync fees to keep them current
- Maintain backup of configuration files
- Track sync history for auditing
Features
✅ Automatic Fee Retrieval
- Fetches maker/taker commission rates from MEXC account API
- Converts basis points to decimal percentages
- Handles API errors gracefully with fallback values
✅ Smart Configuration Updates
- Only updates config when fees actually change
- Creates timestamped backups before modifications
- Preserves all other configuration settings
- Adds metadata tracking when fees were last synced
✅ Integration with Trading System
- Automatically syncs on TradingExecutor startup
- Reloads configuration after fee updates
- Provides manual sync methods for testing
- Includes sync status in trading statistics
✅ Robust Error Handling
- Graceful fallback to hardcoded values if API fails
- Comprehensive logging of all sync operations
- Detailed error reporting and recovery
Implementation Details
New Files Added
core/config_sync.py
- Main synchronization logictest_fee_sync.py
- Test script for validationMEXC_FEE_SYNC_IMPLEMENTATION.md
- This documentation
Enhanced Files
NN/exchanges/mexc_interface.py
- Added fee retrieval methodscore/trading_executor.py
- Integrated sync functionality
Usage
Automatic Synchronization (Default)
When you start your trading system, fees will be automatically synced:
# This now includes automatic fee sync on startup
executor = TradingExecutor("config.yaml")
Manual Synchronization
# Force immediate sync
sync_result = executor.sync_fees_with_api(force=True)
# Check sync status
status = executor.get_fee_sync_status()
# Auto-sync if needed
executor.auto_sync_fees_if_needed()
Direct API Testing
# Test the fee sync functionality
python test_fee_sync.py
Configuration Changes
New Config Sections Added
trading:
trading_fees:
maker: 0.0000 # Auto-updated from MEXC API
taker: 0.0005 # Auto-updated from MEXC API
default: 0.0005 # Auto-updated from MEXC API
# New metadata section (auto-generated)
fee_sync_metadata:
last_sync: "2024-01-15T10:30:00"
api_source: "mexc"
sync_enabled: true
api_commission_rates:
maker: 0 # Raw basis points from API
taker: 50 # Raw basis points from API
Backup Files
The system creates timestamped backups:
config.yaml.backup_20240115_103000
- Keeps configuration history for safety
Sync History
Detailed sync history is maintained in:
logs/config_sync_history.json
- Contains last 100 sync operations
- Useful for debugging and auditing
API Methods Added
MEXCInterface New Methods
# Get account-level trading fees
fees = mexc.get_trading_fees()
# Returns: {'maker_rate': 0.0000, 'taker_rate': 0.0005, 'source': 'mexc_api'}
# Get symbol-specific fees (future enhancement)
fees = mexc.get_symbol_trading_fees("ETH/USDT")
ConfigSynchronizer Methods
# Manual fee sync
sync_result = config_sync.sync_trading_fees(force=True)
# Auto sync (respects timing intervals)
success = config_sync.auto_sync_fees()
# Get sync status and history
status = config_sync.get_sync_status()
# Enable/disable auto-sync
config_sync.enable_auto_sync(True)
TradingExecutor New Methods
# Sync fees through trading executor
result = executor.sync_fees_with_api(force=True)
# Check if auto-sync is needed
executor.auto_sync_fees_if_needed()
# Get comprehensive sync status
status = executor.get_fee_sync_status()
Error Handling
API Connection Failures
- Falls back to existing config values
- Logs warnings but doesn't stop trading
- Retries on next sync interval
Configuration File Issues
- Creates backups before any changes
- Validates config structure before saving
- Recovers from backup if save fails
Fee Validation
- Checks for reasonable fee ranges (0-1%)
- Logs warnings for unusual fee changes
- Requires significant change (>0.000001) to update
Sync Timing
Default Intervals
- Startup sync: Immediate on TradingExecutor initialization
- Auto-sync interval: Every 3600 seconds (1 hour)
- Manual sync: Available anytime
Configurable Settings
config_sync.sync_interval = 1800 # 30 minutes
config_sync.backup_enabled = True
Benefits
1. Always Current Fees
- No more outdated hardcoded fees
- Automatic updates when MEXC changes rates
- Accurate P&L calculations
2. Zero Maintenance
- Set up once, works automatically
- No manual config file editing needed
- Handles fee tier changes automatically
3. Audit Trail
- Complete history of all fee changes
- Timestamped sync records
- Easy troubleshooting and compliance
4. Safety First
- Configuration backups before changes
- Graceful error handling
- Can disable auto-sync if needed
Testing
Run Complete Test Suite
python test_fee_sync.py
Test Output Example
=== Testing MEXC Fee Retrieval ===
MEXC: Connection successful
MEXC: Fetching trading fees...
MEXC Trading Fees Retrieved:
Maker Rate: 0.000%
Taker Rate: 0.050%
Source: mexc_api
=== Testing Config Synchronization ===
CONFIG SYNC: Fetching trading fees from MEXC API
CONFIG SYNC: Updated taker fee: 0.0005 -> 0.0005
CONFIG SYNC: Successfully synced trading fees
=== Testing TradingExecutor Integration ===
TRADING EXECUTOR: Performing initial fee synchronization with MEXC API
TRADING EXECUTOR: Fee synchronization completed successfully
TEST SUMMARY:
MEXC API Fee Retrieval: PASS
Config Synchronization: PASS
TradingExecutor Integration: PASS
ALL TESTS PASSED! Fee synchronization is working correctly.
Next Steps
Immediate Use
- Run
python test_fee_sync.py
to verify setup - Start your trading system normally
- Check logs for successful fee sync messages
Optional Enhancements
- Add symbol-specific fee rates
- Implement webhook notifications for fee changes
- Add GUI controls for sync management
- Export sync history to CSV/Excel
Security Notes
- Uses existing MEXC API credentials from
.env
- Only reads account info (no trading permissions needed for fees)
- Configuration backups protect against data loss
- All sync operations are logged for audit
Troubleshooting
Common Issues
-
"No MEXC interface available"
- Check API credentials in
.env
file - Verify trading is enabled in config
- Check API credentials in
-
"API returned fallback values"
- MEXC API may be temporarily unavailable
- System continues with existing fees
-
"Failed to save updated config"
- Check file permissions on
config.yaml
- Ensure disk space is available
- Check file permissions on
Debug Logging
import logging
logging.getLogger('core.config_sync').setLevel(logging.DEBUG)
This implementation provides a robust, automatic solution for keeping your trading fees synchronized with MEXC's current rates, ensuring accurate trading calculations and eliminating manual configuration maintenance.