前言

股票日内做 T 是短线常用的降低持仓成本手段,市面上主流做 T 思路分为均线法、量价法、技术指标组合法,其中MACD+RSI + 成交量多指标共振策略胜率相对稳定。本文基于 MiniQMT(xtquant)量化接口,使用 1 分钟 K 线搭建全自动日内 T+0 交易脚本,完整封装指标计算、信号生成、实盘下单全流程。

风险提示:本文代码仅作量化学习演示,股票日内交易存在波动风险,实盘运行前务必回测模拟,不构成任何投资建议。

一、策略核心逻辑

1. 数据周期

采用 1 分钟 K 线捕捉日内短线高低点,适配震荡个股日内波段操作。

2. 指标参数

  • MACD:快线 12、慢线 26、信号线 9
  • RSI:周期 14,超卖阈值 30,超买阈值 70
  • 成交量:20 周期均量,放量 1.5 倍、缩量 0.8 倍区分量能状态

3. 买入做 T(低吸)三重共振条件

  1. RSI 指标进入超卖区间(RSI<30)
  2. MACD 绿柱持续缩短 或 DIF 线上穿 DEA 线(金叉)
  3. 当前成交量缩量,回调动能衰竭

4. 卖出做 T(高抛)三重共振条件

  1. RSI 指标进入超买区间(RSI>70)
  2. MACD 红柱持续缩短 或 DIF 线下穿 DEA 线(死叉)
  3. 当前成交量放量,上涨动能衰减

二、完整代码实现

1. 模块导入与全局策略参数

from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
import pandas as pd
import numpy as np
import talib as ta

# ======================策略参数(可根据个股调整)======================
CODE = "600000.SH"        # 交易标的股票代码
PERIOD = "1m"             # 日内做T采用1分钟K线
FASTperiod = 12           # MACD快线周期
SLOWperiod = 26           # MACD慢线周期
SIGNALperiod = 9          # MACD信号线周期
RSI_N = 14                # RSI计算周期
VOLUME_MULTIPLE = 1.5     # 放量倍数:大于1.5倍均量判定放量
VOL_LOOKBACK = 20         # 成交量均线计算窗口
RSI_OVERSOLD = 30         # RSI超卖阈值(买入)
RSI_OVERBOUGHT = 70       # RSI超买阈值(卖出)

2. 指标计算函数:获取 K 线并计算 MACD、RSI、量能指标

# ======================1. 获取并计算指标:MACD、RSI、成交量======================
def get_indicators(code, period):
    """获取K线并计算MACD、RSI、成交量指标"""
    # 下载最新300根1分钟K线数据
    xtdata.download_sector_data([code], period, start_time="", end_time="", count=300)
    # 读取本地行情数据
    df = xtdata.get_local_data(field_list=[], stock_code=code, period=period, count=300)
    # 空值前向填充
    df = df.fillna(method="ffill")
    
    close = df["close"].values
    volume = df["volume"].values

    # 计算MACD指标 DIF、DEA、MACD柱
    dif, dea, macd_bar = ta.MACD(
        close,
        fastperiod=FASTperiod,
        slowperiod=SLOWperiod,
        signalperiod=SIGNALperiod
    )

    # 计算RSI相对强弱指标
    rsi = ta.RSI(close, timeperiod=RSI_N)

    # 成交量均线、放量/缩量标记
    vol_ma = ta.SMA(volume, VOL_LOOKBACK)
    is_volume_up = volume > vol_ma * VOLUME_MULTIPLE  # 放量标记
    is_volume_down = volume < vol_ma * 0.8           # 缩量标记

    # 将指标合并至原始行情DataFrame
    df["dif"] = dif
    df["dea"] = dea
    df["macd_bar"] = macd_bar
    df["rsi"] = rsi
    df["vol_ma"] = vol_ma
    df["is_volume_up"] = is_volume_up
    df["is_volume_down"] = is_volume_down
    
    return df

3. 交易信号生成函数:区分买入 T / 卖出 T / 无信号

