4、成交量模拟:泊松分布模拟交易频率、成交量与价格的关系建模、极端成交量事件
成交量这东西,说白了就是市场的「心跳」。我做了这么多年数据仿真,发现很多人只盯着价格曲线,却把成交量当成配角。其实不对——成交量里藏着大量信息,尤其是那些极端事件,往往预示着趋势的转折。
这一节,我们就来聊聊怎么用数学工具把成交量「造」出来。我会从最基础的泊松分布讲起,再到价格与成交量的联动关系,最后聊聊那些让人头疼的极端事件。
4.1 泊松分布:模拟交易频率的利器
先问个问题:某个股票在一分钟内,到底会有多少笔交易?
你可能会说「这哪说得准」。确实,单次交易是随机的。但大量统计下来,你会发现一个规律——交易次数服从泊松分布。
泊松分布的核心参数是 λ(lambda),它代表单位时间内的平均交易次数。比如某只活跃股,平均每分钟成交 20 笔,那 λ=20。
公式长这样:
P(X=k) = (e^(-λ) * λ^k) / k!
其中 k 是实际发生的交易笔数。嗯,看着有点数学味,但用 Python 实现起来很简单:
import numpy as np
# 假设平均每分钟20笔交易
lambda_val = 20
# 生成1000分钟的模拟数据
trade_counts = np.random.poisson(lam=lambda_val, size=1000)
print(f"平均每分钟交易数: {trade_counts.mean():.2f}")
print(f"标准差: {trade_counts.std():.2f}")
4.2 成交量与价格的关系建模
光有交易频率还不够。我们还得知道每笔交易到底成交了多少股。这就涉及到成交量与价格的联动关系了。
我个人习惯用「量价关系模型」来处理这个问题。核心思路是:
- 价格上涨时:成交量往往放大(买盘积极)
- 价格下跌时:成交量可能萎缩(观望情绪)也可能放大(恐慌抛售)
- 横盘时:成交量相对平稳
我常用的一个简单模型是这样的:
def simulate_volume(price_change, base_volume=1000):
"""
根据价格变化模拟成交量
price_change: 价格变化百分比,如 0.02 表示涨2%
"""
# 基础成交量
volume = base_volume
# 价格上涨时,成交量放大
if price_change > 0:
volume *= (1 + 2 * price_change) # 涨幅越大,放量越明显
# 价格下跌时,成交量可能放大也可能缩小
elif price_change < 0:
# 加入随机性:有时恐慌放量,有时缩量
if np.random.random() < 0.3: # 30%概率恐慌抛售
volume *= (1 + 3 * abs(price_change))
else:
volume *= (1 - 0.5 * abs(price_change))
# 加入随机噪声
noise = np.random.normal(1, 0.1)
volume *= noise
return max(volume, 100) # 最低成交量限制
4.3 极端成交量事件
好了,前面聊的都是「正常情况」。但市场最怕的是什么?是极端事件。
你想想看,2020 年原油期货跌到负值那天,成交量是平时的几十倍。这种极端事件,用普通的泊松分布根本模拟不出来——因为泊松分布的尾部太「薄」了,生成不了那么大的值。
那怎么办?我建议用「混合分布」来处理。
具体做法是:
- 90% 的时间:用泊松分布模拟正常交易频率
- 10% 的时间:用幂律分布模拟极端事件
代码实现:
def extreme_volume_simulation(n_days=1000):
volumes = []
for _ in range(n_days):
# 判断是否为极端事件
if np.random.random() < 0.1: # 10%概率触发极端事件
# 幂律分布:产生极端大的成交量
# 参数 alpha 控制尾部厚度,alpha 越小,极端值越大
alpha = 2.5
extreme_factor = np.random.pareto(alpha) * 10
volume = 10000 * extreme_factor
else:
# 正常情况:泊松分布
volume = np.random.poisson(lam=1000)
volumes.append(volume)
return np.array(volumes)
# 测试一下
volumes = extreme_volume_simulation(10000)
print(f"最大成交量: {volumes.max():.0f}")
print(f"99%分位数: {np.percentile(volumes, 99):.0f}")
4.4 知识体系总览
说了这么多,我们来梳理一下成交量模拟的核心逻辑。下面这张图可以帮你快速建立整体认知:
这张图把成交量模拟的三个核心模块串起来了。从左到右,从常规到极端,构成了一个完整的仿真框架。我个人建议,在实际项目中,先跑通常规的泊松模型,再逐步加入量价关系和极端事件——步子迈大了容易出 bug。
好了,成交量模拟就聊到这儿。记住一句话:仿真数据的好坏,不取决于模型有多复杂,而在于它能不能反映市场的真实特征。尤其是那些「黑天鹅」事件,宁可多模拟几次,也别漏掉。