当前位置:首页>java>qmt实现自动跟单程序编写(附代码)

qmt实现自动跟单程序编写(附代码)

  • 2026-10-27 20:46:33
qmt实现自动跟单程序编写(附代码)

我们使用 miniqmt 进行 A 股交易。 miniqmt 是迅投 QMT 的极简版本,提供了 Python 接口。

要求:

1.实时监控股票池的每一笔成交。

2.将买和卖分别标记。

3.如果发现有一笔超过1000万的买入(注意:是单笔成交金额超过1000万),立即跟单购买(即程序自动买入相同股票,买入数量可以按比例调整,比如1000万对应的股数,但这里我们假设跟单购买1000万,注意实际买入量不能超过账户可用资金)。

步骤:

1.连接 miniqmt 。

2订阅股票池的股票行情(Level2行情,因为需要逐笔成交数据)。

3设置回调函数,处理逐笔成交数据。

4.在回调函数中,判断每一笔成交的金额(成交价格*成交量)是否大于1000万,并且是买入(注意:如何判断买入还是卖出?在逐笔成交中,通常有买卖方向标识)。

5.当发现符合条件的买入成交时,立即发出买入指令。

注意: miniqmt 的具体使用细节,请参考迅投的文档。

由于 miniqmt 的逐笔成交数据在 xtdata 中,我们可以通过订阅逐笔回调来实现。

但是,需要注意的是:

