『Plotly实战指南』--在金融数据可视化中的应用(上) ...

打印 上一主题 下一主题

主题 2042|帖子 2042|积分 6126

在当今复杂多变的金融市场中,金融数据分析的重要性不言而喻。
无论是投资者、金融机构照旧研究人员,都需要通过对海量金融数据的分析来洞察市场趋势、评估风险并做出明智的决策。
据彭博社统计,专业投资者均匀需要处理超过200组差别维度的市场数据。
传统静态图表已难以满足现代金融分析的深度需求,而交互式可视化工具正成为量化交易员和金融分析师的新标配。
Plotly凭借其三重核心优势崭露头角:

  • 沉浸式交互体验:支持坐标轴缩放/平移/悬停查看数据点
  • 动态相应机制:可实时绑定命据更新与图表刷新
  • 全平台兼容性:生成的图表能无缝嵌入Jupyter Notebook/Dash应用/Web页面
本文的主要目的是探讨怎样使用Plotly高效实现金融数据的可视化与分析。
1. 股票K线图

股票K线图是股票市场分析中最常用且最重要的图表之一,它能够直观地展示股票价格在一定时间内的波动情况。
Plotly提供了plotly.graph_objects.Candlestick方法,可以方便地绘制 K线图
首先,我们创建一些模拟K线的数据:
  1. import pandas as pd
  2. import numpy as np
  3. from datetime import datetime, timedelta
  4. def generate_k_line_data(num_days):
  5.     # 初始化日期列表
  6.     start_date = datetime.now()
  7.     dates = [start_date + timedelta(days=i-num_days/2) for i in range(num_days)]
  8.     # 初始化价格和成交量
  9.     open_prices = np.random.uniform(100, 200, num_days)
  10.     high_prices = open_prices + np.random.uniform(0, 10, num_days)
  11.     low_prices = open_prices - np.random.uniform(0, 10, num_days)
  12.     close_prices = np.random.uniform(low_prices, high_prices)
  13.     volumes = np.random.randint(10000, 100000, num_days)
  14.     # 创建 DataFrame
  15.     data = {
  16.         'Date': dates,
  17.         'Open': open_prices,
  18.         'High': high_prices,
  19.         'Low': low_prices,
  20.         'Close': close_prices,
  21.         'Volume': volumes
  22.     }
  23.     df = pd.DataFrame(data)
  24.     return df
复制代码
使用函数generate_k_line_data,创建60条测试数据。
  1. data = generate_k_line_data(60)
  2. data.head()
复制代码

有了数据,Plotly绘制K线图很方便:
  1. import plotly.graph_objects as go
  2. fig = go.Figure(
  3.     data=[
  4.         go.Candlestick(
  5.             x=data["Date"],
  6.             open=data["Open"],
  7.             high=data["High"],
  8.             low=data["Low"],
  9.             close=data["Close"],
  10.         )
  11.     ]
  12. )
  13. fig.update_layout(
  14.     title="股票 K 线图",
  15.     xaxis_title="日期",
  16.     yaxis_title="价格",
  17.     xaxis_rangeslider_visible=False,
  18. )
  19. fig.show()
复制代码

其中红色绿色分别表现涨跌的K线。
2. 叠加技术指标

