Pre-release
This release is a pre-release and may not be stable for production use.
QKA — 快量化
Quant Kit for A-shares
简洁易用的 A 股量化回测框架。
安装
包安装
pip install qka
需要 Python 3.10+。
AI 技能安装
为 Claude Code、Cursor 等 AI 编程工具安装 QKA 技能:
npx skills add zsrl/qka
安装后,AI 助手即可自动加载 QKA 框架的 API 文档,生成符合规范的量化策略代码。
快速上手
数据
from qka import Data
data = Data(
symbols=['000001.SZ', '600000.SH'],
indicators={
'sma_5': ('ta.trend.sma_indicator', 'close', 5),
'rsi_14': ('ta.momentum.rsi', 'close', 14),
},
)
df = data.get() # 返回宽表 DataFrame,列名 {symbol}|{factor}
策略
from qka import Strategy
class MyStrategy(Strategy):
def __init__(self):
super().__init__()
self.lookback = 20 # 自定义参数
def on_bar(self, date):
close = self.get('close') # 当前横截面
hist = self.history('close', 20) # 历史窗口
# 交易逻辑:self.broker.buy / self.broker.sell
# 仓位计算:self.sizing.percent / self.sizing.fixed_shares
回测
from qka import Backtest
strategy = MyStrategy()
bt = Backtest(data, strategy)
bt.run(cash=200000, start_date='2024-01-01', benchmark='000300.SH')
print(bt.metrics['total_return_pct']) # 总收益率
print(bt.metrics['sharpe_ratio']) # 夏普比率
核心能力
- 数据获取 — 写个股票代码就能取到本地,自动缓存、自动补齐最新数据,重复使用秒读
- 多数据源 — 内置
tickflow、baostock、tdx三个行情源,改一个source=即可切换,各源缓存分目录存放、互不干扰 - 技术指标 — 均线、MACD、RSI、ATR 等 ta 库全部指标,外加 α/β、夏普、最大回撤等内置指标,声明一下即可,策略里不用自己 rolling
- 估值字段 — 换手率、涨跌幅、停牌与 ST 标记、市盈率、市净率等,需要哪些就取哪些
- 模拟行情 — 一条
Simulate就能造出单边上涨、单边下跌、来回震荡的走势,不必等真实行情,用来验证策略是不是真在按逻辑交易 - 多标的回测 — 一次传一篮子股票,
self.get()取当日横截面,self.history()取历史窗口 - 仓位管理 — 按资金比例、按金额、按股数、按 ATR 风险四种算法
- 交易成本 — 佣金、印花税、滑点均已内置,也可自行调整
- 绩效指标 — 总收益、年化、夏普、最大回撤、Calmar、胜率、盈亏比等 13 项,跑完即有
- 回测报告 — 净值曲线、回撤曲线、月度收益热力图、逐笔交易明细,一键生成 HTML,浏览器直接打开
- 基准对比 — 传入基准指数即可对比收益、计算 β / α
文档
框架 API 完整文档见 skills/qka/SKILL.md——所有类的方法签名、参数、返回值和约束都在里面。
完整示例
from qka import Data, Strategy, Backtest
data = Data(
symbols=['000001.SZ'],
indicators={
'sma_5': ('ta.trend.sma_indicator', 'close', 5),
'sma_20': ('ta.trend.sma_indicator', 'close', 20),
},
)
class MaCross(Strategy):
def __init__(self):
super().__init__()
self.pct = 0.2
def on_bar(self, date):
close = self.get('close')
fast = self.get('sma_5')
slow = self.get('sma_20')
for sym in close.index:
price = float(close[sym])
if price <= 0:
continue
if fast[sym] > slow[sym]:
size = self.sizing.percent(self.pct, price)
if size > 0:
self.broker.buy(sym, price, size)
else:
pos = self.broker.positions.get(sym, {}).get('size', 0)
if pos > 0:
self.broker.sell(sym, price, pos)
strategy = MaCross()
bt = Backtest(data, strategy)
bt.run(cash=200000, start_date='2024-01-01')
print(bt.metrics['total_return_pct'])
许可证
致谢
- tickflow — 免费 A 股 / ETF / 可转债行情(默认数据源)
- baostock — 免费 A 股数据(估值等扩展字段)
- 通达信 — 本机「TQ 版」客户端的行情(
source='tdx',仅 Windows) - ta — 技术指标库
⚠️ 量化交易存在风险,请充分了解后再使用本框架。
Metadata
Release files for qka 2.3.3.dev2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qka-2.3.3.dev2.tar.gz | 70.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qka-2.3.3.dev2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 146.8 kB
Release files / qka-2.3.3.dev2.tar.gz
| Download URL | qka-2.3.3.dev2.tar.gz |
|---|---|
| Size | 70.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d270696e611c5cd68416997cee917e094c17d51099d10965f82b0e8b4c89be29
|
|
BLAKE2b-256 checksum How to use checksums |
96e891b9b67f281f10ec3e80e548535c8b680b1c1f0e8fff6b9c4cf9f1e0089a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / qka-2.3.3.dev2-py3-none-any.whl
| Download URL | qka-2.3.3.dev2-py3-none-any.whl |
|---|---|
| Size | 76.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
512a269a4a9e36e72705151365321cb57783d6dd640e48bdd0acb12a8933239f
|
|
BLAKE2b-256 checksum How to use checksums |
1fef047763487c91ef18b9937d0c8ab858e834fba931d08beaa38ab327001ce1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|