使用 mplfinance 绘制数据时出错:“x 和 y 必须大小相同”在添加 VWAP 和频段时出现问题

问题描述 投票:0回答:1

我需要在图表上绘制 vwap 和股票购买信号。到目前为止,我在导出应用了 vwap 计算的 .csv 时没有遇到任何问题,但绘制它是另一个问题。我不断收到这个持续错误,即 x 和 y 必须具有相同的大小。

这是我的绘图仪代码:

import pandas as pd
import mplfinance as mpf
import os


def plot_data_with_signals(csv_file):
    try:
        # Check if file exists
        if not os.path.exists(csv_file):
            raise FileNotFoundError(f"File not found: {csv_file}")

        # Load the data from the CSV
        df = pd.read_csv(csv_file, parse_dates=True, index_col="Date")

        if df.empty:
            print("No data to plot.")
            return

        # Ensure data columns are named correctly for mplfinance
        df.rename(columns={
            'Open': 'Open',
            'High': 'High',
            'Low': 'Low',
            'Close': 'Close',
            'Volume': 'Volume'
        }, inplace=True)

        # Ensure the index is properly set to 'Date'
        df.index.name = 'Date'

        # Create additional plot elements for VWAP, bands, and buy signals
        apds = []

        if 'vwap' in df.columns:
            apds.append(mpf.make_addplot(df['vwap'], color='blue', linestyle='--', secondary_y=False))
        if 'upper_band' in df.columns and 'lower_band' in df.columns:
            apds.append(mpf.make_addplot(df['upper_band'], color='red', linestyle='--', secondary_y=False))
            apds.append(mpf.make_addplot(df['lower_band'], color='green', linestyle='--', secondary_y=False))
        if 'buy_signal' in df.columns:
            # Create scatter plot for buy signals
            buy_signals = df[df['buy_signal'] == 1]
            if not buy_signals.empty:
                apds.append(mpf.make_addplot(buy_signals['Close'], type='scatter', markersize=100, color='magenta',
                                             secondary_y=False))

        # Plotting data using mplfinance
        mpf.plot(df, type='candle', style='charles', title='SPY 5-Minute Interval Candlestick Chart',
                 ylabel='Price', volume=True, addplot=apds)

    except Exception as e:
        print(f"Error plotting data. Something went wrong: {e}")


# Example usage
plot_data_with_signals("spy_data/spy_data_5m_vwap_bands_signals.csv")  # Update with the path to CSV file

我多次尝试检查缺失值和其他内容。

如有任何帮助,我们将不胜感激

python python-3.x mplfinance
1个回答
0
投票

您的

mpf.makeaddplot()
调用中的数据长度必须与您的
mpf.plot()
调用中的数据长度相同,即:

无论

len(df)
的值是什么,以下值应该相同:

len(df['vwap'])
len(df['upper_band'])
len(df['lower_band'])
len(buy_signals['Close'])

添加一些打印语句,或者在调试器中查看一下罪魁祸首。 您没有提供数据或确切的错误消息,因此很难说哪一个是问题所在。

(如果让我猜的话,我会说

buy_signals
,因为这是人们很容易搞砸的情况。通常购买信号并不在每个点,这意味着,为了使数据具有相同的长度作为
len(df)
那么您必须在没有信号的地方用
buy_signals
值填充
float('nan')
您可以在此处的 addplot 笔记本示例中的 cell
In [7]:
和 **cell
In [12]:
中看到此操作。 :https://github.com/matplotlib/mplfinance/blob/master/examples/addplot.ipynb

© www.soinside.com 2019 - 2024. All rights reserved.