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

PTrade 技术指标开发:如何使用内置 get_MACD 函数实现金叉死叉交易策略

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

问题描述

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

Title: PTrade 技术指标开发:使用 get_MACD 实现金叉死叉交易策略

Question: 请帮我编写一个基于 PTrade 内置 get_MACD 函数的异同移动平均线策略

解决方案

PTrade 技术指标开发:使用 get_MACD 实现金叉死叉交易策略

在 PTrade 量化交易平台中,开发者可以直接使用内置的技术指标计算函数 get_MACD 来快速获取异同移动平均线指标的数据,避免自行编写平滑移动平均逻辑。本文将详细介绍 get_MACD 接口的使用方法,并提供一个完整的 MACD 金叉死叉交易策略实现。


1. get_MACD 接口说明

接口定义

get_MACD(close, short=12, long=26, m=9)

参数说明

  • close:收盘价的时间序列数据,要求为 numpy.ndarray 类型。
  • short:快线(短周期),整型,默认值为 12。
  • long:慢线(长周期),整型,默认值为 26。
  • m:Signal 线(移动平均周期),整型,默认值为 9。

返回值

返回三个 numpy.ndarray 类型的时间序列:

  1. macdDIF_data:DIF 线(快线与慢线的差值)
  2. macdDEA_data:DEA 线(DIF 的移动平均线/Signal 线)
  3. macd_data:MACD 柱状图数值

2. MACD 金叉死叉交易逻辑

  • 买入信号(金叉):当上一个周期 DIF 小于等于 DEA,且当前周期 DIF 向上突破 DEA(DIF > DEA)时,执行全仓买入。
  • 卖出信号(死叉):当上一个周期 DIF 大于等于 DEA,且当前周期 DIF 向下突破 DEA(DIF < DEA)且当前持有持仓时,执行清仓卖出。

3. PTrade 策略源码实现

import numpy as np

def initialize(context):
    # 设置标的股票
    g.security = '600570.SS'  # 恒生电子
    set_universe(g.security)
    
    # MACD 参数配置
    g.short = 12
    g.long = 26
    g.m = 9

def handle_data(context, data):
    security = g.security
    
    # 获取过去100个交易日的收盘价数据(以numpy数组形式返回)
    history_df = get_history(100, frequency='1d', field='close', security_list=security)
    if history_df is None or history_df.empty:
        return
        
    close_data = history_df['close'].values
    
    # 调用 PTrade 内置 get_MACD 函数计算指标
    macdDIF_data, macdDEA_data, macd_data = get_MACD(close_data, g.short, g.long, g.m)
    
    # 获取前一周期和当前周期的 DIF 与 DEA
    prev_dif = macdDIF_data[-2]
    prev_dea = macdDEA_data[-2]
    curr_dif = macdDIF_data[-1]
    curr_dea = macdDEA_data[-1]
    
    # 获取可用现金及持仓
    cash = context.portfolio.cash
    position = get_position(security)
    
    # 判断金叉:前一周期 DIF <= DEA 且 当前周期 DIF > DEA
    if prev_dif <= prev_dea and curr_dif > curr_dea:
        if cash > 0:
            order_value(security, cash)
            log.info("触发 MACD 金叉买入信号,股票代码: %s" % security)
            
    # 判断死叉:前一周期 DIF >= DEA 且 当前周期 DIF < DEA
    elif prev_dif >= prev_dea and curr_dif < curr_dea:
        if position.amount > 0:
            order_target(security, 0)
            log.info("触发 MACD 死叉卖出信号,股票代码: %s" % security)

4. 开发注意事项

  1. 数据长度要求:计算 MACD 需要足够的历史 K 线数据以保证指标的收敛与准确性,建议 get_history 获取的数量不低于 100 根。
  2. 数据类型转换get_MACD 接收的 close 参数必须为 numpy.ndarray 类型,使用 get_history 获取 DataFrame 后需调用 .values 提取数组。
  3. 下单价格精度:在真实交易环境中,股票交易价格精度为 2 位小数,若使用限价单委托(如 limit_price),需对价格进行适当的舍入处理。