Skip to main content

Quool

Quantitative Toolkit — an extensible event-driven backtesting and live trading framework for quantitative strategies.

Quool provides a modular architecture built around three pillars: Source (market data), Broker (execution & accounting), and Strategy (logic). It supports both backtesting with historical data and paper/live trading with broker integrations.

Installation

pip install quool

Requires Python >= 3.10.

Quick Start

import pandas as pd
from quool import DataFrameSource, Broker, Strategy
from quool import FixedRateCommission, FixedRateSlippage

# 1. Market data source (MultiIndex DataFrame: time x code)
source = DataFrameSource(market_data)

# 2. Broker with commission and slippage models
broker = Broker(
    commission=FixedRateCommission(),
    slippage=FixedRateSlippage(),
)
broker.transfer(pd.Timestamp("2024-01-01"), 1_000_000)  # initial cash

# 3. Implement strategy
class MyStrategy(Strategy):
    def init(self):       # called once before backtest
        pass

    def update(self):     # called every timestamp
        # self.buy("000001", 100)   # buy 100 shares at market
        # self.order_target_percent("000001", 0.1)  # target 10% portfolio
        pass

# 4. Run backtest
strategy = MyStrategy(source, broker)
results = strategy.backtest()

Architecture

┌─────────────────────────────────────────────────────────┐
│                      Strategy                            │
│  init() → preupdate() → update() → stop()               │
└──────────────┬─────────────────────────┬────────────────┘
               │                         │
        ┌──────▼──────┐            ┌──────▼──────┐
        │   Source    │            │   Broker    │
        │ (market    │            │ (execution  │
        │   data)    │            │  & accounting)
        └────────────┘            └──────┬──────┘
                                          │
                                   ┌──────▼──────┐
                                   │   Order /   │
                                   │  Delivery   │
                                   └─────────────┘

Core Concepts

Source

Source is the abstract market data provider. Subclasses implement update() to advance time and return OHLCV snapshots.

Class Description
DataFrameSource Historical data from a pandas DataFrame (MultiIndex: time × code)
DuckPQSource DuckDB/Parquet queries
RealtimeSource Real-time EastMoney API with a rolling buffer
XtDataPreloadSource XtQuant historical data preloaded into a DataFrame

Broker

Broker manages order execution, portfolio accounting (cash & positions), and order matching for backtesting. For live trading, broker subclasses integrate with external systems.

Class Description
Broker Core simulated broker with pluggable commission/slippage models
AShareBroker Enforces A-share 100-share lot-size rules
XueQiuBroker XueQiu paper trading integration
XtBroker XtQuant live trading gateway

Order & Delivery

  • Order tracks the full lifecycle: CREATED → SUBMITTED → PARTIAL → FILLED/CANCELED/EXPIRED/REJECTED
  • Delivery records individual fills (execution details: price, quantity, commission)
  • Execution types: MARKET, LIMIT, STOP, STOPLIMIT, TARGET, TARGETLIMIT

Strategy

Base class for trading strategies. Provides:

  • Lifecycle hooks: init(), preupdate(), update(), stop()
  • Execution helpers: buy(), sell(), close(), order_target_value(), order_target_percent()
  • Backtesting: backtest() — blocking loop; run() / arun() — real-time scheduling
  • Persistence: dump(), load(), store(), restore()

Evaluator

Computes comprehensive performance metrics from broker deliveries:

  • Return: total_return, annual_return, annual_volatility
  • Risk-adjusted: sharpe_ratio, calmar_ratio, sortino_ratio
  • Drawdown: max_drawdown, max_drawdown_period
  • Risk: VaR_5%, CVaR_5%
  • Benchmark: beta, alpha, excess_return, information_ratio
  • Trading: position_duration, trade_win_rate, trade_return
  • Distribution: skewness, kurtosis, day_return_win_rate, monthly_win_rate

Friction Models

Class Description
FixedRateCommission Flat-rate commission with minimum fee and stamp duty
FixedRateSlippage Slippage model adjusting execution price based on volume

Storage

DuckDB-backed Parquet storage for efficient historical data management:

Class Description
DuckTable Single Parquet dataset with SQL querying
DuckPQ Multiple Parquet tables with shared DuckDB connection

Utilities

Function Description
setup_logger Configurable logging with file handlers
notify_task Email notification decorator
proxy_request HTTP requests with proxy failover
generate_usage Auto-generate Markdown documentation for classes/callables

API Reference

For detailed API documentation, see:

License

MIT

Metadata

Release files for quool 7.0.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quool 7.0.17
File Size Uploaded
quool-7.0.17.tar.gz 86.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for quool 7.0.17
File Interpreter ABI Platform
quool-7.0.17-py3-none-any.whl Python 3 none any Details

Total release size: 159.0 kB

Release files / quool-7.0.17.tar.gz

Download URL quool-7.0.17.tar.gz
Size 86.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c39150749e29aaf607f0c485a44656a8dc1f2238714fb31051ac0acad7fdf08d
BLAKE2b-256 checksum
How to use checksums
45ae8aaf14fceba4767fff5f4433fef7a5d3d8201246c143535d100698bd76a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / quool-7.0.17-py3-none-any.whl

Download URL quool-7.0.17-py3-none-any.whl
Size 72.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d2dec8f459abe4d21a5cbd28a8a719590c908b29e1cf677b8319f5ec7aec2853
BLAKE2b-256 checksum
How to use checksums
910400464bff0d58623a5fe4e74090e31df74f7995b52e545d52abd3821d6362
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

7.0.17 This release

2 release files

7.0.11

2 release files

7.0.10

2 release files

7.0.9

2 release files

7.0.8

2 release files

7.0.6

2 release files

7.0.5

2 release files

7.0.4

2 release files

7.0.3

2 release files

7.0.2

2 release files

7.0.1

2 release files

6.0.0

2 release files

5.6.0

2 release files

5.5.0

2 release files

5.4.0

2 release files

5.3.2

2 release files

5.3.1

2 release files

5.2.2

2 release files

5.2.0

2 release files

5.1.0

2 release files

5.0.14

2 release files

5.0.13

2 release files

5.0.12

2 release files

5.0.8

2 release files

5.0.7

2 release files

5.0.6

1 release file

5.0.3

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.4.8

2 release files

4.4.5

2 release files

4.3.0

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.6

2 release files

4.1.5

2 release files

4.1.3

2 release files

4.1.0

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.0.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.6.0

1 release file

1.5.8

2 release files

1.5.7

2 release files

1.5.6

2 release files

1.5.5

2 release files

1.5.4

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.4.0

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.21

1 release file

0.4.19

1 release file

0.4.18

1 release file

0.4.17

1 release file

0.4.16

1 release file

0.4.15

1 release file

0.4.14

1 release file

0.4.12

1 release file

0.4.11

1 release file

0.4.10

1 release file

0.4.9

1 release file

0.4.8

1 release file

0.4.7

1 release file

0.4.6

1 release file

0.4.5

1 release file

0.4.4

1 release file

0.4.3

1 release file

0.4.2

1 release file

0.4.0

2 release files

0.3.1

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.1

1 release file

0.2.0

2 release files

0.1.5

1 release file

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page