除了基本的 K 线图外,技术指标的添加能够为股票走势分析提供更丰富的信息。
比方,移动均匀线(MA)、MACD 和 RSI 等常用技术指标可以通过Plotly的add_trace方法叠加到K线图上。
以下是团结移动均匀线和RSI指标的代码示例:
  1. # 计算移动平均线
  2. data["MA5"] = data["Close"].rolling(window=5).mean()
  3. data["MA10"] = data["Close"].rolling(window=10).mean()
  4. # 计算 RSI 指标
  5. delta = data["Close"].diff()
  6. gain = (delta.where(delta > 0, 0)).rolling(window=4).mean()
  7. loss = (-delta.where(delta < 0, 0)).rolling(window=4).mean()
  8. rs = gain / loss
  9. data["RSI"] = 100 - (100 / (1 + rs))
  10. # 绘制 K 线图并叠加移动平均线
  11. fig = go.Figure(
  12.     data=[
  13.         go.Candlestick(
  14.             x=data["Date"],
  15.             open=data["Open"],
  16.             high=data["High"],
  17.             low=data["Low"],
  18.             close=data["Close"],
  19.         )
  20.     ]
  21. )
  22. fig.add_trace(go.Scatter(x=data["Date"], y=data["MA5"], mode="lines", name="MA5"))
  23. fig.add_trace(go.Scatter(x=data["Date"], y=data["MA10"], mode="lines", name="MA10"))
  24. # 绘制 RSI 指标图
  25. fig.add_trace(
  26.     go.Scatter(x=data["Date"], y=data["RSI"], mode="lines", name="RSI", yaxis="y2")
  27. )
  28. fig.update_layout(
  29.     title="股票 K 线图与技术指标",
  30.     xaxis_title="日期",
  31.     yaxis_title="价格",
  32.     yaxis2=dict(title="RSI", overlaying="y", side="right"),
  33.     xaxis_rangeslider_visible=False,
  34. )
  35. fig.show()
复制代码

在上述代码中,我们首先计算了 5日10日移动均匀线,并将其作为新的列添加到数据中。
接着,我们计算了 RSI 指标,并将其绘制在与K线图共享x轴右侧y轴上。
通过add_trace方法,我们可以将多个技术指标叠加到 K线图上,从而更全面地分析股票走势。
3. 成交量加K线组合图

成交量是股票市场分析中的一个重要指标,它反映了市场的活跃程度。
成交量柱状图与 K 线图组合展示,可以更直观地观察价格与成交量之间的关系。
Plotly的子图功能允许我们将多个图表组合在一起,并实现多图联动的效果。
通过共享 x 轴,我们可以确保 K 线图成交量柱状图在时间上保持同等。
以下是使用子图实现多图联动的代码示例:
  1. from plotly.subplots import make_subplots
  2. # 创建子图
  3. fig = make_subplots(
  4.     rows=2,
  5.     cols=1,
  6.     shared_xaxes=True,
  7.     vertical_spacing=0.4,
  8.     subplot_titles=("K 线图", "成交量"),
  9. )
  10. # 绘制 K 线图
  11. fig.add_trace(
  12.     go.Candlestick(
  13.         x=data["Date"],
  14.         open=data["Open"],
  15.         high=data["High"],
  16.         low=data["Low"],
  17.         close=data["Close"],
  18.     ),
  19.     row=1,
  20.     col=1,
  21. )
  22. # 绘制成交量柱状图
  23. fig.add_trace(go.Bar(x=data["Date"], y=data["Volume"], name="成交量"), row=2, col=1)
  24. fig.show()
复制代码

4. 成交量颜色

末了,再做一个改进,给成交量柱状图加上颜色,让它和K线图一样反应涨跌情况。
  1. # 绘制成交量柱状图并根据涨跌设置颜色
  2. fig.add_trace(
  3.     go.Bar(
  4.         x=data["Date"],
  5.         y=data["Volume"],
  6.         name="成交量",
  7.         marker_color=np.where(data["Close"] > data["Open"], "green", "red"),
  8.     ),
  9.     row=2,
  10.     col=1,
  11. )
复制代码
只要修改上一节代码中添加成交量柱状图的那一段代码即可。

5. 总结

本文我们深入探讨了Plotly在金融数据可视化中的应用,重点展示了怎样逐步使用 Plotly 绘制股票走势分析图表。
Plotly的核心价值在于其高效性、灵活性和强大的交互性,这些特性使其成为金融范畴中不可或缺的数据可视化工具。
末了,希望大家能够多动手实践,将所学知识应用到实际的金融数据分析中。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表