一、K线图的介绍
二、K线图的使用场景
1. 趋势分析
2. 支撑与阻力
3. 价格反转
4. 交易信号
5. 波动性分析
三、Pyecharts绘制K线图
四、总结
K线图(K-Line Chart)是用于显示金融市场价格走势的一种图表形式,主要用于股票、期货、外汇等交易市场的技术分析。K线图是由一系列矩形图组成,每个矩形图被称为一个K线(Kandlestick)。每个K线代表一定时间内的价格走势,常见的时间周期包括分钟、小时、日等。每个K线通常包括四个价格点,分别是开盘价(Open)、收盘价(Close)、最高价(High)和最低价(Low)。这四个价格点构成了K线的矩形,通过不同的颜色和形状来表示价格走势。常见的K线颜色分为两种,通常是实心和空心,或者涂色和未涂色。实心或涂色的K线表示当前时段收盘价高于开盘价,空心或未涂色的K线表示当前时段收盘价低于开盘价。这种表示方法可以直观地展示市场的涨跌情况。
K线图除了显示基本的价格信息外,还可以通过不同的形态和组合来分析市场趋势、价格反转等信息。一些常见的K线形态包括单根K线、多根K线组合,如大阳线、大阴线、十字星等。
K线图在金融市场中广泛应用,主要用于技术分析,帮助投资者和交易员更好地理解市场走势和制定交易决策。以下是一些K线图的主要使用场景:
投资者可以通过观察K线图来判断市场的趋势是上升、下降还是横盘。趋势分析是技术分析的核心,有助于制定相应的交易策略。
K线图可以帮助识别价格的支撑和阻力水平。支撑和阻力是价格在上升或下降过程中遇到的关键水平,对于制定买入或卖出决策具有重要意义。
特定的K线形态和组合可以暗示价格反转的可能性。例如,出现反转信号的K线组合可能预示市场即将发生变化,投资者可以根据这些信号调整其交易策略。
K线图常用于生成各种技术指标,如移动平均线、相对强弱指标等,这些指标可以产生交易信号,指导投资者何时买入或卖出。
通过观察K线的幅度和波动性,投资者可以评估市场的波动水平。波动性分析有助于确定适当的止损水平和目标价格,从而降低风险。
K线图反映了市场参与者的情绪和心理状态。例如,长期上涨的市场可能使投资者过度乐观,而长期下跌的市场可能导致恐慌情绪。通过观察K线图,投资者可以更好地理解市场参与者的情绪,并据此调整其交易策略。
代码如下(示例):
import requests
from typing import List, Union
from pyecharts import options as opts
from pyecharts.charts import Kline, Line, Bar, Grid
# 获取数据的函数,从指定URL获取数据并解析
def get_data():
response = requests.get(
url="https://echarts.apache.org/examples/data/asset/data/stock-DJI.json"
)
json_response = response.json()
# 解析数据
return split_data(data=json_response)
# 将原始数据拆分成需要的格式
def split_data(data):
category_data = [] # 用于存储X轴(时间)数据
values = [] # 存储K线图的OHLC数据
volumes = [] # 存储交易量数据
for i, tick in enumerate(data):
category_data.append(tick[0])
values.append(tick)
# 1表示涨,-1表示跌
volumes.append([i, tick[4], 1 if tick[1] > tick[2] else -1])
return {"categoryData": category_data, "values": values, "volumes": volumes}
# 计算移动平均线的函数
def calculate_ma(day_count: int, data):
result: List[Union[float, str]] = []
for i in range(len(data["values"])):
if i < day_count:
result.append("-") # 前几天数据不足时用"-"填充
continue
sum_total = 0.0
for j in range(day_count):
sum_total += float(data["values"][i - j][1])
result.append(abs(float("%.3f" % (sum_total / day_count))))
return result
# 绘制K线图、折线图和柱状图
def draw_charts():
# 提取K线图数据
kline_data = [data[1:-1] for data in chart_data["values"]]
# 创建K线图对象
kline = (
Kline()
.add_xaxis(xaxis_data=chart_data["categoryData"])
.add_yaxis(
series_name="Dow-Jones指数",
y_axis=kline_data,
itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),
)
.set_global_opts(
legend_opts=opts.LegendOpts(
is_show=False, pos_bottom=10, pos_left="center"
),
# 设置数据缩放、拖拽和切换显示的功能
datazoom_opts=[
opts.DataZoomOpts(
is_show=False,
type_="inside",
xaxis_index=[0, 1],
range_start=98,
range_end=100,
),
opts.DataZoomOpts(
is_show=True,
xaxis_index=[0, 1],
type_="slider",
pos_top="85%",
range_start=98,
range_end=100,
),
],
# 设置Y轴的一些参数
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
# 设置提示框的样式
tooltip_opts=opts.TooltipOpts(
trigger="axis",
axis_pointer_type="cross",
background_color="rgba(245, 245, 245, 0.8)",
border_width=1,
border_color="#ccc",
textstyle_opts=opts.TextStyleOpts(color="#000"),
),
# 设置视觉映射,用于表示涨跌情况
visualmap_opts=opts.VisualMapOpts(
is_show=False,
dimension=2,
series_index=5,
is_piecewise=True,
pieces=[
{"value": 1, "color": "#00da3c"},
{"value": -1, "color": "#ec0000"},
],
),
# 设置坐标轴指示器
axispointer_opts=opts.AxisPointerOpts(
is_show=True,
link=[{"xAxisIndex": "all"}],
label=opts.LabelOpts(background_color="#777"),
),
# 设置刷子,用于进行区域选择
brush_opts=opts.BrushOpts(
x_axis_index="all",
brush_link="all",
out_of_brush={"colorAlpha": 0.1},
brush_type="lineX",
),
)
)
# 创建折线图对象
line = (
Line()
.add_xaxis(xaxis_data=chart_data["categoryData"])
.add_yaxis(
series_name="MA5",
y_axis=calculate_ma(day_count=5, data=chart_data),
is_smooth=True,
is_hover_animation=False,
linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="MA10",
y_axis=calculate_ma(day_count=10, data=chart_data),
is_smooth=True,
is_hover_animation=False,
linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="MA20",
y_axis=calculate_ma(day_count=20, data=chart_data),
is_smooth=True,
is_hover_animation=False,
linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.add_yaxis(
series_name="MA30",
y_axis=calculate_ma(day_count=30, data=chart_data),
is_smooth=True,
is_hover_animation=False,
linestyle_opts=opts.LineStyleOpts(width=3, opacity=0.5),
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
)
# 创建柱状图对象
bar = (
Bar()
.add_xaxis(xaxis_data=chart_data["categoryData"])
.add_yaxis(
series_name="成交量",
y_axis=chart_data["volumes"],
xaxis_index=1,
yaxis_index=1,
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts(
xaxis_opts=opts.AxisOpts(
type_="category",
is_scale=True,
grid_index=1,
boundary_gap=False,
axisline_opts=opts.AxisLineOpts(is_on_zero=False),
axistick_opts=opts.AxisTickOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=False),
axislabel_opts=opts.LabelOpts(is_show=False),
split_number=20,
min_="dataMin",
max_="dataMax",
),
yaxis_opts=opts.AxisOpts(
grid_index=1,
is_scale=True,
split_number=2,
axislabel_opts=opts.LabelOpts(is_show=False),
axisline_opts=opts.AxisLineOpts(is_show=False),
axistick_opts=opts.AxisTickOpts(is_show=False),
splitline_opts=opts.SplitLineOpts(is_show=False),
),
legend_opts=opts.LegendOpts(is_show=False),
)
)
# K线图和折线图的重叠
overlap_kline_line = kline.overlap(line)
# 创建Grid图表,包含K线图和折线图的重叠部分以及柱状图
grid_chart = Grid(
init_opts=opts.InitOpts(
width="1000px",
height="800px",
animation_opts=opts.AnimationOpts(animation=False),
)
)
grid_chart.add(
overlap_kline_line,
grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="50%"),
)
grid_chart.add(
bar,
grid_opts=opts.GridOpts(
pos_left="10%", pos_right="8%", pos_top="63%", height="16%"
),
)
# 渲染生成HTML文件
grid_chart.render("professional_kline_brush.html")
if __name__ == "__main__":
chart_data = get_data()
draw_charts()
k线图
通过本文的学习,读者可以掌握使用Python中的Pyecharts库绘制金融数据可视化图表的基本方法。这不仅有助于理解市场走势和交易活动,还为更深入的数据分析提供了基础。通过对金融数据的可视化,投资者和分析师能够更直观地捕捉市场机会,做出更明智的决策。
另外,新的一年祝各位基金股票一片红o( ̄▽ ̄)d!