Skip to content

ppoak/quool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

740 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Quool, a quantum financial tool, supporting native file data access, database access, crawler data access, and backtest together with analysis.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages