聂丹 發表於 2025-5-2 10:31:00

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

<p><font style="color: rgba(0, 0, 0, 0.85)">在当今复杂多变的金融市场中,金融数据分析的重要性不言而喻。</font></p>
<p><font style="color: rgba(0, 0, 0, 0.85)">无论是投资者、金融机构还是研究人员,都需要通过对海量金融数据的分析来洞察市场趋势、评估风险并做出明智的决策。</font></p>
<p>据彭博社统计,专业投资者平均需要处理超过<strong>200组</strong>不同维度的市场数据。</p>
<p>传统静态图表已难以满足现代金融分析的深度需求,而交互式可视化工具正成为量化交易员和金融分析师的新标配。</p>
<p><code>Plotly</code>凭借其三重核心优势崭露头角:</p>
<ol>
<li><strong>沉浸式交互体验</strong>:支持坐标轴缩放/平移/悬停查看数据点</li>
<li><strong>动态响应机制</strong>:可实时绑定数据更新与图表刷新</li>
<li><strong>全平台兼容性</strong>:生成的图表能无缝嵌入Jupyter Notebook/Dash应用/Web页面</li>
</ol>
<p>本文的主要目标是探讨如何利用<code>Plotly</code>高效实现金融数据的可视化与分析。</p>
<h1 id="1-股票k线图">1. 股票K线图</h1>
<p>股票<strong>K线图</strong>是股票市场分析中最常用且最重要的图表之一,它能够直观地展示股票价格在一定时间内的波动情况。</p>
<p><code>Plotly</code>提供了<code>plotly.graph_objects.Candlestick</code>方法,可以方便地绘制 <strong>K线图</strong>。</p>
<p>首先,我们创建一些<strong>模拟K线</strong>的数据:</p>
<pre><code class="language-python">import pandas as pd
import numpy as np
from datetime import datetime, timedelta


def generate_k_line_data(num_days):
    # 初始化日期列表
    start_date = datetime.now()
    dates =

    # 初始化价格和成交量
    open_prices = np.random.uniform(100, 200, num_days)
    high_prices = open_prices + np.random.uniform(0, 10, num_days)
    low_prices = open_prices - np.random.uniform(0, 10, num_days)
    close_prices = np.random.uniform(low_prices, high_prices)
    volumes = np.random.randint(10000, 100000, num_days)

    # 创建 DataFrame
    data = {
      'Date': dates,
      'Open': open_prices,
      'High': high_prices,
      'Low': low_prices,
      'Close': close_prices,
      'Volume': volumes
    }
    df = pd.DataFrame(data)
    return df
</code></pre>
<p>使用函数<code>generate_k_line_data</code>,创建<strong>60条</strong>测试数据。</p>
<pre><code class="language-python">data = generate_k_line_data(60)
data.head()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250502103028532-2016091919.png" alt="" loading="lazy"></p>
<p>有了数据,<code>Plotly</code>绘制<strong>K线图</strong>很方便:</p>
<pre><code class="language-python">import plotly.graph_objects as go

fig = go.Figure(
    data=[
      go.Candlestick(
            x=data["Date"],
            open=data["Open"],
            high=data["High"],
            low=data["Low"],
            close=data["Close"],
      )
    ]
)

fig.update_layout(
    title="股票 K 线图",
    xaxis_title="日期",
    yaxis_title="价格",
    xaxis_rangeslider_visible=False,
)

fig.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250502103028777-1523010147.gif" alt="" loading="lazy"></p>
<p>其中<strong>红色</strong>和<strong>绿色</strong>分别表示<strong>涨跌</strong>的K线。</p>
<h1 id="2-叠加技术指标">2. 叠加技术指标</h1>
<p>除了基本的 <strong>K 线图</strong>外,技术指标的添加能够为股票走势分析提供更丰富的信息。</p>
<p>例如,移动平均线(<code>MA</code>)、<code>MACD</code> 和 <code>RSI</code> 等常用技术指标可以通过<code>Plotly</code>的<code>add_trace</code>方法叠加到<strong>K线图</strong>上。</p>
<p>以下是结合<strong>移动平均线</strong>和<code>RSI</code>指标的代码示例:</p>
<pre><code class="language-python"># 计算移动平均线
data["MA5"] = data["Close"].rolling(window=5).mean()
data["MA10"] = data["Close"].rolling(window=10).mean()

# 计算 RSI 指标
delta = data["Close"].diff()
gain = (delta.where(delta &gt; 0, 0)).rolling(window=4).mean()
loss = (-delta.where(delta &lt; 0, 0)).rolling(window=4).mean()
rs = gain / loss
data["RSI"] = 100 - (100 / (1 + rs))

