99 lines
3.8 KiB
Python
99 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import time
|
|
from web.clean_dashboard import CleanTradingDashboard
|
|
from core.data_provider import DataProvider
|
|
from core.orchestrator import TradingOrchestrator
|
|
from core.trading_executor import TradingExecutor
|
|
|
|
print('Testing signal preservation improvements...')
|
|
|
|
# Create dashboard instance
|
|
data_provider = DataProvider()
|
|
orchestrator = TradingOrchestrator(data_provider)
|
|
trading_executor = TradingExecutor()
|
|
|
|
dashboard = CleanTradingDashboard(
|
|
data_provider=data_provider,
|
|
orchestrator=orchestrator,
|
|
trading_executor=trading_executor
|
|
)
|
|
|
|
print(f'Initial recent_decisions count: {len(dashboard.recent_decisions)}')
|
|
|
|
# Add test signals similar to the user's example
|
|
test_signals = [
|
|
{'timestamp': '20:39:32', 'action': 'HOLD', 'confidence': 0.01, 'price': 2420.07},
|
|
{'timestamp': '20:39:02', 'action': 'HOLD', 'confidence': 0.01, 'price': 2416.89},
|
|
{'timestamp': '20:38:45', 'action': 'BUY', 'confidence': 0.65, 'price': 2415.23},
|
|
{'timestamp': '20:38:12', 'action': 'SELL', 'confidence': 0.72, 'price': 2413.45},
|
|
{'timestamp': '20:37:58', 'action': 'HOLD', 'confidence': 0.02, 'price': 2412.89}
|
|
]
|
|
|
|
# Add signals to dashboard
|
|
for signal_data in test_signals:
|
|
test_signal = {
|
|
'timestamp': signal_data['timestamp'],
|
|
'action': signal_data['action'],
|
|
'confidence': signal_data['confidence'],
|
|
'price': signal_data['price'],
|
|
'symbol': 'ETH/USDT',
|
|
'executed': False,
|
|
'blocked': True,
|
|
'manual': False,
|
|
'model': 'TEST'
|
|
}
|
|
dashboard._process_dashboard_signal(test_signal)
|
|
|
|
print(f'After adding {len(test_signals)} signals: {len(dashboard.recent_decisions)}')
|
|
|
|
# Test with larger batch to verify new limits
|
|
print('\nAdding 50 more signals to test preservation...')
|
|
for i in range(50):
|
|
test_signal = {
|
|
'timestamp': f'20:3{i//10}:{i%60:02d}',
|
|
'action': 'HOLD' if i % 3 == 0 else ('BUY' if i % 2 == 0 else 'SELL'),
|
|
'confidence': 0.01 + (i * 0.01),
|
|
'price': 2420.0 + i,
|
|
'symbol': 'ETH/USDT',
|
|
'executed': False,
|
|
'blocked': True,
|
|
'manual': False,
|
|
'model': 'BATCH_TEST'
|
|
}
|
|
dashboard._process_dashboard_signal(test_signal)
|
|
|
|
print(f'After adding 50 more signals: {len(dashboard.recent_decisions)}')
|
|
|
|
# Display recent signals
|
|
print('\nRecent signals (last 10):')
|
|
for signal in dashboard.recent_decisions[-10:]:
|
|
timestamp = dashboard._get_signal_attribute(signal, 'timestamp', 'Unknown')
|
|
action = dashboard._get_signal_attribute(signal, 'action', 'UNKNOWN')
|
|
confidence = dashboard._get_signal_attribute(signal, 'confidence', 0)
|
|
price = dashboard._get_signal_attribute(signal, 'price', 0)
|
|
print(f' {timestamp} {action}({confidence*100:.1f}%) ${price:.2f}')
|
|
|
|
# Test cleanup behavior with tick cache
|
|
print('\nTesting tick cache cleanup behavior...')
|
|
dashboard.tick_cache = [
|
|
{'datetime': time.time() - 3600, 'symbol': 'ETHUSDT', 'price': 2400.0}, # 1 hour ago
|
|
{'datetime': time.time() - 1800, 'symbol': 'ETHUSDT', 'price': 2410.0}, # 30 min ago
|
|
{'datetime': time.time() - 900, 'symbol': 'ETHUSDT', 'price': 2420.0}, # 15 min ago
|
|
]
|
|
|
|
# This should NOT clear signals aggressively anymore
|
|
signals_before = len(dashboard.recent_decisions)
|
|
dashboard._clear_old_signals_for_tick_range()
|
|
signals_after = len(dashboard.recent_decisions)
|
|
|
|
print(f'Signals before cleanup: {signals_before}')
|
|
print(f'Signals after cleanup: {signals_after}')
|
|
print(f'Signals preserved: {signals_after}/{signals_before} ({(signals_after/signals_before)*100:.1f}%)')
|
|
|
|
print('\n✅ Signal preservation test completed!')
|
|
print('Changes made:')
|
|
print('- Increased recent_decisions limit from 20/50 to 200')
|
|
print('- Made tick cache cleanup much more conservative')
|
|
print('- Only clears when >500 signals and removes >20% of old data')
|
|
print('- Extended time range for signal preservation') |