# ======================2. 日内做T核心买卖信号======================
def generate_signal(df):
    """生成做T买入/卖出信号
    return: signal(0无信号,1买入T,-1卖出T), 当前最新K线数据
    """
    signal = 0  # 初始化无信号
    latest = df.iloc[-1]   # 最新一根1分钟K线
    prev = df.iloc[-2]     # 前一根1分钟K线

    # ----------------------买入做T(低吸)条件----------------------
    buy_condition = (
        # 条件1:RSI超卖小于30
        (latest["rsi"] < RSI_OVERSOLD)
        and
        # 条件2:MACD绿柱缩短 或 MACD金叉
        (
            (latest["macd_bar"] < 0 and latest["macd_bar"] > prev["macd_bar"])
            or
            (latest["dif"] > latest["dea"] and prev["dif"] <= prev["dea"])
        )
        and
        # 条件3:缩量回调,抛压衰竭
        latest["is_volume_down"]
    )

    # ----------------------卖出做T(高抛)条件----------------------
    sell_condition = (
        # 条件1:RSI超买大于70
        (latest["rsi"] > RSI_OVERBOUGHT)
        and
        # 条件2:MACD红柱缩短 或 MACD死叉
        (
            (latest["macd_bar"] > 0 and latest["macd_bar"] < prev["macd_bar"])
            or
            (latest["dif"] < latest["dea"] and prev["dif"] >= prev["dea"])
        )
        and
        # 条件3:放量上涨,多头动能衰减
        latest["is_volume_up"]
    )

    # 判定信号
    if buy_condition:
        signal = 1
    elif sell_condition:
        signal = -1

    return signal, latest

4. 策略主运行函数:信号校验、账户查询、自动下单

# ======================3. 执行交易(日内做T)======================
def run_t_strategy(xt_trader, acc):
    """运行日内做T策略主函数"""
    print(f"===== 开始执行 {CODE} 日内做T策略 =====")
    # 1. 获取完整指标行情数据
    df = get_indicators(CODE, PERIOD)
    # 2. 生成交易信号
    signal, latest = generate_signal(df)
    price = latest["close"]

    # 打印当前盘面指标状态,方便日志观察
    print(f"最新价: {price:.2f}")
    print(f"RSI: {latest['rsi']:.2f}")
    print(f"MACD DIF: {latest['dif']:.6f}, DEA: {latest['dea']:.6f}")
    print(f"MACD柱: {latest['macd_bar']:.6f}")
    print(f"放量: {latest['is_volume_up']}, 缩量: {latest['is_volume_down']}")

    # 查询账户持仓、可用资金
    pos = xt_trader.query_stock_position(acc, CODE)
    available_cash = xt_trader.query_account(acc).cash
    pos_volume = pos.volume if pos else 0

    # 买入做T:有现金 + 买入信号,单次下单100股
    if signal == 1:
        print("✅ 触发【做T买入信号】")
        if available_cash > price * 100:
            xt_trader.order_stock(
                acc, CODE, xt_trader.STOCK_BUY, 100, 0, price, "日内做T-低吸"
            )
        else:
            print("现金不足,无法买入")
    
    # 卖出做T:有持仓 + 卖出信号,单次卖出100股
    elif signal == -1:
        print("❌ 触发【做T卖出信号】")
        if pos_volume >= 100:
            xt_trader.order_stock(
                acc, CODE, xt_trader.STOCK_SELL, 100, 0, price, "日内做T-高抛"
            )
        else:
            print("无持仓,无法卖出")
    
    # 无交易信号
    else:
        print("📊 无交易信号,继续观察")

三、使用说明

  1. 环境依赖
    • 安装 MiniQMT 量化终端,配置 xtquant 接口;
    • 依赖库:pandas、numpy、TA-Lib,TA-Lib 需手动安装底层库。
  2. 参数修改
    • 修改CODE切换交易个股;
    • 震荡行情可缩小 RSI 阈值、降低放量倍数,趋势行情可放大参数过滤杂信号。
  3. 交易规则限制
    • 代码单次交易固定 100 手(A 股最小交易单位);
    • 买入校验可用资金、卖出校验持仓数量,避免废单;
  4. 运行方式 配合 MiniQMT 定时轮询(如每 60 秒执行一次run_t_strategy),实现盘中全自动盯盘做 T。

四、策略优缺点分析

优势

  1. 多指标共振过滤单一指标假信号,减少频繁无效交易;
  2. 量能辅助判断拐点,避免追高抄底;
  3. 模块化拆分代码,指标、信号、交易逻辑分离,便于二次修改优化。

缺陷

  1. 极端单边行情(连续大涨 / 大跌)会持续触发超买超卖,容易踏空或深套;
  2. 依赖 1 分钟高频数据,服务器延迟、行情卡顿会影响信号准确性;
  3. A 股 T+0 仅适用于底仓做 T,无底仓无法卖出,代码仅支持底仓高抛、现金低吸模式。

五、优化拓展方向

  1. 增加止损止盈模块:单笔做 T 盈利 / 亏损达到阈值自动平仓;
  2. 加入大盘指数过滤,指数走弱时关闭做 T 信号;
  3. 增加动态仓位,根据波动率调整单次交易股数;
  4. 增加历史回测函数,批量测试历史 K 线测算策略胜率、盈亏比。

重要风险声明

量化策略存在历史回测失真、行情滑点、接口延迟、交易规则变动等多重风险,本文代码仅用于编程与量化逻辑学习,严禁未模拟直接实盘投入大额资金。市场有风险,投资需谨慎。

更多推荐