cob integration (wip)
This commit is contained in:
201
test_enhanced_cob_integration.py
Normal file
201
test_enhanced_cob_integration.py
Normal file
@ -0,0 +1,201 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test Enhanced COB Integration with RL and CNN Models
|
||||
|
||||
This script tests the integration of Consolidated Order Book (COB) data
|
||||
with the real-time RL and CNN training pipeline.
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import numpy as np
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
# Add project root to path
|
||||
project_root = Path(__file__).parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
from core.config import setup_logging
|
||||
from core.data_provider import DataProvider
|
||||
from core.enhanced_orchestrator import EnhancedTradingOrchestrator
|
||||
from core.cob_integration import COBIntegration
|
||||
|
||||
# Setup logging
|
||||
setup_logging()
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class COBMLIntegrationTester:
|
||||
"""Test COB integration with ML models"""
|
||||
|
||||
def __init__(self):
|
||||
self.symbols = ['BTC/USDT', 'ETH/USDT']
|
||||
self.data_provider = DataProvider()
|
||||
self.test_results = {}
|
||||
|
||||
async def test_cob_ml_integration(self):
|
||||
"""Test full COB integration with ML pipeline"""
|
||||
logger.info("=" * 60)
|
||||
logger.info("TESTING COB INTEGRATION WITH RL AND CNN MODELS")
|
||||
logger.info("=" * 60)
|
||||
|
||||
try:
|
||||
# Initialize enhanced orchestrator with COB integration
|
||||
logger.info("1. Initializing Enhanced Trading Orchestrator with COB...")
|
||||
orchestrator = EnhancedTradingOrchestrator(
|
||||
data_provider=self.data_provider,
|
||||
symbols=self.symbols,
|
||||
enhanced_rl_training=True,
|
||||
model_registry={}
|
||||
)
|
||||
|
||||
# Start COB integration
|
||||
logger.info("2. Starting COB Integration...")
|
||||
await orchestrator.start_cob_integration()
|
||||
await asyncio.sleep(5) # Allow startup and data collection
|
||||
|
||||
# Test COB feature generation
|
||||
logger.info("3. Testing COB feature generation...")
|
||||
await self._test_cob_features(orchestrator)
|
||||
|
||||
# Test market state with COB data
|
||||
logger.info("4. Testing market state with COB data...")
|
||||
await self._test_market_state_cob(orchestrator)
|
||||
|
||||
# Test real-time COB callbacks
|
||||
logger.info("5. Testing real-time COB callbacks...")
|
||||
await self._test_realtime_callbacks(orchestrator)
|
||||
|
||||
# Stop COB integration
|
||||
await orchestrator.stop_cob_integration()
|
||||
|
||||
# Print results
|
||||
self._print_test_results()
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error in COB ML integration test: {e}")
|
||||
import traceback
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
async def _test_cob_features(self, orchestrator):
|
||||
"""Test COB feature availability"""
|
||||
try:
|
||||
for symbol in self.symbols:
|
||||
# Check if COB features are available
|
||||
cob_features = orchestrator.latest_cob_features.get(symbol)
|
||||
cob_state = orchestrator.latest_cob_state.get(symbol)
|
||||
|
||||
if cob_features is not None:
|
||||
logger.info(f"✅ {symbol}: COB CNN features available - shape: {cob_features.shape}")
|
||||
self.test_results[f'{symbol}_cob_cnn_features'] = True
|
||||
else:
|
||||
logger.warning(f"⚠️ {symbol}: COB CNN features not available")
|
||||
self.test_results[f'{symbol}_cob_cnn_features'] = False
|
||||
|
||||
if cob_state is not None:
|
||||
logger.info(f"✅ {symbol}: COB DQN state available - shape: {cob_state.shape}")
|
||||
self.test_results[f'{symbol}_cob_dqn_state'] = True
|
||||
else:
|
||||
logger.warning(f"⚠️ {symbol}: COB DQN state not available")
|
||||
self.test_results[f'{symbol}_cob_dqn_state'] = False
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error testing COB features: {e}")
|
||||
|
||||
async def _test_market_state_cob(self, orchestrator):
|
||||
"""Test market state includes COB data"""
|
||||
try:
|
||||
# Generate market states with COB data
|
||||
from core.universal_data_adapter import UniversalDataAdapter
|
||||
adapter = UniversalDataAdapter(self.data_provider)
|
||||
universal_stream = await adapter.get_universal_stream(['BTC/USDT', 'ETH/USDT'])
|
||||
|
||||
market_states = await orchestrator._get_all_market_states_universal(universal_stream)
|
||||
|
||||
for symbol in self.symbols:
|
||||
if symbol in market_states:
|
||||
state = market_states[symbol]
|
||||
|
||||
# Check COB integration in market state
|
||||
tests = [
|
||||
('cob_features', state.cob_features is not None),
|
||||
('cob_state', state.cob_state is not None),
|
||||
('order_book_imbalance', hasattr(state, 'order_book_imbalance')),
|
||||
('liquidity_depth', hasattr(state, 'liquidity_depth')),
|
||||
('exchange_diversity', hasattr(state, 'exchange_diversity')),
|
||||
('market_impact_estimate', hasattr(state, 'market_impact_estimate'))
|
||||
]
|
||||
|
||||
for test_name, passed in tests:
|
||||
status = "✅" if passed else "❌"
|
||||
logger.info(f"{status} {symbol}: {test_name} - {passed}")
|
||||
self.test_results[f'{symbol}_market_state_{test_name}'] = passed
|
||||
|
||||
# Log COB metrics if available
|
||||
if hasattr(state, 'order_book_imbalance'):
|
||||
logger.info(f"📊 {symbol} COB Metrics:")
|
||||
logger.info(f" Order Book Imbalance: {state.order_book_imbalance:.4f}")
|
||||
logger.info(f" Liquidity Depth: ${state.liquidity_depth:,.0f}")
|
||||
logger.info(f" Exchange Diversity: {state.exchange_diversity}")
|
||||
logger.info(f" Market Impact (10k): {state.market_impact_estimate:.4f}%")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error testing market state COB: {e}")
|
||||
|
||||
async def _test_realtime_callbacks(self, orchestrator):
|
||||
"""Test real-time COB callbacks"""
|
||||
try:
|
||||
# Monitor COB callbacks for 10 seconds
|
||||
initial_features = {s: len(orchestrator.cob_feature_history[s]) for s in self.symbols}
|
||||
|
||||
logger.info("Monitoring COB callbacks for 10 seconds...")
|
||||
await asyncio.sleep(10)
|
||||
|
||||
final_features = {s: len(orchestrator.cob_feature_history[s]) for s in self.symbols}
|
||||
|
||||
for symbol in self.symbols:
|
||||
updates = final_features[symbol] - initial_features[symbol]
|
||||
if updates > 0:
|
||||
logger.info(f"✅ {symbol}: Received {updates} COB feature updates")
|
||||
self.test_results[f'{symbol}_realtime_callbacks'] = True
|
||||
else:
|
||||
logger.warning(f"⚠️ {symbol}: No COB feature updates received")
|
||||
self.test_results[f'{symbol}_realtime_callbacks'] = False
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error testing realtime callbacks: {e}")
|
||||
|
||||
def _print_test_results(self):
|
||||
"""Print comprehensive test results"""
|
||||
logger.info("=" * 60)
|
||||
logger.info("COB ML INTEGRATION TEST RESULTS")
|
||||
logger.info("=" * 60)
|
||||
|
||||
passed = sum(1 for result in self.test_results.values() if result)
|
||||
total = len(self.test_results)
|
||||
|
||||
logger.info(f"Overall: {passed}/{total} tests passed ({passed/total*100:.1f}%)")
|
||||
logger.info("")
|
||||
|
||||
for test_name, result in self.test_results.items():
|
||||
status = "✅ PASS" if result else "❌ FAIL"
|
||||
logger.info(f"{status}: {test_name}")
|
||||
|
||||
logger.info("=" * 60)
|
||||
|
||||
if passed == total:
|
||||
logger.info("🎉 ALL TESTS PASSED - COB ML INTEGRATION WORKING!")
|
||||
elif passed > total * 0.8:
|
||||
logger.info("⚠️ MOSTLY WORKING - Some minor issues detected")
|
||||
else:
|
||||
logger.warning("🚨 INTEGRATION ISSUES - Significant problems detected")
|
||||
|
||||
async def main():
|
||||
"""Run COB ML integration tests"""
|
||||
tester = COBMLIntegrationTester()
|
||||
await tester.test_cob_ml_integration()
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
Reference in New Issue
Block a user