218 lines
6.0 KiB
Markdown
218 lines
6.0 KiB
Markdown
# Scalping Dashboard Dynamic Throttling Implementation
|
|
|
|
## Issues Fixed
|
|
|
|
### 1. Critical Dash Callback Error
|
|
**Problem**: `TypeError: unhashable type: 'list'` in Dash callback definition
|
|
**Solution**: Fixed callback structure by removing list brackets around outputs and inputs
|
|
|
|
**Before**:
|
|
```python
|
|
@self.app.callback(
|
|
[Output(...), Output(...)], # ❌ Lists cause unhashable type error
|
|
[Input(...)]
|
|
)
|
|
```
|
|
|
|
**After**:
|
|
```python
|
|
@self.app.callback(
|
|
Output(...), # ✅ Individual outputs
|
|
Output(...),
|
|
Input(...) # ✅ Individual input
|
|
)
|
|
```
|
|
|
|
### 2. Unicode Encoding Issues
|
|
**Problem**: Windows console (cp1252) couldn't encode Unicode characters like `✓`, `✅`, `❌`
|
|
**Solution**: Replaced all Unicode characters with ASCII-safe alternatives
|
|
|
|
**Changes**:
|
|
- `✓` → "OK"
|
|
- `✅` → "ACTIVE" / "OK"
|
|
- `❌` → "INACTIVE"
|
|
- Removed all emoji characters from logging
|
|
|
|
### 3. Missing Argument Parsing
|
|
**Problem**: `run_scalping_dashboard.py` didn't support command line arguments from launch.json
|
|
**Solution**: Added comprehensive argument parsing
|
|
|
|
**Added Arguments**:
|
|
- `--episodes` (default: 1000)
|
|
- `--max-position` (default: 0.1)
|
|
- `--leverage` (default: 500)
|
|
- `--port` (default: 8051)
|
|
- `--host` (default: '127.0.0.1')
|
|
- `--debug` (flag)
|
|
|
|
## Dynamic Throttling Implementation
|
|
|
|
### Core Features
|
|
|
|
#### 1. Adaptive Update Frequency
|
|
- **Range**: 500ms (fast) to 2000ms (slow)
|
|
- **Default**: 1000ms (1 second)
|
|
- **Automatic adjustment** based on performance
|
|
|
|
#### 2. Performance-Based Throttling Levels
|
|
- **Level 0**: No throttling (optimal performance)
|
|
- **Level 1-5**: Increasing throttle levels
|
|
- **Skip Factor**: Higher levels skip more updates
|
|
|
|
#### 3. Performance Monitoring
|
|
- **Tracks**: Callback execution duration
|
|
- **History**: Last 20 measurements for averaging
|
|
- **Thresholds**:
|
|
- Fast: < 0.5 seconds
|
|
- Slow: > 2.0 seconds
|
|
- Critical: > 5.0 seconds
|
|
|
|
### Dynamic Adjustment Logic
|
|
|
|
#### Performance Degradation Response
|
|
```python
|
|
if duration > 5.0 or error:
|
|
# Critical performance issue
|
|
throttle_level = min(5, throttle_level + 2)
|
|
update_frequency = min(2000, frequency * 1.5)
|
|
|
|
elif duration > 2.0:
|
|
# Slow performance
|
|
throttle_level = min(5, throttle_level + 1)
|
|
update_frequency = min(2000, frequency * 1.2)
|
|
```
|
|
|
|
#### Performance Improvement Response
|
|
```python
|
|
if duration < 0.5 and avg_duration < 0.5:
|
|
consecutive_fast_updates += 1
|
|
|
|
if consecutive_fast_updates >= 5:
|
|
throttle_level = max(0, throttle_level - 1)
|
|
if throttle_level <= 1:
|
|
update_frequency = max(500, frequency * 0.9)
|
|
```
|
|
|
|
### Throttling Mechanisms
|
|
|
|
#### 1. Time-Based Throttling
|
|
- Prevents updates if called too frequently
|
|
- Minimum 80% of expected interval between updates
|
|
|
|
#### 2. Skip-Based Throttling
|
|
- Skips updates based on throttle level
|
|
- Skip factor = throttle_level + 1
|
|
- Example: Level 3 = skip every 4th update
|
|
|
|
#### 3. State Caching
|
|
- Stores last known good state
|
|
- Returns cached state when throttled
|
|
- Prevents empty/error responses
|
|
|
|
### Client-Side Optimization
|
|
|
|
#### 1. Fallback State Management
|
|
```python
|
|
def _get_last_known_state(self):
|
|
if self.last_known_state is not None:
|
|
return self.last_known_state
|
|
return safe_default_state
|
|
```
|
|
|
|
#### 2. Performance Tracking
|
|
```python
|
|
def _track_callback_performance(self, duration, success=True):
|
|
# Track performance history
|
|
# Adjust throttling dynamically
|
|
# Log performance summaries
|
|
```
|
|
|
|
#### 3. Smart Update Logic
|
|
```python
|
|
def _should_update_now(self, n_intervals):
|
|
# Check time constraints
|
|
# Apply throttle level logic
|
|
# Return decision with reason
|
|
```
|
|
|
|
## Benefits
|
|
|
|
### 1. Automatic Load Balancing
|
|
- **Adapts** to system performance in real-time
|
|
- **Prevents** dashboard freezing under load
|
|
- **Optimizes** for best possible responsiveness
|
|
|
|
### 2. Graceful Degradation
|
|
- **Maintains** functionality during high load
|
|
- **Provides** cached data when fresh data unavailable
|
|
- **Recovers** automatically when performance improves
|
|
|
|
### 3. Performance Monitoring
|
|
- **Logs** detailed performance metrics
|
|
- **Tracks** trends over time
|
|
- **Alerts** on performance issues
|
|
|
|
### 4. User Experience
|
|
- **Consistent** dashboard responsiveness
|
|
- **No** blank screens or timeouts
|
|
- **Smooth** operation under varying loads
|
|
|
|
## Configuration
|
|
|
|
### Throttling Parameters
|
|
```python
|
|
update_frequency = 1000 # Start frequency (ms)
|
|
min_frequency = 2000 # Maximum throttling (ms)
|
|
max_frequency = 500 # Minimum throttling (ms)
|
|
throttle_level = 0 # Current throttle level (0-5)
|
|
```
|
|
|
|
### Performance Thresholds
|
|
```python
|
|
fast_threshold = 0.5 # Fast performance (seconds)
|
|
slow_threshold = 2.0 # Slow performance (seconds)
|
|
critical_threshold = 5.0 # Critical performance (seconds)
|
|
```
|
|
|
|
## Testing Results
|
|
|
|
### ✅ Fixed Issues
|
|
1. **Dashboard starts successfully** on port 8051
|
|
2. **No Unicode encoding errors** in Windows console
|
|
3. **Proper argument parsing** from launch.json
|
|
4. **Dash callback structure** works correctly
|
|
5. **Dynamic throttling** responds to load
|
|
|
|
### ✅ Performance Features
|
|
1. **Adaptive frequency** adjusts automatically
|
|
2. **Throttling levels** prevent overload
|
|
3. **State caching** provides fallback data
|
|
4. **Performance monitoring** tracks metrics
|
|
5. **Graceful recovery** when load decreases
|
|
|
|
## Usage
|
|
|
|
### Launch from VS Code
|
|
Use the launch configuration: "💹 Live Scalping Dashboard (500x Leverage)"
|
|
|
|
### Command Line
|
|
```bash
|
|
python run_scalping_dashboard.py --port 8051 --leverage 500
|
|
```
|
|
|
|
### Monitor Performance
|
|
Check logs for performance summaries:
|
|
```
|
|
PERFORMANCE SUMMARY: Avg: 1.2s, Throttle: 2, Frequency: 1200ms
|
|
```
|
|
|
|
## Conclusion
|
|
|
|
The scalping dashboard now has robust dynamic throttling that:
|
|
- **Automatically balances** performance vs responsiveness
|
|
- **Prevents system overload** through intelligent throttling
|
|
- **Maintains user experience** even under high load
|
|
- **Recovers gracefully** when conditions improve
|
|
- **Provides detailed monitoring** of system performance
|
|
|
|
The dashboard is now production-ready with enterprise-grade performance management. |