{"id":25664466,"url":"https://github.com/ryannapp12/quant_trading_engine","last_synced_at":"2026-04-11T04:32:40.994Z","repository":{"id":276647319,"uuid":"929849124","full_name":"ryannapp12/quant_trading_engine","owner":"ryannapp12","description":"A modular, and scalable quantitative trading engine built in Python. This project demonstrates efficient data caching with SQLite, concurrent backtesting, and advanced risk analytics, showcasing best practices in clean code architecture and performance optimization.","archived":false,"fork":false,"pushed_at":"2025-03-02T19:14:53.000Z","size":2286,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-09T08:33:43.235Z","etag":null,"topics":["algorithmic-trading","backtesting","dash","data-analysis","data-visualization","fintech","lstm","machine-learning","numpy","pandas","plotly","python","quantitative-finance","real-time","risk-management","sqlite","technical-analysis","tensorflow","time-series-analysis","trading-strategies"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryannapp12.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-09T14:54:29.000Z","updated_at":"2025-07-12T12:33:57.000Z","dependencies_parsed_at":"2025-07-01T06:43:10.404Z","dependency_job_id":null,"html_url":"https://github.com/ryannapp12/quant_trading_engine","commit_stats":null,"previous_names":["ryannapp12/quant_trading_project"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ryannapp12/quant_trading_engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryannapp12%2Fquant_trading_engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryannapp12%2Fquant_trading_engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryannapp12%2Fquant_trading_engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryannapp12%2Fquant_trading_engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryannapp12","download_url":"https://codeload.github.com/ryannapp12/quant_trading_engine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryannapp12%2Fquant_trading_engine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31669115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithmic-trading","backtesting","dash","data-analysis","data-visualization","fintech","lstm","machine-learning","numpy","pandas","plotly","python","quantitative-finance","real-time","risk-management","sqlite","technical-analysis","tensorflow","time-series-analysis","trading-strategies"],"created_at":"2025-02-24T06:18:46.091Z","updated_at":"2026-04-11T04:32:40.973Z","avatar_url":"https://github.com/ryannapp12.png","language":"Python","readme":"# Quantitative Trading Engine\n\nA comprehensive Python-based trading engine that allows you to backtest multiple trading strategies using historical market data. The engine combines traditional technical analysis strategies like momentum and mean reversion with more sophisticated approaches like statistical arbitrage and portfolio optimization.\n\nKey capabilities include:\n- Backtesting multiple strategies simultaneously on any stock or ETF available through Yahoo Finance\n- Analyzing risk metrics including Value at Risk (VaR), drawdown statistics, and factor exposures\n- Visualizing strategy performance with detailed charts and statistical analysis\n- Managing market data efficiently through local caching and multiple data provider options\n- Implementing complex trading logic with built-in statistical tests and position sizing\n\nThis project is designed for:\n- Quantitative researchers testing trading hypotheses\n- Traders looking to evaluate strategy performance\n- Developers interested in building robust financial software\n- Students learning about quantitative finance and algorithmic trading\n\nThe engine supports three main trading strategies:\n1. Momentum: Exploits trending behavior in price movements\n2. Mean Reversion: Capitalizes on price deviations from historical averages\n3. Statistical Arbitrage: Implements pairs trading using cointegration and statistical tests\n\nAll components are built with a focus on code quality, testing, and extensibility, making it easy to add new strategies or enhance existing functionality.\n\n## Core Features\n\n### Advanced Trading Strategies\n- **Statistical Arbitrage:** Implements pairs trading with dynamic hedge ratios and cointegration testing\n- **Mean Reversion:** Adaptive thresholds with position sizing\n- **Momentum:** Trend-following with optimized lookback periods\n- **Portfolio Optimization:** Modern portfolio theory implementation with custom constraints\n\n### Sophisticated Analytics\n- **Advanced Risk Metrics:** \n  - Value at Risk (VaR) with multiple calculation methods\n  - Conditional VaR (Expected Shortfall)\n  - Extreme Value Theory (EVT) for tail risk\n  - Dynamic drawdown analysis with recovery metrics\n- **Factor Analysis:**\n  - Multi-factor exposure calculation\n  - Dynamic beta estimation\n  - R-squared analytics\n- **Statistical Tests:**\n  - Cointegration testing with ADF\n  - Half-life calculation for mean reversion\n  - Rolling correlation analysis\n\n### Enhanced Visualization\n- **Interactive Performance Dashboards:**\n  - Strategy return comparisons\n  - Risk metric visualization\n  - Drawdown analysis\n- **Pair Trading Analytics:**\n  - Spread visualization\n  - Rolling correlation plots\n  - Returns scatter analysis\n  - Normalized price series comparison\n\n### Technical Architecture\n- **Robust Data Management:**\n  - SQLite-based market data caching\n  - Multiple data provider support (Yahoo Finance, CSV)\n  - Efficient data preprocessing and alignment\n- **Concurrent Processing:**\n  - Parallel strategy backtesting\n  - Thread-safe data handling\n  - Optimized computation engine\n- **Production-Ready Features:**\n  - Comprehensive logging system\n  - Performance profiling decorators\n  - Error handling and recovery\n  - Modular, extensible design\n\n## Installation\n\n### Prerequisites\n- Python 3.8+\n- pip package manager\n- Virtual environment (recommended)\n\n### Step 1: Clone the Repository\n```bash\ngit clone https://github.com/ryannapp12/quant_trading_engine.git\ncd quant_trading_project\n```\n\n### Step 2: Set Up Virtual Environment\n```bash\n# Create virtual environment\npython -m venv venv\n\n# Activate virtual environment\n# Windows:\nvenv\\Scripts\\activate\n# macOS/Linux:\nsource venv/bin/activate\n```\n\n### Step 3: Install Dependencies\n```bash\npip install -r requirements.txt\n```\n\n### Step 4: Environment Configuration\nCreate a `.env` file in the root directory with the following variables:\n```env\n# Default Settings\nDEFAULT_TICKER=XOM\nDEFAULT_BENCHMARK_TICKER=CVX\nDEFAULT_START_DATE=2020-01-01\nDEFAULT_END_DATE=2025-01-01\nINITIAL_CAPITAL=1000000.0\n\n# Data Settings\nDB_PATH=data/market_data.db\nDATA_PROVIDER=yahoo\nCSV_FILE_PATH=data/XOM.csv\n\n# Alpaca API Configuration\nALPACA_API_KEY_LIVE=your_live_key\nALPACA_API_SECRET_LIVE=your_live_secret\nALPACA_API_KEY_TEST=your_test_key\nALPACA_API_SECRET_TEST=your_test_secret\nALPACA_BASE_URL_TEST=https://paper-api.alpaca.markets/v2\nALPACA_BASE_URL_LIVE=https://api.alpaca.markets\n\n# Dashboard Configuration\nDASHBOARD_UPDATE_INTERVAL_MS=60000\n```\n\n## Usage\n\n### Running Backtests\n```bash\n# Run default backtest\npython main.py\n\n# Run with ML regime detection\npython main.py --mode ml\n```\n\n### Starting the Live Dashboard\n```bash\n# Start the real-time dashboard\npython src/dashboard.py\n```\n\n## Strategy Configuration\n\n### Momentum Strategy\n```python\nSTRATEGY_CONFIG = {\n    'momentum': {\n        'window': 20\n    }\n}\n```\n\n### Mean Reversion Strategy\n```python\nSTRATEGY_CONFIG = {\n    'mean_reversion': {\n        'window': 20,\n        'threshold': 0.05\n    }\n}\n```\n\n### Statistical Arbitrage Strategy\n```python\nSTRATEGY_CONFIG = {\n    'statistical_arbitrage': {\n        'lookback_period': 60,\n        'entry_zscore': 2.0,\n        'exit_zscore': 0.5,\n        'max_position_hold': 20,\n        'min_half_life': 5,\n        'confidence_level': 0.05\n    }\n}\n```\n\n## Project Structure\n```\nquant_trading_project/\n├── config/\n│   └── settings.py              # Configuration parameters\n├── data/\n│   └── market_data.db          # SQLite database (auto-generated)\n├── src/\n│   ├── core/\n│   │   ├── backtesting_engine.py    # Parallel backtesting engine\n│   │   ├── data_provider.py         # Data provider interface\n│   │   ├── portfolio_optimizer.py    # Portfolio optimization\n│   │   ├── real_time_data.py        # Live data processing\n│   │   ├── risk_engine.py           # Risk analytics\n│   │   └── models.py                # Data models\n│   ├── strategies/\n│   │   ├── base_strategy.py         # Strategy interface\n│   │   ├── momentum_strategy.py     # Momentum implementation\n│   │   ├── mean_reversion_strategy.py # Mean reversion\n│   │   └── statistical_arbitrage.py  # Stat arb implementation\n│   └── utils/\n│       ├── logger.py                # Logging configuration\n│       └── decorators.py            # Performance monitoring\n├── dashboard.py                # Real-time dashboard\n├── main.py                     # Application entry point\n├── requirements.txt            # Dependencies\n└── README.md                   # This file\n```\n\n### ML-Based Regime Detection\n![Regime Detection using LSTM](assets/regimeDetection.png)\n\nThe LSTM-based regime detection visualization shows:\n- Price movements of the asset (orange line)\n- Predicted market regime by the LSTM model (blue line)\n- Clear regime changes and transitions from 2020 to 2025\n- Model's ability to track both trend and mean-reversion regimes\n\n### Real-Time Performance Tracking\n![Real-Time Trading Dashboard](assets/dashboardPerformance.png)\n\nThe real-time dashboard displays:\n- Live strategy performance vs market benchmark\n- Minute-by-minute portfolio value updates\n- Performance tracking starting from January 1, 2025\n- Clear visualization of strategy outperformance and drawdowns\n\n### Pair Trading Analysis\n![Pair Trading Analysis](assets/pairTradingAnalysis.png)\n\nThe above visualization shows:\n- Normalized price series comparing the stock vs benchmark\n- Price spread between the pairs\n- 60-day rolling correlation\n- Daily returns scatter analysis\n\n### Strategy Performance\n![Strategy Performance Comparison](assets/strategyPerformanceComparison.png)\n\nThe performance comparison shows:\n- MeanReversionStrategy (Return: 14.5%)\n- MomentumStrategy (Return: 160.4%)\n- StatisticalArbitrageStrategy (Return: 0.0%)\n- Market performance as benchmark\n\n### Example Console Output\n```bash\n(.venv) ryannapolitano@Ryans-MacBook-Pro quant_trading_project % python3 main.py --mode backtest\n2025-02-09 14:35:34,865 - __main__ - INFO - Data loaded for XOM\n[*********************100%***********************]  1 of 1 completed\n2025-02-09 14:35:35.814 Python[21623:156389162] +[IMKClient subclass]: chose IMKClient_Modern\n2025-02-09 14:35:35.814 Python[21623:156389162] +[IMKInputSession subclass]: chose IMKInputSession_Modern\nADF p-value: 0.18048318811014707\nCointegration Test Passed: False\n2025-02-09 14:35:40,173 - __main__ - INFO - Backtesting completed.\n2025-02-09 14:35:40,191 - __main__ - INFO - \nMeanReversionStrategy Analysis:\n2025-02-09 14:35:40,191 - __main__ - INFO - Tail Risk Metrics:\n2025-02-09 14:35:40,191 - __main__ - INFO - - historical_var: -2.35%\n2025-02-09 14:35:40,191 - __main__ - INFO - - parametric_var: -2.59%\n2025-02-09 14:35:40,191 - __main__ - INFO - - conditional_var: -4.36%\n2025-02-09 14:35:40,191 - __main__ - INFO - - evt_var: -0.12%\n2025-02-09 14:35:40,191 - __main__ - INFO - \nDrawdown Analysis:\n2025-02-09 14:35:40,191 - __main__ - INFO - - max_drawdown: -56.55%\n2025-02-09 14:35:40,191 - __main__ - INFO - - average_drawdown: -43.45%\n2025-02-09 14:35:40,191 - __main__ - INFO - - average_recovery_time: 2.0 days\n2025-02-09 14:35:40,191 - __main__ - INFO - - drawdown_frequency: 0.08%\n2025-02-09 14:35:40,219 - __main__ - INFO - \nMomentumStrategy Analysis:\n2025-02-09 14:35:40,219 - __main__ - INFO - Tail Risk Metrics:\n2025-02-09 14:35:40,219 - __main__ - INFO - - historical_var: -3.25%\n2025-02-09 14:35:40,219 - __main__ - INFO - - parametric_var: -3.53%\n2025-02-09 14:35:40,219 - __main__ - INFO - - conditional_var: -4.82%\n2025-02-09 14:35:40,219 - __main__ - INFO - - evt_var: -0.09%\n2025-02-09 14:35:40,219 - __main__ - INFO - \nDrawdown Analysis:\n2025-02-09 14:35:40,219 - __main__ - INFO - - max_drawdown: -47.48%\n2025-02-09 14:35:40,219 - __main__ - INFO - - average_drawdown: -34.41%\n2025-02-09 14:35:40,219 - __main__ - INFO - - average_recovery_time: 3.8 days\n2025-02-09 14:35:40,219 - __main__ - INFO - - drawdown_frequency: 0.79%\n2025-02-09 14:35:40,220 - __main__ - INFO - \nStatisticalArbitrageStrategy Analysis:\n2025-02-09 14:35:40,220 - __main__ - INFO - Tail Risk Metrics:\n2025-02-09 14:35:40,220 - __main__ - INFO - - historical_var: 0.00%\n2025-02-09 14:35:40,220 - __main__ - INFO - - parametric_var: 0.00%\n2025-02-09 14:35:40,220 - __main__ - INFO - - conditional_var: 0.00%\n2025-02-09 14:35:40,220 - __main__ - INFO - - evt_var: 0.00%\n2025-02-09 14:35:40,220 - __main__ - INFO - \nDrawdown Analysis:\n2025-02-09 14:35:40,220 - __main__ - INFO - - max_drawdown: 0.00%\n2025-02-09 14:35:40,220 - __main__ - INFO - - average_drawdown: 0.00%\n2025-02-09 14:35:40,220 - __main__ - INFO - - average_recovery_time: 0.0 days\n2025-02-09 14:35:40,220 - __main__ - INFO - - drawdown_frequency: 0.00%\n(.venv) ryannapolitano@Ryans-MacBook-Pro quant_trading_project % python3 main.py --mode ml      \n[*********************100%***********************]  1 of 1 completed\nEpoch 1/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 1s 6ms/step - loss: 0.1133   \nEpoch 2/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step - loss: 0.0056 \nEpoch 3/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0048 \nEpoch 4/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0043 \nEpoch 5/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0045 \nEpoch 6/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0043 \nEpoch 7/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0037 \nEpoch 8/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0047 \nEpoch 9/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0036 \nEpoch 10/10\n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 6ms/step - loss: 0.0035 \n39/39 ━━━━━━━━━━━━━━━━━━━━ 0s 3ms/step \n2025-02-09 14:38:40.106 Python[22256:156397321] +[IMKClient subclass]: chose IMKClient_Modern\n2025-02-09 14:38:40.106 Python[22256:156397321] +[IMKInputSession subclass]: chose IMKInputSession_Modern\n```\n\n## Advanced Usage\n\n### Custom Strategy Implementation\n```python\nfrom src.strategies.base_strategy import BaseStrategy\n\nclass CustomStrategy(BaseStrategy):\n    def __init__(self, params):\n        self.params = params\n        \n    def generate_signals(self, data):\n        # Implement signal generation logic\n        return signals\n```\n\n### Portfolio Optimization\n```python\nfrom src.core.portfolio_optimizer import PortfolioOptimizer\n\noptimizer = PortfolioOptimizer(\n    returns=returns_data,\n    risk_free_rate=0.02,\n    constraints={'max_weight': 0.3}\n)\noptimal_portfolio = optimizer.optimize_sharpe()\n```\n\n### Risk Analysis\n```python\nfrom src.core.risk_engine import RiskEngine\n\nrisk_engine = RiskEngine(strategy_results)\nrisk_metrics = risk_engine.calculate_tail_risk_metrics()\ndrawdown_metrics = risk_engine.calculate_drawdown_metrics()\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/SickFeature`)\n3. Commit your changes (`git commit -m 'Add some SickFeature'`)\n4. Push to the branch (`git push origin feature/SickFeature`)\n5. Open a Pull Request\n\n## Documentation\n- The code includes comprehensive docstrings and type hints\n- Each module has detailed documentation of its functionality\n- Strategy implementations include theoretical background and references\n\n## Testing\nRun the test suite:\n```bash\npytest tests/\n```\n\n## License\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Acknowledgments\n- Built with yfinance for market data\n- Uses Alpaca Markets for live trading\n- Dash and Plotly for visualization\n- TensorFlow for ML components","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryannapp12%2Fquant_trading_engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryannapp12%2Fquant_trading_engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryannapp12%2Fquant_trading_engine/lists"}