RegimeMoE¶
Defined in fynance.models.regime_model
- class RegimeMoE(n_regimes=3, regime_col=0, regime_w=21, regime_period=252, routing='soft', emb_dim=4, hidden=(16, 8), loss=None, lr=1e-3, epochs=80, batch_size=None, cost=0.0, seed=0)[source]
Bases:
objectRegime-conditioned mixture-of-experts
SignalModel.- Parameters:
- n_regimesint
Number of market regimes (clusters). Default 3.
- regime_colint
Index of the column in
Xused as the positive price / level series theRegimeDetectorclusters on. Default 0.- regime_wint
Rolling window for the regime features. Default 21.
- regime_periodint
Annualization factor for the regime volatility feature. Default 252.
- routing{“soft”, “hard”}
soft(default) concatenates a learned regime embedding to the features through a shared trunk (differentiable end-to-end);harduses one expert MLP per regime, selected by the regime label.- emb_dimint
Embedding size for
softrouting (ignored forhard). Default 4.- hiddentuple of int
Hidden layer sizes of the trunk / experts. Default
(16, 8).- lossBaseLoss, optional
Differentiable financial loss (default
SharpeLoss).- lr, epochs, batch_size, cost, seed
Forwarded to
ObjectiveModel.
Notes
Reproducible: the net is seeded (
torch.manual_seed) before it is built, then handed toObjectiveModel(which would otherwise skip seeding a caller-provided net).Examples
>>> import numpy as np >>> rng = np.random.default_rng(0) >>> level = 100 * np.exp(np.cumsum(rng.standard_normal(400) * 0.01)) >>> sig = rng.choice([-1.0, 1.0], size=400) >>> X = np.column_stack([level, sig]).astype(np.float32) >>> y = (sig * 0.01).astype(np.float32) >>> model = RegimeMoE(n_regimes=2, regime_w=10, epochs=5).fit(X, y) >>> model.predict(X).shape (400, 1)
- fit(X, y)[source]
Fit the causal regime detector (on train) then train the MoE net.
- Parameters:
- Xarray-like, shape (T, F)
Feature matrix; column
regime_colis the positive price/level series used for regime detection.- yarray-like, shape (T,)
Realized per-bar returns aligned with
X.
- Returns:
- RegimeMoE
self.
- predict(X)[source]
Assign the regime online and return positions in
[-1, 1].