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()  # 或 jcdata.login(token="YOUR_TOKEN", base_url="...")

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、转债、期货等)。

settlement_rule="T+1"(股票默认)或 "T+0"(转债、期货等)控制当日买入是否可卖。

主要导出

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.1.tar.gz (50.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.1-py3-none-any.whl (61.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: jcback-0.1.1.tar.gz
  • Upload date:
  • Size: 50.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.1.tar.gz
Algorithm Hash digest
SHA256 1a0a4a486bde346607a5a95369cd6d6e75e587c847073c4e699528b76fb2cd16
MD5 8d3ea34c57dfd7e6aa9d5dab08a87c15
BLAKE2b-256 62042ca8d313208980405c469e6f1bcbbb4a16c4f2b9bd5763fbd98fcb362b71

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jcback-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 61.2 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 667d4889a9294f19daf496d3bff3e1f05d6578f8c827f582a15f67dd23d4d73b
MD5 a3fb5d74b90ba98a48ae9f344dc3601f
BLAKE2b-256 2f489158942a5d2e0782367c732b35b77094e3b5b0c45eb8a395cf1c7389d89c

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