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 行情时(要求 jcdata >= 0.1.4):
pip install jcback[jcdata]
或单独安装:
pip install "jcdata>=0.1.4"
要求 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.yaml 及 product_fees.yaml 的品类规则计算(股票、ETF、转债、期货等),含最低 5 元佣金、买卖不同费率、卖出印花税等。
交割规则与最小交易单位按标的自动匹配,无需手动配置:
| 品种 | 交割 | 最小单位 |
|---|---|---|
| 股票 / ETF | T+1 | 100 股(1 手) |
| 可转债 | T+0 | 10 张 |
| 期货 | T+0 | 1 手 |
策略信号追踪(track_vars)
函数式策略可在 init(context) 中声明 context.track_vars(dict),在 on_bar 中更新;引擎每个交易日结束后自动快照,结果写入 BacktestResult.daily_signals;也可经 serialize_for_ui 得到 signals_daily / signals_schema。
def init(context):
context.track_vars = {"ma5": 0.0, "signal": 0, "weights": {}, "top3": [None, None, None]}
def on_bar(context, bars):
tv = context.track_vars
tv["ma5"] = ...
tv["signal"] = 1
展平规则:scalar → 单列;dict → {name}_{key};list → {name}_{index}。
主要导出
run、run_backtest、Strategy、Backtest、Context、Bar、resolve_config、
load_from_jcdata、load_multi_ohlcv、jcdata_to_ohlcv、ohlcv_map_from_jcdata_raw、
make_mock_jcdata、get_last_result、serialize_for_ui、print_backtest_report、setup_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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jcback-0.1.4.tar.gz.
File metadata
- Download URL: jcback-0.1.4.tar.gz
- Upload date:
- Size: 57.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56d03b9e5c8ebf6d60966e9d50cc57a37cdb5af1daf1962b31b7cdfc49e04195
|
|
| MD5 |
5301937ce7a625bf4d61dc42ca08db38
|
|
| BLAKE2b-256 |
4edc882b357824143b9466bdfb13c7aa1e5339440d65ab98c5ec4f9ffbe09a57
|
File details
Details for the file jcback-0.1.4-py3-none-any.whl.
File metadata
- Download URL: jcback-0.1.4-py3-none-any.whl
- Upload date:
- Size: 68.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2976aa9d152f3733474812c8598c189a762290123bea22cd741d5908411839e
|
|
| MD5 |
fc0e4fcbdd10821e13d9efc885653615
|
|
| BLAKE2b-256 |
1f5e2ce56f6d5b1d5d647ce5fbc2b9dd40fb1ba569fb1248567b37bb03b973ee
|