股票池:假设我们有一个股票代码列表,例如:['600519.SH','000001.SZ]

·如何判断买入?在逐笔成交中,有一个字段叫" tick _ type ",通常:0表示买入,1表示卖出(具体需要看 miniqmt 的文档,这里假设0为买入,1为卖出)。

·金额计算: price * volume ,注意单位, price 是元, volume 是股数,所以金额= price * volume (单位是元),1000万=10,000,000元。

由于实际交易中,我们可能无法完全按照1000万跟单(因为资金量限制),这里我们简化处理:跟单买入1000万,但实际买入量不能超过账户可用资金,并且要按100股(1手)的整数倍。

步骤详细:

1.导入模块

2.设置账户

3.定义股票池

4.订阅逐笔成交,并设置回调

5.在回调中处理每一笔成交,判断是否满足条件6.满足条件则下单

注意:避免重复跟单,比如同一笔成交可能会触发多次?我们这里不处理重复问题,因为是一笔成交触发一次,但实际中可能同一笔成交不会重复推送。

另外,由于是实盘,我们需要考虑交易频率,避免过于频繁。

代码结构:

由于 miniqmt 的文档可能不完全公开,以下代码基于公开资料和假设编写,可能需要调整。

假设 miniqmt 中订阅逐笔数据的函数为:

 xtdata . subscribe _ whole _ quote ( stock _ list , callback )

回调函数格式: callback ( data ),其中 data 包含股票代码、时间、价格、成交量、买卖方向等。具体实现

首先,确保安装了 miniqmt ,并且已经登录了账号。由于迅投 QMT 的 miniqmt 模块在实盘中需要运行在指定的客户端环境中,因此以下代码需要在迅投的 Python 环境中运行。

代码示例:

以下是使用miniqmt编写的A股自动交易程序,实时监控股票池并跟随大单买入:


```python
from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
import time

# 配置参数
ACCOUNT_PATH = 'your_account_path'  # 替换为你的账号路径
STOCK_POOL = ['600519.SH', '000858.SZ', '600036.SH']  # 监控股票池
MIN_BUY_AMOUNT = 10000000  # 触发跟单的买入金额(1000万)
TRADE_RATIO = 0.5  # 跟单比例(使用50%可用资金)

class MyTraderCallback(XtQuantTraderCallback):
    def on_disconnected(self):
        print("连接断开")
       
    def on_stock_order(self, order):
        print(f"订单状态更新: {order.stock_code} {order.order_status}")
       
    def on_stock_trade(self, trade):
        print(f"交易成交: {trade.stock_code} {trade.trade_price} {trade.trade_volume}")

def on_tick(data):
    """逐笔成交回调函数"""
    for stock_code, tick in data.items():
        if 'tick' not in tick or not tick['tick']:
            continue
           
        latest_tick = tick['tick'][-1]  # 获取最新一笔成交
        amount = latest_tick['price'] * latest_tick['volume']
       
        # 判断是否为大额买入单
        if latest_tick['type'] == 0 and amount >= MIN_BUY_AMOUNT:
            print(f"发现大单买入: {stock_code} {amount/10000:.2f}万元")
            follow_trade(stock_code, latest_tick['price'])

def follow_trade(stock_code, price):
    """执行跟单操作"""
    # 获取可用资金
    capital = trader.query_stock_asset(acc)
    if not capital or capital.cash <= 0:
        print("可用资金不足")
        return
   
    # 计算购买数量 (按比例使用可用资金)
    buy_amount = capital.cash * TRADE_RATIO
    volume = int(buy_amount // price // 100) * 100  # 取整手数
   
    if volume == 0:
        print("可用资金不足以购买1手")
        return
   
    # 发送买入订单 (限价当前成交价)
    order_id = trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY, volume,
                                 xtconstant.FIX_PRICE, price, '跟随大单策略')
    if order_id:
        print(f"跟单成功: {stock_code} 价格{price} 数量{volume} 订单ID:{order_id}")
    else:
        print("跟单失败")

if __name__ == '__main__':
    # 创建交易对象
    trader = XtQuantTrader(ACCOUNT_PATH)
    callback = MyTraderCallback()
    trader.register_callback(callback)
   
    # 连接交易
    trader.start()
    connect_result = trader.connect()
    if not connect_result:
        print("交易服务器连接失败")
        exit()
   
    # 获取账户
    acc = StockAccount('')  # 使用默认账号
   
    # 订阅逐笔行情
    xtdata.subscribe_whole_quote(STOCK_POOL, on_tick)
    print(f"开始监控股票池: {STOCK_POOL}")
   
    try:
        while True:
            time.sleep(1)  # 保持主线程运行
    except KeyboardInterrupt:
        trader.stop()
        print("程序已退出")
```

程序说明:

1. 核心功能:
   · 实时监控股票池的逐笔成交数据
   · 识别超过1000万的买入单(标记为type=0)
   · 自动按比例使用可用资金跟单买入
   · 支持多账户交易(需配置账户路径)
2. 关键参数:
   ```python
   ACCOUNT_PATH = 'your_account_path'  # 替换为实际账号路径
   STOCK_POOL = ['600519.SH', '000858.SZ']  # 监控股票池
   MIN_BUY_AMOUNT = 10000000  # 1000万触发门槛
   TRADE_RATIO = 0.5  # 使用50%可用资金跟单
   ```
3. 运行流程:
   · 连接交易服务器
   · 订阅股票池的逐笔行情
   · 在回调函数中分析每笔成交
   · 发现符合条件的买入大单立即跟单
   · 按整手数下单,避免废单
4. 风险控制:
   · 自动计算可用资金比例
   · 确保下单量不超过账户资金
   · 限价单使用触发价格避免滑点过大
   · 每笔交易都有明确日志记录

使用前准备:

1. 安装miniQMT:
   ```bash
   pip install miniqmt
   ```
2. 配置账号:
   · 在券商开通QMT交易权限
   · 获取账号路径(通常为券商提供的账号文件夹路径)
   · 替换代码中的your_account_path
3. 注意事项:
   · 实盘前需在模拟环境充分测试
   · 建议设置单日交易次数限制
   · 注意大单可能是机构拆单结果
   · 监控程序需要稳定运行环境中

注意:实际交易前请充分测试,股市有风险,自动化交易需谨慎。建议先用模拟盘验证策略有效性。

最新文章

随机文章