Skip to content

v3.5.0 - Multi-Instrument TradingSuite

Choose a tag to compare

@TexasCoding TexasCoding released this 30 Aug 16:30
· 57 commits to main since this release
df94949

🚀 ProjectX Python SDK v3.5.0 - Multi-Instrument TradingSuite

Major Feature Release: Multi-Instrument Trading Revolution

v3.5.0 introduces the most significant enhancement to ProjectX Python SDK since v3.0 - Multi-Instrument TradingSuite. This revolutionary feature enables traders and developers to manage multiple futures contracts simultaneously, opening up advanced trading strategies like pairs trading, cross-market arbitrage, and comprehensive portfolio management.


✨ What's New in v3.5.0

🎯 Multi-Instrument TradingSuite

  • Manage Multiple Instruments: Trade ES, NQ, MGC, and other futures simultaneously
  • Dictionary-Like Access: suite["MNQ"], suite.keys(), suite.values(), suite.items()
  • Parallel Processing: Efficient concurrent initialization of multiple instrument contexts
  • Event Isolation: Proper event separation between different instruments
  • Resource Management: Granular cleanup with fail-safe partial failure handling

🔄 Backward Compatibility

  • Zero Breaking Changes: All existing single-instrument code continues to work
  • Deprecation Warnings: Clear guidance for migrating to new patterns
  • Smooth Migration: Easy transition from single to multi-instrument setups

Performance Enhancements

  • Parallel Context Creation: Multiple instruments initialized concurrently
  • Shared Resources: Efficient connection pooling and authentication
  • Memory Optimization: Smart resource sharing where appropriate
  • Event Efficiency: Isolated event processing prevents cross-contamination

🎮 Quick Start Examples

Multi-Instrument Setup

import asyncio
from project_x_py import TradingSuite

async def main():
    # Multiple instruments for advanced strategies
    suite = await TradingSuite.create(
        instruments=["MNQ", "ES", "MGC"],  # E-mini NASDAQ, S&P 500, Gold
        timeframes=["1min", "5min"],
        enable_orderbook=True,
        enable_risk_management=True
    )

    print(f"Managing {len(suite)} instruments: {list(suite.keys())}")

    # Access specific instruments
    mnq_context = suite["MNQ"]
    es_context = suite["ES"]
    
    # Get current prices for all instruments
    for symbol, context in suite.items():
        current_price = await context.data.get_current_price()
        print(f"{symbol}: ${current_price:.2f}")

    await suite.disconnect()

asyncio.run(main())

Pairs Trading Strategy

# ES vs MNQ correlation analysis
es_data = await suite["ES"].data.get_data("5min", bars=100)
mnq_data = await suite["MNQ"].data.get_data("5min", bars=100)

# Analyze spread for pairs trading opportunities
es_price = es_data.select("close").to_series().to_list()[-1]
mnq_price = mnq_data.select("close").to_series().to_list()[-1]
spread = es_price * 50 - mnq_price * 20  # Contract value normalized

print(f"ES/MNQ Spread: ${spread:.2f}")

Portfolio Management

# Calculate total portfolio exposure across instruments
total_exposure = 0
for symbol, context in suite.items():
    positions = await context.positions.get_all_positions()
    for pos in positions:
        exposure = abs(pos.size * pos.averagePrice)
        total_exposure += exposure
        print(f"{symbol} Exposure: ${exposure:,.2f}")

print(f"Total Portfolio Exposure: ${total_exposure:,.2f}")

🔄 Migration Guide

From v3.4.x to v3.5.0

Old (Single Instrument):

# v3.4.x - Single instrument only
suite = await TradingSuite.create("MNQ")
data = await suite.data.get_data("5min")  # Direct access

New (Multi-Instrument with Backward Compatibility):

# v3.5.0 - Still works but shows deprecation warnings
suite = await TradingSuite.create("MNQ")  # Single instrument (legacy)
data = await suite.data.get_data("5min")    # Direct access (deprecated)

# v3.5.0 - Recommended multi-instrument syntax
suite = await TradingSuite.create(["MNQ"])  # List notation
data = await suite["MNQ"].data.get_data("5min")  # Explicit access

Recommended (Multiple Instruments):

# v3.5.0 - Full multi-instrument power
suite = await TradingSuite.create(["MNQ", "ES"])
mnq_data = await suite["MNQ"].data.get_data("5min")
es_data = await suite["ES"].data.get_data("5min")

Key Migration Points:

  • ✅ Use instruments=["MNQ"] instead of "MNQ" for new code
  • ✅ Access managers via suite["SYMBOL"] instead of suite.data
  • ✅ All existing code continues to work with warnings
  • ✅ No breaking changes - gradual migration supported

🎯 Advanced Use Cases Enabled

Multi-Asset Strategies

  • Pairs Trading: ES vs NQ, correlations and spreads
  • Sector Rotation: Rotate between commodities, indices, currencies
  • Cross-Market Arbitrage: Exploit price differences across markets
  • Diversified Portfolios: Manage risk across multiple asset classes

Enhanced Risk Management

  • Portfolio-Level Limits: Position sizing across multiple instruments
  • Cross-Instrument Analysis: Correlation-based risk assessment
  • Sector Exposure Control: Monitor and limit sector concentrations
  • Unified Risk Metrics: Comprehensive portfolio risk measurement

Advanced Analytics

  • Spread Analysis: Monitor and trade spreads between instruments
  • Multi-Timeframe: Analyze multiple instruments across timeframes
  • Correlation Signals: Generate signals based on instrument relationships
  • Performance Attribution: Track performance by instrument and strategy

🏗️ Technical Architecture

Component Integration

  • InstrumentContext: Each instrument maintains complete context (data, orders, positions, orderbook, risk)
  • Shared Authentication: Single client connection for all instruments
  • Event Isolation: Events properly separated between instruments
  • Resource Efficiency: Smart sharing of connections and authentication

Resource Management

  • Parallel Creation: Multiple contexts created concurrently with asyncio.gather
  • Fail-Safe Cleanup: Partial failures cleaned up automatically
  • Memory Optimization: Efficient resource sharing and cleanup
  • Task Management: Proper async task lifecycle management

Performance Features

  • Concurrent Processing: Multiple instruments processed in parallel
  • Connection Pooling: Shared HTTP connections for efficiency
  • Event Optimization: Isolated event buses prevent interference
  • Memory Management: Bounded collections and automatic cleanup

🧪 Quality Assurance

Comprehensive Testing

  • 200+ New Tests: Complete multi-instrument functionality coverage
  • Parallel Creation: Concurrent initialization and failure scenarios
  • Event Isolation: Cross-instrument validation and separation
  • Backward Compatibility: Legacy API preservation testing
  • Edge Cases: Error propagation and resource cleanup validation

Production Ready

  • 1,300+ Tests Passing: Complete test suite with 100% pass rate
  • MyPy Compliance: Full type checking with zero errors
  • Ruff Compliance: Code quality and formatting standards
  • CI/CD Validation: All environments and Python versions tested

⚠️ Deprecation Timeline

Deprecated in v3.5.0 (Removal in v4.0.0)

  • Direct manager access (suite.data, suite.orders) in multi-instrument mode
  • Single-instrument initialization without explicit list notation
  • Auto-detection of manager context without instrument specification

Migration Timeline

  • v3.5.x: Deprecation warnings guide migration to new patterns
  • v3.6.x - v3.9.x: Continued support with warnings
  • v4.0.0: Clean removal of deprecated single-instrument access patterns

📚 Documentation & Examples

New Documentation

  • 📖 Complete architectural documentation
  • 🔄 Step-by-step migration guide
  • 💡 Multi-instrument strategy examples and patterns
  • 🎯 Use case documentation for pairs trading and portfolio management

New Examples

  • 📁 examples/26_multi_instrument_trading.py - Comprehensive multi-instrument demo
  • 🎮 Real-world trading scenarios with multiple futures contracts
  • 📊 Portfolio-level risk management examples
  • 📈 Pairs trading and spread analysis demonstrations

🎉 Production Deployment Ready

Enterprise Features

  • Complete Test Coverage: 1,300+ tests with comprehensive scenarios
  • Production-Grade Error Handling: Robust error recovery and propagation
  • Memory Leak Prevention: Proper resource cleanup and management
  • Performance Benchmarking: Optimized for high-frequency trading
  • Comprehensive Logging: Detailed monitoring and debugging support

Stability Guarantees

  • Full Backward Compatibility: No breaking changes for existing code
  • Semantic Versioning: Strict adherence to versioning principles
  • Clear Migration Path: Gradual transition with comprehensive guidance
  • Production Testing: Thoroughly tested for enterprise deployment

🚀 Get Started Today

Installation

# Using UV (recommended)
uv add project-x-py

# Using pip
pip install project-x-py --upgrade

Quick Verification

import project_x_py
print(f"ProjectX SDK Version: {project_x_py.__version__}")  # Should show 3.5.0

Next Steps

  1. 📚 Read the Migration Guide
  2. 🎮 Try the Multi-Instrument Example
  3. 🔄 Update your existing code with the new patterns
  4. 🚀 Build advanced multi-instrument strategies!

🙏 Acknowledgments

This release represents months of development, testing, and refinement. Special thanks to the ProjectX community for feedback, testing, and contributions that made this multi-instrument vision a reality.

Happy Trading! 🎯📈


For detailed technical information, see the CHANGELOG and README.