交易模块 API 参考¶
QKA 的交易接口模块,提供 QMT 交易服务器的客户端和服务器端实现。
qka.brokers.QMTClient¶
QMT 交易客户端类,提供与 QMT 交易服务器的通信接口。
QMT交易客户端类
提供与QMT交易服务器的通信接口,支持各种交易操作。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
base_url |
str
|
API服务器地址 |
session |
Session
|
HTTP会话对象 |
token |
str
|
访问令牌 |
headers |
Dict
|
HTTP请求头 |
Source code in qka/brokers/client.py
__init__(base_url='http://localhost:8000', token=None)
¶
初始化交易客户端
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
base_url
|
str
|
API服务器地址,默认为本地8000端口 |
'http://localhost:8000'
|
token
|
str
|
访问令牌,必须与服务器的token一致 |
None
|
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果未提供token |
源代码位于: qka/brokers/client.py
api(method_name, **params)
¶
通用调用接口方法
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
method_name
|
str
|
要调用的接口名称 |
必需 |
**params
|
接口参数,作为关键字参数传入 |
{}
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
Any |
Any
|
接口返回的数据 |
引发:
| 类型 | 描述 |
|---|---|
Exception
|
API调用失败时抛出异常 |
源代码位于: qka/brokers/client.py
使用示例¶
from qka.brokers.client import QMTClient
# 创建交易客户端
client = QMTClient(
base_url="http://localhost:8000",
token="服务器打印的token"
)
# 调用交易接口
assets = client.api("query_stock_asset")
print(assets)
qka.brokers.QMTServer¶
QMT 交易服务器类,将 QMT 交易接口封装为 RESTful API。
QMT交易服务器类
将QMT交易接口封装为RESTful API,支持远程调用交易功能。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
account_id |
str
|
账户ID |
mini_qmt_path |
str
|
miniQMT安装路径 |
host |
str
|
服务器地址 |
port |
int
|
服务器端口 |
app |
FastAPI
|
FastAPI应用实例 |
trader |
QMT交易对象 |
|
account |
账户对象 |
|
token |
str
|
访问令牌 |
Source code in qka/brokers/server.py
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | |
__init__(account_id, mini_qmt_path, host='0.0.0.0', port=8000, token=None)
¶
初始化交易服务器
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
account_id
|
str
|
账户ID |
必需 |
mini_qmt_path
|
str
|
miniQMT路径 |
必需 |
host
|
str
|
服务器地址,默认0.0.0.0 |
'0.0.0.0'
|
port
|
int
|
服务器端口,默认8000 |
8000
|
token
|
Optional[str]
|
可选的自定义token |
None
|
源代码位于: qka/brokers/server.py
generate_token()
¶
生成基于机器码的固定token
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
生成的token字符串 |
源代码位于: qka/brokers/server.py
verify_token(x_token=Header(...))
async
¶
验证token的依赖函数
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
x_token
|
str
|
请求头中的token |
Header(...)
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
验证通过的token |
引发:
| 类型 | 描述 |
|---|---|
HTTPException
|
token无效时抛出401错误 |
源代码位于: qka/brokers/server.py
init_trader()
¶
convert_to_dict(obj)
¶
将结果转换为可序列化的字典
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
obj
|
任意对象 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Dict[str, Any]
|
Dict[str, Any]: 可序列化的字典 |
源代码位于: qka/brokers/server.py
convert_method_to_endpoint(method_name, method)
¶
将 XtQuantTrader 方法转换为 FastAPI 端点
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
method_name
|
str
|
方法名称 |
必需 |
method
|
方法对象 |
必需 |
源代码位于: qka/brokers/server.py
setup_routes()
¶
设置所有路由
源代码位于: qka/brokers/server.py
使用示例¶
from qka.brokers.server import QMTServer
# 创建交易服务器
server = QMTServer(
account_id="YOUR_ACCOUNT_ID",
mini_qmt_path="YOUR_QMT_PATH"
)
# 启动服务器
server.start()
qka.brokers.trade¶
交易执行相关类和函数,包含订单、交易和持仓管理。
OrderSide
¶
OrderType
¶
OrderStatus
¶
Order
¶
订单对象
Source code in qka/brokers/trade.py
__init__(symbol, side, quantity, order_type='market', price=None, order_id=None)
¶
初始化订单
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
symbol
|
str
|
股票代码 |
必需 |
side
|
str
|
买卖方向 ("buy" 或 "sell") |
必需 |
quantity
|
int
|
数量 |
必需 |
order_type
|
str
|
订单类型 |
'market'
|
price
|
Optional[float]
|
价格(限价单需要) |
None
|
order_id
|
Optional[str]
|
订单ID |
None
|
源代码位于: qka/brokers/trade.py
Trade
¶
交易记录
Source code in qka/brokers/trade.py
__init__(order_id, symbol, side, quantity, price, commission=0.0)
¶
初始化交易记录
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
order_id
|
str
|
订单ID |
必需 |
symbol
|
str
|
股票代码 |
必需 |
side
|
str
|
买卖方向 |
必需 |
quantity
|
int
|
成交数量 |
必需 |
price
|
float
|
成交价格 |
必需 |
commission
|
float
|
手续费 |
0.0
|
源代码位于: qka/brokers/trade.py
Position
¶
持仓信息
Source code in qka/brokers/trade.py
MyXtQuantTraderCallback
¶
Bases: XtQuantTraderCallback
Source code in qka/brokers/trade.py
on_disconnected()
¶
on_stock_order(order)
¶
委托信息推送 :param order: XtOrder对象 :return:
源代码位于: qka/brokers/trade.py
on_stock_trade(trade)
¶
成交信息推送 :param trade: XtTrade对象 :return:
源代码位于: qka/brokers/trade.py
主要组件¶
Order 类¶
订单对象,表示一个交易订单。
Trade 类¶
交易记录,表示一个已成交的交易。
Position 类¶
持仓信息,表示一个持仓头寸。
create_trader 函数¶
创建 QMT 交易对象的便捷函数。
使用示例¶
from qka.brokers.trade import create_trader, Order
# 创建交易对象
trader, account = create_trader(account_id, mini_qmt_path)
# 创建订单
order = Order(
symbol='000001.SZ',
side='buy',
quantity=1000,
order_type='market'
)
模块导入方式¶
交易模块需要从子模块导入:
# 客户端
from qka.brokers.client import QMTClient
# 服务器
from qka.brokers.server import QMTServer
# 交易执行
from qka.brokers.trade import create_trader, Order, Trade, Position
工作流程¶
1. 启动交易服务器¶
from qka.brokers.server import QMTServer
server = QMTServer(
account_id="123456789",
mini_qmt_path="D:/qmt"
)
server.start() # 会打印token供客户端使用
2. 使用交易客户端¶
from qka.brokers.client import QMTClient
client = QMTClient(
base_url="http://localhost:8000",
token="服务器打印的token"
)
# 查询账户信息
assets = client.api("query_stock_asset")
# 下单交易
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
)
注意事项¶
- QMT 依赖: 需要安装 QMT 并正确配置环境
- 网络连接: 确保服务器和客户端网络连通
- 权限验证: 使用 token 进行身份验证
- 错误处理: 妥善处理网络错误和交易失败