Skip to content

Signal 9 — Market Regime Filter

Thuộc tínhGiá trị
Phân loạiMacro / Regime Detection
Khung thời gianDaily
Paper gốcAng-Bekaert (2002) — Regime Switching; Lo-MacKinlay (1988)
Loại dữ liệuIndex returns + volatility + breadth
Hướng giao dịchFilter on/off cho chiến lược khác
CapacityN/A — filter

Logic. Dùng K-means clustering (k=4) trên features: [return_20d, realized_vol_20d, VR(5), drawdown_60d] để classify 4 regimes: Bull-Quiet, Bull-Volatile, Bear-Volatile, Bear-Quiet. Áp dụng momentum chỉ trong Bull-Quiet, mean-reversion trong Bear-Volatile, đứng ngoài trong Bull-Volatile.

Code Python.

python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

def build_regime_features(index_df):
    ret = index_df['close'].pct_change()
    feat = pd.DataFrame({
        'ret_20': ret.rolling(20).sum(),
        'vol_20': ret.rolling(20).std() * np.sqrt(252),
        'vr_5': ret.rolling(5).var() / (5 * ret.rolling(1).var().rolling(5).mean()),
        'dd_60': index_df['close'] / index_df['close'].rolling(60).max() - 1,
    }).dropna()
    return feat

def fit_regimes(feat, n_clusters=4, seed=42):
    scaler = StandardScaler()
    X = scaler.fit_transform(feat)
    km = KMeans(n_clusters=n_clusters, random_state=seed, n_init=10).fit(X)
    return scaler, km

QuantConnect setup. Trong Initialize, fit model trên 5 năm history của VN-Index. Schedule daily prediction → set self.current_regime = .... Các strategy con check self.current_regime trước khi entry.

Powered by dautu.tech