Skip to main content

Event-driven bar replay backtest engine for China A-share, ETF, bond and futures

Project description

jcback

事件驱动、逐 K 线推进的 A 股 / ETF / 可转债 / 期货回测库。

支持函数式策略(init / on_bar,与几策平台写法一致)与类式策略(Strategy 子类),可自带 OHLCV、使用内置模拟数据,或通过 jcdata 拉取行情。

安装

pip install jcback

需要 jcdata 行情时:

pip install jcback[jcdata]

或单独安装:

pip install jcdata

要求 Python >= 3.10

快速开始

函数式策略 + 模拟数据

无需外部行情,适合本地验证逻辑:

from jcback import run, MODE_BACKTEST, MATCH_NEXT_OPEN, ADJUST_PREV


def init(context):
    context.subscribe(context.symbols, frequency="1d", wait_group=True)


def on_bar(context, bars):
    for bar in bars:
        context.order_target_percent(bar.symbol, 0.5)


result = run(
    strategy_id="demo",
    mode=MODE_BACKTEST,
    symbols="600000.SH",
    backtest_start_time="2025-01-02",
    backtest_end_time="2025-03-31",
    backtest_adjust=ADJUST_PREV,
    backtest_match_mode=MATCH_NEXT_OPEN,
    init_func=init,
    on_bar=on_bar,
    use_mock=True,
)

print(result.indicator["return_pct"], "%")

对接 jcdata 历史行情

import jcdata
from jcback import run, MODE_BACKTEST, MATCH_NEXT_OPEN, print_backtest_report, setup_logger

jcdata.login(token="YOUR_TOKEN")

setup_logger()

result = run(
    strategy_id="demo",
    mode=MODE_BACKTEST,
    symbols=["600000.SH", "601318.SH"],
    backtest_start_time="2025-01-02",
    backtest_end_time="2025-06-30",
    backtest_match_mode=MATCH_NEXT_OPEN,
    init_func=init,
    on_bar=on_bar,
    use_jcdata=True,
)

print_backtest_report(result, "demo")

类式策略

from jcback import Strategy, run_backtest


class SmaCross(Strategy):
    n_short, n_long = 5, 20

    def init(self):
        c = self.data.Close
        self.ma_s = self.I(lambda x, n: x.rolling(n).mean(), c, self.n_short)
        self.ma_l = self.I(lambda x, n: x.rolling(n).mean(), c, self.n_long)

    def next(self):
        if self.ma_s[-2] < self.ma_l[-2] and self.ma_s[-1] > self.ma_l[-1]:
            self.buy()
        elif self.ma_s[-2] > self.ma_l[-2] and self.ma_s[-1] < self.ma_l[-1]:
            self.position.close()


result = run_backtest(
    SmaCross,
    symbols="600000.SH",
    start_date="2025-01-02",
    end_date="2025-06-30",
    use_mock=True,
)

自备 OHLCV

data 列为 Open / High / Low / Close / Volume(可选 Amount),索引为时间:

run(..., data=ohlcv_df, symbols="600000.SH")
# 多标的:data={"600000.SH": df1, "601318.SH": df2}

常用常量

常量 含义
MODE_BACKTEST 回测模式
ADJUST_NONE / ADJUST_PREV / ADJUST_POST 不复权 / 前复权 / 后复权
MATCH_NEXT_OPEN 下一根 K 线开盘价撮合
MATCH_CURRENT_CLOSE 当前 K 线收盘价撮合

手续费、交割与交易单位

未显式传入 commission 时,按包内 config.yamlproduct_fees.yaml 的品类规则计算(股票、ETF、转债、期货等),含最低 5 元佣金、买卖不同费率、卖出印花税等。

交割规则与最小交易单位按标的自动匹配,无需手动配置:

品种 交割 最小单位
股票 / ETF T+1 100 股(1 手)
可转债 T+0 10 张
期货 T+0 1 手

主要导出

runrun_backtestStrategyBacktestContextBarresolve_config
load_from_jcdataload_multi_ohlcvjcdata_to_ohlcvmake_mock_jcdata
get_last_resultserialize_for_uiprint_backtest_reportsetup_logger

完整 API 见 jcback.__all__ 或接口文档。

许可证

MIT

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

jcback-0.1.2.tar.gz (53.4 kB view details)

Uploaded Source

Built Distribution

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

jcback-0.1.2-py3-none-any.whl (64.4 kB view details)

Uploaded Python 3

File details

Details for the file jcback-0.1.2.tar.gz.

File metadata

  • Download URL: jcback-0.1.2.tar.gz
  • Upload date:
  • Size: 53.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for jcback-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ba31c5ab49be1b370630e5e104ec03b707f8dd807517be2372367eca596c81a6
MD5 8d6e26e3a44150d1409e0fb332b3f0af
BLAKE2b-256 e66677483e8914bfc048c574bb5ba4427de6601c1639edb9042769f8ac8115d5

See more details on using hashes here.

File details

Details for the file jcback-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: jcback-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 64.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for jcback-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 574d35f737167af9fa183f3383896a365796e9c3787469250635c0618d761a14
MD5 91f96afcaa3407a16695f973713addab
BLAKE2b-256 462f0e7c6d611199ac5e1b94d67d7f3f0ea85660a26734135642accbc112c770

See more details on using hashes here.

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