# 绘制 K 线图并叠加移动平均线
fig = go.Figure(
    data=[
      go.Candlestick(
            x=data["Date"],
            open=data["Open"],
            high=data["High"],
            low=data["Low"],
            close=data["Close"],
      )
    ]
)

fig.add_trace(go.Scatter(x=data["Date"], y=data["MA5"], mode="lines", name="MA5"))
fig.add_trace(go.Scatter(x=data["Date"], y=data["MA10"], mode="lines", name="MA10"))

# 绘制 RSI 指标图
fig.add_trace(
    go.Scatter(x=data["Date"], y=data["RSI"], mode="lines", name="RSI", yaxis="y2")
)

fig.update_layout(
    title="股票 K 线图与技术指标",
    xaxis_title="日期",
    yaxis_title="价格",
    yaxis2=dict(title="RSI", overlaying="y", side="right"),
    xaxis_rangeslider_visible=False,
)

fig.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250502103028547-1438306922.gif" alt="" loading="lazy"></p>
<p>在上述代码中,我们首先计算了 <strong>5日</strong>和 <strong>10日</strong>移动平均线,并将其作为新的列添加到数据中。</p>
<p>接着,我们计算了 <strong>RSI 指标</strong>,并将其绘制在与K线图共享<strong>x轴</strong>的<strong>右侧y轴</strong>上。</p>
<p>通过<code>add_trace</code>方法,我们可以将多个技术指标叠加到 <strong>K线图</strong>上,从而更全面地分析股票走势。</p>
<h1 id="3-成交量加k线组合图">3. 成交量加K线组合图</h1>
<p><strong>成交量</strong>是股票市场分析中的一个重要指标,它反映了市场的活跃程度。</p>
<p>将<strong>成交量</strong>柱状图与 <strong>K 线图</strong>组合展示,可以更直观地观察价格与成交量之间的关系。</p>
<p><code>Plotly</code>的子图功能允许我们将多个图表组合在一起,并实现多图联动的效果。</p>
<p>通过<strong>共享 x 轴</strong>,我们可以确保 <strong>K 线图</strong>和<strong>成交量</strong>柱状图在时间上保持一致。</p>
<p>以下是使用子图实现多图联动的代码示例:</p>
<pre><code class="language-python">from plotly.subplots import make_subplots

# 创建子图
fig = make_subplots(
    rows=2,
    cols=1,
    shared_xaxes=True,
    vertical_spacing=0.4,
    subplot_titles=("K 线图", "成交量"),
)

# 绘制 K 线图
fig.add_trace(
    go.Candlestick(
      x=data["Date"],
      open=data["Open"],
      high=data["High"],
      low=data["Low"],
      close=data["Close"],
    ),
    row=1,
    col=1,
)

# 绘制成交量柱状图
fig.add_trace(go.Bar(x=data["Date"], y=data["Volume"], name="成交量"), row=2, col=1)

fig.show()
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250502103028565-137906885.gif" alt="" loading="lazy"></p>
<h1 id="4-成交量颜色">4. 成交量颜色</h1>
<p>最后,再做一个改进,给成交量柱状图加上颜色,让它和K线图一样反应涨跌情况。</p>
<pre><code class="language-python"># 绘制成交量柱状图并根据涨跌设置颜色
fig.add_trace(
    go.Bar(
      x=data["Date"],
      y=data["Volume"],
      name="成交量",
      marker_color=np.where(data["Close"] &gt; data["Open"], "green", "red"),
    ),
    row=2,
    col=1,
)
</code></pre>
<p>只要修改上一节代码中添加<strong>成交量柱状图</strong>的那一段代码即可。</p>
<p><img src="https://img2024.cnblogs.com/blog/83005/202505/83005-20250502103028557-1030366977.png" alt="" loading="lazy"></p>
<h1 id="5-总结">5. 总结</h1>
<p>本文我们深入探讨了<code>Plotly</code>在金融数据可视化中的应用,重点展示了如何逐步利用 <code>Plotly</code> 绘制股票走势分析图表。</p>
<p><code>Plotly</code>的核心价值在于其高效性、灵活性和强大的交互性,这些特性使其成为金融领域中不可或缺的数据可视化工具。</p>
<p>最后,希望大家能够多动手实践,将所学知识应用到实际的金融数据分析中。</p><br><br>
来源:https://www.cnblogs.com/wang_yb/p/18857326
頁: [1]
查看完整版本: 『Plotly实战指南』--在金融数据可视化中的应用(上)