regime_switching

Defined in fynance.research

regime_switching(n, *, regimes=((0.0, 0.01), (0.0, 0.03)), p_switch=0.02, s0=100.0, seed=None)[source]

Markov regime-switching price path.

The initial regime is drawn uniformly (rather than always starting in regime 0, which biased short paths toward the first regime). At each subsequent step the active regime switches (to a uniformly-drawn regime) with probability p_switch; log-returns are then drawn from the active regime’s (mu, sigma). The varying volatility makes it a natural input for fynance.detect_regimes.

Parameters:
nint

Number of observations (path length).

regimestuple of (float, float)

(mu, sigma) per regime.

p_switchfloat

Per-step probability of switching regime.

s0float

Initial price.

seedint, optional

Seed for reproducibility. None is nondeterministic.

Returns:
fynance.core.PriceSeries

Price path of length n.

Examples

>>> import numpy as np
>>> from fynance.research import regime_switching
>>> a, b = regime_switching(5, seed=3), regime_switching(5, seed=3)
>>> bool(np.allclose(a.to_numpy(), b.to_numpy()))
True