Skip to main content

Production-ready event-driven backtesting framework with institutional-grade analytics

Project description

Simulor

PyPI Python Version License CI

Simulor is a sophisticated backtesting framework designed for quantitative traders and researchers who demand institutional-grade realism and performance. Built on an event-driven architecture with pluggable components, it seamlessly transitions from historical backtesting to paper trading and live execution.

⚠️ Active Development: Simulor is currently in beta. APIs may change before v1.0. We welcome feedback and contributions!

Key Features

  • Event-Driven Architecture: True event-driven simulation with point-in-time data delivery, multiple resolutions (tick/minute/hour/daily), and compositional data structures
  • Pluggable Strategy Components: Modular alpha models, portfolio construction, risk management, execution models, and universe selection. Swap components without rewriting strategy logic
  • Institutional-Grade Execution: Realistic fill models, transaction costs (commissions, spreads, slippage, market impact), T+0 settlement, and corporate actions handling
  • Comprehensive Analytics: Performance metrics (Sharpe, Sortino, Calmar), risk analysis (VaR, CVaR, beta), trade statistics, and interactive Plotly visualizations
  • Environment Parity: Same strategy code runs in backtest, paper trading, and live execution modes. Seamless transition from research to production

Installation

pip install simulor

Quick Start

from decimal import Decimal
from pathlib import Path
from simulor import (
    Strategy, Engine, Fund,
    MovingAverageCrossover, EqualWeight, PositionLimit, Immediate, Static,
    CsvFeed, SimulatedBroker, Resolution, Instrument, Tearsheet
)

# Define strategy with pluggable components
# Workflow: Universe Selection -> Alpha Model -> Portfolio Construction -> Risk Management -> Execution
strategy = Strategy(
    name='MA_Crossover',
    universe=Static([
        Instrument.stock('SPY'),
        Instrument.stock('QQQ'),
        Instrument.stock('IWM')
    ]),
    alpha=MovingAverageCrossover(fast_period=10, slow_period=20),
    construction=EqualWeight(),
    risk=PositionLimit(max_position=Decimal('0.1')),
    execution=Immediate()
)

# Run backtest
engine = Engine(
    data=CsvFeed(path=Path('data/bars.csv'), resolution=Resolution.DAILY),
    fund=Fund(
        strategies=[strategy],  # Add more strategies as needed
        capital=Decimal('100000')
    ),
    broker=SimulatedBroker()
)
results = engine.run(
    start='2020-01-01',
    end='2025-12-31',
    mode='backtest'
)

# Analyze results
print(f"Total Return: {results.total_return:.2%}")
print(f"Sharpe Ratio: {results.sharpe_ratio:.2f}")
print(f"Max Drawdown: {results.max_drawdown:.2%}")

# Generate tearsheet
tearsheet = Tearsheet(results)
tearsheet.save('tearsheet.html')

Roadmap

v0.1.0

  • Event-driven engine with CSV data provider
  • Pluggable strategy framework
  • Basic execution (InstantFill, SpreadFill)
  • Core analytics (returns, Sharpe, drawdown)
  • Simple transaction costs

v0.2.0+ (Planned)

  • Parquet data provider and advanced data layer features
  • History API with type-safe lookback
  • Advanced fill models (L2 matching, probabilistic)
  • T+2 settlement and realistic cash management
  • Overfitting detection (WFA, PBO, CSCV)
  • Advanced analytics (execution quality, attribution)
  • ML integration and model registry
  • Broker integrations for live trading

Acknowledgments

Simulor implements the industry-standard modular pipeline architecture (Universe Selection → Alpha Generation → Portfolio Construction → Risk Management → Execution). This separation of concerns allows for maximum flexibility, testability, and maintainability, similar to the architecture found in institutional quantitative systems and platforms like Lean.

Contributing

Contributions are welcome!

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simulor-0.1.0b1.tar.gz (77.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simulor-0.1.0b1-py3-none-any.whl (94.7 kB view details)

Uploaded Python 3

File details

Details for the file simulor-0.1.0b1.tar.gz.

File metadata

  • Download URL: simulor-0.1.0b1.tar.gz
  • Upload date:
  • Size: 77.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simulor-0.1.0b1.tar.gz
Algorithm Hash digest
SHA256 53a71dec9bb9bbba8a9cce5374c645bb8364c0e724bf66468a881fbaa3f46e30
MD5 6f452e1dd471f493dc0a40729b604034
BLAKE2b-256 c29fbfd39d60f3ff6b5f8e407b7881675ec6918b5bf39042b1e346a1003637f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for simulor-0.1.0b1.tar.gz:

Publisher: publish.yml on alasdairpan/simulor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file simulor-0.1.0b1-py3-none-any.whl.

File metadata

  • Download URL: simulor-0.1.0b1-py3-none-any.whl
  • Upload date:
  • Size: 94.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for simulor-0.1.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 fd76c7865af295f9017853b3da981e964e8154dff3900961f0fb9ab5738e81aa
MD5 0719f326e15438501f2d61889d2c87f5
BLAKE2b-256 91897a4cb5fbde6dadff48a9f7949564aa8a0c2bdcd8dbd1eee848f74b7a12e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for simulor-0.1.0b1-py3-none-any.whl:

Publisher: publish.yml on alasdairpan/simulor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page