欢迎光临
我们一直在努力

Python+MiniQMT 实现 MACD+RSI 组合日内做 T 策略(完整可运行代码)

前言

股票日内做 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(低吸)三重共振条件

  • RSI 指标进入超卖区间(RSI<30)
  • MACD 绿柱持续缩短 或 DIF 线上穿 DEA 线(金叉)
  • 当前成交量缩量,回调动能衰竭
  • 4. 卖出做 T(高抛)三重共振条件

  • RSI 指标进入超买区间(RSI>70)
  • MACD 红柱持续缩短 或 DIF 线下穿 DEA 线(死叉)
  • 当前成交量放量,上涨动能衰减
  • 二、完整代码实现

    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("📊 无交易信号,继续观察")

    三、使用说明

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

    优势

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

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

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

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

    赞(0)
    未经允许不得转载:171主机测评 » Python+MiniQMT 实现 MACD+RSI 组合日内做 T 策略(完整可运行代码)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址