AI添加K线图成交量
编辑
0
2025-06-22

提示词
在一个DataFrame中,包含股票的开盘价、最高价、最低价、收盘价、成交量。需要用Ploty绘制K线图,添加20日、30日均线,并将成交量以子图的形式绘制在K线图的下方。请给出示例代码。
答案
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# 假设df是包含以下列的DataFrame:
# 开盘价(Open), 最高价(High), 最低价(Low), 收盘价(Close), 成交量(Volume)
# 索引应为日期时间类型(DatetimeIndex)
df = pd.read_excel('../数据/历史行情数据.xlsx')
#这次我们保留日期、开盘、收盘、最高、最低、成交量
df = df[['日期', '开盘', '收盘', '最高', '最低', '成交量']]
# 2. 列名规范化(关键步骤!)
print("原始列名:", df.columns.tolist()) # 调试查看实际列名
# 去除列名首尾空格
df.columns = df.columns.str.strip()
# 统一列名映射(根据实际数据调整)
column_mapping = {
'日期': 'Date',
'开盘': 'Open',
'最高': 'High',
'最低': 'Low',
'收盘': 'Close',
'成交量': 'Volume', # 中文常见列名
'volume': 'Volume', # 小写列名
'VOL': 'Volume' # 大写列名
}
df.rename(columns=column_mapping, inplace=True)
# 3. 设置日期索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
# 4. 检查必要列是否存在
required_cols = ['Open', 'High', 'Low', 'Close']
if 'Volume' not in df.columns:
print("警告: Volume列不存在, 自动禁用成交量显示")
volume_param = False
else:
volume_param = True
# 1. 计算技术指标
df['MA20'] = df['Close'].rolling(window=20).mean() # 20日均线
df['MA30'] = df['Close'].rolling(window=30).mean() # 30日均线
# 2. 创建带子图的图表框架
fig = make_subplots(
rows=2, cols=1, # 2行1列布局
shared_xaxes=True, # 共享X轴
vertical_spacing=0.05, # 子图间距
row_heights=[0.7, 0.3], # K线图占70%高度,成交量占30%
specs=[[{"secondary_y": True}], [{}]] # 主图可添加副轴
)
# 3. 添加K线图(主图区域)
fig.add_trace(
go.Candlestick(
x=df.index,
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close'],
name='K线',
increasing_line_color='red', # 阳线颜色
decreasing_line_color='green' # 阴线颜色
),
row=1, col=1
)
# 4. 添加移动平均线(主图区域)
fig.add_trace(
go.Scatter(
x=df.index,
y=df['MA20'],
mode='lines',
name='20日均线',
line=dict(color='blue', width=1.5)
),
row=1, col=1
)
fig.add_trace(
go.Scatter(
x=df.index,
y=df['MA30'],
mode='lines',
name='30日均线',
line=dict(color='orange', width=1.5)
),
row=1, col=1
)
# 5. 添加成交量柱状图(副图区域)
fig.add_trace(
go.Bar(
x=df.index,
y=df['Volume'],
name='成交量',
marker_color='gray', # 统一为灰色
# 可选:按涨跌着色(需结合收盘价和开盘价)
# marker=dict(
# color=[ 'red' if close > open else 'green'
# for close, open in zip(df['Close'], df['Open']) ]
# )
),
row=2, col=1
)
# 6. 设置图表布局
fig.update_layout(
title='股票K线分析',
height=700, # 图表总高度
xaxis_title='日期',
yaxis_title='价格',
# 隐藏非交易日(防止K线断裂)
xaxis_rangeslider_visible=False, # 禁用内置范围滑块(因已有子图)
legend_title='图例说明',
hovermode='x unified' # 鼠标悬停时显示所有数据
)
# 7. 设置Y轴标题(成交量子图)
fig.update_yaxes(title_text="成交量", row=2, col=1)
# 8. 显示图表
fig.show()
# 9. 可选:保存为HTML文件
# fig.write_html("stock_chart.html")
数据导入代码是我加进去的,其余都是ai写的。
图像:
- 0
- 0
-
赞助
支付宝
微信
-
分享