快捷量化助手(Quick Quantitative Assistant)- 简洁易用的A股量化交易框架
Project description
QKA - 快量化
快捷量化助手(Quick Quantitative Assistant) 是一个简洁易用、功能完整的A股量化交易框架,支持数据获取、策略回测、实盘交易等全流程量化交易功能。
特性
- 🚀 简洁易用: 统一的API设计,降低量化交易门槛
- 📊 数据丰富: 支持Akshare数据源,提供多周期、多因子数据
- 🔄 高效回测: 基于时间序列的回测引擎,支持多股票横截面处理
- 💰 实盘交易: 集成QMT交易接口,支持实盘交易
- 📈 可视化: 内置Plotly图表,提供交互式回测结果展示
- 🔧 模块化: 高度模块化设计,易于扩展和维护
- 📝 文档完整: 提供详细的API文档和使用示例
安装
从PyPI安装
pip install qka
从源码安装
git clone https://github.com/zsrl/qka.git
cd qka
pip install -e .
快速开始
1. 数据获取
import qka
# 创建数据对象
data = qka.Data(
symbols=['000001.SZ', '600000.SH'], # 股票代码列表
period='1d', # 日线数据
adjust='qfq' # 前复权
)
# 获取数据
df = data.get()
print(df.head())
2. 策略开发
import qka
class MyStrategy(qka.Strategy):
def __init__(self):
super().__init__()
self.cash = 100000 # 初始资金
def on_bar(self, date, get):
"""每个bar的处理逻辑"""
# 获取当前价格数据
close_prices = get('close')
# 示例策略:当000001.SZ价格低于10元时买入
if '000001.SZ' in close_prices and close_prices['000001.SZ'] < 10:
# 买入1000股
self.broker.buy('000001.SZ', close_prices['000001.SZ'], 1000)
3. 回测分析
import qka
# 创建策略实例
strategy = MyStrategy()
# 创建回测引擎
backtest = qka.Backtest(data, strategy)
# 运行回测
backtest.run()
# 绘制收益曲线
backtest.plot("我的策略回测结果")
4. QMT实盘交易
启动交易服务器
from qka.brokers.server import QMTServer
# 创建交易服务器
server = QMTServer(
account_id="YOUR_ACCOUNT_ID", # 你的账户ID
mini_qmt_path="YOUR_QMT_PATH" # QMT安装路径
)
# 启动服务器(会打印token供客户端使用)
server.start()
使用交易客户端
from qka.brokers.client import QMTClient
# 创建交易客户端
client = QMTClient(
base_url="http://localhost:8000", # 服务器地址
token="服务器打印的token" # 访问令牌
)
# 查询账户资产
assets = client.api("query_stock_asset")
print(assets)
# 下单交易
from xtquant import xtconstant
result = client.api(
"order_stock",
stock_code='600000.SH',
order_type=xtconstant.STOCK_BUY,
order_volume=1000,
price_type=xtconstant.FIX_PRICE,
price=10.5
)
核心模块
数据模块 (qka.Data)
- 多数据源: 支持Akshare、QMT等数据源
- 缓存机制: 自动缓存数据,提高访问效率
- 并发下载: 多线程并发下载,提升数据获取速度
- 数据标准化: 统一数据格式,便于策略开发
回测模块 (qka.Backtest)
- 时间序列: 基于时间序列的回测引擎
- 多资产支持: 支持多股票横截面数据处理
- 交易记录: 完整的交易记录和持仓跟踪
- 可视化: 交互式回测结果图表
策略模块 (qka.Strategy)
- 抽象基类: 提供策略开发的标准接口
- 事件驱动: 基于bar的事件处理机制
- 交易接口: 内置买入卖出操作接口
- 状态管理: 自动管理资金和持仓状态
经纪商模块 (qka.brokers)
- QMT集成: 完整的QMT交易接口封装
- 客户端/服务器: 支持远程交易服务
- 订单管理: 完整的订单生命周期管理
- 错误处理: 完善的错误处理和日志记录
MCP模块 (qka.mcp)
- 模型服务: 提供模型上下文协议支持
- 数据查询: 支持Akshare数据查询工具
- 异步处理: 基于异步IO的高性能处理
工具模块 (qka.utils)
- 日志系统: 结构化日志记录,支持文件和控制台输出
- 颜色输出: 带颜色的控制台输出
- 工具函数: 各种实用工具函数
高级用法
自定义因子计算
import pandas as pd
def calculate_ma_factor(df):
"""计算移动平均因子"""
df['ma5'] = df['close'].rolling(5).mean()
df['ma20'] = df['close'].rolling(20).mean()
return df
data = qka.Data(
symbols=['000001.SZ'],
factor=calculate_ma_factor # 应用自定义因子
)
批量数据处理
# 批量处理多只股票
symbols = ['000001.SZ', '600000.SH', '000002.SZ', '600036.SH']
data = qka.Data(
symbols=symbols,
pool_size=20 # 增加并发数提高下载速度
)
事件驱动策略
class EventDrivenStrategy(qka.Strategy):
def on_bar(self, date, get):
close_prices = get('close')
volumes = get('volume')
# 基于成交量的事件
for symbol in close_prices.index:
if volumes[symbol] > volumes.mean() * 2: # 成交量放大
self.broker.buy(symbol, close_prices[symbol], 100)
配置说明
数据缓存配置
from pathlib import Path
data = qka.Data(
symbols=['000001.SZ'],
datadir=Path("/path/to/cache") # 自定义缓存目录
)
常见问题
Q: 如何获取股票代码?
A: 可以使用Akshare获取股票列表:
import akshare as ak
stock_list = ak.stock_info_a_code_name()
Q: 回测时如何设置手续费?
A: 目前版本默认无手续费,可以在策略中手动计算或扩展Broker类。
Q: 支持哪些数据周期?
A: 目前主要支持日线数据,可根据需要扩展分钟线、周线等。
Q: 如何添加新的数据源?
A: 继承Data类并实现相应的数据获取方法。
许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
联系方式
- 项目主页: https://github.com/zsrl/qka
- 问题反馈: GitHub Issues
致谢
感谢以下开源项目的支持:
注意: 量化交易存在风险,请在充分了解风险的情况下使用本框架。作者不对使用本框架产生的任何投资损失负责。
Project details
Release history Release notifications | RSS feed
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 qka-1.2.0.tar.gz.
File metadata
- Download URL: qka-1.2.0.tar.gz
- Upload date:
- Size: 47.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54c9a5bafdda11cbbb34e6283f35bc73babcbcd7eb08fd044941067c217ed0ea
|
|
| MD5 |
2946e01604b52318a4cfb42bc343f30a
|
|
| BLAKE2b-256 |
0707fc624013e12e743561b04adeb6393db85024099b80e9f9a91b08bfb09788
|
File details
Details for the file qka-1.2.0-py3-none-any.whl.
File metadata
- Download URL: qka-1.2.0-py3-none-any.whl
- Upload date:
- Size: 46.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0542480f15b9c084242b175f1b3501a47427dceb1da4dfa2212296cab5ab69a6
|
|
| MD5 |
871bb9b5171c0a9dc9dee5ffbed5bab4
|
|
| BLAKE2b-256 |
6d9367fc155b1f499bf74115c189e49d133ab6c220e3ddbcfd1e79fdb0abb4db
|