直方图的含义
直方图是一种用于展示数据分布情况的图形。它将数据分成若干个间隔,并且统计每个间隔内数据的频数或频率。横轴表示数据的取值范围,纵轴表示对应范围内数据的频数或频率。
直方图的绘制方法
在Matplotlib中,可以使用plt.hist()函数绘制直方图。
plt.hist(x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, color, label, stacked, data)
参数解释:
x:要绘制直方图的数据,可以是一个一维数组或一个可迭代对象。
bins:直方图的箱子数量,可以是一个整数或一个表示箱子边界的一维数组。
range:要绘制直方图的数据范围,可以是一个包含两个元素的元组或列表,表示数据的最小值和最大值。
density:是否将直方图归一化为密度形式,默认为False。如果为True,则直方图的总面积为1,表示概率密度。
weights:用于赋予不同数据点不同权重的数组。
cumulative:是否绘制累积直方图,默认为False。
bottom:直方图的底部位置,可以是一个标量或一个与x长度相同的数组。
histtype:直方图类型,默认为’bar’,可选值为’bar’、‘barstacked’、‘step’、‘stepfilled’。
align:直方图条的对齐方式,默认为’mid’,可选值为’left’、‘mid’、‘right’。
orientation:直方图的方向,默认为’vertical’,可选值为’vertical’、‘horizontal’。
rwidth:直方图条的宽度相对于箱子宽度的比例,默认为None,表示自动计算宽度。
color:直方图的颜色,可以是一个字符串或一个颜色序列。
label:直方图的标签,用于图例的显示。
stacked:是否堆叠多个直方图,默认为False。
data:用于绘制直方图的DataFrame或Series对象。
直方图在量化交易中的应用
直方图在量化交易主要包括以下几个主要的应用方向:
- 价格分布:直方图可以帮助量化交易者对市场数据进行分析。通过绘制价格变动的直方图,可以观察价格的分布情况,了解价格的波动范围和概率分布,从而辅助制定决策。
- 风险管理:直方图可以用来评估资产的风险。通过分析资产收益率的直方图,可以了解其波动性和风险水平,并根据预期风险水平制定相应的风险管理策略,如设定止损位或者调整仓位。
- 交易信号:直方图可以用来生成交易信号。通过分析价格或其他指标的直方图,可以识别出市场的趋势或反转信号,从而进行交易决策。例如,当价格的直方图呈现出明显的双峰分布,可能预示着市场即将发生反转。
直方图在量化交易中可以帮助交易者对市场数据进行分析、风险管理和交易决策,从而提高交易效果和策略的可靠性。
直方图在量化交易中的应用案例
在下面这个案例中,直方图用来显示某只股票当前价格在某段时间内的交易价位中交易情况。通过观察直方图,投资者可以看到价格区间内的交易量分布情况。如果某个价格区间的交易量较大,可能意味着该价格区间存在支撑位或阻力位。投资者可以在该价格区间附近进行买入或卖出操作。如果该股票的实时价格接近阻力位,则买入股票亏损的风险几率增加,卖出股票获利的几率增加;如果该股的实时价格接近支撑位,则卖出股票亏损的风险几率增加,买入股票获利的几率增加。
数据准备:2023年一季度A股日线行情.xlsx
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置为默认字体
plt.rcParams['font.family'] = 'SimHei'
# 显示负数
plt.rcParams['axes.unicode_minus'] = False
# 导入数据
df = pd.read_excel("2023年一季度A股日线行情.xlsx")
# 将日期列转化为日期格式
df["trade_date"] = df["trade_date"].astype("str").apply(lambda x:x[:4]+"-"+x[4:6]+"-"+x[6:])
# 将日期列转换为日期类型,并设置为索引列
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
# 筛选出股票代码是"000001.SZ"平安的股票
stock = df[df['ts_code'] == '000001.SZ']
# 绘制开盘价、收盘价、最高价、最低价的分价直方图
# 设置各个子图的标题
titles = ['开盘价', '收盘价', '最高价', '最低价']
# 设置各个子图的数据集
datas = [stock['open'],stock['close'],stock['high'],stock['low']]
# 创建一个2x2的子图布局
fig, ax = plt.subplots(2, 2, figsize=(10, 10))
# 依次创建各个子图
for i in range(4):
prices = datas[i]
ax[i//2][i%2].hist(prices, bins=10, edgecolor='black', label = titles[i], density = True)
ax[i//2][i%2].set_title(titles[i])
ax[i//2][i%2].set_xlabel("Price")
ax[i//2][i%2].set_ylabel("Frequency")
plt.show()
最终效果图如下: