Skip to main content
Glama

MaverickMCP

by wshobson
MIT License
165
  • Apple
intelligent_backtesting.py10.2 kB
"""MCP router for intelligent backtesting workflow.""" import logging from typing import Any from fastmcp import Context from maverick_mcp.workflows import BacktestingWorkflow logger = logging.getLogger(__name__) def setup_intelligent_backtesting_tools(mcp): """Set up intelligent backtesting tools for MCP. Args: mcp: FastMCP instance """ @mcp.tool() async def run_intelligent_backtest( ctx: Context, symbol: str, start_date: str | None = None, end_date: str | None = None, initial_capital: float = 10000.0, requested_strategy: str | None = None, ) -> dict[str, Any]: """Run intelligent backtesting workflow with market regime analysis and strategy optimization. This advanced workflow analyzes market conditions, intelligently selects appropriate strategies, optimizes parameters, and validates results through walk-forward analysis and Monte Carlo simulation. Args: symbol: Stock symbol to analyze (e.g., 'AAPL', 'TSLA') start_date: Start date (YYYY-MM-DD), defaults to 1 year ago end_date: End date (YYYY-MM-DD), defaults to today initial_capital: Starting capital for backtest (default: $10,000) requested_strategy: User-preferred strategy (optional, e.g., 'sma_cross', 'rsi', 'macd') Returns: Comprehensive analysis including: - Market regime classification (trending/ranging/volatile) - Intelligent strategy recommendations with confidence scores - Optimized parameters for best performance - Validation through walk-forward analysis - Risk assessment and confidence-scored final recommendation Examples: run_intelligent_backtest("AAPL") # Full analysis for Apple run_intelligent_backtest("TSLA", "2022-01-01", "2023-12-31") # Specific period run_intelligent_backtest("MSFT", requested_strategy="rsi") # With strategy preference """ try: # Initialize workflow workflow = BacktestingWorkflow() # Run intelligent backtesting results = await workflow.run_intelligent_backtest( symbol=symbol, start_date=start_date, end_date=end_date, initial_capital=initial_capital, requested_strategy=requested_strategy, ) return results except Exception as e: logger.error(f"Intelligent backtest failed for {symbol}: {e}") return { "symbol": symbol, "error": str(e), "message": "Intelligent backtesting failed. Please check symbol and date range.", } @mcp.tool() async def quick_market_regime_analysis( ctx: Context, symbol: str, start_date: str | None = None, end_date: str | None = None, ) -> dict[str, Any]: """Perform quick market regime analysis and strategy recommendations. This is a faster alternative to full backtesting that provides market regime classification and basic strategy recommendations without parameter optimization. Args: symbol: Stock symbol to analyze start_date: Start date (YYYY-MM-DD), defaults to 1 year ago end_date: End date (YYYY-MM-DD), defaults to today Returns: Quick analysis results with: - Market regime classification (trending/ranging/volatile) - Top 3 recommended strategies for current conditions - Strategy fitness scores - Market conditions summary - Execution metadata Examples: quick_market_regime_analysis("AAPL") quick_market_regime_analysis("BTC-USD", "2023-01-01", "2023-12-31") """ try: # Initialize workflow workflow = BacktestingWorkflow() # Run quick analysis results = await workflow.run_quick_analysis( symbol=symbol, start_date=start_date, end_date=end_date, ) return results except Exception as e: logger.error(f"Quick market analysis failed for {symbol}: {e}") return { "symbol": symbol, "analysis_type": "quick_analysis", "error": str(e), "message": "Quick market analysis failed. Please check symbol and date range.", } @mcp.tool() async def explain_market_regime( ctx: Context, regime: str, ) -> dict[str, Any]: """Explain market regime characteristics and suitable strategies. Args: regime: Market regime to explain (trending, ranging, volatile, etc.) Returns: Detailed explanation of the regime and strategy recommendations """ regime_explanations = { "trending": { "description": "A market in a clear directional movement (up or down trend)", "characteristics": [ "Strong directional price movement", "Higher highs and higher lows (uptrend) or lower highs and lower lows (downtrend)", "Good momentum indicators", "Volume supporting the trend direction", ], "best_strategies": [ "sma_cross", "ema_cross", "macd", "breakout", "momentum", ], "avoid_strategies": ["rsi", "mean_reversion", "bollinger"], "risk_factors": [ "Trend reversals can be sudden", "False breakouts in weak trends", "Momentum strategies can give late signals", ], }, "ranging": { "description": "A market moving sideways within a defined price range", "characteristics": [ "Price oscillates between support and resistance", "No clear directional bias", "Mean reversion tendencies", "Lower volatility within the range", ], "best_strategies": ["rsi", "bollinger", "mean_reversion"], "avoid_strategies": ["sma_cross", "breakout", "momentum"], "risk_factors": [ "False breakouts from range", "Choppy price action can cause whipsaws", "Range can persist longer than expected", ], }, "volatile": { "description": "A market with high price variability and unpredictable movements", "characteristics": [ "Large price swings in short periods", "High volatility percentile", "Unpredictable direction changes", "Often associated with news events or uncertainty", ], "best_strategies": ["breakout", "volatility_breakout", "momentum"], "avoid_strategies": ["mean_reversion", "sma_cross"], "risk_factors": [ "High drawdown potential", "Many false signals", "Requires wider stops and position sizing", ], }, "volatile_trending": { "description": "A trending market with high volatility - strong moves with significant pullbacks", "characteristics": [ "Clear trend direction but with high volatility", "Strong moves followed by sharp retracements", "Higher risk but potentially higher rewards", "Often seen in growth stocks or emerging trends", ], "best_strategies": [ "breakout", "momentum", "volatility_breakout", "macd", ], "avoid_strategies": ["rsi", "mean_reversion"], "risk_factors": [ "High drawdown during pullbacks", "Requires strong risk management", "Emotional stress from volatility", ], }, "low_volume": { "description": "A market with below-average trading volume", "characteristics": [ "Lower than average volume", "Potentially less reliable signals", "Wider bid-ask spreads", "Less institutional participation", ], "best_strategies": ["sma_cross", "ema_cross", "rsi"], "avoid_strategies": ["breakout", "momentum"], "risk_factors": [ "Lower liquidity", "Breakouts may not sustain", "Slippage on entries and exits", ], }, } if regime.lower() in regime_explanations: return { "regime": regime, "explanation": regime_explanations[regime.lower()], "trading_tips": [ f"Focus on {', '.join(regime_explanations[regime.lower()]['best_strategies'])} strategies", f"Avoid {', '.join(regime_explanations[regime.lower()]['avoid_strategies'])} strategies", "Always use proper risk management", "Consider the broader market context", ], } else: return { "regime": regime, "error": f"Unknown regime '{regime}'", "available_regimes": list(regime_explanations.keys()), "message": "Please specify one of the available market regimes.", }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wshobson/maverick-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server