51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

请用Python(Matplotlib或Plotly)绘制某只股票近一年的日K线图,并添加移动平均线(5日和20日),说明代码实现步骤,以及如何优化图表的可读性(如添加标题、坐标轴标签、图例)。

招商证券研究发展中心研究助理岗实习生难度:简单

答案

1) 【一句话结论】用Python(以Matplotlib结合mplfinance为例)绘制股票日K线图并添加5日和20日移动平均线,需通过数据获取(yfinance)、计算移动平均线(rolling)、绘制K线(基于开盘/收盘/最高/最低价的实体与影线)、图表优化(标题/标签/图例)实现,核心是确保K线图符合金融标准(包含实体和影线)。

2) 【原理/概念讲解】
K线图是金融核心图表,通过“实体”(开盘价-收盘价)和“影线”(最高价-最低价)展示价格波动:实体越长表示涨跌幅度越大,影线越长表示当日价格波动范围越广;移动平均线(MA)是价格的平均值序列,用于平滑短期波动,辅助判断趋势(5日均线反映短期趋势,20日均线反映中期趋势)。
Matplotlib是Python底层绘图库,可通过mplfinance插件实现标准K线图绘制(candlestick_ohlc函数),步骤包括:导入库→加载数据→计算均线→绘制K线(实体+影线)→添加均线→优化图表。类比:K线像“蜡烛”,实体长表示涨跌,影线表示波动;移动平均线像“平滑的均线”,过滤短期噪音,显示趋势方向。

3) 【对比与适用场景】

特性Matplotlib (静态)Plotly (交互式)
定义Python底层绘图库,功能全面基于Web的交互式图表库
特性代码简洁,适合固定布局图表支持缩放、悬停提示、数据点交互
使用场景学术报告、静态分析图表实时监控、数据探索、演示
注意点需手动设置交互,图表不可交互代码稍复杂,可生成HTML文件

4) 【示例】

import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from mplfinance.original_flavor import candlestick_ohlc

# 1. 数据获取
data = yf.download('000001.SZ', start='2023-01-01', end='2023-12-31')
data['Date'] = data.index
data['Date'] = data['Date'].apply(mdates.date2num)  # 转换日期为数值格式

# 2. 计算移动平均线
data['MA5'] = data['Close'].rolling(window=5).mean()
data['MA20'] = data['Close'].rolling(window=20).mean()

# 3. 绘制K线图
fig, ax = plt.subplots(figsize=(12, 6))
candlestick_ohlc(ax, data[['Date', 'Open', 'High', 'Low', 'Close']].values, width=0.6, colorup='green', colordown='red')
ax.plot(data['Date'], data['MA5'], color='r', label='5日均线')
ax.plot(data['Date'], data['MA20'], color='g', label='20日均线')

# 4. 优化图表
ax.set_title('股票日K线图(近一年)')
ax.set_xlabel('日期')
ax.set_ylabel('价格')
ax.legend()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

5) 【面试口播版答案】
面试官您好,我来回答绘制股票日K线图并添加移动平均线的问题。首先,核心步骤是数据获取、计算移动平均线、绘制K线(包含实体和影线)、图表优化。具体来说,先用yfinance下载股票数据(假设股票代码是000001.SZ,获取2023年1月到12月的日数据),然后计算5日和20日移动平均线(用rolling函数对收盘价求均值),接着用mplfinance的candlestick_ohlc函数绘制K线(该函数会根据开盘、收盘、最高、最低价绘制实体和影线),最后优化图表:添加标题“股票日K线图(近一年)”,坐标轴标签“日期”和“价格”,图例标注5日和20日均线,调整日期刻度格式(如%Y-%m-%d),让图表更易读。这样就能得到包含K线和移动平均线的图表,辅助分析趋势。

6) 【追问清单】

  • 问:数据来源如何选择?比如用yfinance是否可靠?
    回答要点:yfinance是常用的金融数据库,支持多种股票/指数,数据更新及时,适合实习场景,但需注意数据延迟或缺失情况。
  • 问:移动平均线的计算方法是否正确?比如是否用收盘价?
    回答要点:移动平均线通常用收盘价计算(反映市场收盘时的价格),5日和20日均线是常见周期,用于判断短期和中期趋势。
  • 问:如何处理数据中的缺失值?比如跳市或数据错误?
    回答要点:用pandas的fillna方法填充(如前向填充或均值填充),确保绘图时数据连续,避免图表断裂。
  • 问:如果用Plotly,如何实现交互式功能?比如悬停显示数据?
    回答要点:Plotly的candlestick图支持交互,通过go.Candlestick组件添加hover_data参数显示开盘、收盘等数据,并设置layout.hovermode='x unified'实现缩放和悬停提示。
  • 问:图表的优化细节,比如颜色选择、刻度调整?
    回答要点:颜色选择应对比明显(如K线用红/绿表示涨跌,均线用不同颜色区分);刻度调整可通过设置xlim、ylim或日期格式化器,确保日期标签不重叠,提高可读性。

7) 【常见坑/雷区】

  • 数据获取错误:股票代码或时间范围设置不当,导致数据为空或错误。
  • 移动平均线计算错误:窗口大小设置错误(如用开盘价而非收盘价),或rolling函数参数错误。
  • K线图绘制错误:未使用ohlc数据或自定义绘制实体/影线,仅用plot收盘价模拟K线。
  • 图表元素缺失:缺少标题、坐标轴标签、图例,导致信息不完整。
  • 坐标轴刻度问题:日期刻度旋转角度不当导致标签重叠;价格刻度范围不合理导致趋势不明显。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1