【同花顺 SuperMind】SuperMind如何获取历史行情并计算MACD?技术指标与信号判断示例

本方案由 EasyQuant AI量化助手  提供。

问题背景

MACD 是量化策略中常见的趋势与动量指标,由 DIF、DEA 和 MACD 柱状值组成。SuperMind 可以通过历史行情数据计算技术指标,用于研究价格变化和策略信号。

本文使用 Pandas 根据收盘价计算 MACD,适合用于指标研究和回测逻辑编写。

获取历史行情

import pandas as pd


def get_stock_data(stock_code, count=120):
    """
    获取历史行情数据
    """
    df = get_history(
        count=count,
        frequency="1d",
        field=["open", "high", "low", "close", "volume"],
        security_list=[stock_code],
        fq="pre"
    )

    return df


df = get_stock_data("000001.SZ", 120)

print(df.tail())

计算MACD指标

def calculate_macd(stock_code):
    df = get_stock_data(stock_code, 120)

    if df is None or len(df) < 35:
        return None

    df = df.copy()

    # 计算快速与慢速指数移动平均
    ema12 = df["close"].ewm(
        span=12,
        adjust=False
    ).mean()

    ema26 = df["close"].ewm(
        span=26,
        adjust=False
    ).mean()

    # DIF
    df["DIF"] = ema12 - ema26

    # DEA
    df["DEA"] = df["DIF"].ewm(
        span=9,
        adjust=False
    ).mean()

    # MACD柱
    df["MACD"] = 2 * (df["DIF"] - df["DEA"])

    return df


df = calculate_macd("000001.SZ")

if df is not None:
    print(
        df[
            ["close", "DIF", "DEA", "MACD"]
        ].tail()
    )

判断MACD交叉信号

def check_macd_signal(stock_code):
    df = calculate_macd(stock_code)

    if df is None or len(df) < 2:
        return "数据不足"

    previous = df.iloc[-2]
    current = df.iloc[-1]

    # DIF上穿DEA
    if (
        previous["DIF"] <= previous["DEA"]
        and current["DIF"] > current["DEA"]
    ):
        return "DIF上穿DEA"

    # DIF下穿DEA
    if (
        previous["DIF"] >= previous["DEA"]
        and current["DIF"] < current["DEA"]
    ):
        return "DIF下穿DEA"

    return "无信号"


signal = check_macd_signal("000001.SZ")

print("MACD信号:", signal)

在策略中使用信号

def handle_data(context):
    stock_code = "000001.SZ"

    signal = check_macd_signal(stock_code)

    if signal == "DIF上穿DEA":
        print("检测到MACD上穿信号")

    elif signal == "DIF下穿DEA":
        print("检测到MACD下穿信号")

    else:
        print("当前无MACD交叉信号")

注意事项

  • MACD 的常用参数为 12、26、9,实际研究可以根据策略需求调整。

  • EMA 初始值会影响指标前期结果,建议准备足够的历史行情数据进行预热。

  • 不同平台的 MACD 柱定义可能存在差异,常见计算为 2 × (DIF - DEA)

  • 使用未完成的日 K 线时,盘中指标可能持续变化。

  • 示例只展示指标计算和信号判断,不包含实际买卖委托。

  • SuperMind 的具体行情接口、策略生命周期函数和股票代码格式应以当前平台文档为准。

总结

SuperMind 可以利用历史行情计算 MACD 指标,通过 DIF 与 DEA 的交叉判断生成研究信号。结合回测、交易成本和风险控制,可以进一步构建完整的量化策略。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值