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=['sz.000001', 'sh.600000'],
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='sh.000300')
print(bt.metrics['total_return_pct']) # 总收益率
print(bt.metrics['sharpe_ratio']) # 夏普比率
核心能力
- 多数据源 — baostock(默认)、akshare、QMT
- 预计算指标 — ta 库全部 60+ 指标,
('ta.trend.sma_indicator', 'close', 5)格式直接透传 - 事件驱动回测 — 按日推进,
self.get()横截面 +self.history()窗口序列 - 仓位管理 —
sizing.percent()/sizing.fixed_amount()/sizing.fixed_shares()/sizing.atr_risk() - 交易模拟 — 佣金万 2.5、印花税万 5(仅卖出)、滑点 0.1%,最低佣金 5 元
- 绩效指标 — 总收益率、年化、夏普比率、最大回撤、Calmar、胜率、盈亏比等 13 项
- 基准对比 — 支持沪深 300(或指定指数)对比
文档
框架 API 完整文档见 skills/qka/SKILL.md——所有类的方法签名、参数、返回值和约束都在里面。
完整示例
from qka import Data, Strategy, Backtest
data = Data(
symbols=['sz.000001'],
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'])
许可证
致谢
⚠️ 量化交易存在风险,请充分了解后再使用本框架。
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
qka-2.2.0.tar.gz
(51.9 kB
view details)
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
qka-2.2.0-py3-none-any.whl
(56.8 kB
view details)
File details
Details for the file qka-2.2.0.tar.gz.
File metadata
- Download URL: qka-2.2.0.tar.gz
- Upload date:
- Size: 51.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7cb97cd678726ad1769b7402ac488ef4efec0d89657d677673dc1aa1e3bca699
|
|
| MD5 |
380b5039bc27207eb9e52f17e7d39dd5
|
|
| BLAKE2b-256 |
a079da82de02a6b9aaf47f2f1c1cf2185fe674c5fcc686134e16b42096fa400d
|
File details
Details for the file qka-2.2.0-py3-none-any.whl.
File metadata
- Download URL: qka-2.2.0-py3-none-any.whl
- Upload date:
- Size: 56.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f52bd178a46335b455942b2e22ac64eb8fdbfca0b26797d2ad64a317cf7da281
|
|
| MD5 |
2ccbdb3f123e130e10ec707e1b57907b
|
|
| BLAKE2b-256 |
2b06b7407f76a9a58f8afdb41f79c29dec26d43d6e0ab9137099c67c402dac01
|