stockPrice method
Generates stock-like price data using geometric Brownian motion.
Implementation
List<TimeSeriesPoint> stockPrice({
required DateTime start,
required DateTime end,
required Duration interval,
double startPrice = 100,
double annualReturn = 0.1,
double annualVolatility = 0.2,
}) {
final points = <TimeSeriesPoint>[];
var current = start;
var price = startPrice;
// Calculate per-interval parameters
final totalIntervals = end.difference(start).inMinutes / interval.inMinutes;
final dt = 1 / totalIntervals;
final mu = annualReturn;
final sigma = annualVolatility;
while (!current.isAfter(end)) {
points.add(TimeSeriesPoint(timestamp: current, value: price));
final drift = (mu - 0.5 * sigma * sigma) * dt;
final diffusion = sigma * math.sqrt(dt) * _random.normal(0, 1);
price = price * math.exp(drift + diffusion);
current = current.add(interval);
}
return points;
}