我们可以使用 Ornstein-Uhlenbeck 过程来模拟价格的均值回归,首先我们需要确定一些基本的参数:长期均值(μ)、均值回归的速度(θ)、波动率(σ)以及时间步长。
我们将通过生成随机数来模拟这个过程,每次迭代中,价格会朝着均值回归,加入随机扰动来模拟市场的随机波动。
C# 实现均值回归模型(Ornstein-Uhlenbeck 过程)
using System;
namespace MeanReversionSimulation
{
class Program
{
static void Main(string[] args)
{
// 参数设置
double mu = 100; // 长期均值(μ)
double theta = 0.1; // 均值回归速度(θ)
double sigma = 1; // 波动率(σ)
double initialPrice = 110; // 初始价格
double timeStep = 0.01; // 时间步长
int numSteps = 1000; // 模拟的步骤数
// 模拟均值回归过程
double price = initialPrice;
Random rand = new Random();
for (int t = 0; t < numSteps; t++)
{
// 随机扰动(正态分布)
double randomNoise = NormalRandom(rand, 0, 1);
// Ornstein-Uhlenbeck 过程的公式
price += theta * (mu - price) * timeStep + sigma * Math.Sqrt(timeStep) * randomNoise;
// 打印当前价格
Console.WriteLine($"Step {t + 1}: Price = {price:F2}");
}
}
// 生成标准正态分布的随机数
static double NormalRandom(Random rand, double mean, double stdDev)
{
double u1 = 1.0 - rand.NextDouble(); // Uniform(0,1) random doubles
double u2 = 1.0 - rand.NextDouble();
double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2); // Box-Muller transform
return mean + stdDev * randStdNormal;
}
}
}
代码解析
-
初始化参数:
mu
: 价格的长期均值。我们假设价格最终会回到mu
。theta
: 均值回归的速度,表示价格回归均值的速度。sigma
: 表示市场的波动性,控制随机扰动的幅度。initialPrice
: 初始价格。timeStep
: 模拟的时间步长(通常为小时间单位,如天数、小时等)。numSteps
: 模拟的总步骤数,即模拟的时间段。
-
模拟过程:
- 每一步价格会根据公式
price += theta * (mu - price) * timeStep + sigma * Math.Sqrt(timeStep) * randomNoise;
更新。theta * (mu - price)
使价格朝着均值mu
回归,sigma * Math.Sqrt(timeStep) * randomNoise
加入了随机扰动,使得价格在均值回归的同时有一定的波动。
- 每一步价格会根据公式
-
生成标准正态分布随机数:
NormalRandom
方法使用 Box-Muller 变换生成标准正态分布(均值为0,标准差为1)的随机数,然后根据提供的mean
和stdDev
对其进行转换,以生成符合正态分布的扰动项。
-
打印价格变化:
- 每一轮的模拟中,价格都会根据均值回归过程发生变化,并打印当前价格。
运行结果
该程序会模拟资产价格的均值回归过程,并输出每个时间步的价格变化。例如,假设长期均值为 100,初始价格为 110,均值回归速度为 0.1,波动率为 1,模拟 1000 次价格更新。随着时间推移,价格会逐渐回归到 100。
扩展和改进
-
可视化:
- 如果希望可视化模拟过程,可以将价格记录到一个列表中,然后使用图表(如
OxyPlot
或LiveCharts
)绘制价格随时间的变化。
- 如果希望可视化模拟过程,可以将价格记录到一个列表中,然后使用图表(如
-
参数优化:
- 可以通过调整
mu
、theta
、sigma
等参数来研究不同市场条件下的均值回归行为。
- 可以通过调整
-
多资产模拟:
- 如果想模拟多个资产的均值回归,可以使用相同的模型对多个资产的价格进行模拟,或添加资产之间的相关性。
通过该模拟,您可以深入理解均值回归过程在金融市场中的应用,尤其是如何通过数学模型对资产价格进行建模和预测。