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=['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.1.2.dev6.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.1.2.dev6-py3-none-any.whl
(56.8 kB
view details)
File details
Details for the file qka-2.1.2.dev6.tar.gz.
File metadata
- Download URL: qka-2.1.2.dev6.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 |
17d06c1b0d5d30f1ca63d1f84cf712d5eccfb510442c98b02c2029d3960a6f20
|
|
| MD5 |
43f5d808aabb054e339750a56d62c01a
|
|
| BLAKE2b-256 |
909eb890ac38e9e08afcfe5c013a315d81715be1521b4567dad63df628ba605a
|
File details
Details for the file qka-2.1.2.dev6-py3-none-any.whl.
File metadata
- Download URL: qka-2.1.2.dev6-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 |
7392beb999221863e4c345ba28d47a2cd192e53b725e10e2938c58e384e32134
|
|
| MD5 |
e199ac117eb41c37a9c15349947e5f35
|
|
| BLAKE2b-256 |
336d24ec58699680984db104ecc05b743115f70036e06e5a3574bee318c4b6c9
|