🚀 AI 一键生成 ptrade 策略代码
立即体验

如何在 ptrade 平台实现基于 RSI 超买超卖的量化交易策略?(附 Python 源码)

ptrade | 发布时间: 2026/7/23
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade RSI 相对强弱指标超买超卖交易策略实现指南

Question: 请帮我编写一个基于 RSI 指标超买超卖的交易策略

解决方案

在 ptrade 量化交易平台中,RSI(Relative Strength Index,相对强弱指标)是衡量标的价格变动速度和变化幅度的常用技术指标。通过判断 RSI 的超买(通常 RSI > 70/80)与超卖(通常 RSI < 30/20)状态,可以有效捕捉反转交易机会。

一、策略核心逻辑

  1. 标的选择:针对特定股票(例如 600570.SS)进行周期性检测。
  2. RSI 计算:利用 ptrade 内置函数 get_RSI 计算指定周期(如 6 日)的 RSI 值。
  3. 交易信号
    • 买入信号(超卖):当 RSI 跌破 30 时,认为标的处于超卖状态,全仓或定额买入。
    • 卖出信号(超买):当 RSI 突破 70 时,认为标的处于超买状态,清仓卖出。`

二、核心 API 说明

  • get_history:获取过去 N 天的 K 线历史数据(用于提取收盘价数组)。
  • get_RSI(close, n):计算收盘价数组的 RSI 值。传入 close 数据(ndarray 类型)和周期 n,返回 RSI 时间序列。
  • order_value(security, value):按指定金额买入标的。
  • order_target(security, amount):调整标的持仓至目标数量(清仓时设为 0)。

三、完整策略代码示例

以下是基于 ptrade 平台的完整 Python 策略代码:

# ptrade RSI 超买超卖量化策略示例

def initialize(context):
    # 设置交易标的
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 设置 RSI 周期与超买超卖阈值
    g.rsi_period = 6
    g.oversold = 30   # 超卖阈值(买入)
    g.overbought = 70  # 超买阈值(卖出)

def handle_data(context, data):
    security = g.security
    
    # 1. 获取过去 100 天的每日收盘价数据(计算 RSI 所需)
    df = get_history(100, frequency='1d', field=['close'], security_list=security)
    if df is None or len(df) == 0:
        return
    
    # 提取 close 数组,转为 numpy.ndarray
    close_data = df['close'].values
    
    # 2. 调用 ptrade API 计算 RSI 指标
    rsi_series = get_RSI(close_data, n=g.rsi_period)
    current_rsi = rsi_series[-1] # 获取最新的 RSI 值
    
    log.info(f"当前 {security} 的 RSI({g.rsi_period}) 值为: {current_rsi:.2f}")
    
    # 获取当前持仓与可用资金
    current_position = get_position(security).amount
    cash = context.portfolio.cash
    
    # 3. 执行超买超卖交易逻辑
    # 超卖触发买入
    if current_rsi < g.oversold and current_position == 0:
        log.info(f"RSI ({current_rsi:.2f}) < {g.oversold},触发超卖信号,全仓买入!")
        order_value(security, cash)
        
    # 超买触发卖出
    elif current_rsi > g.overbought and current_position > 0:
        log.info(f"RSI ({current_rsi:.2f}) > {g.overbought},触发超买信号,清仓卖出!")
        order_target(security, 0)

四、注意事项与优化建议

  1. 数据准备精度get_RSI 需要充足的历史收盘价序列,建议使用 get_history 获取至少 50~100 根 K 线,避免因序列过短导致指标计算偏差。
  2. 震荡市与趋势市适配:RSI 属于摆向指标,在震荡市中表现优秀;但在单边强趋势行情中容易出现“指标钝化”(长期超买或超卖)。建议结合 MA 均线或 MACD 趋势指标进行过滤,提高胜率。
  3. 滑点与佣金:回测阶段可在 initialize 中通过 set_commission()set_slippage() 设置交易摩擦成本,以便评估策略逼近真实交易场景的效果。