meanReverting method

List<TimeSeriesPoint> meanReverting({
  1. required DateTime start,
  2. required DateTime end,
  3. required Duration interval,
  4. double mean = 100,
  5. double theta = 0.1,
  6. double sigma = 5,
  7. double? startValue,
})

Generates mean-reverting time series (Ornstein-Uhlenbeck process).

Implementation

List<TimeSeriesPoint> meanReverting({
  required DateTime start,
  required DateTime end,
  required Duration interval,
  double mean = 100,
  double theta = 0.1,
  double sigma = 5,
  double? startValue,
}) {
  final points = <TimeSeriesPoint>[];
  var current = start;
  var value = startValue ?? mean;

  while (!current.isAfter(end)) {
    points.add(TimeSeriesPoint(timestamp: current, value: value));

    // Ornstein-Uhlenbeck update
    const dt = 1.0;
    value = value +
        theta * (mean - value) * dt +
        sigma * math.sqrt(dt) * _random.normal(0, 1);

    current = current.add(interval);
  }

  return points;
}