ali_ssssa 2024-05-27 17:25 采纳率: 9.1%
浏览 30

如何用mplfinance在均线图中标注黄金交叉点和死亡交叉点

help!!如何用mplfinance在均线图中标注黄金交叉点和死亡交叉点?mpf可以直接实现这个功能吗

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-27 17:25
    关注

    引自免费微信小程序:皆我百晓生

    当然可以,使用mplfinance绘制均线图并标注黄金交叉点(short-term moving average 上穿 long-term moving average)和死亡交叉点(short-term moving average 下穿 long-term moving average)非常方便。首先确保已经安装了mplfinance库,如果没有安装,可以通过pip进行安装:

    pip install mplfinance
    

    接下来是一个详细的示例,我们将绘制一个简单的收盘价蜡烛图,并在交叉点上添加标记。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import mplfinance as mpf
    
    # 假设我们有如下数据,这是从Yahoo Finance或其他来源获取的历史价格数据
    data = {
        'Date': pd.date_range(start='2021-01-01', periods=50, freq='D'),
        'Open': np.random.rand(50),
        'High': np.random.rand(50) * 1.1,
        'Low': np.random.rand(50) * 0.9,
        'Close': np.random.rand(50) * 1.2,
    }
    
    df = pd.DataFrame(data)
    
    # 计算短期和长期移动平均线
    short_term_mavg = df['Close'].rolling(window=10).mean()
    long_term_mavg = df['Close'].rolling(window=30).mean()
    
    # 初始化图形
    fig, ax = plt.subplots(figsize=(14, 7))
    
    # 绘制收盘价蜡烛图
    mpf.plot(df, type='candle', mav=(short_term_mavg, long_term_mavg), ax=ax)
    
    # 定义函数来找到交叉点
    def find_crossings(series1, series2):
        crossing_points = []
        for i in range(len(series1)):
            if (i > 0 and i < len(series1) - 1) and \
                    (series1[i] > series2[i] and series1[i - 1] < series2[i - 1]) or \
                    (series1[i] < series2[i] and series1[i - 1] > series2[i - 1]):
                crossing_points.append(i)
        return crossing_points
    
    # 找到交叉点
    crossing_indices = find_crossings(short_term_mavg.values, long_term_mavg.values)
    
    # 在交叉点处添加标记
    for index in crossing_indices:
        x = df['Date'][index]
        y = df['Close'][index]
        
        # 黄金交叉点
        if short_term_mavg[index] > long_term_mavg[index]:
            ax.annotate('Golden Cross', xy=(x, y), xytext=(-10, 10), textcoords='offset points',
                        bbox=dict(boxstyle="round", fc="w"),
                        arrowprops=dict(arrowstyle="->"))
            
        # 死亡交叉点
        else:
            ax.annotate('Death Cross', xy=(x, y), xytext=(-10, -10), textcoords='offset points',
                        bbox=dict(boxstyle="round", fc="w"),
                        arrowprops=dict(arrowstyle="->"))
    
    plt.show()
    

    这段代码首先计算了收盘价的短期和长期移动平均线,然后定义了一个函数 find_crossings 来找出交叉点的索引。接着,在交叉点处添加了注释,标注为“Golden Cross”(黄金交叉)或“Death Cross”(死亡交叉)。运行此代码后,将显示带有交叉点标注的图表。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月27日

悬赏问题

  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 c#转安卓 java html
  • ¥15 os.listdir文件路径找不到
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777
  • ¥50 医院HIS系统代码、逻辑学习
  • ¥30 docker离线安装mysql报错,如何解决?
  • ¥15 构建工单的总账影响在哪里查询或修改
  • ¥15 三个简单项目写完之后有重赏之后联系我