Skip to main content

CarrotQuant Engine (carrotquant-engine)

PyPI version Python Version License

CarrotQuant Engine 是基于 Python 与 Numba 的高性能事件驱动与向量化量化回测引擎,支持全市场多品种多表的数据供给、撮合执行与绩效分析。

📦 安装指南 (Installation)

环境要求:Python >= 3.12(支持 Python 3.12 / 3.13 / 3.14+)。

# 使用 uv 安装
uv add carrotquant-engine

🛠️ 特性 (Features)

  • 高性能计算内核:基于 Numba JIT 与连续 2D C-Contiguous 内存布局,降低循环执行与内存分配开销。
  • Duck Typing 数据协议与多表供给engine.run(data=...) 原生支持标准 dict 传参与 Duck Typing(具备 .to_df() / .read() / .collect() 的数据源、LazyFrameDataFrame 或 Stream 生成器),支持主行情表、副行情表(如指数 index)、特征列(如 pe_ttm)、稀疏离散事件(如龙虎榜)与静态属性(如板块)。
  • 单趟极速矩阵构建 (MatrixBuilder):单趟完成全局坐标映射与内存填充,严格校验 OHLC 全量价格列,未提供 volume/amount 时保持纯净 None
  • Master Clock 时空对齐:副 TS 表按主时钟自动 Left Join 内存对齐,超出时间步截断,缺失时间步填充 NaN
  • 多空双向撮合buy / sell 支持做多与做空 (pos += amountpos -= amount),统一浮动资产计算 $PV = \text{Cash} + \sum \text{pos}_i \times \text{close}_i$。
  • 轻量动态复权data.close 为原始成交价(用于资金交割),data.adj.close / ctx.adj.close 提供动态后复权视图。
  • 防未来函数切片:策略通过 ctx.get('factor')(当前 $t$ 步快照)与 ctx.get_history('factor')(物理边界 [:t+1, :])访问数据,避免未来数据泄露。
  • 分块流式预热 (warmup_steps):支持分块流式回测并在预热期只更新指标状态而不触发资金扣除。
  • 流动性与撮合限制:支持 max_volume_ratio(盘口成交量比例限制)、限价单 buy_limit / sell_limitcancel_order 撤单机制。
  • 保证金与融资融券费率:支持设置 long_margin_ratio / short_margin_ratio(保证金率校验),以及 margin_interest_rate / borrow_interest_rate(日频利息计提)。

🚀 快速开始

from cq.engine import strategy, BarContext, Engine, ts_table, event_table, static_table
import polars as pl

# 1. 定义策略 (支持访问副行情表 index 与离散事件表)
@strategy
def multi_asset_strategy(ctx: BarContext):
    # 读取副表(指数)当前价格与历史收盘价切片 [:t+1, :]
    index_table = ctx.get("index")
    index_close_hist = index_table.close_history
    
    # 读取离散事件表 (龙虎榜)
    dt_events = ctx.get("dragon_tiger")
    
    for i in range(ctx.n_symbols):
        if not ctx.is_tradable[i]:
            continue

        # 使用 ctx.adj.close_history 读取后复权历史收盘价
        c_hist = ctx.adj.close_history[-20:, i]
        ma5 = c_hist[-5:].mean()
        ma20 = c_hist[-20:].mean()

        # 结合指数趋势与均线信号买卖
        if ma5 > ma20 and ctx.positions[i] == 0:
            ctx.buy(symbol_idx=i, amount=100)
        elif ma5 < ma20 and ctx.positions[i] > 0:
            ctx.sell(symbol_idx=i, amount=ctx.positions[i])

# 2. 初始化回测引擎
engine = Engine(
    initial_cash=1_000_000.0,
    fee_rate=0.0003,
    min_fee=5.0,
    stamp_duty=0.0005,
    slippage=0.0001,
    max_volume_ratio=0.1,
    matching_mode="close"
)

# 3. 运行多表回测 (主表自动推断,副表显式声明物理语义)
results = engine.run(
    strategy=multi_asset_strategy,
    data={
        "stock": pl.read_parquet("data/parquet/ashare.kline.1d/**/*.parquet"),
        "index": ts_table(pl.read_parquet("data/parquet/aindex.kline.1d/**/*.parquet")),
    },
)

# 4. 输出回测绩效与 Polars 交易日志
print(results.summary())
print(results.trade_logs)  # Polars DataFrame

Download files

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

Source Distribution

carrotquant_engine-1.2.0.tar.gz (35.4 kB view details)

Uploaded Source

Built Distribution

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

carrotquant_engine-1.2.0-py3-none-any.whl (42.1 kB view details)

Uploaded Python 3

File details

Details for the file carrotquant_engine-1.2.0.tar.gz.

File metadata

  • Download URL: carrotquant_engine-1.2.0.tar.gz
  • Upload date:
  • Size: 35.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for carrotquant_engine-1.2.0.tar.gz
Algorithm Hash digest
SHA256 7bb81738151dacea6346408c6636a5b6dd994febd1af4a5250fd86c6f6ec8ba2
MD5 068c8ad8e6353463b7466ecfcd39cf23
BLAKE2b-256 4173d18305cf57943809e4e83ad684f3dcf36737706896af2209b5edea946ea1

See more details on using hashes here.

Provenance

The following attestation bundles were made for carrotquant_engine-1.2.0.tar.gz:

Publisher: workflow.yml on CRThu/carrotquant-engine

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

File details

Details for the file carrotquant_engine-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for carrotquant_engine-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 44dcdc69aeabb8b16688b715b38a89494634ef7e66d0f32556a71110af1bdb3a
MD5 09ffb6e37a65268ed7a9e6763240c1df
BLAKE2b-256 fd5841a35876d4d356e5779704319d7d4a2113faec4e714902f4030dab8c23db

See more details on using hashes here.

Provenance

The following attestation bundles were made for carrotquant_engine-1.2.0-py3-none-any.whl:

Publisher: workflow.yml on CRThu/carrotquant-engine

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

Release history Release notifications | RSS feed

1.3.0

2 files

1.2.1

2 files

This release

1.2.0 This release

2 files

1.1.1

2 files

1.1.0

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 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