{"stats":{"totalConcepts":460,"totalGroups":19,"totalTaxonomyCategories":50,"totalPt2Sections":38,"totalPt2Items":107,"totalPt3Sections":9,"totalPt3Items":27,"totalCoordinateSystems":14,"generatedAt":"2026-10-20T04:10:42.328Z"},"sections":[{"id":1,"title":"VOLATILITY ESTIMATORS","count":9,"items":[{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Garman-Klass Volatility Estimator","summary":"Uses OHLC data for more accurate volatility estimation","subcategory":"General"},{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Rogers-Satchell-Yoon Volatility","summary":"Drift-independent volatility estimator","subcategory":"General"},{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Parkinson Volatility Estimator","summary":"High-low range-based volatility","subcategory":"General"},{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Yang-Zhang Volatility Estimator","summary":"Combines overnight and open-to-close volatility","subcategory":"General"},{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Realized Volatility (RV)","summary":"Sum of squared intraday returns","subcategory":"General"},{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Bi-Power Variation","summary":"Jump-robust volatility estimator","subcategory":"General"},{"secId":1,"secTitle":"VOLATILITY ESTIMATORS","name":"Normalized Average True Range (N-ATR)","summary":"ATR scaled by price for cross-market comparison","subcategory":"General"}]},{"id":2,"title":"ECONOMETRIC FILTERS","count":13,"items":[{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Hodrick-Prescott Filter","summary":"Separates trend from cycle with smoothing parameter","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Hamilton Regression Filter","summary":"Alternative to HP filter without spurious dynamics","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Christiano-Fitzgerald Filter","summary":"Asymmetric band-pass filter","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Baxter-King Filter","summary":"Symmetric band-pass filter","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Beveridge-Nelson Decomposition","summary":"Permanent-transitory decomposition","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Harvey-Trimbur Model-Based Filter","summary":"Unobserved components model","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Pollock Rational Square Wave Filter","summary":"Frequency domain filtering","subcategory":"Trend-Cycle Decomposition"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Whittaker-Henderson Smoothing","summary":"Penalized least squares smoothing","subcategory":"Advanced Economic Filters"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Henderson Moving Average","summary":"Weighted moving average for seasonal adjustment","subcategory":"Advanced Economic Filters"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Census X-11/X-12-ARIMA Filter","summary":"Seasonal adjustment methodology","subcategory":"Advanced Economic Filters"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Leser Filter","summary":"Polynomial trend fitting","subcategory":"Advanced Economic Filters"},{"secId":2,"secTitle":"ECONOMETRIC FILTERS","name":"Musgrave Asymmetric Filter","summary":"End-point problem solution","subcategory":"Advanced Economic Filters"}]},{"id":3,"title":"ADAPTIVE FILTERS","count":22,"items":[{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"NLMS (Normalized Least Mean Squares) L1 Filter","summary":"Normalized adaptive filter","subcategory":"Least Mean Squares Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"LMS (Least Mean Squares) Filter","summary":"Basic adaptive filtering","subcategory":"Least Mean Squares Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"RLS (Recursive Least Squares) Filter","summary":"Fast convergence adaptive filter","subcategory":"Least Mean Squares Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Affine Projection Algorithm","summary":"Decorrelating adaptive filter","subcategory":"Least Mean Squares Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Sign-Error LMS","summary":"Robust adaptive filtering","subcategory":"Least Mean Squares Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Kalman Filter","summary":"Optimal state estimation for linear systems","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Extended Kalman Filter (EKF)","summary":"Nonlinear system state estimation","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Unscented Kalman Filter (UKF)","summary":"Nonlinear filtering with unscented transform","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Ensemble Kalman Filter","summary":"Monte Carlo Kalman filtering","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Particle Filter (Sequential Monte Carlo)","summary":"Nonlinear/non-Gaussian filtering","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Auxiliary Particle Filter","summary":"Improved particle filtering","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Space-Time Particle Filter","summary":"High-dimensional particle filtering","subcategory":"Kalman Family"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"KAMA (Kaufman's Adaptive Moving Average)","summary":"Efficiency ratio-based adaptation","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"FRAMA (Fractal Adaptive Moving Average)","summary":"Fractal dimension-based adaptation","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"MAMA/FAMA (MESA Adaptive Moving Average)","summary":"Hilbert transform-based","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Variable Index Dynamic Average (VIDYA)","summary":"Volatility-indexed adaptation","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Adaptive Deadband Range Filter","summary":"Dynamic threshold filtering","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Inertia-Based Range Filter","summary":"Momentum-based adaptation","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Dynamic Momentum Index (DMI)","summary":"Chande - Volatility-adjusted RSI period","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Adaptive Stochastic Oscillator (Volatility-Based Lookback)","summary":"Dynamic period stochastic","subcategory":"Market-Adaptive"},{"secId":3,"secTitle":"ADAPTIVE FILTERS","name":"Adaptive RSI (DFT-Calculated Dominant Cycle)","summary":"Cycle-tuned RSI","subcategory":"Market-Adaptive"}]},{"id":4,"title":"DIGITAL SIGNAL PROCESSING FILTERS","count":26,"items":[{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Butterworth Filter (Type I & II)","summary":"Maximally flat passband","subcategory":"IIR (Infinite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Chebyshev Filter (Type I & II)","summary":"Equiripple passband/stopband","subcategory":"IIR (Infinite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Elliptic Filter (Cauer)","summary":"Steepest roll-off","subcategory":"IIR (Infinite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Bessel Filter","summary":"Linear phase response","subcategory":"IIR (Infinite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Legendre Filter","summary":"Optimized phase and magnitude","subcategory":"IIR (Infinite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Swiss Army Knife (SWAK) Indicator (2nd Order IIR)","summary":"Generalized IIR filter","subcategory":"IIR (Infinite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Savitzky-Golay Filter","summary":"Polynomial smoothing filter","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Windowed Sinc Filter","summary":"Ideal frequency response approximation","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Parks-McClellan Optimal FIR","summary":"Minimax optimization","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Equiripple FIR Filter","summary":"Uniform ripple in passband/stopband","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Zero-Phase FIR Filter","summary":"Forward-backward filtering","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Adjustable Lag FIR Filter","summary":"Configurable lag reduction","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"6-Tap Low-Pass FIR Filter","summary":"Ehlers' favorite filter","subcategory":"FIR (Finite Impulse Response)"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Band-pass Filter","summary":"Passes frequencies within range","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Band-stop (Notch) Filter","summary":"Rejects specific frequency","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"High-pass Filter (1-pole & 2-pole Ehlers)","summary":"Removes low frequencies","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Low-pass Filter","summary":"Removes high frequencies","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Gaussian Filter (1-4 pole)","summary":"Smooth frequency cutoff","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Super Smoother (2-pole & 3-pole Butterworth)","summary":"Enhanced smoothing","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Roofing Filter (2-Pole High-Pass + SuperSmoother)","summary":"Spectral dilation removal","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Dominant Cycle-Tuned Bandpass Filter","summary":"Adaptive frequency selection","subcategory":"Specialized DSP"},{"secId":4,"secTitle":"DIGITAL SIGNAL PROCESSING FILTERS","name":"Bandpass Filter Array (8-50 Period Parallel Filters)","summary":"Multi-frequency analysis","subcategory":"Specialized DSP"}]},{"id":5,"title":"WAVELET & MULTIRESOLUTION ANALYSIS","count":22,"items":[{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Daubechies Wavelets (db1-db20)","summary":"Orthogonal compactly supported","subcategory":"Discrete Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Symlets (sym2-sym20)","summary":"Nearly symmetric wavelets","subcategory":"Discrete Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Coiflets (coif1-coif5)","summary":"Scaling function symmetry","subcategory":"Discrete Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Biorthogonal Wavelets (bior)","summary":"Linear phase wavelets","subcategory":"Discrete Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Haar Wavelet","summary":"Simplest orthogonal wavelet","subcategory":"Discrete Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Discrete Meyer Wavelet (dmey)","summary":"FIR approximation","subcategory":"Discrete Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Morlet Wavelet","summary":"Complex Gaussian-windowed sinusoid","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Mexican Hat Wavelet (Ricker)","summary":"Second derivative of Gaussian","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Meyer Wavelet","summary":"Smooth in time and frequency","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Complex Morlet Wavelet","summary":"Phase information preservation","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Gaussian Wavelets","summary":"Derivatives of Gaussian","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Shannon Wavelet","summary":"Band-limited wavelet","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Frequency B-Spline Wavelet","summary":"Smooth compact support","subcategory":"Continuous Wavelets"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Singular Spectrum Analysis (SSA)","summary":"Time series decomposition","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Empirical Mode Decomposition (EMD)","summary":"Data-driven decomposition","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Hilbert-Huang Transform (HHT)","summary":"EMD + Hilbert spectral analysis","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Ensemble EMD (EEMD)","summary":"Noise-assisted EMD","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Wavelet Packet Decomposition","summary":"Complete frequency decomposition","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Stationary Wavelet Transform (SWT)","summary":"Translation-invariant","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Maximal Overlap DWT (MODWT)","summary":"Shift-invariant transform","subcategory":"Decomposition Methods"},{"secId":5,"secTitle":"WAVELET & MULTIRESOLUTION ANALYSIS","name":"Empirical Mode Decomposition Indicator","summary":"Trading-specific EMD","subcategory":"Decomposition Methods"}]},{"id":6,"title":"ZERO-LAG & LOW-LAG FILTERS","count":13,"items":[{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Jurik Moving Average (JMA)","summary":"Proprietary low-lag filter","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag Exponential Moving Average (ZLEMA)","summary":"Lag-reduced EMA","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag EMA (Ehlers)","summary":"Error correction method","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Adaptive Zero Lag EMA","summary":"Cycle-adaptive zero-lag","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag FIR Filter","summary":"Forward-backward FIR","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag IIR Filter","summary":"Predictive IIR","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Hull Moving Average (HMA)","summary":"Weighted zero-lag","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"T3 (Triple Exponential Moving Average)","summary":"Tilson's T3","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Tillson T3","summary":"Smoothing with reduced lag","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Error-Correcting (EC) Filter (Zero-Lag EMA Variant)","summary":"Ehlers/Way method","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag RSI","summary":"Lag-reduced RSI","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag Double Exponential Moving Average","summary":"DEMA with zero-lag","subcategory":"General"},{"secId":6,"secTitle":"ZERO-LAG & LOW-LAG FILTERS","name":"Zero Lag BMT","summary":"Zero-lag variant","subcategory":"General"}]},{"id":7,"title":"EHLERS CYCLE ANALYSIS FILTERS","count":19,"items":[{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Hilbert Transform","summary":"Instantaneous Trendline - Phase-based trend","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Ehlers Instantaneous Trendline","summary":"Adaptive trendline","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Ehlers Decycler Oscillator","summary":"High-pass filtered price","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"MESA Sine Wave","summary":"Dominant cycle sine wave","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"iTrend","summary":"Instantaneous trend indicator","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Reflex Indicator","summary":"Cycle-based momentum","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Trendflex Indicator","summary":"Trend flexibility measure","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Roofing Filter","summary":"High-pass + Super Smoother","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Dominant Cycle Measurement","summary":"Period estimation","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Correlation Cycle Indicator","summary":"Cycle correlation","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Super Smoother Filter","summary":"2-pole Butterworth","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Two-Pole Super Smoother","summary":"Enhanced smoothing","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Sinewave Lead Indicator","summary":"Phase-leading sine","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Cosine Lead Indicator","summary":"Phase-leading cosine","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Cyber Cycle Indicator (IFT-Transformed)","summary":"Inverse Fisher cycle","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"MESA Stochastic (with Roofing Filter)","summary":"Spectral dilation removed","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Cyclic Component Indicator","summary":"Isolated cycle","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Instantaneous Trend + Cycle Synthesis","summary":"Market modeling","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Swing Wave Indicator (Heat Map Array)","summary":"Visual cycle display","subcategory":"General"},{"secId":7,"secTitle":"EHLERS CYCLE ANALYSIS FILTERS","name":"Market Mode Identification (Trend vs Cycle)","summary":"Mode detection","subcategory":"General"}]},{"id":8,"title":"EHLERS TRANSFORMS & ADVANCED INDICATORS","count":10,"items":[{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Fisher Transform","summary":"Gaussian PDF transformation","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Inverse Fisher Transform","summary":"Bounds indicators to ±1","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Smoothed RSI Inverse Fisher Transform (Vervoort)","summary":"Rainbow + IFT + RSI","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Homodyne Discriminator","summary":"Frequency measurement","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Phase Accumulator","summary":"Cycle phase tracking","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"InPhase and Quadrature Components (I&Q)","summary":"Hilbert pair","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Stochastic RSI Transformation","summary":"RSI applied to model","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Nonlinear Ehlers Filters (Order Statistic)","summary":"Rank-based filtering","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Volume-Weighted Ehlers Filter","summary":"Volume coefficient weighting","subcategory":"General"},{"secId":8,"secTitle":"EHLERS TRANSFORMS & ADVANCED INDICATORS","name":"Distance-Squared Coefficient Filter","summary":"Distance-based weighting","subcategory":"General"}]},{"id":9,"title":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","count":9,"items":[{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Discrete Fourier Transform (DFT) for Cycle Detection","summary":"Frequency domain analysis","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Periodogram-Based Spectrum Analysis","summary":"Power spectral density","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Autocorrelation Periodogram","summary":"Correlation-based spectrum","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Channelized Receiver Spectrum (42 Parallel IIR Filters)","summary":"Multi-channel analysis","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Heat Map Spectrogram","summary":"Visual frequency representation","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Hilbert Cycle Period Measurement","summary":"Phase-based period","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Instantaneous Cycle Period","summary":"Real-time cycle length","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Spectral Dilation Removal","summary":"Stochastic effect removal","subcategory":"General"},{"secId":9,"secTitle":"CYCLE MEASUREMENT & SPECTRUM ANALYSIS","name":"Convolution with Variable-Period Sine/Cosine","summary":"Adaptive convolution","subcategory":"General"}]},{"id":10,"title":"ADVANCED SMOOTHING TECHNIQUES","count":17,"items":[{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"EWMA (Exponentially Weighted Moving Average)","summary":"Exponential weighting","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Holt-Winters (Triple Exponential Smoothing)","summary":"Trend + seasonality","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Double Exponential Smoothing","summary":"Trend-adjusted smoothing","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Arnaud Legoux Moving Average (ALMA)","summary":"Gaussian-weighted","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"McGinley Dynamic","summary":"Price-responsive smoothing","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Regularized Exponential Moving Average","summary":"Ridge regularization","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Smoothing Spline","summary":"Penalized least squares","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"B-Spline Filter","summary":"Piecewise polynomial","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Cubic Spline Smoothing","summary":"Third-order polynomial","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"LOESS/LOWESS (Locally Weighted Scatterplot Smoothing)","summary":"Local regression","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Rainbow Moving Average (Nested WMA)","summary":"Multiple WMA layers","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Elastic Volume Weighted Moving Average (eVWMA)","summary":"Volume-elastic","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Triangular Weighted Moving Average (Double-Smoothed SMA)","summary":"Double smoothing","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Regularized EMA (Chris Satchwell)","summary":"Constrained EMA","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Reference Fast/Slow Trend Lines","summary":"Dual-speed trends","subcategory":"General"},{"secId":10,"secTitle":"ADVANCED SMOOTHING TECHNIQUES","name":"Slow Adaptive Trend Line","summary":"Gradual adaptation","subcategory":"General"}]},{"id":11,"title":"STATISTICAL & MACHINE LEARNING FILTERS","count":10,"items":[{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Ridge Regression (Tikhonov Regularization)","summary":"L2 regularization","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"LASSO Regularization","summary":"L1 regularization","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Elastic Net Regularization","summary":"L1 + L2 combination","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Principal Component Analysis (PCA) Filter","summary":"Dimensionality reduction","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Kernel PCA Filter","summary":"Nonlinear PCA","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Independent Component Analysis (ICA)","summary":"Signal separation","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Wiener Filter","summary":"Optimal linear filter","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Wiener-Kolmogorov Filter","summary":"Kriging/optimal prediction","subcategory":"General"},{"secId":11,"secTitle":"STATISTICAL & MACHINE LEARNING FILTERS","name":"Autoencoder-Based Denoising","summary":"Neural network denoising","subcategory":"General"}]},{"id":12,"title":"VOLATILITY MODELING FILTERS","count":12,"items":[{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"GARCH(1,1)","summary":"Generalized autoregressive conditional heteroskedasticity","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"EGARCH (Exponential GARCH)","summary":"Asymmetric volatility modeling","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"GJR-GARCH","summary":"Threshold GARCH","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"TGARCH (Threshold GARCH)","summary":"Leverage effect modeling","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"FIGARCH (Fractionally Integrated GARCH)","summary":"Long memory volatility","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"GARCH-MIDAS","summary":"Mixed data sampling GARCH","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"GARCH Diffusion Model","summary":"Continuous-time GARCH","subcategory":"GARCH Family"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"Heston Model Filter","summary":"Square-root volatility process","subcategory":"Stochastic Volatility"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"ARSV (Autoregressive Stochastic Volatility)","summary":"AR(1) log-volatility","subcategory":"Stochastic Volatility"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"SV-GARCH Hybrid","summary":"Combined approach","subcategory":"Stochastic Volatility"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"Hull-White Model","summary":"Interest rate volatility","subcategory":"Stochastic Volatility"},{"secId":12,"secTitle":"VOLATILITY MODELING FILTERS","name":"3/2 Stochastic Volatility Model","summary":"Alternative volatility process","subcategory":"Stochastic Volatility"}]},{"id":13,"title":"PERCENTILE & QUANTILE FILTERS","count":6,"items":[{"secId":13,"secTitle":"PERCENTILE & QUANTILE FILTERS","name":"True Range Percentile","summary":"Percentile-based range","subcategory":"General"},{"secId":13,"secTitle":"PERCENTILE & QUANTILE FILTERS","name":"MAD (Median Absolute Deviation)","summary":"Robust dispersion measure","subcategory":"General"},{"secId":13,"secTitle":"PERCENTILE & QUANTILE FILTERS","name":"Quantile Regression Filter","summary":"Conditional quantile estimation","subcategory":"General"},{"secId":13,"secTitle":"PERCENTILE & QUANTILE FILTERS","name":"Trimmed Mean Filter","summary":"Outlier removal via trimming","subcategory":"General"},{"secId":13,"secTitle":"PERCENTILE & QUANTILE FILTERS","name":"Winsorized Mean Filter","summary":"Outlier capping","subcategory":"General"},{"secId":13,"secTitle":"PERCENTILE & QUANTILE FILTERS","name":"Hodges-Lehmann Estimator","summary":"Median of pairwise means","subcategory":"General"}]},{"id":14,"title":"GEOMETRIC & PATTERN FILTERS","count":5,"items":[{"secId":14,"secTitle":"GEOMETRIC & PATTERN FILTERS","name":"Ramer-Douglas-Peucker Algorithm (RDP)","summary":"Curve simplification","subcategory":"General"},{"secId":14,"secTitle":"GEOMETRIC & PATTERN FILTERS","name":"Visvalingam-Whyatt Algorithm","summary":"Area-based simplification","subcategory":"General"},{"secId":14,"secTitle":"GEOMETRIC & PATTERN FILTERS","name":"Perpendicular Distance Simplification","summary":"Distance-based reduction","subcategory":"General"},{"secId":14,"secTitle":"GEOMETRIC & PATTERN FILTERS","name":"Curve Fitting (Polynomial, Exponential, Logarithmic)","summary":"Parametric fitting","subcategory":"General"},{"secId":14,"secTitle":"GEOMETRIC & PATTERN FILTERS","name":"Piecewise Linear Approximation","summary":"Segmented linear fitting","subcategory":"General"}]},{"id":15,"title":"ADVANCED MOVING AVERAGES","count":12,"items":[{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Ahrens Moving Average","summary":"Proprietary formula","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Triangular Moving Average","summary":"Double SMA","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Pentuple Exponential Moving Average","summary":"5x EMA","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Quadruple Exponential Moving Average","summary":"4x EMA","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Fibonacci's Weighted Moving Average","summary":"Fibonacci weights","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Sine Weighted Moving Average","summary":"Sinusoidal weighting","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Parabolic Weighted Moving Average","summary":"Parabolic weighting","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Time Series Moving Average (TSMA)","summary":"Linear regression slope","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Linear Regression Moving Average","summary":"Least squares line","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Elastic Volume Weighted Moving Average (EVWMA)","summary":"Elastic volume","subcategory":"General"},{"secId":15,"secTitle":"ADVANCED MOVING AVERAGES","name":"Integral of Linear Regression Slope (ILRS)","summary":"Integrated slope","subcategory":"General"}]},{"id":16,"title":"RANGE & TRAILING STOP FILTERS","count":7,"items":[{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Sylvain Vervoort","summary":"Average True Range Trailing Stops - ATR-based stops","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Kase Dev Stop","summary":"Developmental stop","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Chandelier Exit","summary":"ATR-based chandelier","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Adaptive Channel System","summary":"Dynamic channels","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"SuperTrend Filter","summary":"ATR-based trend","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Parabolic SAR Filter","summary":"Acceleration-based stop","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Chandelier Trading Stop (ATR-Based)","summary":"High/low - ATR multiple","subcategory":"General"},{"secId":16,"secTitle":"RANGE & TRAILING STOP FILTERS","name":"Dynamic Risk Adjustment Stops","summary":"Adaptive risk management","subcategory":"General"}]},{"id":17,"title":"FREQUENCY DOMAIN FILTERS","count":1,"items":[{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Fast Fourier Transform (FFT) Filter","summary":"Efficient DFT","subcategory":"General"},{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Discrete Fourier Transform (DFT)","summary":"Frequency decomposition","subcategory":"General"},{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Spectral Analysis Filter","summary":"Frequency content analysis","subcategory":"General"},{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Power Spectral Density Filter","summary":"Power distribution","subcategory":"General"},{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Cepstral Analysis","summary":"Log-spectrum analysis","subcategory":"General"},{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Periodogram Smoothing","summary":"Spectrum smoothing","subcategory":"General"},{"secId":17,"secTitle":"FREQUENCY DOMAIN FILTERS","name":"Welch's Method","summary":"Averaged periodogram","subcategory":"General"}]},{"id":18,"title":"STATE-SPACE & BAYESIAN FILTERS","count":7,"items":[{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"State-Space Model Extraction","summary":"Hidden state estimation","subcategory":"General"},{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"Bayesian Structural Time Series (BSTS)","summary":"Bayesian forecasting","subcategory":"General"},{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"Dynamic Linear Model (DLM)","summary":"Time-varying coefficients","subcategory":"General"},{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"Unobserved Components Model (UCM)","summary":"Structural decomposition","subcategory":"General"},{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"Markov Switching Model Filter","summary":"Regime-dependent filtering","subcategory":"General"},{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"Hidden Markov Model (HMM) Filter","summary":"Discrete state filtering","subcategory":"General"},{"secId":18,"secTitle":"STATE-SPACE & BAYESIAN FILTERS","name":"Particle MCMC","summary":"Particle-based Bayesian inference","subcategory":"General"}]},{"id":19,"title":"HYSTERESIS & THRESHOLD FILTERS","count":5,"items":[{"secId":19,"secTitle":"HYSTERESIS & THRESHOLD FILTERS","name":"Adaptive Deadband with Hysteresis","summary":"State-dependent threshold","subcategory":"General"},{"secId":19,"secTitle":"HYSTERESIS & THRESHOLD FILTERS","name":"Schmitt Trigger Filter","summary":"Dual threshold switching","subcategory":"General"},{"secId":19,"secTitle":"HYSTERESIS & THRESHOLD FILTERS","name":"Band-Limited Hysteresis","summary":"Frequency-selective hysteresis","subcategory":"General"},{"secId":19,"secTitle":"HYSTERESIS & THRESHOLD FILTERS","name":"Threshold-Based Noise Reduction","summary":"Hard thresholding","subcategory":"General"},{"secId":19,"secTitle":"HYSTERESIS & THRESHOLD FILTERS","name":"Signal-to-Noise Ratio Filter","summary":"SNR-based filtering","subcategory":"General"}]},{"id":20,"title":"HYBRID & MULTI-METHOD FILTERS","count":5,"items":[{"secId":20,"secTitle":"HYBRID & MULTI-METHOD FILTERS","name":"Hodrick-Prescott + Kalman Hybrid","summary":"Combined econometric/Kalman","subcategory":"General"},{"secId":20,"secTitle":"HYBRID & MULTI-METHOD FILTERS","name":"GARCH + Particle Filter Combination","summary":"Volatility + nonlinear filtering","subcategory":"General"},{"secId":20,"secTitle":"HYBRID & MULTI-METHOD FILTERS","name":"EMD + Wavelet Hybrid","summary":"Multi-scale decomposition","subcategory":"General"},{"secId":20,"secTitle":"HYBRID & MULTI-METHOD FILTERS","name":"SSA + ARIMA Combination","summary":"Structural + ARIMA","subcategory":"General"},{"secId":20,"secTitle":"HYBRID & MULTI-METHOD FILTERS","name":"Butterworth + Savitzky-Golay Cascade","summary":"IIR + FIR combination","subcategory":"General"}]},{"id":21,"title":"CHANDE INDICATORS & OSCILLATORS","count":7,"items":[{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Chande Momentum Oscillator (CMO)","summary":"Momentum difference ratio","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Qstick Indicator","summary":"Open-close momentum","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Inertia Indicator","summary":"RVI of linear regression","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Vertical Horizontal Filter (VHF)","summary":"Trend strength measure","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Polarized Fractal Efficiency (PFE)","summary":"Efficiency measure","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Trend Detection Index (TDI)","summary":"Directional movement index variant","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Dynamic Momentum Index (DMI)","summary":"Variable-length RSI","subcategory":"General"},{"secId":21,"secTitle":"CHANDE INDICATORS & OSCILLATORS","name":"Asymmetrical RSI (ARSI)","summary":"Separate up/down periods","subcategory":"General"}]},{"id":22,"title":"ADVANCED OSCILLATORS & MOMENTUM","count":9,"items":[{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Market Thrust Indicator","summary":"Breadth momentum","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Balance of Market Power (BMP)","summary":"Supply/demand balance","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Aroon Indicator & Aroon Oscillator","summary":"Time since high/low","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Time-Segmented Volume (TSV)","summary":"Intraday volume analysis","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Advance Issues Momentum (AIM)","summary":"Breadth momentum","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Composite Momentum Index","summary":"Multi-component momentum","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Regression Oscillator","summary":"Detrended price oscillator","subcategory":"General"},{"secId":22,"secTitle":"ADVANCED OSCILLATORS & MOMENTUM","name":"Stochastic Momentum Index (SMI)","summary":"Double-smoothed stochastic","subcategory":"General"}]},{"id":23,"title":"REGRESSION & STATISTICAL INDICATORS","count":2,"items":[{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"Least Squares Moving Average (LSMA)","summary":"Linear regression line","subcategory":"General"},{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"R-Squared Indicator (Linear Regression Goodness of Fit)","summary":"Trend strength","subcategory":"General"},{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"Linear Regression Slope (LRS)","summary":"Regression slope","subcategory":"General"},{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"Regression Oscillator","summary":"Price - regression line","subcategory":"General"},{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"Integral of Linear Regression Slope (ILRS)","summary":"Cumulative slope","subcategory":"General"},{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"Point-Change Plot (with IIR Averaging)","summary":"Change tracking","subcategory":"General"},{"secId":23,"secTitle":"REGRESSION & STATISTICAL INDICATORS","name":"Lattice/Dynamic Trees (Price Range Estimation)","summary":"Option pricing trees","subcategory":"General"}]},{"id":24,"title":"VOLATILITY BANDS & CHANNELS","count":6,"items":[{"secId":24,"secTitle":"VOLATILITY BANDS & CHANNELS","name":"Average True Range Bands","summary":"ATR envelope","subcategory":"General"},{"secId":24,"secTitle":"VOLATILITY BANDS & CHANNELS","name":"Standard Deviation Bands (Bollinger-Style)","summary":"Statistical bands","subcategory":"General"},{"secId":24,"secTitle":"VOLATILITY BANDS & CHANNELS","name":"Volatility-Based Breakout System","summary":"Volatility thresholds","subcategory":"General"},{"secId":24,"secTitle":"VOLATILITY BANDS & CHANNELS","name":"Dynamic Bollinger Bands (Volatility-Adjusted)","summary":"Adaptive width","subcategory":"General"},{"secId":24,"secTitle":"VOLATILITY BANDS & CHANNELS","name":"Elastic ATR Channels","summary":"Flexible ATR bands","subcategory":"General"},{"secId":24,"secTitle":"VOLATILITY BANDS & CHANNELS","name":"Normalized ATR Bands","summary":"Cross-market comparable bands","subcategory":"General"}]},{"id":25,"title":"MARKET BREADTH & SENTIMENT","count":6,"items":[{"secId":25,"secTitle":"MARKET BREADTH & SENTIMENT","name":"Advance-Decline Stochastic","summary":"A/D ratio stochastic","subcategory":"General"},{"secId":25,"secTitle":"MARKET BREADTH & SENTIMENT","name":"Breadth Thrust Indicator","summary":"Momentum surge detection","subcategory":"General"},{"secId":25,"secTitle":"MARKET BREADTH & SENTIMENT","name":"McClellan Oscillator Variants","summary":"Breadth momentum","subcategory":"General"},{"secId":25,"secTitle":"MARKET BREADTH & SENTIMENT","name":"Cumulative A-D Line Momentum","summary":"Breadth trend","subcategory":"General"},{"secId":25,"secTitle":"MARKET BREADTH & SENTIMENT","name":"Sector Rotation Momentum","summary":"Inter-sector strength","subcategory":"General"},{"secId":25,"secTitle":"MARKET BREADTH & SENTIMENT","name":"Market Breadth Momentum","summary":"Market-wide momentum","subcategory":"General"}]},{"id":26,"title":"ENTRY/EXIT SIGNAL FILTERS","count":6,"items":[{"secId":26,"secTitle":"ENTRY/EXIT SIGNAL FILTERS","name":"Swing Trading with ATR Breakouts","summary":"Volatility-based entries","subcategory":"General"},{"secId":26,"secTitle":"ENTRY/EXIT SIGNAL FILTERS","name":"Rainbow-Smoothed Entry Signals","summary":"Multi-MA confirmation","subcategory":"General"},{"secId":26,"secTitle":"ENTRY/EXIT SIGNAL FILTERS","name":"Consecutive Bar Pattern Filter","summary":"Sequential pattern detection","subcategory":"General"},{"secId":26,"secTitle":"ENTRY/EXIT SIGNAL FILTERS","name":"Divergence Detection Algorithm (Price vs Oscillator)","summary":"Classical divergence","subcategory":"General"},{"secId":26,"secTitle":"ENTRY/EXIT SIGNAL FILTERS","name":"Volatility Breakout Entry System","summary":"Channel breakouts","subcategory":"General"},{"secId":26,"secTitle":"ENTRY/EXIT SIGNAL FILTERS","name":"Channel Breakout with R-Squared Filter","summary":"Trend-filtered breakouts","subcategory":"General"}]},{"id":27,"title":"POSITION SIZING & MONEY MANAGEMENT","count":4,"items":[{"secId":27,"secTitle":"POSITION SIZING & MONEY MANAGEMENT","name":"Kelly Criterion Implementation","summary":"Optimal position sizing","subcategory":"General"},{"secId":27,"secTitle":"POSITION SIZING & MONEY MANAGEMENT","name":"Optimal F Position Sizing","summary":"Fixed fractional method","subcategory":"General"},{"secId":27,"secTitle":"POSITION SIZING & MONEY MANAGEMENT","name":"Volatility-Based Position Sizing","summary":"Risk-adjusted sizing","subcategory":"General"},{"secId":27,"secTitle":"POSITION SIZING & MONEY MANAGEMENT","name":"Dynamic Risk Adjustment","summary":"Adaptive risk management","subcategory":"General"},{"secId":27,"secTitle":"POSITION SIZING & MONEY MANAGEMENT","name":"ATR-Based Position Scaling","summary":"Volatility-scaled positions","subcategory":"General"}]},{"id":28,"title":"ADAPTIVE STRATEGY SELECTION","count":5,"items":[{"secId":28,"secTitle":"ADAPTIVE STRATEGY SELECTION","name":"Market Mode Switch (Automatic Strategy Selection)","summary":"Trend/cycle switching","subcategory":"General"},{"secId":28,"secTitle":"ADAPTIVE STRATEGY SELECTION","name":"Cycle-to-Trend Ratio","summary":"Mode strength measure","subcategory":"General"},{"secId":28,"secTitle":"ADAPTIVE STRATEGY SELECTION","name":"Adaptive Strategy Selection Filter","summary":"Multi-strategy allocation","subcategory":"General"},{"secId":28,"secTitle":"ADAPTIVE STRATEGY SELECTION","name":"Mode Confirmation Indicator","summary":"Regime confirmation","subcategory":"General"},{"secId":28,"secTitle":"ADAPTIVE STRATEGY SELECTION","name":"Cycle vs Trend Mode Detection","summary":"Binary classification","subcategory":"General"}]},{"id":29,"title":"SPECTRUM VISUALIZATION & ANALYSIS","count":4,"items":[{"secId":29,"secTitle":"SPECTRUM VISUALIZATION & ANALYSIS","name":"Heat Map Spectrogram (Frequency Distribution)","summary":"2D frequency display","subcategory":"General"},{"secId":29,"secTitle":"SPECTRUM VISUALIZATION & ANALYSIS","name":"Channelized Receiver Display","summary":"Multi-channel spectrum","subcategory":"General"},{"secId":29,"secTitle":"SPECTRUM VISUALIZATION & ANALYSIS","name":"Swing Wave Heat Map","summary":"Cycle period visualization","subcategory":"General"},{"secId":29,"secTitle":"SPECTRUM VISUALIZATION & ANALYSIS","name":"Multi-Timeframe Spectral Analysis","summary":"Cross-timeframe spectrum","subcategory":"General"},{"secId":29,"secTitle":"SPECTRUM VISUALIZATION & ANALYSIS","name":"Cycle Valley/Peak Visualization","summary":"Extrema identification","subcategory":"General"}]},{"id":30,"title":"SPECIAL PURPOSE FILTERS","count":5,"items":[{"secId":30,"secTitle":"SPECIAL PURPOSE FILTERS","name":"Anchored VWAP Channel","summary":"Event-anchored VWAP","subcategory":"General"},{"secId":30,"secTitle":"SPECIAL PURPOSE FILTERS","name":"MIDAS (Market Interpretation/Data Analysis System)","summary":"Cumulative volume","subcategory":"General"},{"secId":30,"secTitle":"SPECIAL PURPOSE FILTERS","name":"Time-Weighted Average Price (TWAP)","summary":"Execution benchmark","subcategory":"General"},{"secId":30,"secTitle":"SPECIAL PURPOSE FILTERS","name":"Implementation Shortfall Tracker","summary":"Execution cost analysis","subcategory":"General"},{"secId":30,"secTitle":"SPECIAL PURPOSE FILTERS","name":"Market Impact Estimator","summary":"Trade impact modeling","subcategory":"General"}]},{"id":31,"title":"COINTEGRATION & VECTOR MODELS","count":15,"items":[{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Vector Autoregression (VAR)","summary":"Multivariate autoregression","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Vector Error Correction Model (VECM)","summary":"Cointegrated VAR","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Engle-Granger 2-Step Cointegration","summary":"Two-stage estimation","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Johansen Cointegration Test & Methodology","summary":"Maximum likelihood test","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Error Correction Term (ECT)","summary":"Equilibrium deviation","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Adjustment Speed Coefficients","summary":"Return-to-equilibrium speed","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Cointegration Rank Determination","summary":"Number of relationships","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Common Trends Representation","summary":"Shared stochastic trends","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Triangular Representation (VECM)","summary":"Alternative VECM form","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Moving Average Representation (VECM)","summary":"MA form of VECM","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Impulse Response Functions (IRF)","summary":"Shock propagation","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Forecast Error Variance Decomposition (FEVD)","summary":"Contribution analysis","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Granger Causality Testing","summary":"Predictive causality","subcategory":"General"},{"secId":31,"secTitle":"COINTEGRATION & VECTOR MODELS","name":"Spurious Regression Detection","summary":"Non-stationary regression testing","subcategory":"General"}]},{"id":32,"title":"ADVANCED NOISE REDUCTION & DENOISING","count":8,"items":[{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Approximate Non-Local Total Variation Algorithm","summary":"Edge-preserving denoising","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Denoising Diffusion Implicit Models (DDIM)","summary":"Generative denoising","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Fourier Transform-Based Bandpass Filtering (for noise elimination)","summary":"Frequency-domain noise removal","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Wavelet Denoising (Soft/Hard Thresholding)","summary":"Multi-scale denoising","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Total Variation Denoising","summary":"Gradient penalty denoising","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Non-Local Means Filter","summary":"Patch-based denoising","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Bilateral Filter","summary":"Edge-preserving smoothing","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Guided Filter","summary":"Edge-preserving filtering","subcategory":"General"},{"secId":32,"secTitle":"ADVANCED NOISE REDUCTION & DENOISING","name":"Anisotropic Diffusion (Perona-Malik)","summary":"Adaptive smoothing","subcategory":"General"}]},{"id":33,"title":"MACHINE LEARNING SIGNAL PROCESSING","count":10,"items":[{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Transformer-Based Feature Extraction","summary":"Attention mechanism features","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Attention Mechanism for Time Series","summary":"Self-attention on sequences","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"LSTM (Long Short-Term Memory) Networks","summary":"Recurrent neural networks","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"GRU (Gated Recurrent Units)","summary":"Simplified LSTM","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Bidirectional LSTM (BiLSTM)","summary":"Forward-backward LSTM","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Temporal Convolutional Networks (TCN)","summary":"Causal convolutions","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Reservoir Computing","summary":"Echo state networks","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Autoencoders for Dimensionality Reduction","summary":"Neural compression","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Variational Autoencoders (VAE)","summary":"Probabilistic autoencoders","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Deep Kalman Filters","summary":"Neural Kalman filtering","subcategory":"General"},{"secId":33,"secTitle":"MACHINE LEARNING SIGNAL PROCESSING","name":"Neural Network-Based Adaptive Filters","summary":"Learned adaptive filters","subcategory":"General"}]},{"id":34,"title":"GENERATIVE MODELS & SYNTHETIC DATA","count":7,"items":[{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"Generative Adversarial Networks (GANs) for Finance","summary":"Synthetic data generation","subcategory":"General"},{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"Conditional GANs (cGAN)","summary":"Conditional generation","subcategory":"General"},{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"Wasserstein GAN (WGAN)","summary":"Improved training stability","subcategory":"General"},{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"TimeGAN (Time-Series GAN)","summary":"Temporal GAN","subcategory":"General"},{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"Denoising Diffusion Probabilistic Models (DDPM)","summary":"Diffusion-based generation","subcategory":"General"},{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"Pattern Recognition-Based Synthesis","summary":"Template-based generation","subcategory":"General"},{"secId":34,"secTitle":"GENERATIVE MODELS & SYNTHETIC DATA","name":"Sector-Based Synthesis Approach","summary":"Sector-specific generation","subcategory":"General"}]},{"id":35,"title":"ROBUST STATISTICAL ESTIMATORS","count":10,"items":[{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Regularized M-Estimators of Scatter Matrix","summary":"Robust covariance","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Generalized Robust Shrinkage Estimator","summary":"Regularized robust estimation","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Regularized Tyler's Scatter Estimator","summary":"Heavy-tailed robust estimation","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Huber M-Estimator","summary":"Outlier-resistant estimation","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Tukey's Bisquare (Biweight) Estimator","summary":"Redescending M-estimator","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Hampel Estimator","summary":"Three-part M-estimator","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Least Trimmed Squares (LTS)","summary":"High-breakdown regression","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"Minimum Covariance Determinant (MCD)","summary":"Robust covariance","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"S-Estimators","summary":"Regression-scale equivariant","subcategory":"General"},{"secId":35,"secTitle":"ROBUST STATISTICAL ESTIMATORS","name":"MM-Estimators","summary":"High-efficiency robust estimators","subcategory":"General"}]},{"id":36,"title":"MULTIRESOLUTION & MULTISCALE ANALYSIS","count":6,"items":[{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Multiresolution Signal Processing","summary":"Scale-based decomposition","subcategory":"General"},{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Quantized Multiscale Decomposition","summary":"Market-calibrated scales","subcategory":"General"},{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Dyadic Wavelet Decomposition","summary":"Powers-of-two scaling","subcategory":"General"},{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Stationary Wavelet Decomposition","summary":"Translation-invariant","subcategory":"General"},{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Packet Decomposition","summary":"Complete frequency coverage","subcategory":"General"},{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Pyramid Decomposition","summary":"Hierarchical decomposition","subcategory":"General"},{"secId":36,"secTitle":"MULTIRESOLUTION & MULTISCALE ANALYSIS","name":"Scale-Space Representation","summary":"Continuous scale analysis","subcategory":"General"}]},{"id":37,"title":"PORTFOLIO & RISK MANAGEMENT FILTERS","count":9,"items":[{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Risk Parity Portfolio Optimization","summary":"Equal risk contribution","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Hierarchical Risk Parity (HRP)","summary":"Tree-based allocation","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Minimum Variance Portfolio Filter","summary":"Variance minimization","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Maximum Sharpe Ratio Filter","summary":"Risk-adjusted return optimization","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Black-Litterman Model","summary":"Bayesian asset allocation","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Mean-Variance Optimization with Regularization","summary":"Constrained optimization","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Robust Portfolio Optimization","summary":"Uncertainty-robust allocation","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Dynamic Portfolio Rebalancing Filters","summary":"Time-varying allocation","subcategory":"General"},{"secId":37,"secTitle":"PORTFOLIO & RISK MANAGEMENT FILTERS","name":"Turnover Regularization","summary":"Transaction cost control","subcategory":"General"}]},{"id":38,"title":"EXECUTION & MARKET MICROSTRUCTURE","count":10,"items":[{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Implementation Shortfall Minimization","summary":"Optimal execution","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"VWAP (Volume-Weighted Average Price) Algorithm","summary":"Volume-matched execution","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"TWAP (Time-Weighted Average Price) Algorithm","summary":"Time-distributed execution","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Arrival Price Algorithm","summary":"Market-on-close execution","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Percentage of Volume (POV) Algorithm","summary":"Participation rate strategy","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Adaptive Shortfall Algorithm","summary":"Dynamic execution","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Limit Order Book (LOB) Dynamics Filtering","summary":"Order book modeling","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Order Flow Imbalance (OFI) Filter","summary":"Buy/sell pressure","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Toxic Flow Detection","summary":"Informed trader detection","subcategory":"General"},{"secId":38,"secTitle":"EXECUTION & MARKET MICROSTRUCTURE","name":"Lead-Lag Relationship Detection","summary":"Cross-asset timing","subcategory":"General"}]},{"id":39,"title":"INFORMATION THEORY & ENTROPY-BASED","count":11,"items":[{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Shannon Entropy Filter","summary":"Information content measure","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Transfer Entropy","summary":"Directed information transfer","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Mutual Information Filter","summary":"Dependence measure","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Approximate Entropy (ApEn)","summary":"Regularity measure","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Sample Entropy (SampEn)","summary":"Improved ApEn","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Permutation Entropy","summary":"Ordinal pattern entropy","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Multiscale Entropy Analysis","summary":"Scale-dependent complexity","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Differential Entropy","summary":"Continuous entropy","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Conditional Entropy","summary":"Conditional uncertainty","subcategory":"General"},{"secId":39,"secTitle":"INFORMATION THEORY & ENTROPY-BASED","name":"Cross-Entropy Methods","summary":"Distribution comparison","subcategory":"General"}]},{"id":40,"title":"SHRINKAGE & REGULARIZATION METHODS","count":8,"items":[{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Ledoit-Wolf Shrinkage","summary":"Covariance shrinkage","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Oracle Approximating Shrinkage (OAS)","summary":"Optimal shrinkage","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Graphical Lasso (GLASSO)","summary":"Sparse precision estimation","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Sparse Inverse Covariance Estimation","summary":"Network estimation","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"James-Stein Estimator","summary":"Shrinkage toward mean","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Ridge Shrinkage for Covariance","summary":"L2 covariance regularization","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Empirical Bayes Shrinkage","summary":"Data-driven prior","subcategory":"General"},{"secId":40,"secTitle":"SHRINKAGE & REGULARIZATION METHODS","name":"Stein's Unbiased Risk Estimate (SURE)","summary":"Risk estimation","subcategory":"General"}]},{"id":41,"title":"FACTOR MODELS & DIMENSIONALITY REDUCTION","count":9,"items":[{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Principal Component Regression (PCR)","summary":"PCA + regression","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Partial Least Squares (PLS)","summary":"Supervised dimensionality reduction","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Factor Analysis","summary":"Latent variable modeling","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Dynamic Factor Models (DFM)","summary":"Time-varying factors","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Approximate Factor Models","summary":"Large-dimensional factors","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Sparse PCA","summary":"L1-regularized PCA","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Robust PCA","summary":"Outlier-resistant PCA","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Kernel PCA","summary":"Nonlinear PCA","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Non-Negative Matrix Factorization (NMF)","summary":"Parts-based decomposition","subcategory":"General"},{"secId":41,"secTitle":"FACTOR MODELS & DIMENSIONALITY REDUCTION","name":"Tensor Decomposition","summary":"Multi-way array factorization","subcategory":"General"}]},{"id":42,"title":"REGIME-SWITCHING & STRUCTURAL BREAK","count":9,"items":[{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Markov Regime-Switching Models","summary":"State-dependent dynamics","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Hamilton Filter (Regime Switching)","summary":"Filtered probabilities","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Threshold Autoregressive (TAR) Models","summary":"Threshold-dependent dynamics","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Smooth Transition Autoregressive (STAR)","summary":"Smooth regime transitions","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Structural Break Detection (Chow Test)","summary":"Parameter stability test","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"CUSUM (Cumulative Sum Control)","summary":"Sequential change detection","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Bai-Perron Multiple Break Tests","summary":"Multiple breakpoint detection","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Recursive Estimation","summary":"Sequential parameter updating","subcategory":"General"},{"secId":42,"secTitle":"REGIME-SWITCHING & STRUCTURAL BREAK","name":"Rolling Window Analysis","summary":"Moving window estimation","subcategory":"General"}]},{"id":43,"title":"SENTIMENT & ALTERNATIVE DATA PROCESSING","count":8,"items":[{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Sentiment Score Filtering","summary":"Text-based sentiment","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"News Impact Analysis","summary":"Event study on news","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Social Media Sentiment Integration","summary":"Twitter/Reddit signals","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Natural Language Processing (NLP) Signals","summary":"Text-derived features","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Textual Analysis Filters","summary":"Document processing","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Event Study Methodology","summary":"Abnormal return analysis","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Abnormal Return Calculation","summary":"Expected vs actual returns","subcategory":"General"},{"secId":43,"secTitle":"SENTIMENT & ALTERNATIVE DATA PROCESSING","name":"Information Coefficient (IC) Analysis","summary":"Prediction quality","subcategory":"General"}]},{"id":44,"title":"HIGH-FREQUENCY TRADING FILTERS","count":9,"items":[{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Tick-by-Tick Data Filtering","summary":"Microsecond data processing","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Microstructure Noise Reduction","summary":"Bid-ask bounce removal","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Two-Scales Realized Volatility (TSRV)","summary":"Multi-timescale volatility","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Kernel-Based Realized Volatility","summary":"Weighted realized variance","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Pre-Averaging Estimator","summary":"Noise-robust volatility","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Refresh Time Sampling","summary":"Asynchronous data alignment","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Previous Tick Interpolation","summary":"Missing data imputation","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Market Making Spread Filter","summary":"Bid-ask dynamics","subcategory":"General"},{"secId":44,"secTitle":"HIGH-FREQUENCY TRADING FILTERS","name":"Quote Stuffing Detection","summary":"Manipulation detection","subcategory":"General"}]},{"id":45,"title":"COPULA & DEPENDENCE MODELING","count":9,"items":[{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Gaussian Copula","summary":"Linear dependence","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"t-Copula","summary":"Heavy-tailed dependence","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Archimedean Copulas (Clayton, Gumbel, Frank)","summary":"One-parameter families","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Vine Copulas (C-Vine, D-Vine, R-Vine)","summary":"High-dimensional copulas","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Dynamic Copula Models","summary":"Time-varying dependence","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Time-Varying Copulas","summary":"Conditional dependence","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Tail Dependence Measures","summary":"Extreme event dependence","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Kendall's Tau Filter","summary":"Rank correlation","subcategory":"General"},{"secId":45,"secTitle":"COPULA & DEPENDENCE MODELING","name":"Spearman's Rho Filter","summary":"Rank correlation alternative","subcategory":"General"}]},{"id":46,"title":"JUMP DETECTION & DISCONTINUITY","count":6,"items":[{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Bipower Variation","summary":"Jump-robust variance","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Threshold Bipower Variation","summary":"Threshold-based jump detection","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Jump-Robust Volatility Estimators","summary":"Continuous component isolation","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Lee-Mykland Jump Test","summary":"Statistical jump test","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Barndorff-Nielsen-Shephard Test","summary":"Bipower-based test","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Andersen-Dobrev-Schaumburg Test","summary":"Return/volatility ratio test","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Signed Jump Decomposition","summary":"Positive/negative jumps","subcategory":"General"},{"secId":46,"secTitle":"JUMP DETECTION & DISCONTINUITY","name":"Jump Intensity Estimation","summary":"Jump frequency modeling","subcategory":"General"}]},{"id":47,"title":"FRACTIONAL INTEGRATION & LONG MEMORY","count":8,"items":[{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Autoregressive Fractionally Integrated Moving Average (ARFIMA)","summary":"Long memory ARMA","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Fractional Brownian Motion","summary":"Self-similar process","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Hurst Exponent Estimation","summary":"Long-range dependence measure","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Rescaled Range (R/S) Analysis","summary":"Hurst estimation method","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Detrended Fluctuation Analysis (DFA)","summary":"Scaling exponent","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Multifractal Detrended Fluctuation Analysis (MFDFA)","summary":"Multi-scale DFA","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Geweke-Porter-Hudak (GPH) Estimator","summary":"Fractional differencing","subcategory":"General"},{"secId":47,"secTitle":"FRACTIONAL INTEGRATION & LONG MEMORY","name":"Local Whittle Estimator","summary":"Semiparametric estimation","subcategory":"General"}]},{"id":48,"title":"CAUSALITY & DEPENDENCE TESTING","count":6,"items":[{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Granger Causality Test","summary":"Predictive causality","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Transfer Entropy","summary":"Information-theoretic causality","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Convergent Cross Mapping (CCM)","summary":"Nonlinear causality","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Distance Correlation","summary":"Nonlinear dependence","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Maximal Information Coefficient (MIC)","summary":"General association","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Hilbert-Huang Transform for Causality","summary":"Instantaneous frequency causality","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Time-Lagged Cross-Correlation","summary":"Delayed correlation","subcategory":"General"},{"secId":48,"secTitle":"CAUSALITY & DEPENDENCE TESTING","name":"Phase Synchronization Measure","summary":"Oscillator coupling","subcategory":"General"}]},{"id":49,"title":"OPTIMIZATION-BASED FILTERS","count":8,"items":[{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Convex Optimization Filters","summary":"Convex problem solvers","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Sequential Quadratic Programming (SQP)","summary":"Nonlinear optimization","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Interior Point Methods","summary":"Barrier function optimization","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Proximal Gradient Methods","summary":"Non-smooth optimization","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"ADMM (Alternating Direction Method of Multipliers)","summary":"Decomposition method","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Frank-Wolfe Algorithm","summary":"Conditional gradient method","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Quasi-Newton Methods (BFGS, L-BFGS)","summary":"Approximate Hessian","subcategory":"General"},{"secId":49,"secTitle":"OPTIMIZATION-BASED FILTERS","name":"Gradient Projection Methods","summary":"Constrained optimization","subcategory":"General"}]},{"id":50,"title":"ENSEMBLE & HYBRID METHODS","count":10,"items":[{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Random Forest for Feature Selection","summary":"Tree-based selection","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"XGBoost/Gradient Boosting for Signals","summary":"Boosted trees","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Stacking Ensemble Filters","summary":"Meta-learning","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Voting Classifiers","summary":"Democratic ensemble","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Bagging Filters","summary":"Bootstrap aggregating","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"AdaBoost for Signals","summary":"Adaptive boosting","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Neural Network Ensembles","summary":"Multiple network averaging","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Multi-Model Combination","summary":"Model averaging","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Dynamic Model Averaging","summary":"Time-varying weights","subcategory":"General"},{"secId":50,"secTitle":"ENSEMBLE & HYBRID METHODS","name":"Bayesian Model Averaging (BMA)","summary":"Probabilistic averaging","subcategory":"General"}]}],"groups":[{"name":"group 1","num":1,"count":7},{"name":"group 2","num":2,"count":33},{"name":"group 3","num":3,"count":18},{"name":"group 4","num":4,"count":33},{"name":"group 5","num":5,"count":18},{"name":"group 6","num":6,"count":25},{"name":"group 7","num":7,"count":16},{"name":"group 8","num":8,"count":45},{"name":"group 9","num":9,"count":12},{"name":"group 10","num":10,"count":7},{"name":"group 11","num":11,"count":16},{"name":"group 12","num":12,"count":21},{"name":"group 13","num":13,"count":17},{"name":"group 14","num":14,"count":24},{"name":"group 15","num":15,"count":26},{"name":"group 16","num":16,"count":27},{"name":"group 17","num":17,"count":35},{"name":"group 18","num":18,"count":46},{"name":"group 19","num":19,"count":34}],"pt2":[{"id":1,"title":"1. The Gold Standard: L1 Regularization & Total Variation","items":[{"id":1,"name":"L1 Trend Filtering","sectionId":1,"sectionTitle":"1. The Gold Standard: L1 Regularization & Total Variation"},{"id":2,"name":"Total Variation Denoising (TVD)","sectionId":1,"sectionTitle":"1. The Gold Standard: L1 Regularization & Total Variation"},{"id":3,"name":"1D Piecewise Constant Signal Approximation","sectionId":1,"sectionTitle":"1. The Gold Standard: L1 Regularization & Total Variation"},{"id":4,"name":"Rudin-Osher-Fatemi (ROF) Model for 1D Signals","sectionId":1,"sectionTitle":"1. The Gold Standard: L1 Regularization & Total Variation"}]},{"id":2,"title":"2. Statistical Structural Breaks (Econometrics)","items":[{"id":5,"name":"Bayesian Change Point Detection (BCPD)","sectionId":2,"sectionTitle":"2. Statistical Structural Breaks (Econometrics)"},{"id":6,"name":"Online Step Detection Algorithms","sectionId":2,"sectionTitle":"2. Statistical Structural Breaks (Econometrics)"},{"id":7,"name":"Sequential Probability Ratio Test (SPRT) in Time Series","sectionId":2,"sectionTitle":"2. Statistical Structural Breaks (Econometrics)"},{"id":8,"name":"Jump Markov Linear Systems (JMLS)","sectionId":2,"sectionTitle":"2. Statistical Structural Breaks (Econometrics)"}]},{"id":3,"title":"3. Regime Switching (Machine Learning)","items":[{"id":9,"name":"Hidden Markov Model (HMM) Viterbi Path for Time Series","sectionId":3,"sectionTitle":"3. Regime Switching (Machine Learning)"},{"id":10,"name":"Markov Switching Dynamic Regression","sectionId":3,"sectionTitle":"3. Regime Switching (Machine Learning)"},{"id":11,"name":"Hamilton Regime Switching Model","sectionId":3,"sectionTitle":"3. Regime Switching (Machine Learning)"}]},{"id":4,"title":"4. Edge-Preserving Smoothers (Non-Linear DSP)","items":[{"id":12,"name":"Non-Linear Edge-Preserving Filters","sectionId":4,"sectionTitle":"4. Edge-Preserving Smoothers (Non-Linear DSP)"},{"id":13,"name":"1D Bilateral Filtering","sectionId":4,"sectionTitle":"4. Edge-Preserving Smoothers (Non-Linear DSP)"},{"id":14,"name":"Kuwahara Filter for Time Series","sectionId":4,"sectionTitle":"4. Edge-Preserving Smoothers (Non-Linear DSP)"}]},{"id":5,"title":"5. Control Theory & Cybernetics","items":[{"id":15,"name":"Sliding Mode Control (SMC) in Signal Processing","sectionId":5,"sectionTitle":"5. Control Theory & Cybernetics"},{"id":16,"name":"Variable Structure Systems (VSS) for Time Series","sectionId":5,"sectionTitle":"5. Control Theory & Cybernetics"},{"id":17,"name":"H-infinity (H∞) Filtering for Markovian Jump Systems","sectionId":5,"sectionTitle":"5. Control Theory & Cybernetics"},{"id":18,"name":"Schmitt Trigger Algorithms for Digital Noise Immunity","sectionId":5,"sectionTitle":"5. Control Theory & Cybernetics"}]},{"id":6,"title":"6. Geophysics & Seismology","items":[{"id":19,"name":"Sparse Spike Train Deconvolution","sectionId":6,"sectionTitle":"6. Geophysics & Seismology"},{"id":20,"name":"STA/LTA (Short-Time Average / Long-Time Average) Trigger Algorithms","sectionId":6,"sectionTitle":"6. Geophysics & Seismology"},{"id":21,"name":"Autoregressive Akaike Information Criterion (AR-AIC) Phase Picking","sectionId":6,"sectionTitle":"6. Geophysics & Seismology"}]},{"id":7,"title":"7. Wavelet & Time-Frequency Analysis","items":[{"id":22,"name":"Haar Wavelet Transform for Structural Break Detection","sectionId":7,"sectionTitle":"7. Wavelet & Time-Frequency Analysis"},{"id":23,"name":"Maximum Overlap Discrete Wavelet Transform (MODWT) Boundary Detection","sectionId":7,"sectionTitle":"7. Wavelet & Time-Frequency Analysis"},{"id":24,"name":"Lipschitz Exponents for Singularity Detection in Time Series","sectionId":7,"sectionTitle":"7. Wavelet & Time-Frequency Analysis"}]},{"id":8,"title":"8. Information Theory & Complexity","items":[{"id":25,"name":"Minimum Description Length (MDL) Principle for Time Series Segmentation","sectionId":8,"sectionTitle":"8. Information Theory & Complexity"},{"id":26,"name":"Kolmogorov Complexity in Piecewise Constant Modeling","sectionId":8,"sectionTitle":"8. Information Theory & Complexity"},{"id":27,"name":"Information-Theoretic Structural Break Detection","sectionId":8,"sectionTitle":"8. Information Theory & Complexity"}]},{"id":9,"title":"9. Advanced Sequential Monte Carlo (Particle Filters)","items":[{"id":28,"name":"Rao-Blackwellized Particle Filters (RBPF) for Regime Switching","sectionId":9,"sectionTitle":"9. Advanced Sequential Monte Carlo (Particle Filters)"},{"id":29,"name":"Reversible Jump Markov Chain Monte Carlo (RJ-MCMC) for Step Detection","sectionId":9,"sectionTitle":"9. Advanced Sequential Monte Carlo (Particle Filters)"},{"id":30,"name":"Sequential Monte Carlo for Jump-Diffusion Processes","sectionId":9,"sectionTitle":"9. Advanced Sequential Monte Carlo (Particle Filters)"}]},{"id":10,"title":"10. Mathematical Morphology (Non-Linear Filtering)","items":[{"id":31,"name":"1D Mathematical Morphology Opening and Closing Filters","sectionId":10,"sectionTitle":"10. Mathematical Morphology (Non-Linear Filtering)"},{"id":32,"name":"Morphological Gradient for Edge Detection in Time Series","sectionId":10,"sectionTitle":"10. Mathematical Morphology (Non-Linear Filtering)"},{"id":33,"name":"Rank-Order Filters for Piecewise Constant Smoothing","sectionId":10,"sectionTitle":"10. Mathematical Morphology (Non-Linear Filtering)"}]},{"id":11,"title":"11. Statistical Mechanics & Physics Models","items":[{"id":34,"name":"Ising Model for Financial Market Phase Transitions","sectionId":11,"sectionTitle":"11. Statistical Mechanics & Physics Models"},{"id":35,"name":"Fisher Information Metric for Market Regime Shifts","sectionId":11,"sectionTitle":"11. Statistical Mechanics & Physics Models"},{"id":36,"name":"Percolation Theory in Financial Time Series","sectionId":11,"sectionTitle":"11. Statistical Mechanics & Physics Models"},{"id":37,"name":"Bifurcation Theory and Catastrophe Models in Price Dynamics","sectionId":11,"sectionTitle":"11. Statistical Mechanics & Physics Models"}]},{"id":12,"title":"12. Quantitative Microstructure & Jump-Diffusion","items":[{"id":38,"name":"Merton Jump-Diffusion Model Estimation","sectionId":12,"sectionTitle":"12. Quantitative Microstructure & Jump-Diffusion"},{"id":39,"name":"Hawkes Processes for Volatility Clustering and Jump Detection","sectionId":12,"sectionTitle":"12. Quantitative Microstructure & Jump-Diffusion"},{"id":40,"name":"Levy Flight and Non-Gaussian Price Dynamics","sectionId":12,"sectionTitle":"12. Quantitative Microstructure & Jump-Diffusion"},{"id":41,"name":"Jump Penalty Models in High-Frequency Trading","sectionId":12,"sectionTitle":"12. Quantitative Microstructure & Jump-Diffusion"}]},{"id":13,"title":"13. Advanced Optimization & Graph Theory","items":[{"id":42,"name":"Fused Lasso Regression for Piecewise Constant Signals","sectionId":13,"sectionTitle":"13. Advanced Optimization & Graph Theory"},{"id":43,"name":"Dynamic Programming for Optimal Time Series Segmentation","sectionId":13,"sectionTitle":"13. Advanced Optimization & Graph Theory"},{"id":44,"name":"Pruned Exact Linear Time (PELT) Algorithm for Changepoint Detection","sectionId":13,"sectionTitle":"13. Advanced Optimization & Graph Theory"}]},{"id":14,"title":"14. Anisotropic Diffusion (Computer Vision applied to Trading)","items":[{"id":45,"name":"Perona-Malik Anisotropic Diffusion for Time Series","sectionId":14,"sectionTitle":"14. Anisotropic Diffusion (Computer Vision applied to Trading)"},{"id":46,"name":"Canny Edge Detection applied to Financial Data","sectionId":14,"sectionTitle":"14. Anisotropic Diffusion (Computer Vision applied to Trading)"}]},{"id":15,"title":"15. Symbolic Time Series Analysis (Discretization)","items":[{"id":47,"name":"Symbolic Aggregate approXimation (SAX) in Financial Data","sectionId":15,"sectionTitle":"15. Symbolic Time Series Analysis (Discretization)"},{"id":48,"name":"Discrete Alphabet Conversion for Time Series","sectionId":15,"sectionTitle":"15. Symbolic Time Series Analysis (Discretization)"},{"id":49,"name":"Symbolic Transfer Entropy for Regime Detection","sectionId":15,"sectionTitle":"15. Symbolic Time Series Analysis (Discretization)"}]},{"id":16,"title":"16. Topological Data Analysis (TDA)","items":[{"id":50,"name":"Persistent Homology for Financial Time Series Analysis","sectionId":16,"sectionTitle":"16. Topological Data Analysis (TDA)"},{"id":51,"name":"Betti Numbers and Topological Phase Transitions in Markets","sectionId":16,"sectionTitle":"16. Topological Data Analysis (TDA)"},{"id":52,"name":"Simplicial Complexes for Market State Discretization","sectionId":16,"sectionTitle":"16. Topological Data Analysis (TDA)"}]},{"id":17,"title":"17. Chaos Theory & Nonlinear Dynamics","items":[{"id":53,"name":"Local Lyapunov Exponents for Structural Break Detection","sectionId":17,"sectionTitle":"17. Chaos Theory & Nonlinear Dynamics"},{"id":54,"name":"Higuchi Fractal Dimension for Piecewise Market Segmentation","sectionId":17,"sectionTitle":"17. Chaos Theory & Nonlinear Dynamics"},{"id":55,"name":"Recurrence Quantification Analysis (RQA) for State Transitions","sectionId":17,"sectionTitle":"17. Chaos Theory & Nonlinear Dynamics"}]},{"id":18,"title":"18. Quantum Finance & Quantum Mechanics","items":[{"id":56,"name":"Quantum Harmonic Oscillator Model for Financial Markets","sectionId":18,"sectionTitle":"18. Quantum Finance & Quantum Mechanics"},{"id":57,"name":"Schrödinger Equation Applied to Price Dynamics","sectionId":18,"sectionTitle":"18. Quantum Finance & Quantum Mechanics"},{"id":58,"name":"Quantum Tunneling Models for Price Breakouts","sectionId":18,"sectionTitle":"18. Quantum Finance & Quantum Mechanics"},{"id":59,"name":"Bohmian Mechanics in Financial Time Series","sectionId":18,"sectionTitle":"18. Quantum Finance & Quantum Mechanics"}]},{"id":19,"title":"19. Exotic Smoothing Filters","items":[{"id":60,"name":"Adaptive Savitzky-Golay Filtering with Discontinuity Detection","sectionId":19,"sectionTitle":"19. Exotic Smoothing Filters"},{"id":61,"name":"L1-Norm Hodrick-Prescott Filter","sectionId":19,"sectionTitle":"19. Exotic Smoothing Filters"},{"id":62,"name":"Whittaker-Henderson Smoothing with Sparse Penalties","sectionId":19,"sectionTitle":"19. Exotic Smoothing Filters"}]},{"id":20,"title":"20. Sparse Coding & Compressed Sensing","items":[{"id":63,"name":"L0 Pseudo-Norm Penalty for Time Series Smoothing","sectionId":20,"sectionTitle":"20. Sparse Coding & Compressed Sensing"},{"id":64,"name":"Basis Pursuit Denoising for Jump Signals","sectionId":20,"sectionTitle":"20. Sparse Coding & Compressed Sensing"},{"id":65,"name":"Matching Pursuit with Heaviside Step Functions","sectionId":20,"sectionTitle":"20. Sparse Coding & Compressed Sensing"}]},{"id":21,"title":"21. Robust Control & Advanced Estimation","items":[{"id":66,"name":"Minimax Filters for Jump Markov Systems","sectionId":21,"sectionTitle":"21. Robust Control & Advanced Estimation"},{"id":67,"name":"Moving Horizon Estimation (MHE) with Mixed-Integer Constraints","sectionId":21,"sectionTitle":"21. Robust Control & Advanced Estimation"}]},{"id":22,"title":"22. Deep Learning for State Segmentation","items":[{"id":68,"name":"Temporal Convolutional Networks (TCN) for Change Point Detection","sectionId":22,"sectionTitle":"22. Deep Learning for State Segmentation"},{"id":69,"name":"Transformers for Unsupervised Time Series Segmentation","sectionId":22,"sectionTitle":"22. Deep Learning for State Segmentation"},{"id":70,"name":"Deep State Space Models (DSSM) with Discrete Latent Variables","sectionId":22,"sectionTitle":"22. Deep Learning for State Segmentation"}]},{"id":23,"title":"23. Bayesian Nonparametrics","items":[{"id":71,"name":"Dirichlet Process Hidden Markov Models (DP-HMM) for Infinite Regimes","sectionId":23,"sectionTitle":"23. Bayesian Nonparametrics"},{"id":72,"name":"Sticky Hierarchical Dirichlet Process (HDP-HMM)","sectionId":23,"sectionTitle":"23. Bayesian Nonparametrics"}]},{"id":24,"title":"24. Threshold Autoregressive Models (Econometrics)","items":[{"id":73,"name":"Threshold Autoregressive (TAR) Models","sectionId":24,"sectionTitle":"24. Threshold Autoregressive Models (Econometrics)"},{"id":74,"name":"Self-Exciting Threshold Autoregressive (SETAR)","sectionId":24,"sectionTitle":"24. Threshold Autoregressive Models (Econometrics)"},{"id":75,"name":"Markov-Switching Vector Autoregression (MS-VAR)","sectionId":24,"sectionTitle":"24. Threshold Autoregressive Models (Econometrics)"}]},{"id":25,"title":"25. Graph Signal Processing (GSP)","items":[{"id":76,"name":"Total Variation on Graphs for Time Series Segmentation","sectionId":25,"sectionTitle":"25. Graph Signal Processing (GSP)"},{"id":77,"name":"Graph Laplacian Regularization for Piecewise Smooth Signals","sectionId":25,"sectionTitle":"25. Graph Signal Processing (GSP)"}]},{"id":26,"title":"26. Statistical Quality Control (Industrial Engineering)","items":[{"id":78,"name":"CUSUM (Cumulative Sum) Control Charts for Mean Shift Detection","sectionId":26,"sectionTitle":"26. Statistical Quality Control (Industrial Engineering)"},{"id":79,"name":"EWMA Control Charts with Variable Thresholds","sectionId":26,"sectionTitle":"26. Statistical Quality Control (Industrial Engineering)"}]},{"id":27,"title":"27. Non-parametric Statistics & Sliding Windows","items":[{"id":80,"name":"Mann-Whitney U Test for Streaming Change Point Detection","sectionId":27,"sectionTitle":"27. Non-parametric Statistics & Sliding Windows"},{"id":81,"name":"Kolmogorov-Smirnov Test over Sliding Windows","sectionId":27,"sectionTitle":"27. Non-parametric Statistics & Sliding Windows"}]},{"id":28,"title":"28. Advanced Econophysics","items":[{"id":82,"name":"Ginzburg-Landau Theory for Market Phase Transitions","sectionId":28,"sectionTitle":"28. Advanced Econophysics"},{"id":83,"name":"Econophysics Micro-state Modeling","sectionId":28,"sectionTitle":"28. Advanced Econophysics"}]},{"id":29,"title":"29. Audio & Speech Processing Analogies","items":[{"id":84,"name":"Voice Activity Detection (VAD) Algorithms applied to Financial Volatility","sectionId":29,"sectionTitle":"29. Audio & Speech Processing Analogies"},{"id":85,"name":"Spectral Entropy Thresholding for Burst Detection","sectionId":29,"sectionTitle":"29. Audio & Speech Processing Analogies"}]},{"id":30,"title":"30. Functional Data Analysis (FDA)","items":[{"id":86,"name":"Functional Principal Component Analysis (FPCA) for Regime Identification","sectionId":30,"sectionTitle":"30. Functional Data Analysis (FDA)"},{"id":87,"name":"Piecewise Constant FDA Estimation","sectionId":30,"sectionTitle":"30. Functional Data Analysis (FDA)"}]},{"id":31,"title":"31. Computational Genomics & Bioinformatics","items":[{"id":88,"name":"Circular Binary Segmentation (CBS) Algorithm\" (Used for DNA copy number variation, directly maps to chart stepping)","sectionId":31,"sectionTitle":"31. Computational Genomics & Bioinformatics"},{"id":89,"name":"Taut String Algorithm for Total Variation Regularization","sectionId":31,"sectionTitle":"31. Computational Genomics & Bioinformatics"},{"id":90,"name":"Piecewise-constant and Low-rank Approximation (PLA)","sectionId":31,"sectionTitle":"31. Computational Genomics & Bioinformatics"}]},{"id":32,"title":"32. Fractional Calculus & Long-Memory Smoothing","items":[{"id":91,"name":"Fractional Order Savitzky-Golay Differentiator","sectionId":32,"sectionTitle":"32. Fractional Calculus & Long-Memory Smoothing"},{"id":92,"name":"Mittag-Leffler Filter for Fractional Step Functions","sectionId":32,"sectionTitle":"32. Fractional Calculus & Long-Memory Smoothing"},{"id":93,"name":"Grünwald-Letnikov differencing for Jump Detection","sectionId":32,"sectionTitle":"32. Fractional Calculus & Long-Memory Smoothing"}]},{"id":33,"title":"33. Optimal Stopping & Stochastic Control","items":[{"id":94,"name":"Snell Envelope for Optimal Change Point Detection","sectionId":33,"sectionTitle":"33. Optimal Stopping & Stochastic Control"},{"id":95,"name":"Shiryaev-Roberts Procedure for Quickest Change Detection","sectionId":33,"sectionTitle":"33. Optimal Stopping & Stochastic Control"},{"id":96,"name":"Optimal Stopping rules for Brownian Motion with Jumps","sectionId":33,"sectionTitle":"33. Optimal Stopping & Stochastic Control"}]},{"id":34,"title":"34. Adaptive Splines & Piecewise Polynomials","items":[{"id":97,"name":"L1-Penalized Adaptive Regression Splines","sectionId":34,"sectionTitle":"34. Adaptive Splines & Piecewise Polynomials"},{"id":98,"name":"MARS (Multivariate Adaptive Regression Splines) for 1D Data","sectionId":34,"sectionTitle":"34. Adaptive Splines & Piecewise Polynomials"},{"id":99,"name":"Piecewise Constant B-Splines (0th Order Splines)","sectionId":34,"sectionTitle":"34. Adaptive Splines & Piecewise Polynomials"}]},{"id":35,"title":"35. Operations Research & Convex Optimization","items":[{"id":100,"name":"Isotonic Regression (PAVA Algorithm - Pool Adjacent Violators Algorithm)\" (Forcs a signal to step monotonically)","sectionId":35,"sectionTitle":"35. Operations Research & Convex Optimization"},{"id":101,"name":"Group Lasso for Time Series Segmentation","sectionId":35,"sectionTitle":"35. Operations Research & Convex Optimization"}]},{"id":36,"title":"36. Statistical Physics & Langevin Dynamics","items":[{"id":102,"name":"Overdamped Langevin Equation in Double-Well Potentials\" (Models price jumping between discrete support/resistance levels)","sectionId":36,"sectionTitle":"36. Statistical Physics & Langevin Dynamics"},{"id":103,"name":"Fokker-Planck Equation for Bimodal Market Distributions","sectionId":36,"sectionTitle":"36. Statistical Physics & Langevin Dynamics"}]},{"id":37,"title":"37. Telecommunications & Information Decoding","items":[{"id":104,"name":"Viterbi Decoder for Frequency-Shift Keying (FSK) State Estimation","sectionId":37,"sectionTitle":"37. Telecommunications & Information Decoding"},{"id":105,"name":"Phase-Locked Loops (PLL) with Hard Limiters for Digital Signals","sectionId":37,"sectionTitle":"37. Telecommunications & Information Decoding"}]},{"id":38,"title":"38. Video Compression & Subband Coding / VQ, PQ, RVQ, VQ-VAE, TD-VQ, TD-VQ-VAE, etc..","items":[{"id":106,"name":"Discrete Cosine Transform (DCT) Block Matching for Time Series","sectionId":38,"sectionTitle":"38. Video Compression & Subband Coding / VQ, PQ, RVQ, VQ-VAE, TD-VQ, TD-VQ-VAE, etc.."},{"id":107,"name":"Vector Quantization for 1D Signal Stepping","sectionId":38,"sectionTitle":"38. Video Compression & Subband Coding / VQ, PQ, RVQ, VQ-VAE, TD-VQ, TD-VQ-VAE, etc.."}]}],"pt3":[{"id":1,"title":"1. Discrete Mittag-Leffler Kernels and Non-Singular Fading Memory Dynamics","items":[{"id":1,"name":"The Atangana-Baleanu-Caputo (ABC) and Atangana-Baleanu-Riemann (ABR) Operators","sectionId":1,"sectionTitle":"1. Discrete Mittag-Leffler Kernels and Non-Singular Fading Memory Dynamics"},{"id":2,"name":"The Mittag-Leffler Filter: Adaptive Architectures for Fractional Step Functions","sectionId":1,"sectionTitle":"1. Discrete Mittag-Leffler Kernels and Non-Singular Fading Memory Dynamics"}]},{"id":2,"title":"2. Rational Approximations of Fractional Operators and Parameter Optimization","items":[{"id":3,"name":"Oustaloup's Recursive and Modified Approximations","sectionId":2,"sectionTitle":"2. Rational Approximations of Fractional Operators and Parameter Optimization"},{"id":4,"name":"Charef's Singularity Function Method and Optimized Tuning","sectionId":2,"sectionTitle":"2. Rational Approximations of Fractional Operators and Parameter Optimization"}]},{"id":3,"title":"3. Variational Regularization via Non-Local Fractional-Order Total Variation","items":[{"id":5,"name":"The Fractional Gradient Operator and Minimax-Concave Penalization","sectionId":3,"sectionTitle":"3. Variational Regularization via Non-Local Fractional-Order Total Variation"},{"id":6,"name":"Numerical Optimization Schemes: Grünwald-Letnikov Differencing for Jump/Edge Detection","sectionId":3,"sectionTitle":"3. Variational Regularization via Non-Local Fractional-Order Total Variation"},{"id":7,"name":"Multi-Type Noise Handling in Fractional-Order Models","sectionId":3,"sectionTitle":"3. Variational Regularization via Non-Local Fractional-Order Total Variation"}]},{"id":4,"title":"4. Dispersive Relaxations and Distribution of Relaxation Times Deconvolution","items":[{"id":8,"name":"Havriliak-Negami Dispersive Media and DRT Deconvolution","sectionId":4,"sectionTitle":"4. Dispersive Relaxations and Distribution of Relaxation Times Deconvolution"},{"id":9,"name":"Cole-Cole Bioimpedance and Active Fractional Low-Pass Filters","sectionId":4,"sectionTitle":"4. Dispersive Relaxations and Distribution of Relaxation Times Deconvolution"},{"id":10,"name":"Davidson-Cole Path-Tracking Pre-filters","sectionId":4,"sectionTitle":"4. Dispersive Relaxations and Distribution of Relaxation Times Deconvolution"},{"id":11,"name":"Kohlrausch-Williams-Watt (KWW) Stretched Exponential","sectionId":4,"sectionTitle":"4. Dispersive Relaxations and Distribution of Relaxation Times Deconvolution"}]},{"id":5,"title":"5. Joint Space-Frequency Transforms and Multiresolution Wavelet Architectures","items":[{"id":12,"name":"The Fractional Gabor Transform (FRGT)","sectionId":5,"sectionTitle":"5. Joint Space-Frequency Transforms and Multiresolution Wavelet Architectures"},{"id":13,"name":"Symmetrical Fractional Correlators and Fractional B-Splines","sectionId":5,"sectionTitle":"5. Joint Space-Frequency Transforms and Multiresolution Wavelet Architectures"},{"id":14,"name":"Joint Transform Generalizations: Hybrid FrFT and GFRHT","sectionId":5,"sectionTitle":"5. Joint Space-Frequency Transforms and Multiresolution Wavelet Architectures"}]},{"id":6,"title":"6. Non-linear Waveform Complexity and Fractal Dimension Algorithms","items":[{"id":15,"name":"Katz's Fractal Dimension (KFD) and Spline Interpolation","sectionId":6,"sectionTitle":"6. Non-linear Waveform Complexity and Fractal Dimension Algorithms"},{"id":16,"name":"Petrosian's Fractal Dimension (PFD) and Binarization","sectionId":6,"sectionTitle":"6. Non-linear Waveform Complexity and Fractal Dimension Algorithms"},{"id":17,"name":"Sevcik's Fractal Dimension (SFD) and Amplitude Multipliers","sectionId":6,"sectionTitle":"6. Non-linear Waveform Complexity and Fractal Dimension Algorithms"},{"id":18,"name":"Higuchi's Fractal Dimension (HFD) and Multi-Scale Curve Length Analysis","sectionId":6,"sectionTitle":"6. Non-linear Waveform Complexity and Fractal Dimension Algorithms"},{"id":19,"name":"Leibovich and Toth Box-Counting Algorithm","sectionId":6,"sectionTitle":"6. Non-linear Waveform Complexity and Fractal Dimension Algorithms"}]},{"id":7,"title":"7. Non-Differentiable Calculus and Fractal Circuit Models","items":[{"id":20,"name":"Local Fractional Derivative (LFD) and Yang's Special Function Method","sectionId":7,"sectionTitle":"7. Non-Differentiable Calculus and Fractal Circuit Models"},{"id":21,"name":"Non-Differentiable Lumped Circuit Elements","sectionId":7,"sectionTitle":"7. Non-Differentiable Calculus and Fractal Circuit Models"}]},{"id":8,"title":"8. Non-local Filtering and State-Space Estimators","items":[{"id":22,"name":"Discrete Fractional State-Space Models","sectionId":8,"sectionTitle":"8. Non-local Filtering and State-Space Estimators"},{"id":23,"name":"Fractional Order Savitzky-Golay Differentiators for Robust Signal Processing","sectionId":8,"sectionTitle":"8. Non-local Filtering and State-Space Estimators"},{"id":24,"name":"Sequential Covariance Intersection (SCI) Fusion","sectionId":8,"sectionTitle":"8. Non-local Filtering and State-Space Estimators"},{"id":25,"name":"López de Prado’s Fractional Differentiation for Financial Time Series","sectionId":8,"sectionTitle":"8. Non-local Filtering and State-Space Estimators"}]},{"id":9,"title":"9. Arbitrary Real Time Delay via Fractional Digital Filtering","items":[{"id":26,"name":"Sinc-Based and Lagrange-Based Interpolation Models","sectionId":9,"sectionTitle":"9. Arbitrary Real Time Delay via Fractional Digital Filtering"},{"id":27,"name":"Variable Fractional Delay and Farrow Structures","sectionId":9,"sectionTitle":"9. Arbitrary Real Time Delay via Fractional Digital Filtering"}]}],"coordinates":[{"id":1,"num":1,"name":"Cartesian","category":"2D Coordinate Systems","dimension":"2D","variables":"(x, y)","structure":"Rigid, intersecting 90-degree straight grid lines.","bestUse":"Standard charting, linear time-series tracking.","raw":"1. Cartesian\n   Variables: (x, y)\n   Structure: Rigid, intersecting 90-degree straight grid lines.\n   Best Use:  Standard charting, linear time-series tracking."},{"id":2,"num":2,"name":"Polar","category":"2D Coordinate Systems","dimension":"2D","variables":"(r, θ)","structure":"Concentric circles radiating out from a central pole.","bestUse":"Rotational, cyclical, or heartbeat-style event loops.","raw":"2. Polar\n   Variables: (r, θ)\n   Structure: Concentric circles radiating out from a central pole.\n   Best Use:  Rotational, cyclical, or heartbeat-style event loops."},{"id":3,"num":3,"name":"Log-Polar","category":"2D Coordinate Systems","dimension":"2D","variables":"(ρ, θ)","structure":"Circles whose spacing grows exponentially outward (ρ = ln(r)).","bestUse":"Scale-invariant data analysis. Makes a 5% move look identical at $10k or $100k.","raw":"3. Log-Polar\n   Variables: (ρ, θ)\n   Structure: Circles whose spacing grows exponentially outward (ρ = ln(r)).\n   Best Use:  Scale-invariant data analysis. Makes a 5% move look identical at $10k or $100k."},{"id":4,"num":4,"name":"Bipolar","category":"2D Coordinate Systems","dimension":"2D","variables":"(σ, τ)","structure":"Two sets of intersecting circular paths locked to two fixed poles.","bestUse":"Modeling two competing forces (e.g., dual-pool liquidity or buyer/seller gravity centers).","raw":"4. Bipolar\n   Variables: (σ, τ)\n   Structure: Two sets of intersecting circular paths locked to two fixed poles.\n   Best Use:  Modeling two competing forces (e.g., dual-pool liquidity or buyer/seller gravity centers)."},{"id":5,"num":5,"name":"Biangular","category":"2D Coordinate Systems","dimension":"2D","variables":"(θ1, θ2)","structure":"Lines intersecting from two baseline points based purely on angles.","bestUse":"Triangulation, tracking directional orientation without caring about distance.","raw":"5. Biangular\n   Variables: (θ1, θ2)\n   Structure: Lines intersecting from two baseline points based purely on angles.\n   Best Use:  Triangulation, tracking directional orientation without caring about distance."},{"id":6,"num":6,"name":"Parabolic","category":"2D Coordinate Systems","dimension":"2D","variables":"(σ, τ)","structure":"Confocal, intersecting parabolas facing each other.","bestUse":"Advanced wave propagation and tracking fluid-like data flows.","raw":"6. Parabolic\n   Variables: (σ, τ)\n   Structure: Confocal, intersecting parabolas facing each other.\n   Best Use:  Advanced wave propagation and tracking fluid-like data flows."},{"id":7,"num":1,"name":"3D Cartesian","category":"3D Coordinate Systems","dimension":"3D","variables":"(x, y, z)","structure":"A 3D box grid of width, height, and depth.","bestUse":"Standard 3D engine space, volume profiles across price and time.","raw":"1. 3D Cartesian\n   Variables: (x, y, z)\n   Structure: A 3D box grid of width, height, and depth.\n   Best Use:  Standard 3D engine space, volume profiles across price and time."},{"id":8,"num":2,"name":"Cylindrical","category":"3D Coordinate Systems","dimension":"3D","variables":"(r, θ, z)","structure":"A 2D polar circle stretched infinitely upward.","bestUse":"Tracking circular event loops over a linear vertical axis (like stacking days chronologically).","raw":"2. Cylindrical\n   Variables: (r, θ, z)\n   Structure: A 2D polar circle stretched infinitely upward.\n   Best Use:  Tracking circular event loops over a linear vertical axis (like stacking days chronologically)."},{"id":9,"num":3,"name":"Spherical","category":"3D Coordinate Systems","dimension":"3D","variables":"(ρ, θ, φ)","structure":"A 3D globe using a distance radius and two angles (latitude/longitude).","bestUse":"Global mapping, tracking omnidirectional data dispersion or multi-variable boundary limits.","raw":"3. Spherical\n   Variables: (ρ, θ, φ)\n   Structure: A 3D globe using a distance radius and two angles (latitude/longitude).\n   Best Use:  Global mapping, tracking omnidirectional data dispersion or multi-variable boundary limits."},{"id":10,"num":4,"name":"Elliptical Cylindrical","category":"3D Coordinate Systems","dimension":"3D","variables":"(ξ, η, z)","structure":"A cylinder with an oval/stretched base instead of a perfect circle.","bestUse":"Tracking cyclical patterns that have asymmetrical cycles (e.g., markets that crash faster than they pump).","raw":"4. Elliptical Cylindrical\n   Variables: (ξ, η, z)\n   Structure: A cylinder with an oval/stretched base instead of a perfect circle.\n   Best Use:  Tracking cyclical patterns that have asymmetrical cycles (e.g., markets that crash faster than they pump)."},{"id":11,"num":5,"name":"Toroidal","category":"3D Coordinate Systems","dimension":"3D","variables":"(σ, τ, φ)","structure":"Grid lines mapped perfectly to the surface of a donut (torus).","bestUse":"Bounded, multi-variable feedback loops where everything feeds back into the starting state.","raw":"5. Toroidal\n   Variables: (σ, τ, φ)\n   Structure: Grid lines mapped perfectly to the surface of a donut (torus).\n   Best Use:  Bounded, multi-variable feedback loops where everything feeds back into the starting state."},{"id":12,"num":1,"name":"Barycentric","category":"Topological & Unconventional Systems","dimension":"Topological","variables":"(λ1, λ2, λ3)","structure":"Positions mapped relative to the three corners of a triangle.","bestUse":"Ternary equilibrium. Perfect for tracking the balancing act between three variables (e.g., Spot Volume vs. Futures Volume vs. Options Volume).","raw":"1. Barycentric\n   Variables: (λ1, λ2, λ3)\n   Structure: Positions mapped relative to the three corners of a triangle.\n   Best Use:  Ternary equilibrium. Perfect for tracking the balancing act between three variables (e.g., Spot Volume vs. Futures Volume vs. Options Volume)."},{"id":13,"num":2,"name":"Hyperbolic","category":"Topological & Unconventional Systems","dimension":"Topological","variables":"(u, v)","structure":"Curved, non-Euclidean grids that compress toward infinite horizons.","bestUse":"Modeling extreme tail-risk, relativistic speeds, or chaotic, compounding market runaway phases.","raw":"2. Hyperbolic\n   Variables: (u, v)\n   Structure: Curved, non-Euclidean grids that compress toward infinite horizons.\n   Best Use:  Modeling extreme tail-risk, relativistic speeds, or chaotic, compounding market runaway phases."},{"id":14,"num":3,"name":"Skew (Oblique)","category":"Topological & Unconventional Systems","dimension":"Topological","variables":"(x', y')","structure":"A grid where the axes intersect at an angle other than 90-degrees.","bestUse":"Correlated data transformations. Straightens out skewed, overlapping datasets so they can be processed evenly.","raw":"3. Skew (Oblique)\n   Variables: (x', y')\n   Structure: A grid where the axes intersect at an angle other than 90-degrees.\n   Best Use:  Correlated data transformations. Straightens out skewed, overlapping datasets so they can be processed evenly."}],"concepts":[{"id":1,"title":"Bi-Power Variation","filename":"Bi-Power_Variation.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Jump-robust volatility estimator","overview":"is a jump-robust volatility estimator developed by Barndorff-Nielsen and Shephard in 2004 that estimates integrated variance while being robust to rare price jumps. Unlike realized variance which includes both continuous volatility and jump components, bipower variation isolates the continuous part of quadratic variation by using products of adjacent absolute returns rather than squared returns. This robustness to jumps is its key innovation - when a price process contains stochastic volatility plus infrequent jumps, the difference between realized variance and bipower variation estimates the quadratic variation of the jump component alone. This provides the first model-free method to separate total price variation into continuous and discontinuous (jump) components. The estimator is calculated using consecutive pairs of absolute returns, making it less sensitive to isolated large price movements. Extensions include tripower and quadpower variations for even greater robustness. This makes bipower variation essential for accurately measuring volatility in markets with jumps and for testing for the presence of jumps in price processes.","formula":"BV = μ₁⁻² * Σ|rᵢ| * |rᵢ₋₁|","parameters":"Where:\n- |rᵢ| = absolute value of the i-th intraday return\n- |rᵢ₋₁| = absolute value of the previous intraday return\n- μ₁ = E[|Z|] = √(2/π) ≈ 0.7979 (expected value of absolute standard normal)\n- μ₁⁻² ≈ 1.5746 (scaling constant)\n- Σ = sum over all consecutive pairs of returns\n- Jump component = Realized Variance - Bipower Variation","intuition":"Bipower variation is like a smart filter that can tell the difference between normal market wiggling and sudden big jumps. Regular volatility measures get thrown off when a stock suddenly gaps up or down (like on a surprise earnings announcement), treating that jump as if it were part of normal volatility. Bipower variation is clever enough to ignore those one-off jumps and focus only on the continuous back-and-forth movement, giving you a cleaner measure of the market's actual ongoing uncertainty without contamination from rare shock events.","rawContent":"is a jump-robust volatility estimator developed by Barndorff-Nielsen and Shephard in 2004 that estimates integrated variance while being robust to rare price jumps. Unlike realized variance which includes both continuous volatility and jump components, bipower variation isolates the continuous part of quadratic variation by using products of adjacent absolute returns rather than squared returns. This robustness to jumps is its key innovation - when a price process contains stochastic volatility plus infrequent jumps, the difference between realized variance and bipower variation estimates the quadratic variation of the jump component alone. This provides the first model-free method to separate total price variation into continuous and discontinuous (jump) components. The estimator is calculated using consecutive pairs of absolute returns, making it less sensitive to isolated large price movements. Extensions include tripower and quadpower variations for even greater robustness. This makes bipower variation essential for accurately measuring volatility in markets with jumps and for testing for the presence of jumps in price processes.\n\nBV = μ₁⁻² * Σ|rᵢ| * |rᵢ₋₁|\n\nWhere:\n- |rᵢ| = absolute value of the i-th intraday return\n- |rᵢ₋₁| = absolute value of the previous intraday return\n- μ₁ = E[|Z|] = √(2/π) ≈ 0.7979 (expected value of absolute standard normal)\n- μ₁⁻² ≈ 1.5746 (scaling constant)\n- Σ = sum over all consecutive pairs of returns\n- Jump component = Realized Variance - Bipower Variation\n\nBipower variation is like a smart filter that can tell the difference between normal market wiggling and sudden big jumps. Regular volatility measures get thrown off when a stock suddenly gaps up or down (like on a surprise earnings announcement), treating that jump as if it were part of normal volatility. Bipower variation is clever enough to ignore those one-off jumps and focus only on the continuous back-and-forth movement, giving you a cleaner measure of the market's actual ongoing uncertainty without contamination from rare shock events.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Bi-Power_Variation.txt","hasFullInfo":true},{"id":2,"title":"Garman-Klass Volatility Estimator","filename":"Garman-Klass_Volatility_Estimator.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Uses OHLC data for more accurate volatility estimation","overview":"is an estimator of price volatility that uses the opening, closing, high, and low prices to provide a more accurate measure of volatility than simple close-to-close methods. Developed by Mark B. Garman and Michael J. Klass in 1980, it aims to improve upon basic range-based volatility estimators by incorporating more price points within each trading period. The method assumes that price movements follow a geometric Brownian motion with continuous diffusion and zero drift. It is particularly effective because markets are most active during opening and closing sessions, making these price points especially informative. The estimator is approximately 7.4 times more efficient than simple close-to-close volatility calculations. However, it has limitations: it is not robust to opening price jumps (gaps) and assumes no drift in the price process, which may not hold in trending markets.","formula":"GK = sqrt((0.5 * (ln(High / Low))^2) - ((2 * ln(2) - 1) * (ln(Close / Open))^2))","parameters":"Where:\n- High = highest price in the period\n- Low = lowest price in the period  \n- Close = closing price in the period\n- Open = opening price in the period\n- ln = natural logarithm\n- The constant (2 * ln(2) - 1) ≈ 0.386\n\nGarman-Klass volatility is a smarter way to measure how much a stock's price \"wiggles\" by looking at four key prices instead of just the closing price. It checks the highest point, lowest point, where it opened, and where it closed each day. By using all four pieces of information, it gives you a much more complete picture of how wild the price swings were during the trading session - capturing the full range of action that happened between the opening bell and closing bell, not just where it ended up.","intuition":"","rawContent":"is an estimator of price volatility that uses the opening, closing, high, and low prices to provide a more accurate measure of volatility than simple close-to-close methods. Developed by Mark B. Garman and Michael J. Klass in 1980, it aims to improve upon basic range-based volatility estimators by incorporating more price points within each trading period. The method assumes that price movements follow a geometric Brownian motion with continuous diffusion and zero drift. It is particularly effective because markets are most active during opening and closing sessions, making these price points especially informative. The estimator is approximately 7.4 times more efficient than simple close-to-close volatility calculations. However, it has limitations: it is not robust to opening price jumps (gaps) and assumes no drift in the price process, which may not hold in trending markets.\n\nGK = sqrt((0.5 * (ln(High / Low))^2) - ((2 * ln(2) - 1) * (ln(Close / Open))^2))\n\nWhere:\n- High = highest price in the period\n- Low = lowest price in the period  \n- Close = closing price in the period\n- Open = opening price in the period\n- ln = natural logarithm\n- The constant (2 * ln(2) - 1) ≈ 0.386\n\nGarman-Klass volatility is a smarter way to measure how much a stock's price \"wiggles\" by looking at four key prices instead of just the closing price. It checks the highest point, lowest point, where it opened, and where it closed each day. By using all four pieces of information, it gives you a much more complete picture of how wild the price swings were during the trading session - capturing the full range of action that happened between the opening bell and closing bell, not just where it ended up.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Garman-Klass_Volatility_Estimator.txt","hasFullInfo":true},{"id":3,"title":"Normalized Average True Range (N-ATR)","filename":"Normalized_Average_True_Range_N-ATR.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"ATR scaled by price for cross-market comparison","overview":"is a volatility indicator that normalizes the Average True Range (ATR) by scaling it as a percentage of the asset's price, making it possible to compare volatility across different securities or time periods regardless of absolute price levels. Developed to address the limitation that traditional ATR values cannot be meaningfully compared across stocks with vastly different prices (e.g., a $10 stock vs. a $500 stock), N-ATR divides the ATR by the closing price and multiplies by 100 to express volatility as a percentage. This normalization makes it invaluable for cross-market analysis, stock screening based on volatility criteria, studying volatility patterns over extended timeframes, and comparing relative volatility of different instruments. The indicator retains ATR's key strength of capturing gap volatility and limit moves while adding the ability to make apples-to-apples comparisons. It is particularly useful for position sizing, risk management, and volatility-based trading strategies where relative rather than absolute volatility matters.","formula":"N-ATR = (ATR / Close) * 100","parameters":"Where:\n- ATR = Average True Range for the specified period (typically 14)\n- Close = Current closing price\n- Result expressed as percentage\n- Alternative calculation: Normalize True Range first, then average\n- Value of 4% means asset typically moves 4% of its price per period\n\nNormalized ATR turns absolute dollar amounts into percentages so you can fairly compare how wild different stocks are. A $500 stock moving $10 per day and a $50 stock moving $10 per day are experiencing very different levels of chaos - the expensive stock is only wiggling 2% while the cheap one is swinging a massive 20%. N-ATR reveals this difference clearly, making it perfect for deciding which stocks match your volatility preferences or comparing if the market was crazier this month versus last month, regardless of whether prices went up or down in between.","intuition":"","rawContent":"is a volatility indicator that normalizes the Average True Range (ATR) by scaling it as a percentage of the asset's price, making it possible to compare volatility across different securities or time periods regardless of absolute price levels. Developed to address the limitation that traditional ATR values cannot be meaningfully compared across stocks with vastly different prices (e.g., a $10 stock vs. a $500 stock), N-ATR divides the ATR by the closing price and multiplies by 100 to express volatility as a percentage. This normalization makes it invaluable for cross-market analysis, stock screening based on volatility criteria, studying volatility patterns over extended timeframes, and comparing relative volatility of different instruments. The indicator retains ATR's key strength of capturing gap volatility and limit moves while adding the ability to make apples-to-apples comparisons. It is particularly useful for position sizing, risk management, and volatility-based trading strategies where relative rather than absolute volatility matters.\n\nN-ATR = (ATR / Close) * 100\n\nWhere:\n- ATR = Average True Range for the specified period (typically 14)\n- Close = Current closing price\n- Result expressed as percentage\n- Alternative calculation: Normalize True Range first, then average\n- Value of 4% means asset typically moves 4% of its price per period\n\nNormalized ATR turns absolute dollar amounts into percentages so you can fairly compare how wild different stocks are. A $500 stock moving $10 per day and a $50 stock moving $10 per day are experiencing very different levels of chaos - the expensive stock is only wiggling 2% while the cheap one is swinging a massive 20%. N-ATR reveals this difference clearly, making it perfect for deciding which stocks match your volatility preferences or comparing if the market was crazier this month versus last month, regardless of whether prices went up or down in between.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Normalized_Average_True_Range_N-ATR.txt","hasFullInfo":true},{"id":4,"title":"Parkinson Volatility Estimator","filename":"Parkinson_Volatility_Estimator.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"High-low range-based volatility","overview":"is a high-low range-based volatility estimator developed by physicist Michael Parkinson in 1980 that uses the daily high and low prices to estimate volatility. It is based on the extreme value method and assumes that prices follow a geometric Brownian motion with zero drift. The key advantage of this estimator is that it incorporates intraday price range information rather than relying solely on closing prices, making it approximately 5 times more efficient than the traditional close-to-close volatility measure. This means it requires less data to achieve the same level of accuracy. However, the estimator systematically underestimates volatility because it does not account for price movements that occur outside of regular trading hours (overnight gaps and opening jumps). It also assumes zero drift, which can lead to overestimation during trending markets.","formula":"Parkinson = sqrt((1 / (4 * ln(2))) * (1/N) * Σ[ln(High/Low)]²)","parameters":"Where:\n- High = highest price in the period\n- Low = lowest price in the period\n- N = number of periods in the sample\n- ln = natural logarithm\n- 4 * ln(2) ≈ 2.7726 (scaling constant)\n- Σ = sum over all periods","intuition":"Parkinson volatility measures how wild price swings get during the trading day by looking at how far apart the highest and lowest prices are. Instead of just checking where the stock closed compared to yesterday, it captures the full journey the price took from its peak to its valley each day. This gives you a much better sense of the actual chaos and uncertainty traders experienced, since a stock could have a wild roller-coaster day but still close near where it started - traditional measures would miss all that action, but Parkinson catches it.","rawContent":"is a high-low range-based volatility estimator developed by physicist Michael Parkinson in 1980 that uses the daily high and low prices to estimate volatility. It is based on the extreme value method and assumes that prices follow a geometric Brownian motion with zero drift. The key advantage of this estimator is that it incorporates intraday price range information rather than relying solely on closing prices, making it approximately 5 times more efficient than the traditional close-to-close volatility measure. This means it requires less data to achieve the same level of accuracy. However, the estimator systematically underestimates volatility because it does not account for price movements that occur outside of regular trading hours (overnight gaps and opening jumps). It also assumes zero drift, which can lead to overestimation during trending markets.\n\nParkinson = sqrt((1 / (4 * ln(2))) * (1/N) * Σ[ln(High/Low)]²)\n\nWhere:\n- High = highest price in the period\n- Low = lowest price in the period\n- N = number of periods in the sample\n- ln = natural logarithm\n- 4 * ln(2) ≈ 2.7726 (scaling constant)\n- Σ = sum over all periods\n\nParkinson volatility measures how wild price swings get during the trading day by looking at how far apart the highest and lowest prices are. Instead of just checking where the stock closed compared to yesterday, it captures the full journey the price took from its peak to its valley each day. This gives you a much better sense of the actual chaos and uncertainty traders experienced, since a stock could have a wild roller-coaster day but still close near where it started - traditional measures would miss all that action, but Parkinson catches it.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Parkinson_Volatility_Estimator.txt","hasFullInfo":true},{"id":5,"title":"Realized Volatility (RV)","filename":"Realized_Volatility_RV.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Sum of squared intraday returns","overview":"is a non-parametric ex-post estimate of return variation calculated as the sum of squared intraday returns over a fixed time interval, typically one trading day. Developed based on seminal work by Robert Merton in 1980, this measure leverages high-frequency intraday data to provide a more accurate volatility estimate than daily close-to-close methods. The concept relies on the principle that as sampling frequency increases, the sum of squared returns converges to the true integrated variance of the underlying price process. Common sampling intervals range from 5 to 30 minutes, providing a balance between accuracy and avoiding microstructure noise from too-frequent sampling. Realized volatility captures the actual ex-post volatility experienced during the measurement period, making it particularly valuable for volatility forecasting, risk management, and options pricing. It serves as a benchmark for evaluating other volatility models and is widely used in academic research and by practitioners for its precision and model-free nature.","formula":"RV = sqrt(Σ r²ᵢ)","parameters":"Where:\n- r²ᵢ = squared intraday return at interval i\n- Σ = sum over all intraday intervals within the period\n- Common sampling: 5-minute, 15-minute, or 30-minute returns\n- M = number of intervals per day (e.g., 78 for 5-min bars in 6.5-hour trading day)\n- Can be annualized by: RV_annual = RV_daily * sqrt(252 trading days)","intuition":"Realized volatility is like having a super-detailed thermometer that takes your temperature every 5 minutes all day long instead of just once in the morning. By capturing every little wiggle in the stock price throughout the trading day and adding up all those movements, you get a much more accurate picture of how crazy the price action really was. Think of it as the difference between checking if someone had a fever once versus monitoring them continuously - you catch all the spikes and dips that a single measurement would miss completely.","rawContent":"is a non-parametric ex-post estimate of return variation calculated as the sum of squared intraday returns over a fixed time interval, typically one trading day. Developed based on seminal work by Robert Merton in 1980, this measure leverages high-frequency intraday data to provide a more accurate volatility estimate than daily close-to-close methods. The concept relies on the principle that as sampling frequency increases, the sum of squared returns converges to the true integrated variance of the underlying price process. Common sampling intervals range from 5 to 30 minutes, providing a balance between accuracy and avoiding microstructure noise from too-frequent sampling. Realized volatility captures the actual ex-post volatility experienced during the measurement period, making it particularly valuable for volatility forecasting, risk management, and options pricing. It serves as a benchmark for evaluating other volatility models and is widely used in academic research and by practitioners for its precision and model-free nature.\n\nRV = sqrt(Σ r²ᵢ)\n\nWhere:\n- r²ᵢ = squared intraday return at interval i\n- Σ = sum over all intraday intervals within the period\n- Common sampling: 5-minute, 15-minute, or 30-minute returns\n- M = number of intervals per day (e.g., 78 for 5-min bars in 6.5-hour trading day)\n- Can be annualized by: RV_annual = RV_daily * sqrt(252 trading days)\n\nRealized volatility is like having a super-detailed thermometer that takes your temperature every 5 minutes all day long instead of just once in the morning. By capturing every little wiggle in the stock price throughout the trading day and adding up all those movements, you get a much more accurate picture of how crazy the price action really was. Think of it as the difference between checking if someone had a fever once versus monitoring them continuously - you catch all the spikes and dips that a single measurement would miss completely.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Realized_Volatility_RV.txt","hasFullInfo":true},{"id":6,"title":"Rogers-Satchell-Yoon Volatility","filename":"Rogers-Satchell-Yoon_Volatility.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Drift-independent volatility estimator","overview":"is a drift-independent volatility estimator that allows for non-zero drift in the underlying price process, making it more suitable for trending markets. Proposed by Rogers and Satchell in 1991 and refined with Yoon in 1994, this estimator addresses a key limitation of earlier methods (like Parkinson and Garman-Klass) which assumed zero drift and would overestimate volatility during strong trending periods. The estimator uses open, high, low, and close prices to calculate volatility while remaining unbiased by directional price movements. However, like Garman-Klass, it does not account for overnight price gaps (opening jumps), which can lead to underestimation of total volatility. It is particularly effective during periods when the asset exhibits a strong directional trend, as it isolates the volatility component independent of the drift.","formula":"RS = sqrt((1/N) * Σ[ln(High/Close) * ln(High/Open) + ln(Low/Close) * ln(Low/Open)])","parameters":"Where:\n- High = highest price in the period\n- Low = lowest price in the period\n- Close = closing price in the period\n- Open = opening price in the period\n- N = number of periods in the sample\n- ln = natural logarithm\n- Σ = sum over all periods\n\nRogers-Satchell volatility is designed to handle markets that are trending up or down without mistaking that trend for extra volatility. Regular volatility measures get confused when a stock steadily climbs or falls, thinking all that movement is \"wiggling\" when really it's just going in one direction. This estimator is smart enough to separate the steady directional movement (the trend) from the actual back-and-forth wiggling (true volatility), giving you a cleaner measure of how unpredictable the price action really is.","intuition":"","rawContent":"is a drift-independent volatility estimator that allows for non-zero drift in the underlying price process, making it more suitable for trending markets. Proposed by Rogers and Satchell in 1991 and refined with Yoon in 1994, this estimator addresses a key limitation of earlier methods (like Parkinson and Garman-Klass) which assumed zero drift and would overestimate volatility during strong trending periods. The estimator uses open, high, low, and close prices to calculate volatility while remaining unbiased by directional price movements. However, like Garman-Klass, it does not account for overnight price gaps (opening jumps), which can lead to underestimation of total volatility. It is particularly effective during periods when the asset exhibits a strong directional trend, as it isolates the volatility component independent of the drift.\n\nRS = sqrt((1/N) * Σ[ln(High/Close) * ln(High/Open) + ln(Low/Close) * ln(Low/Open)])\n\nWhere:\n- High = highest price in the period\n- Low = lowest price in the period\n- Close = closing price in the period\n- Open = opening price in the period\n- N = number of periods in the sample\n- ln = natural logarithm\n- Σ = sum over all periods\n\nRogers-Satchell volatility is designed to handle markets that are trending up or down without mistaking that trend for extra volatility. Regular volatility measures get confused when a stock steadily climbs or falls, thinking all that movement is \"wiggling\" when really it's just going in one direction. This estimator is smart enough to separate the steady directional movement (the trend) from the actual back-and-forth wiggling (true volatility), giving you a cleaner measure of how unpredictable the price action really is.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Rogers-Satchell-Yoon_Volatility.txt","hasFullInfo":true},{"id":7,"title":"Yang-Zhang Volatility Estimator","filename":"Yang-Zhang_Volatility_Estimator.txt","group":"group 1","groupNum":1,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Combines overnight and open-to-close volatility","overview":"is an advanced volatility estimator developed by Yang and Zhang in 2000 that combines overnight volatility, open-to-close volatility, and the Rogers-Satchell estimator to provide the most comprehensive range-based volatility measure. It is the only estimator that handles opening price jumps (gaps), allows for non-zero drift, and maintains minimum estimation error. The estimator is unbiased in the continuous limit and is approximately 14 times more efficient than the simple close-to-close volatility estimator. It achieves this by decomposing volatility into three components: overnight (close-to-open) volatility which captures gap risk, open-to-close volatility which measures intraday movement, and the Rogers-Satchell component which handles drift. The weighting factor k (typically 0.34) optimally balances these components. This comprehensive approach makes it particularly valuable for markets with significant overnight gaps and strong trends, providing the most accurate volatility estimation among range-based methods.","formula":"YZ = sqrt(σ²_overnight + k * σ²_open-close + (1-k) * σ²_Rogers-Satchell)","parameters":"Where:\n- σ²_overnight = variance of ln(Open/Close_previous)\n- σ²_open-close = variance of ln(Close/Open)  \n- σ²_Rogers-Satchell = ln(High/Close)*ln(High/Open) + ln(Low/Close)*ln(Low/Open)\n- k = optimal weighting factor (empirically determined as 0.34)\n- Default α = 1.34 for calculation\n- ln = natural logarithm\n\nYang-Zhang volatility is the Swiss Army knife of volatility measures - it handles everything the market throws at it. While simpler methods get confused by overnight gaps (when a stock opens way different from where it closed), trending markets, or wild intraday swings, Yang-Zhang smoothly incorporates all of it. It's like having three different thermometers measuring different parts of market temperature (overnight chaos, daily trend, and intraday wildness) and intelligently combining them into one super-accurate reading. This makes it the gold standard when you need the most reliable volatility estimate possible.","intuition":"","rawContent":"is an advanced volatility estimator developed by Yang and Zhang in 2000 that combines overnight volatility, open-to-close volatility, and the Rogers-Satchell estimator to provide the most comprehensive range-based volatility measure. It is the only estimator that handles opening price jumps (gaps), allows for non-zero drift, and maintains minimum estimation error. The estimator is unbiased in the continuous limit and is approximately 14 times more efficient than the simple close-to-close volatility estimator. It achieves this by decomposing volatility into three components: overnight (close-to-open) volatility which captures gap risk, open-to-close volatility which measures intraday movement, and the Rogers-Satchell component which handles drift. The weighting factor k (typically 0.34) optimally balances these components. This comprehensive approach makes it particularly valuable for markets with significant overnight gaps and strong trends, providing the most accurate volatility estimation among range-based methods.\n\nYZ = sqrt(σ²_overnight + k * σ²_open-close + (1-k) * σ²_Rogers-Satchell)\n\nWhere:\n- σ²_overnight = variance of ln(Open/Close_previous)\n- σ²_open-close = variance of ln(Close/Open)  \n- σ²_Rogers-Satchell = ln(High/Close)*ln(High/Open) + ln(Low/Close)*ln(Low/Open)\n- k = optimal weighting factor (empirically determined as 0.34)\n- Default α = 1.34 for calculation\n- ln = natural logarithm\n\nYang-Zhang volatility is the Swiss Army knife of volatility measures - it handles everything the market throws at it. While simpler methods get confused by overnight gaps (when a stock opens way different from where it closed), trending markets, or wild intraday swings, Yang-Zhang smoothly incorporates all of it. It's like having three different thermometers measuring different parts of market temperature (overnight chaos, daily trend, and intraday wildness) and intelligently combining them into one super-accurate reading. This makes it the gold standard when you need the most reliable volatility estimate possible.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 1/Yang-Zhang_Volatility_Estimator.txt","hasFullInfo":true},{"id":8,"title":"Adaptive Deadband Range Filter","filename":"Adaptive_Deadband_Range_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Dynamic threshold filtering","overview":"The Adaptive Deadband Range Filter is a threshold-based filtering technique that creates a \"deadband\" or neutral zone around a signal value. The filter only responds to changes that exceed the deadband threshold, ignoring small fluctuations within the band. The \"adaptive\" aspect means the deadband width adjusts dynamically based on market conditions, typically using volatility measures like ATR. This reduces noise and false signals in choppy markets while remaining responsive to genuine price movements, making it valuable for trend-following and mean-reversion systems.","formula":"Mathematical Formula:\nDeadband calculation:\nDeadband_t = k * ATR_t\n\nOr: Deadband_t = k * StdDev_t\n\nFilter logic:\nIf |Price_t - Filter_t-1| > Deadband_t:\n    Filter_t = Price_t\nElse:\n    Filter_t = Filter_t-1","parameters":"Where:\n- k = multiplier (typically 0.5 to 2.0)\n- ATR = Average True Range\n- Filter holds previous value until threshold exceeded\n\nVariations include hysteresis (different thresholds for up/down moves)\n\nSimple Explanation:","intuition":"Think of the deadband filter as creating a \"don't care\" zone around your current signal. If price wiggles up or down by a small amount (within the deadband), the filter ignores it and holds steady. Only when price moves beyond the threshold does the filter update. The adaptive part means the size of this \"ignore zone\" grows and shrinks with volatility - wider during volatile periods (so you don't get whipsawed by big noise), narrower during calm periods (so you don't miss real moves). It's like noise-cancelling headphones that adjust to ambient sound levels.","rawContent":"The Adaptive Deadband Range Filter is a threshold-based filtering technique that creates a \"deadband\" or neutral zone around a signal value. The filter only responds to changes that exceed the deadband threshold, ignoring small fluctuations within the band. The \"adaptive\" aspect means the deadband width adjusts dynamically based on market conditions, typically using volatility measures like ATR. This reduces noise and false signals in choppy markets while remaining responsive to genuine price movements, making it valuable for trend-following and mean-reversion systems.\n\nMathematical Formula:\nDeadband calculation:\nDeadband_t = k * ATR_t\n\nOr: Deadband_t = k * StdDev_t\n\nFilter logic:\nIf |Price_t - Filter_t-1| > Deadband_t:\n    Filter_t = Price_t\nElse:\n    Filter_t = Filter_t-1\n\nWhere:\n- k = multiplier (typically 0.5 to 2.0)\n- ATR = Average True Range\n- Filter holds previous value until threshold exceeded\n\nVariations include hysteresis (different thresholds for up/down moves)\n\nSimple Explanation:\nThink of the deadband filter as creating a \"don't care\" zone around your current signal. If price wiggles up or down by a small amount (within the deadband), the filter ignores it and holds steady. Only when price moves beyond the threshold does the filter update. The adaptive part means the size of this \"ignore zone\" grows and shrinks with volatility - wider during volatile periods (so you don't get whipsawed by big noise), narrower during calm periods (so you don't miss real moves). It's like noise-cancelling headphones that adjust to ambient sound levels.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Adaptive_Deadband_Range_Filter.txt","hasFullInfo":true},{"id":9,"title":"Adaptive RSI (DFT-Calculated Dominant Cycle)","filename":"Adaptive_RSI.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Cycle-tuned RSI","overview":"The Adaptive RSI uses Discrete Fourier Transform (DFT) to identify the dominant market cycle and adjusts the RSI calculation period to match that cycle. Developed as part of John Ehlers' cycle analysis work, this approach ensures the RSI is always tuned to the current market rhythm rather than using an arbitrary 14-period default. By matching the RSI period to the actual cycle length, the indicator produces more meaningful overbought/oversold levels and divergence signals that are synchronized with market structure.","formula":"Mathematical Formula:\nDominant Cycle Detection (simplified DFT approach):\nFor each candidate period P:\n    InPhase_P = Σ Price_i * cos(2π * i / P)\n    Quadrature_P = Σ Price_i * sin(2π * i / P)\n    Power_P = InPhase_P^2 + Quadrature_P^2\n\nDominantCycle = P where Power_P is maximum (within range 8-50)\n\nAdaptive RSI Period:\nPeriod_t = round(DominantCycle / 2)\n\nRSI Calculation:\nRSI_t = 100 - [100 / (1 + RS)]\nWhere RS = Average Gain / Average Loss over Period_t bars\n\nSimple Explanation:","parameters":"","intuition":"Think of the market as having a natural rhythm or cycle - sometimes it swings back and forth every 20 days, sometimes every 40 days. Regular RSI ignores this and always uses 14 periods. Adaptive RSI uses frequency analysis (DFT) to detect the current dominant cycle length, then sets its calculation period to match. If the market is cycling every 30 days, Adaptive RSI might use a 15-period calculation. This synchronization means the RSI's overbought/oversold signals align with the actual market rhythm, making them more reliable.","rawContent":"The Adaptive RSI uses Discrete Fourier Transform (DFT) to identify the dominant market cycle and adjusts the RSI calculation period to match that cycle. Developed as part of John Ehlers' cycle analysis work, this approach ensures the RSI is always tuned to the current market rhythm rather than using an arbitrary 14-period default. By matching the RSI period to the actual cycle length, the indicator produces more meaningful overbought/oversold levels and divergence signals that are synchronized with market structure.\n\nMathematical Formula:\nDominant Cycle Detection (simplified DFT approach):\nFor each candidate period P:\n    InPhase_P = Σ Price_i * cos(2π * i / P)\n    Quadrature_P = Σ Price_i * sin(2π * i / P)\n    Power_P = InPhase_P^2 + Quadrature_P^2\n\nDominantCycle = P where Power_P is maximum (within range 8-50)\n\nAdaptive RSI Period:\nPeriod_t = round(DominantCycle / 2)\n\nRSI Calculation:\nRSI_t = 100 - [100 / (1 + RS)]\nWhere RS = Average Gain / Average Loss over Period_t bars\n\nSimple Explanation:\nThink of the market as having a natural rhythm or cycle - sometimes it swings back and forth every 20 days, sometimes every 40 days. Regular RSI ignores this and always uses 14 periods. Adaptive RSI uses frequency analysis (DFT) to detect the current dominant cycle length, then sets its calculation period to match. If the market is cycling every 30 days, Adaptive RSI might use a 15-period calculation. This synchronization means the RSI's overbought/oversold signals align with the actual market rhythm, making them more reliable.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 2/Adaptive_RSI.txt","hasFullInfo":true},{"id":10,"title":"Adaptive Stochastic Oscillator (Volatility-Based Lookback)","filename":"Adaptive_Stochastic_Oscillator.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Dynamic period stochastic","overview":"The Adaptive Stochastic Oscillator modifies the traditional Stochastic by adjusting its lookback period based on market volatility rather than using a fixed period (typically 14). When volatility is high, the oscillator uses shorter lookback periods to capture faster price swings. When volatility is low, it uses longer periods to reduce noise and false signals. This adaptation makes the oscillator more relevant to current market conditions, improving the reliability of overbought/oversold signals across different volatility regimes.","formula":"Mathematical Formula:\nVolatility measure:\nV_t = ATR(n) or StdDev(Close, n)\n\nAdaptive Period:\nPeriod_t = BasePeriod * (ReferenceVol / V_t)\nPeriod_t = max(min(Period_t, MaxPeriod), MinPeriod)\n\nAdaptive Stochastic:\n%K_t = 100 * (Close_t - Lowest_Low) / (Highest_High - Lowest_Low)","parameters":"Where:\n- Highest_High = highest high over Period_t bars\n- Lowest_Low = lowest low over Period_t bars\n- %D = SMA(%K, smoothing_period)\n\nTypical bounds: MinPeriod=5, MaxPeriod=30, BasePeriod=14\n\nSimple Explanation:\nRegular Stochastic always looks back the same number of days (usually 14) to find highs and lows, whether the market is calm or crazy. Adaptive Stochastic changes that lookback based on volatility. In wild markets, it looks back fewer days (catching the recent action). In calm markets, it looks back more days (getting a steadier picture). This means overbought at 80 and oversold at 20 actually mean more because the calculation adjusts to match current market behavior, not some arbitrary fixed period that might be too slow or too fast.","intuition":"","rawContent":"The Adaptive Stochastic Oscillator modifies the traditional Stochastic by adjusting its lookback period based on market volatility rather than using a fixed period (typically 14). When volatility is high, the oscillator uses shorter lookback periods to capture faster price swings. When volatility is low, it uses longer periods to reduce noise and false signals. This adaptation makes the oscillator more relevant to current market conditions, improving the reliability of overbought/oversold signals across different volatility regimes.\n\nMathematical Formula:\nVolatility measure:\nV_t = ATR(n) or StdDev(Close, n)\n\nAdaptive Period:\nPeriod_t = BasePeriod * (ReferenceVol / V_t)\nPeriod_t = max(min(Period_t, MaxPeriod), MinPeriod)\n\nAdaptive Stochastic:\n%K_t = 100 * (Close_t - Lowest_Low) / (Highest_High - Lowest_Low)\n\nWhere:\n- Highest_High = highest high over Period_t bars\n- Lowest_Low = lowest low over Period_t bars\n- %D = SMA(%K, smoothing_period)\n\nTypical bounds: MinPeriod=5, MaxPeriod=30, BasePeriod=14\n\nSimple Explanation:\nRegular Stochastic always looks back the same number of days (usually 14) to find highs and lows, whether the market is calm or crazy. Adaptive Stochastic changes that lookback based on volatility. In wild markets, it looks back fewer days (catching the recent action). In calm markets, it looks back more days (getting a steadier picture). This means overbought at 80 and oversold at 20 actually mean more because the calculation adjusts to match current market behavior, not some arbitrary fixed period that might be too slow or too fast.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Adaptive_Stochastic_Oscillator.txt","hasFullInfo":true},{"id":11,"title":"Affine Projection Algorithm","filename":"Affine_Projection_Algorithm.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Least Mean Squares Family","summary":"Decorrelating adaptive filter","overview":"The Affine Projection Algorithm (APA) is an adaptive filtering technique that extends the NLMS algorithm by using multiple past input vectors to update filter weights. It projects the error signal onto an affine subspace spanned by recent input vectors, achieving faster convergence than NLMS, especially when input signals are highly correlated. APA provides a middle ground between the simplicity of LMS/NLMS and the fast convergence of RLS, with computational complexity controlled by the projection order.","formula":"Mathematical Formula:\nWeight update:\nw_t+1 = w_t + μ * X_t * (X_t^T * X_t + δI)^-1 * e_t","parameters":"Where:\n- X_t = [x_t, x_t-1, ..., x_t-K+1] (matrix of K recent inputs)\n- e_t = [e_t, e_t-1, ..., e_t-K+1]^T (vector of K errors)\n- e_i = d_i - x_i^T * w_t\n- K = projection order (typically 2-5)\n- μ = step size (0 < μ ≤ 1)\n- δ = regularization parameter (small positive constant)\n\nFor K=1: APA reduces to NLMS\nFor K=N: APA approximates RLS\n\nSimple Explanation:","intuition":"Think of regular NLMS as learning from your most recent mistake. APA learns from your last several mistakes simultaneously, finding a weight adjustment that fixes not just the latest error but also the previous few. This is especially helpful when your data is repetitive or correlated - if today looks like yesterday, APA's multi-point learning helps it converge faster. You choose K (projection order) to balance speed (higher K) versus computational cost.","rawContent":"The Affine Projection Algorithm (APA) is an adaptive filtering technique that extends the NLMS algorithm by using multiple past input vectors to update filter weights. It projects the error signal onto an affine subspace spanned by recent input vectors, achieving faster convergence than NLMS, especially when input signals are highly correlated. APA provides a middle ground between the simplicity of LMS/NLMS and the fast convergence of RLS, with computational complexity controlled by the projection order.\n\nMathematical Formula:\nWeight update:\nw_t+1 = w_t + μ * X_t * (X_t^T * X_t + δI)^-1 * e_t\n\nWhere:\n- X_t = [x_t, x_t-1, ..., x_t-K+1] (matrix of K recent inputs)\n- e_t = [e_t, e_t-1, ..., e_t-K+1]^T (vector of K errors)\n- e_i = d_i - x_i^T * w_t\n- K = projection order (typically 2-5)\n- μ = step size (0 < μ ≤ 1)\n- δ = regularization parameter (small positive constant)\n\nFor K=1: APA reduces to NLMS\nFor K=N: APA approximates RLS\n\nSimple Explanation:\nThink of regular NLMS as learning from your most recent mistake. APA learns from your last several mistakes simultaneously, finding a weight adjustment that fixes not just the latest error but also the previous few. This is especially helpful when your data is repetitive or correlated - if today looks like yesterday, APA's multi-point learning helps it converge faster. You choose K (projection order) to balance speed (higher K) versus computational cost.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Affine_Projection_Algorithm.txt","hasFullInfo":true},{"id":12,"title":"Auxiliary Particle Filter","filename":"Auxiliary_Particle_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Improved particle filtering","overview":"The Auxiliary Particle Filter (APF) is an improved particle filtering method that addresses particle degeneracy by using auxiliary variables to guide particle propagation. Introduced by Pitt and Shephard (1999), APF performs a \"look-ahead\" step before sampling particles, using a first-stage weighting based on predicted likelihood of particles at the next time step. This allows the filter to concentrate computational effort on particles likely to have high weights, improving efficiency and reducing the number of particles needed for accurate estimation.","formula":"Mathematical Formula:\nFirst-stage (auxiliary) weights:\nw̃_t^i ∝ w_t-1^i * p(z_t | μ_t^i)\n\nWhere μ_t^i = E[x_t | x_t-1^i] (predicted mean state)\n\nSample indices k^i ~ Categorical(w̃_t)\n\nSecond-stage: Sample new particles\nx_t^i ~ p(x_t | x_t-1^{k^i})\n\nSecond-stage weights:\nw_t^i ∝ p(z_t | x_t^i) / p(z_t | μ_t^{k^i})\n\nNormalize: w_t^i = w_t^i / Σ_j w_t^j\n\nState estimate: x̂_t = Σ w_t^i * x_t^i\n\nResampling when N_eff drops below threshold.","parameters":"","intuition":"Simple Explanation:\nRegular particle filters sometimes waste computational effort on particles that end up being useless. APF is smarter - before creating new particles, it does a quick check to predict which current particles are likely to be valuable after the next observation. It then focuses on evolving copies of those promising particles rather than treating all particles equally. Think of it like a trader who quickly scans potential trades and spends detailed analysis time only on the most promising ones, rather than analyzing every possible trade equally deeply.","rawContent":"The Auxiliary Particle Filter (APF) is an improved particle filtering method that addresses particle degeneracy by using auxiliary variables to guide particle propagation. Introduced by Pitt and Shephard (1999), APF performs a \"look-ahead\" step before sampling particles, using a first-stage weighting based on predicted likelihood of particles at the next time step. This allows the filter to concentrate computational effort on particles likely to have high weights, improving efficiency and reducing the number of particles needed for accurate estimation.\n\nMathematical Formula:\nFirst-stage (auxiliary) weights:\nw̃_t^i ∝ w_t-1^i * p(z_t | μ_t^i)\n\nWhere μ_t^i = E[x_t | x_t-1^i] (predicted mean state)\n\nSample indices k^i ~ Categorical(w̃_t)\n\nSecond-stage: Sample new particles\nx_t^i ~ p(x_t | x_t-1^{k^i})\n\nSecond-stage weights:\nw_t^i ∝ p(z_t | x_t^i) / p(z_t | μ_t^{k^i})\n\nNormalize: w_t^i = w_t^i / Σ_j w_t^j\n\nState estimate: x̂_t = Σ w_t^i * x_t^i\n\nResampling when N_eff drops below threshold.\n\nSimple Explanation:\nRegular particle filters sometimes waste computational effort on particles that end up being useless. APF is smarter - before creating new particles, it does a quick check to predict which current particles are likely to be valuable after the next observation. It then focuses on evolving copies of those promising particles rather than treating all particles equally. Think of it like a trader who quickly scans potential trades and spends detailed analysis time only on the most promising ones, rather than analyzing every possible trade equally deeply.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Auxiliary_Particle_Filter.txt","hasFullInfo":true},{"id":13,"title":"Baxter-King Filter","filename":"Baxter-King_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Symmetric band-pass filter","overview":"The Baxter-King (BK) filter is a symmetric band-pass filter introduced by Marianne Baxter and Robert King in 1999 for isolating business cycle frequencies in economic data. It removes both low-frequency trends and high-frequency noise, retaining only cyclical components within a specified period range. The filter is optimal in the frequency domain but requires symmetric lead and lag terms, which means it loses observations at both ends of the sample.","formula":"Mathematical Formula:\ny_t^cycle = Σ(k=-K to K) a_k * y_t-k","parameters":"Where:\n- K = truncation lag (typically 12 for quarterly data)\n- a_k = filter weights satisfying band-pass criteria\n- Weights sum to zero: Σ a_k = 0\n- For cycles between p_low and p_high periods:\n  - a_0 = (ω_high - ω_low)/π\n  - a_k = [sin(k*ω_high) - sin(k*ω_low)]/(k*π) for k ≠ 0\n  - ω = 2π/period","intuition":"Simple Explanation:\nThe BK filter is like a special lens that only shows you the \"medium-speed\" movements in prices - not the slow drift over years or the jittery day-to-day bounces, just the swings that happen over your chosen timeframe (like 6-32 quarters for business cycles). The catch is it needs to look both forward and backward in time, so you lose some data at the beginning and end of your chart, like cropping the edges off a photo.","rawContent":"The Baxter-King (BK) filter is a symmetric band-pass filter introduced by Marianne Baxter and Robert King in 1999 for isolating business cycle frequencies in economic data. It removes both low-frequency trends and high-frequency noise, retaining only cyclical components within a specified period range. The filter is optimal in the frequency domain but requires symmetric lead and lag terms, which means it loses observations at both ends of the sample.\n\nMathematical Formula:\ny_t^cycle = Σ(k=-K to K) a_k * y_t-k\n\nWhere:\n- K = truncation lag (typically 12 for quarterly data)\n- a_k = filter weights satisfying band-pass criteria\n- Weights sum to zero: Σ a_k = 0\n- For cycles between p_low and p_high periods:\n  - a_0 = (ω_high - ω_low)/π\n  - a_k = [sin(k*ω_high) - sin(k*ω_low)]/(k*π) for k ≠ 0\n  - ω = 2π/period\n\nSimple Explanation:\nThe BK filter is like a special lens that only shows you the \"medium-speed\" movements in prices - not the slow drift over years or the jittery day-to-day bounces, just the swings that happen over your chosen timeframe (like 6-32 quarters for business cycles). The catch is it needs to look both forward and backward in time, so you lose some data at the beginning and end of your chart, like cropping the edges off a photo.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Baxter-King_Filter.txt","hasFullInfo":true},{"id":14,"title":"Beveridge-Nelson Decomposition","filename":"Beveridge-Nelson_Decomposition.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Permanent-transitory decomposition","overview":"The Beveridge-Nelson (BN) decomposition, introduced by Stephen Beveridge and Charles Nelson in 1981, separates a time series into permanent (trend) and transitory (cyclical) components. The key insight is that the permanent component is defined as the long-run forecast of the series, while the transitory component represents temporary deviations. This decomposition is model-based, typically using ARIMA models, and has the unique property that the trend component can change abruptly, unlike smooth trend filters.","formula":"Mathematical Formula:\nFor an ARIMA(p,1,q) process:\ny_t = τ_t + c_t","parameters":"Where:\n- τ_t = permanent component = lim(h→∞) E[y_t+h - y_t | I_t]\n- c_t = transitory component = y_t - τ_t\n- I_t = information set at time t\n\nFor ARMA representation: ϕ(L)Δy_t = θ(L)ε_t\n- Permanent shock = [θ(1)/ϕ(1)] * ε_t\n- Transitory component sum to zero in long run\n\nSimple Explanation:","intuition":"Think of a stock price as having two parts: where it's \"really headed\" in the long run (permanent), and temporary wiggles around that path (transitory). The BN method says the permanent part is where you'd expect the price to end up eventually if you could see infinitely far into the future. Unlike filters that force smooth trends, BN allows the long-term path to make sudden jumps when major news hits - because that news permanently changes expectations.","rawContent":"The Beveridge-Nelson (BN) decomposition, introduced by Stephen Beveridge and Charles Nelson in 1981, separates a time series into permanent (trend) and transitory (cyclical) components. The key insight is that the permanent component is defined as the long-run forecast of the series, while the transitory component represents temporary deviations. This decomposition is model-based, typically using ARIMA models, and has the unique property that the trend component can change abruptly, unlike smooth trend filters.\n\nMathematical Formula:\nFor an ARIMA(p,1,q) process:\ny_t = τ_t + c_t\n\nWhere:\n- τ_t = permanent component = lim(h→∞) E[y_t+h - y_t | I_t]\n- c_t = transitory component = y_t - τ_t\n- I_t = information set at time t\n\nFor ARMA representation: ϕ(L)Δy_t = θ(L)ε_t\n- Permanent shock = [θ(1)/ϕ(1)] * ε_t\n- Transitory component sum to zero in long run\n\nSimple Explanation:\nThink of a stock price as having two parts: where it's \"really headed\" in the long run (permanent), and temporary wiggles around that path (transitory). The BN method says the permanent part is where you'd expect the price to end up eventually if you could see infinitely far into the future. Unlike filters that force smooth trends, BN allows the long-term path to make sudden jumps when major news hits - because that news permanently changes expectations.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Beveridge-Nelson_Decomposition.txt","hasFullInfo":true},{"id":15,"title":"Census X-11/X-12-ARIMA Filter","filename":"Census_X-11_X-12-ARIMA_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Advanced Economic Filters","summary":"Seasonal adjustment methodology","overview":"The X-11 and X-12-ARIMA methods are comprehensive seasonal adjustment procedures developed by the U.S. Census Bureau. X-11 (1960s) uses iterative applications of moving averages to decompose a time series into trend-cycle, seasonal, and irregular components. X-12-ARIMA (1990s) extends X-11 by incorporating ARIMA modeling for forecasting and backcasting, improving endpoint estimates, and providing diagnostic statistics. These are the most widely used seasonal adjustment methods by statistical agencies worldwide.","formula":"Mathematical Formula:\nDecomposition (multiplicative form):\ny_t = T_t × S_t × I_t","parameters":"Where:\n- T_t = trend-cycle component\n- S_t = seasonal component\n- I_t = irregular component\n\nProcess (simplified):\n1. Estimate initial trend using moving averages\n2. Calculate seasonal-irregular: SI_t = y_t / T_t\n3. Estimate seasonal factors from SI_t\n4. Deseasonalize: y_t / S_t\n5. Re-estimate trend using Henderson filter\n6. Iterate steps 2-5 multiple times\n7. (X-12 only) Use ARIMA to extend series at endpoints\n\nSimple Explanation:\nImagine sales data that goes up every December and dips every February - you want to know if sales are really growing or just following the usual seasonal pattern. X-11/X-12 separates your data into three parts: the underlying trend (are things actually going up or down?), the seasonal pattern (the regular annual rhythm), and random noise (weird one-time events). It does this by repeatedly applying moving averages and getting better estimates each time. X-12 adds forecasting to handle the tricky start and end of your data better.","intuition":"","rawContent":"The X-11 and X-12-ARIMA methods are comprehensive seasonal adjustment procedures developed by the U.S. Census Bureau. X-11 (1960s) uses iterative applications of moving averages to decompose a time series into trend-cycle, seasonal, and irregular components. X-12-ARIMA (1990s) extends X-11 by incorporating ARIMA modeling for forecasting and backcasting, improving endpoint estimates, and providing diagnostic statistics. These are the most widely used seasonal adjustment methods by statistical agencies worldwide.\n\nMathematical Formula:\nDecomposition (multiplicative form):\ny_t = T_t × S_t × I_t\n\nWhere:\n- T_t = trend-cycle component\n- S_t = seasonal component\n- I_t = irregular component\n\nProcess (simplified):\n1. Estimate initial trend using moving averages\n2. Calculate seasonal-irregular: SI_t = y_t / T_t\n3. Estimate seasonal factors from SI_t\n4. Deseasonalize: y_t / S_t\n5. Re-estimate trend using Henderson filter\n6. Iterate steps 2-5 multiple times\n7. (X-12 only) Use ARIMA to extend series at endpoints\n\nSimple Explanation:\nImagine sales data that goes up every December and dips every February - you want to know if sales are really growing or just following the usual seasonal pattern. X-11/X-12 separates your data into three parts: the underlying trend (are things actually going up or down?), the seasonal pattern (the regular annual rhythm), and random noise (weird one-time events). It does this by repeatedly applying moving averages and getting better estimates each time. X-12 adds forecasting to handle the tricky start and end of your data better.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Census_X-11_X-12-ARIMA_Filter.txt","hasFullInfo":true},{"id":16,"title":"Christiano-Fitzgerald Filter","filename":"Christiano-Fitzgerald_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Asymmetric band-pass filter","overview":"The Christiano-Fitzgerald (CF) filter is an asymmetric band-pass filter developed by Lawrence Christiano and Terry Fitzgerald in 2003. It extracts cyclical components within a specified frequency range while minimizing distortions at the endpoints of the data. Unlike symmetric filters that require future data, the CF filter is designed to work with real-time data by using optimal approximations at the boundaries, making it particularly useful for extracting business cycles from economic time series.","formula":"Mathematical Formula:\nThe CF filter extracts cycles with periods between p_low and p_high:\ny_t^cycle = Σ b_k * y_t-k","parameters":"Where:\n- b_k = filter weights calculated from ideal band-pass filter\n- Weights are optimized to approximate the ideal filter in the frequency domain\n- For band-pass: 2π/p_high ≤ ω ≤ 2π/p_low\n- Asymmetric weights used at endpoints to handle real-time data\n\nThe filter minimizes the mean squared error between the ideal and approximate filter.","intuition":"Simple Explanation:\nImagine you want to focus only on price movements that repeat every 20 to 50 days, filtering out both long-term trends and daily noise. The CF filter is like adjustable earmuffs that let through only the \"frequencies\" you care about. The clever part is it works even when you're at the end of your data (like today's price) without needing to know future prices, unlike some filters that need data from both sides.","rawContent":"The Christiano-Fitzgerald (CF) filter is an asymmetric band-pass filter developed by Lawrence Christiano and Terry Fitzgerald in 2003. It extracts cyclical components within a specified frequency range while minimizing distortions at the endpoints of the data. Unlike symmetric filters that require future data, the CF filter is designed to work with real-time data by using optimal approximations at the boundaries, making it particularly useful for extracting business cycles from economic time series.\n\nMathematical Formula:\nThe CF filter extracts cycles with periods between p_low and p_high:\ny_t^cycle = Σ b_k * y_t-k\n\nWhere:\n- b_k = filter weights calculated from ideal band-pass filter\n- Weights are optimized to approximate the ideal filter in the frequency domain\n- For band-pass: 2π/p_high ≤ ω ≤ 2π/p_low\n- Asymmetric weights used at endpoints to handle real-time data\n\nThe filter minimizes the mean squared error between the ideal and approximate filter.\n\nSimple Explanation:\nImagine you want to focus only on price movements that repeat every 20 to 50 days, filtering out both long-term trends and daily noise. The CF filter is like adjustable earmuffs that let through only the \"frequencies\" you care about. The clever part is it works even when you're at the end of your data (like today's price) without needing to know future prices, unlike some filters that need data from both sides.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Christiano-Fitzgerald_Filter.txt","hasFullInfo":true},{"id":17,"title":"Dynamic Momentum Index (DMI) - Chande","filename":"Dynamic_Momentum_Index.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Chande - Volatility-adjusted RSI period","overview":"The Dynamic Momentum Index (DMI), developed by Tushar Chande and Stanley Kroll, is a variable-period RSI that adjusts its lookback period based on market volatility. Unlike standard RSI which uses a fixed 14-period lookback, DMI calculates the optimal period using recent volatility, typically measured by standard deviation. When volatility is high, DMI uses shorter periods (making it more sensitive). When volatility is low, it uses longer periods (making it smoother). This adaptation makes DMI more responsive during volatile conditions and less prone to false signals during quiet markets.","formula":"Mathematical Formula:\nVolatility calculation:\nV_t = StdDev(Close, n) over recent n periods\n\nTime Division (TD):\nTD = V_t / Average(V, m)\n\nDynamic Period:\nPeriod_t = round(14 / TD)\nPeriod_t = max(min(Period_t, 30), 5)  (bounded between 5 and 30)\n\nDMI = RSI(Close, Period_t)","parameters":"Where:\nRSI(Close, p) = 100 - [100 / (1 + RS)]\nRS = Average Gain / Average Loss over p periods\n\nTypical parameters: n=5 for volatility window, m=10 for average\n\nSimple Explanation:\nStandard RSI always looks back 14 periods, whether the market is wild or calm. DMI is smarter - it shortens the lookback when volatility spikes (so you get faster signals when things are moving) and lengthens it when markets are quiet (so you filter out noise better). It's like adjusting your car's sensitivity to the steering wheel based on road conditions: quick response on the highway, slower response in a parking lot. This makes DMI overbought/oversold signals more relevant to current market conditions.","intuition":"","rawContent":"The Dynamic Momentum Index (DMI), developed by Tushar Chande and Stanley Kroll, is a variable-period RSI that adjusts its lookback period based on market volatility. Unlike standard RSI which uses a fixed 14-period lookback, DMI calculates the optimal period using recent volatility, typically measured by standard deviation. When volatility is high, DMI uses shorter periods (making it more sensitive). When volatility is low, it uses longer periods (making it smoother). This adaptation makes DMI more responsive during volatile conditions and less prone to false signals during quiet markets.\n\nMathematical Formula:\nVolatility calculation:\nV_t = StdDev(Close, n) over recent n periods\n\nTime Division (TD):\nTD = V_t / Average(V, m)\n\nDynamic Period:\nPeriod_t = round(14 / TD)\nPeriod_t = max(min(Period_t, 30), 5)  (bounded between 5 and 30)\n\nDMI = RSI(Close, Period_t)\n\nWhere:\nRSI(Close, p) = 100 - [100 / (1 + RS)]\nRS = Average Gain / Average Loss over p periods\n\nTypical parameters: n=5 for volatility window, m=10 for average\n\nSimple Explanation:\nStandard RSI always looks back 14 periods, whether the market is wild or calm. DMI is smarter - it shortens the lookback when volatility spikes (so you get faster signals when things are moving) and lengthens it when markets are quiet (so you filter out noise better). It's like adjusting your car's sensitivity to the steering wheel based on road conditions: quick response on the highway, slower response in a parking lot. This makes DMI overbought/oversold signals more relevant to current market conditions.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Dynamic_Momentum_Index.txt","hasFullInfo":true},{"id":18,"title":"Ensemble Kalman Filter","filename":"Ensemble_Kalman_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Optimal state estimation for linear systems","overview":"The Ensemble Kalman Filter (EnKF) is a Monte Carlo approximation of the Kalman filter that represents the state distribution using an ensemble (set) of realizations rather than explicitly computing the covariance matrix. Developed by Geir Evensen in the 1990s, it's particularly valuable for high-dimensional systems where computing and storing full covariance matrices is computationally prohibitive. Each ensemble member evolves according to the system dynamics with added noise, and the ensemble statistics provide the required mean and covariance estimates.","formula":"Mathematical Formula:\nEnsemble representation (N members):\nX_t = [x_t^1, x_t^2, ..., x_t^N]\n\nForecast step:\nx_t|t-1^i = f(x_t-1^i) + w_t^i    for i = 1,...,N\n\nEnsemble mean and covariance:\nx̂_t|t-1 = (1/N) Σ x_t|t-1^i\nP_t|t-1 ≈ (1/(N-1)) Σ (x_t|t-1^i - x̂_t|t-1)(x_t|t-1^i - x̂_t|t-1)^T\n\nAnalysis step:\nKalman gain: K_t = P_t|t-1 * H^T * (H * P_t|t-1 * H^T + R)^-1\nx_t^i = x_t|t-1^i + K_t * (z_t + v_t^i - H * x_t|t-1^i)\n\nWhere v_t^i ~ N(0,R) are perturbed observations.\n\nSimple Explanation:\nInstead of tracking one \"best estimate\" and its uncertainty (like regular Kalman), EnKF runs many parallel scenarios - imagine 50 different versions of your trading model, each seeing slightly different data or making slightly different predictions. As new price data arrives, you update all 50 scenarios and use their spread to understand uncertainty. This is much more practical for complex systems with hundreds of variables, where traditional Kalman's math becomes impossibly expensive. You're essentially crowdsourcing the answer from your ensemble of models.","parameters":"","intuition":"","rawContent":"The Ensemble Kalman Filter (EnKF) is a Monte Carlo approximation of the Kalman filter that represents the state distribution using an ensemble (set) of realizations rather than explicitly computing the covariance matrix. Developed by Geir Evensen in the 1990s, it's particularly valuable for high-dimensional systems where computing and storing full covariance matrices is computationally prohibitive. Each ensemble member evolves according to the system dynamics with added noise, and the ensemble statistics provide the required mean and covariance estimates.\n\nMathematical Formula:\nEnsemble representation (N members):\nX_t = [x_t^1, x_t^2, ..., x_t^N]\n\nForecast step:\nx_t|t-1^i = f(x_t-1^i) + w_t^i    for i = 1,...,N\n\nEnsemble mean and covariance:\nx̂_t|t-1 = (1/N) Σ x_t|t-1^i\nP_t|t-1 ≈ (1/(N-1)) Σ (x_t|t-1^i - x̂_t|t-1)(x_t|t-1^i - x̂_t|t-1)^T\n\nAnalysis step:\nKalman gain: K_t = P_t|t-1 * H^T * (H * P_t|t-1 * H^T + R)^-1\nx_t^i = x_t|t-1^i + K_t * (z_t + v_t^i - H * x_t|t-1^i)\n\nWhere v_t^i ~ N(0,R) are perturbed observations.\n\nSimple Explanation:\nInstead of tracking one \"best estimate\" and its uncertainty (like regular Kalman), EnKF runs many parallel scenarios - imagine 50 different versions of your trading model, each seeing slightly different data or making slightly different predictions. As new price data arrives, you update all 50 scenarios and use their spread to understand uncertainty. This is much more practical for complex systems with hundreds of variables, where traditional Kalman's math becomes impossibly expensive. You're essentially crowdsourcing the answer from your ensemble of models.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 2/Ensemble_Kalman_Filter.txt","hasFullInfo":true},{"id":19,"title":"Extended Kalman Filter (EKF)","filename":"Extended_Kalman_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Optimal state estimation for linear systems","overview":"The Extended Kalman Filter (EKF) extends the standard Kalman filter to handle nonlinear systems by using first-order Taylor series linearization. At each time step, the EKF linearizes the nonlinear system around the current estimate, then applies standard Kalman filter equations to the linearized system. While not optimal like the standard Kalman filter, EKF provides good performance for many mildly nonlinear systems. It's widely used when system dynamics or measurement relationships are nonlinear, such as in navigation, robotics, and nonlinear financial models.","formula":"Mathematical Formula:\nNonlinear state-space model:\nx_t = f(x_t-1, u_t) + w_t\nz_t = h(x_t) + v_t\n\nWhere f(·) and h(·) are nonlinear functions.\n\nLinearization:\nF_t = ∂f/∂x |_{x̂_t-1|t-1}  (Jacobian of state transition)\nH_t = ∂h/∂x |_{x̂_t|t-1}    (Jacobian of measurement)\n\nPrediction:\nx̂_t|t-1 = f(x̂_t-1|t-1, u_t)\nP_t|t-1 = F_t * P_t-1|t-1 * F_t^T + Q_t\n\nUpdate:\nK_t = P_t|t-1 * H_t^T * (H_t * P_t|t-1 * H_t^T + R_t)^-1\nx̂_t|t = x̂_t|t-1 + K_t * (z_t - h(x̂_t|t-1))\nP_t|t = (I - K_t * H_t) * P_t|t-1","parameters":"","intuition":"Simple Explanation:\nThe regular Kalman filter assumes your system follows straight-line rules (linear). But what if your trend accelerates or price volatility changes exponentially? That's nonlinear. The EKF handles this by constantly drawing tangent lines to your curved system - at each moment, it approximates the curves as straight lines, applies regular Kalman filtering, then moves forward and draws new tangent lines. Think of it like navigating a winding road using a series of short straight segments, readjusting your direction at each step.","rawContent":"The Extended Kalman Filter (EKF) extends the standard Kalman filter to handle nonlinear systems by using first-order Taylor series linearization. At each time step, the EKF linearizes the nonlinear system around the current estimate, then applies standard Kalman filter equations to the linearized system. While not optimal like the standard Kalman filter, EKF provides good performance for many mildly nonlinear systems. It's widely used when system dynamics or measurement relationships are nonlinear, such as in navigation, robotics, and nonlinear financial models.\n\nMathematical Formula:\nNonlinear state-space model:\nx_t = f(x_t-1, u_t) + w_t\nz_t = h(x_t) + v_t\n\nWhere f(·) and h(·) are nonlinear functions.\n\nLinearization:\nF_t = ∂f/∂x |_{x̂_t-1|t-1}  (Jacobian of state transition)\nH_t = ∂h/∂x |_{x̂_t|t-1}    (Jacobian of measurement)\n\nPrediction:\nx̂_t|t-1 = f(x̂_t-1|t-1, u_t)\nP_t|t-1 = F_t * P_t-1|t-1 * F_t^T + Q_t\n\nUpdate:\nK_t = P_t|t-1 * H_t^T * (H_t * P_t|t-1 * H_t^T + R_t)^-1\nx̂_t|t = x̂_t|t-1 + K_t * (z_t - h(x̂_t|t-1))\nP_t|t = (I - K_t * H_t) * P_t|t-1\n\nSimple Explanation:\nThe regular Kalman filter assumes your system follows straight-line rules (linear). But what if your trend accelerates or price volatility changes exponentially? That's nonlinear. The EKF handles this by constantly drawing tangent lines to your curved system - at each moment, it approximates the curves as straight lines, applies regular Kalman filtering, then moves forward and draws new tangent lines. Think of it like navigating a winding road using a series of short straight segments, readjusting your direction at each step.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 2/Extended_Kalman_Filter.txt","hasFullInfo":true},{"id":20,"title":"FRAMA (Fractal Adaptive Moving Average)","filename":"FRAMA.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Fractal dimension-based adaptation","overview":"The Fractal Adaptive Moving Average (FRAMA) is an adaptive moving average developed by John Ehlers that adjusts its smoothing period based on the fractal dimension of price movement. Fractal dimension measures the complexity or \"roughness\" of the price path - ranging from 1 (straight line trend) to 2 (completely random walk). FRAMA becomes faster when price shows trending behavior (low fractal dimension) and slower when price is noisy or ranging (high fractal dimension), providing automatic adaptation to market structure.","formula":"Mathematical Formula:\nFractal Dimension (D):\nN1 = (Highest_High_first_half - Lowest_Low_first_half) / (n/2)\nN2 = (Highest_High_second_half - Lowest_Low_second_half) / (n/2)\nN3 = (Highest_High - Lowest_Low) / n\n\nD = (log(N1 + N2) - log(N3)) / log(2)\n\nAlpha (smoothing factor):\nα = exp(-4.6 * (D - 1))\nα = max(α, 0.01)  (lower bound)\nα = min(α, 1)      (upper bound)\n\nFRAMA:\nFRAMA_t = α * Price_t + (1 - α) * FRAMA_t-1\n\nWhere n = lookback period (typically 16 or 126)\n\nSimple Explanation:\nFRAMA measures how \"fractal\" or jagged the price path is. A smooth trending market has low fractal dimension (close to 1) - like a nearly straight line. A choppy market has high fractal dimension (close to 2) - like a squiggly, space-filling path. When FRAMA detects smooth trends, it reacts quickly to price changes. When it detects choppiness, it slows down to filter out noise. It's like having a moving average that automatically senses whether the market is trending or ranging and adjusts itself accordingly.","parameters":"","intuition":"","rawContent":"The Fractal Adaptive Moving Average (FRAMA) is an adaptive moving average developed by John Ehlers that adjusts its smoothing period based on the fractal dimension of price movement. Fractal dimension measures the complexity or \"roughness\" of the price path - ranging from 1 (straight line trend) to 2 (completely random walk). FRAMA becomes faster when price shows trending behavior (low fractal dimension) and slower when price is noisy or ranging (high fractal dimension), providing automatic adaptation to market structure.\n\nMathematical Formula:\nFractal Dimension (D):\nN1 = (Highest_High_first_half - Lowest_Low_first_half) / (n/2)\nN2 = (Highest_High_second_half - Lowest_Low_second_half) / (n/2)\nN3 = (Highest_High - Lowest_Low) / n\n\nD = (log(N1 + N2) - log(N3)) / log(2)\n\nAlpha (smoothing factor):\nα = exp(-4.6 * (D - 1))\nα = max(α, 0.01)  (lower bound)\nα = min(α, 1)      (upper bound)\n\nFRAMA:\nFRAMA_t = α * Price_t + (1 - α) * FRAMA_t-1\n\nWhere n = lookback period (typically 16 or 126)\n\nSimple Explanation:\nFRAMA measures how \"fractal\" or jagged the price path is. A smooth trending market has low fractal dimension (close to 1) - like a nearly straight line. A choppy market has high fractal dimension (close to 2) - like a squiggly, space-filling path. When FRAMA detects smooth trends, it reacts quickly to price changes. When it detects choppiness, it slows down to filter out noise. It's like having a moving average that automatically senses whether the market is trending or ranging and adjusts itself accordingly.","tags":["DSP Filtering","Entropy & Fractals","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 2/FRAMA.txt","hasFullInfo":true},{"id":21,"title":"Hamilton Regression Filter","filename":"Hamilton_Regression_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Alternative to HP filter without spurious dynamics","overview":"The Hamilton Regression Filter is an alternative to the Hodrick-Prescott filter proposed by economist James Hamilton in 2018. It addresses criticisms of the HP filter, particularly its tendency to create spurious dynamic relations and end-point problems. The Hamilton filter uses an OLS regression approach with lagged values to estimate the trend component, making it more reliable for real-time economic analysis and avoiding artificial cycles that the HP filter can introduce.","formula":"Mathematical Formula:\ny_t+h = β_0 + β_1*y_t + β_2*y_t-1 + β_3*y_t-2 + β_4*y_t-3 + ε_t+h","parameters":"Where:\n- y_t = observed value at time t\n- h = forecast horizon (typically 8 for quarterly data, 24 for monthly data)\n- β_0, β_1, β_2, β_3, β_4 = regression coefficients\n- ε_t+h = residual/cyclical component\n- Trend = fitted value from regression\n\nThe cyclical component is the difference between actual values and the regression-fitted trend.\n\nSimple Explanation:","intuition":"Think of the Hamilton filter as predicting where a price \"should be\" based on where it was recently, then calling the difference between reality and that prediction the \"cycle.\" Unlike the HP filter that can sometimes see patterns that aren't really there, Hamilton's method uses straightforward regression - it looks back at the last few data points and projects forward, making it less likely to fool itself with fake patterns.","rawContent":"The Hamilton Regression Filter is an alternative to the Hodrick-Prescott filter proposed by economist James Hamilton in 2018. It addresses criticisms of the HP filter, particularly its tendency to create spurious dynamic relations and end-point problems. The Hamilton filter uses an OLS regression approach with lagged values to estimate the trend component, making it more reliable for real-time economic analysis and avoiding artificial cycles that the HP filter can introduce.\n\nMathematical Formula:\ny_t+h = β_0 + β_1*y_t + β_2*y_t-1 + β_3*y_t-2 + β_4*y_t-3 + ε_t+h\n\nWhere:\n- y_t = observed value at time t\n- h = forecast horizon (typically 8 for quarterly data, 24 for monthly data)\n- β_0, β_1, β_2, β_3, β_4 = regression coefficients\n- ε_t+h = residual/cyclical component\n- Trend = fitted value from regression\n\nThe cyclical component is the difference between actual values and the regression-fitted trend.\n\nSimple Explanation:\nThink of the Hamilton filter as predicting where a price \"should be\" based on where it was recently, then calling the difference between reality and that prediction the \"cycle.\" Unlike the HP filter that can sometimes see patterns that aren't really there, Hamilton's method uses straightforward regression - it looks back at the last few data points and projects forward, making it less likely to fool itself with fake patterns.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Hamilton_Regression_Filter.txt","hasFullInfo":true},{"id":22,"title":"Harvey-Trimbur Model-Based Filter","filename":"Harvey-Trimbur_Model-Based_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Unobserved components model","overview":"The Harvey-Trimbur filter is a model-based approach to trend-cycle decomposition developed by Andrew Harvey and Thomas Trimbur. It uses unobserved components models within a state-space framework, allowing for flexible specification of trend and cycle properties. The model can incorporate stochastic trends, cycles with time-varying amplitude and frequency, and seasonal components. Estimation is typically done via maximum likelihood using the Kalman filter, providing optimal trend estimates based on the specified model structure.","formula":"Mathematical Formula:\nState-space representation:\ny_t = μ_t + ψ_t + ε_t    (observation equation)\n\nTrend: μ_t = μ_t-1 + β_t-1 + η_t\n        β_t = β_t-1 + ζ_t\n\nCycle: ψ_t = ρ[ψ_t-1 cos(λ) + ψ*_t-1 sin(λ)] + κ_t\n       ψ*_t = ρ[-ψ_t-1 sin(λ) + ψ*_t-1 cos(λ)] + κ*_t","parameters":"Where:\n- μ_t = trend level, β_t = trend slope\n- ψ_t = cyclical component with frequency λ and damping ρ\n- ε_t, η_t, ζ_t, κ_t = error terms with variances to be estimated\n\nSimple Explanation:\nImagine you're trying to separate a wiggly price chart into a smooth trend and repeating cycles, but you want to let the data tell you how smooth the trend should be and how strong the cycles are. The Harvey-Trimbur method builds a mathematical model where both the trend and cycles can evolve over time, then uses sophisticated estimation to figure out the best way to split your data based on that model. It's like having a flexible template that adapts to your specific data.","intuition":"","rawContent":"The Harvey-Trimbur filter is a model-based approach to trend-cycle decomposition developed by Andrew Harvey and Thomas Trimbur. It uses unobserved components models within a state-space framework, allowing for flexible specification of trend and cycle properties. The model can incorporate stochastic trends, cycles with time-varying amplitude and frequency, and seasonal components. Estimation is typically done via maximum likelihood using the Kalman filter, providing optimal trend estimates based on the specified model structure.\n\nMathematical Formula:\nState-space representation:\ny_t = μ_t + ψ_t + ε_t    (observation equation)\n\nTrend: μ_t = μ_t-1 + β_t-1 + η_t\n        β_t = β_t-1 + ζ_t\n\nCycle: ψ_t = ρ[ψ_t-1 cos(λ) + ψ*_t-1 sin(λ)] + κ_t\n       ψ*_t = ρ[-ψ_t-1 sin(λ) + ψ*_t-1 cos(λ)] + κ*_t\n\nWhere:\n- μ_t = trend level, β_t = trend slope\n- ψ_t = cyclical component with frequency λ and damping ρ\n- ε_t, η_t, ζ_t, κ_t = error terms with variances to be estimated\n\nSimple Explanation:\nImagine you're trying to separate a wiggly price chart into a smooth trend and repeating cycles, but you want to let the data tell you how smooth the trend should be and how strong the cycles are. The Harvey-Trimbur method builds a mathematical model where both the trend and cycles can evolve over time, then uses sophisticated estimation to figure out the best way to split your data based on that model. It's like having a flexible template that adapts to your specific data.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Harvey-Trimbur_Model-Based_Filter.txt","hasFullInfo":true},{"id":23,"title":"Henderson Moving Average","filename":"Henderson_Moving_Average.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Advanced Economic Filters","summary":"Weighted moving average for seasonal adjustment","overview":"The Henderson Moving Average is a weighted moving average specifically designed for seasonal adjustment and trend estimation, particularly used by statistical agencies like the U.S. Census Bureau. Developed by Robert Henderson, it applies asymmetric weights that give more weight to central observations and smoothly taper toward the ends. The weights are derived to minimize a weighted sum of squared third differences, producing very smooth trends while preserving turning points. Different term lengths (5, 7, 9, 13, 23 terms) are available for different smoothing needs.","formula":"Mathematical Formula:\nŷ_t = Σ(j=-m to m) w_j * y_t+j","parameters":"Where:\n- m = (n-1)/2 for n-term Henderson filter\n- w_j = Henderson weight for lag j\n\nHenderson weights derived from minimizing:\nΣ w_j = 1 (weights sum to one)\nMinimize: Σ(Δ^3 ŷ_t)^2 subject to polynomial reproduction\n\nCommon weights for 13-term Henderson (m=6):\nw_0 = 0.240, w_±1 = 0.214, w_±2 = 0.147, w_±3 = 0.066, w_±4 = -0.010, w_±5 = -0.028, w_±6 = -0.019\n\nSimple Explanation:","intuition":"Think of the Henderson average as a sophisticated way to smooth data that's specifically tuned for finding trends in economic data. Unlike a simple moving average where every day counts equally, Henderson gives the most weight to the middle of your window and smoothly reduces weight as you move toward the edges - like a bell curve of importance. This creates very smooth trends that still catch turning points well, which is why government agencies use it for official statistics.","rawContent":"The Henderson Moving Average is a weighted moving average specifically designed for seasonal adjustment and trend estimation, particularly used by statistical agencies like the U.S. Census Bureau. Developed by Robert Henderson, it applies asymmetric weights that give more weight to central observations and smoothly taper toward the ends. The weights are derived to minimize a weighted sum of squared third differences, producing very smooth trends while preserving turning points. Different term lengths (5, 7, 9, 13, 23 terms) are available for different smoothing needs.\n\nMathematical Formula:\nŷ_t = Σ(j=-m to m) w_j * y_t+j\n\nWhere:\n- m = (n-1)/2 for n-term Henderson filter\n- w_j = Henderson weight for lag j\n\nHenderson weights derived from minimizing:\nΣ w_j = 1 (weights sum to one)\nMinimize: Σ(Δ^3 ŷ_t)^2 subject to polynomial reproduction\n\nCommon weights for 13-term Henderson (m=6):\nw_0 = 0.240, w_±1 = 0.214, w_±2 = 0.147, w_±3 = 0.066, w_±4 = -0.010, w_±5 = -0.028, w_±6 = -0.019\n\nSimple Explanation:\nThink of the Henderson average as a sophisticated way to smooth data that's specifically tuned for finding trends in economic data. Unlike a simple moving average where every day counts equally, Henderson gives the most weight to the middle of your window and smoothly reduces weight as you move toward the edges - like a bell curve of importance. This creates very smooth trends that still catch turning points well, which is why government agencies use it for official statistics.","tags":["DSP Filtering","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 2/Henderson_Moving_Average.txt","hasFullInfo":true},{"id":24,"title":"Hodrick-Prescott Filter","filename":"Hodrick-Prescott_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Separates trend from cycle with smoothing parameter","overview":"The Hodrick-Prescott (HP) filter is a mathematical technique used to separate a time series into two components: a smooth long-term trend and short-term cyclical fluctuations. It was developed by economists Robert Hodrick and Edward Prescott in 1997 for analyzing business cycles. The filter uses a smoothing parameter (lambda) that controls the trade-off between fitting the data closely versus creating a smooth trend line.","formula":"Mathematical Formula:\nThe HP filter minimizes:\nSum of [(y_t - τ_t)^2] + λ * Sum of [(τ_t+1 - τ_t) - (τ_t - τ_t-1)]^2","parameters":"Where:\n- y_t = observed data at time t\n- τ_t = trend component at time t\n- λ = smoothing parameter (typically 1600 for quarterly data, 14400 for monthly data)\n\nThe first term measures how close the trend follows the data, while the second term penalizes variation in the growth rate of the trend.","intuition":"Simple Explanation:\nImagine you're looking at a stock price chart that zigzags all over the place. The HP filter helps you draw a smooth \"average path\" through all those ups and downs, separating what's the real long-term direction (trend) from the daily noise (cycles). The lambda parameter is like adjusting how tightly your smooth line hugs the bumpy data - higher lambda makes it smoother and ignores short-term wiggles more.","rawContent":"The Hodrick-Prescott (HP) filter is a mathematical technique used to separate a time series into two components: a smooth long-term trend and short-term cyclical fluctuations. It was developed by economists Robert Hodrick and Edward Prescott in 1997 for analyzing business cycles. The filter uses a smoothing parameter (lambda) that controls the trade-off between fitting the data closely versus creating a smooth trend line.\n\nMathematical Formula:\nThe HP filter minimizes:\nSum of [(y_t - τ_t)^2] + λ * Sum of [(τ_t+1 - τ_t) - (τ_t - τ_t-1)]^2\n\nWhere:\n- y_t = observed data at time t\n- τ_t = trend component at time t\n- λ = smoothing parameter (typically 1600 for quarterly data, 14400 for monthly data)\n\nThe first term measures how close the trend follows the data, while the second term penalizes variation in the growth rate of the trend.\n\nSimple Explanation:\nImagine you're looking at a stock price chart that zigzags all over the place. The HP filter helps you draw a smooth \"average path\" through all those ups and downs, separating what's the real long-term direction (trend) from the daily noise (cycles). The lambda parameter is like adjusting how tightly your smooth line hugs the bumpy data - higher lambda makes it smoother and ignores short-term wiggles more.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Hodrick-Prescott_Filter.txt","hasFullInfo":true},{"id":25,"title":"Inertia-Based Range Filter","filename":"Inertia-Based_Range_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Momentum-based adaptation","overview":"The Inertia-Based Range Filter is an adaptive filtering technique that incorporates momentum or \"inertia\" into range-based filtering decisions. It combines volatility measurement with directional momentum to create zones that adapt not just to volatility but also to the strength and persistence of price movement. When momentum is strong in one direction, the filter allows that directional movement to continue more easily (reduced resistance). When momentum weakens, the filter increases resistance to direction changes, reducing whipsaws during consolidation.","formula":"Mathematical Formula:\nInertia calculation:\nInertia_t = Σ(Price_t-i - Price_t-i-1) for i=0 to n-1\n\nOr using RVI (Relative Vigor Index):\nInertia_t = RVI_t = (Close - Open) / (High - Low)\n\nRange threshold:\nThreshold_t = BaseRange * (1 + k * |Inertia_t|)\n\nFilter update:\nIf Price_t > Filter_t-1 + Threshold_t:\n    Filter_t = Price_t - Threshold_t\nElse If Price_t < Filter_t-1 - Threshold_t:\n    Filter_t = Price_t + Threshold_t\nElse:\n    Filter_t = Filter_t-1","parameters":"Where:\n- k = inertia sensitivity factor\n- BaseRange = ATR or similar volatility measure","intuition":"Simple Explanation:\nThis filter acts like a ball rolling through price terrain. When the ball has strong momentum (inertia) in one direction, it takes less force to keep it moving that way, so the filter follows trends easily. When the ball slows down (low inertia), it takes more force to change direction, so the filter becomes more resistant to reversals. This prevents false signals during sideways markets (when there's no inertia) while staying responsive during strong trends (high inertia). It's momentum-aware noise filtering.","rawContent":"The Inertia-Based Range Filter is an adaptive filtering technique that incorporates momentum or \"inertia\" into range-based filtering decisions. It combines volatility measurement with directional momentum to create zones that adapt not just to volatility but also to the strength and persistence of price movement. When momentum is strong in one direction, the filter allows that directional movement to continue more easily (reduced resistance). When momentum weakens, the filter increases resistance to direction changes, reducing whipsaws during consolidation.\n\nMathematical Formula:\nInertia calculation:\nInertia_t = Σ(Price_t-i - Price_t-i-1) for i=0 to n-1\n\nOr using RVI (Relative Vigor Index):\nInertia_t = RVI_t = (Close - Open) / (High - Low)\n\nRange threshold:\nThreshold_t = BaseRange * (1 + k * |Inertia_t|)\n\nFilter update:\nIf Price_t > Filter_t-1 + Threshold_t:\n    Filter_t = Price_t - Threshold_t\nElse If Price_t < Filter_t-1 - Threshold_t:\n    Filter_t = Price_t + Threshold_t\nElse:\n    Filter_t = Filter_t-1\n\nWhere:\n- k = inertia sensitivity factor\n- BaseRange = ATR or similar volatility measure\n\nSimple Explanation:\nThis filter acts like a ball rolling through price terrain. When the ball has strong momentum (inertia) in one direction, it takes less force to keep it moving that way, so the filter follows trends easily. When the ball slows down (low inertia), it takes more force to change direction, so the filter becomes more resistant to reversals. This prevents false signals during sideways markets (when there's no inertia) while staying responsive during strong trends (high inertia). It's momentum-aware noise filtering.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Inertia-Based_Range_Filter.txt","hasFullInfo":true},{"id":26,"title":"Kalman Filter","filename":"Kalman_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Optimal state estimation for linear systems","overview":"The Kalman filter is an optimal recursive algorithm for estimating the state of a linear dynamic system from noisy measurements. Developed by Rudolf Kalman in 1960, it provides the best possible estimate (minimum mean squared error) when process and measurement noises are Gaussian. The filter operates in two steps: prediction (using system dynamics) and update (incorporating new measurements). It's widely used in navigation, control systems, and financial time series for tracking trends, estimating hidden variables, and filtering noise.","formula":"Mathematical Formula:\nState-space model:\nx_t = F_t * x_t-1 + B_t * u_t + w_t    (state equation)\nz_t = H_t * x_t + v_t                   (measurement equation)","parameters":"Where:\n- x_t = state vector, z_t = measurement\n- F_t = state transition matrix\n- H_t = observation matrix\n- w_t ~ N(0, Q_t) = process noise\n- v_t ~ N(0, R_t) = measurement noise\n\nPrediction:\nx̂_t|t-1 = F_t * x̂_t-1|t-1 + B_t * u_t\nP_t|t-1 = F_t * P_t-1|t-1 * F_t^T + Q_t\n\nUpdate:\nK_t = P_t|t-1 * H_t^T * (H_t * P_t|t-1 * H_t^T + R_t)^-1\nx̂_t|t = x̂_t|t-1 + K_t * (z_t - H_t * x̂_t|t-1)\nP_t|t = (I - K_t * H_t) * P_t|t-1\n\nSimple Explanation:\nImagine tracking a rocket with noisy radar - you have a model of how the rocket should move (physics) and noisy measurements of where it actually is. The Kalman filter combines both: it predicts where the rocket should be based on physics, gets the actual (noisy) measurement, then creates the best estimate by optimally weighing the prediction and measurement. In trading, replace \"rocket position\" with \"true price trend\" and \"radar\" with \"observed noisy prices.\" It's the mathematically optimal way to extract signal from noise when you have both a model and measurements.","intuition":"","rawContent":"The Kalman filter is an optimal recursive algorithm for estimating the state of a linear dynamic system from noisy measurements. Developed by Rudolf Kalman in 1960, it provides the best possible estimate (minimum mean squared error) when process and measurement noises are Gaussian. The filter operates in two steps: prediction (using system dynamics) and update (incorporating new measurements). It's widely used in navigation, control systems, and financial time series for tracking trends, estimating hidden variables, and filtering noise.\n\nMathematical Formula:\nState-space model:\nx_t = F_t * x_t-1 + B_t * u_t + w_t    (state equation)\nz_t = H_t * x_t + v_t                   (measurement equation)\n\nWhere:\n- x_t = state vector, z_t = measurement\n- F_t = state transition matrix\n- H_t = observation matrix\n- w_t ~ N(0, Q_t) = process noise\n- v_t ~ N(0, R_t) = measurement noise\n\nPrediction:\nx̂_t|t-1 = F_t * x̂_t-1|t-1 + B_t * u_t\nP_t|t-1 = F_t * P_t-1|t-1 * F_t^T + Q_t\n\nUpdate:\nK_t = P_t|t-1 * H_t^T * (H_t * P_t|t-1 * H_t^T + R_t)^-1\nx̂_t|t = x̂_t|t-1 + K_t * (z_t - H_t * x̂_t|t-1)\nP_t|t = (I - K_t * H_t) * P_t|t-1\n\nSimple Explanation:\nImagine tracking a rocket with noisy radar - you have a model of how the rocket should move (physics) and noisy measurements of where it actually is. The Kalman filter combines both: it predicts where the rocket should be based on physics, gets the actual (noisy) measurement, then creates the best estimate by optimally weighing the prediction and measurement. In trading, replace \"rocket position\" with \"true price trend\" and \"radar\" with \"observed noisy prices.\" It's the mathematically optimal way to extract signal from noise when you have both a model and measurements.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 2/Kalman_Filter.txt","hasFullInfo":true},{"id":27,"title":"KAMA (Kaufman's Adaptive Moving Average)","filename":"KAMA.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Efficiency ratio-based adaptation","overview":"Kaufman's Adaptive Moving Average (KAMA) is a moving average that automatically adjusts its smoothing constant based on market efficiency. Developed by Perry Kaufman, KAMA uses the Efficiency Ratio (ER) to measure how much directional movement exists relative to total volatility. When prices trend strongly (high efficiency), KAMA becomes faster and more responsive. When prices are choppy (low efficiency), KAMA becomes slower to reduce whipsaws. This adaptive behavior makes it superior to fixed-period moving averages in varying market conditions.","formula":"Mathematical Formula:\nEfficiency Ratio (ER):\nER = |Price_change| / Σ|Price_i - Price_i-1|\n   = |Close - Close_n| / Σ_{i=1}^n |Close_i - Close_i-1|\n\nSmoothing Constant (SC):\nSC = [ER * (fastest - slowest) + slowest]^2","parameters":"Where:\n- fastest = 2/(fast_period + 1)  (typically 2/3 for period=2)\n- slowest = 2/(slow_period + 1)  (typically 2/31 for period=30)\n\nKAMA calculation:\nKAMA_t = KAMA_t-1 + SC * (Price_t - KAMA_t-1)","intuition":"Simple Explanation:\nKAMA is a smart moving average that speeds up during trends and slows down during choppy markets. It measures \"efficiency\" - if price moved up $10 but wiggled $100 along the way, that's low efficiency (10/100=10%). High efficiency means price moved in one direction without much back-and-forth. When efficiency is high, KAMA acts like a fast moving average to catch the trend quickly. When efficiency is low, it acts like a slow moving average to avoid getting faked out by noise. It's like a car's adaptive cruise control for market analysis.","rawContent":"Kaufman's Adaptive Moving Average (KAMA) is a moving average that automatically adjusts its smoothing constant based on market efficiency. Developed by Perry Kaufman, KAMA uses the Efficiency Ratio (ER) to measure how much directional movement exists relative to total volatility. When prices trend strongly (high efficiency), KAMA becomes faster and more responsive. When prices are choppy (low efficiency), KAMA becomes slower to reduce whipsaws. This adaptive behavior makes it superior to fixed-period moving averages in varying market conditions.\n\nMathematical Formula:\nEfficiency Ratio (ER):\nER = |Price_change| / Σ|Price_i - Price_i-1|\n   = |Close - Close_n| / Σ_{i=1}^n |Close_i - Close_i-1|\n\nSmoothing Constant (SC):\nSC = [ER * (fastest - slowest) + slowest]^2\n\nWhere:\n- fastest = 2/(fast_period + 1)  (typically 2/3 for period=2)\n- slowest = 2/(slow_period + 1)  (typically 2/31 for period=30)\n\nKAMA calculation:\nKAMA_t = KAMA_t-1 + SC * (Price_t - KAMA_t-1)\n\nSimple Explanation:\nKAMA is a smart moving average that speeds up during trends and slows down during choppy markets. It measures \"efficiency\" - if price moved up $10 but wiggled $100 along the way, that's low efficiency (10/100=10%). High efficiency means price moved in one direction without much back-and-forth. When efficiency is high, KAMA acts like a fast moving average to catch the trend quickly. When efficiency is low, it acts like a slow moving average to avoid getting faked out by noise. It's like a car's adaptive cruise control for market analysis.","tags":["DSP Filtering","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 2/KAMA.txt","hasFullInfo":true},{"id":28,"title":"Leser Filter","filename":"Leser_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Advanced Economic Filters","summary":"Polynomial trend fitting","overview":"The Leser filter is a polynomial trend-fitting technique developed by C.E.V. Leser for extracting smooth trends from time series data. It fits low-degree polynomials (typically quadratic or cubic) to moving windows of data, creating a smoothed trend estimate. The method is similar to locally weighted regression but uses unweighted polynomial fits. It's particularly useful for handling data with changing slopes or curvature, as the polynomial can adapt to local characteristics of the trend.","formula":"Mathematical Formula:\nFor each time point t, fit a polynomial over a window [t-k, t+k]:\nP(x) = a_0 + a_1*x + a_2*x^2 + ... + a_d*x^d\n\nMinimize within window: Σ(y_i - P(i))^2","parameters":"Where:\n- d = polynomial degree (typically 2 or 3)\n- k = half-window width\n- Trend estimate at t: ŷ_t = P(t)\n- Coefficients a_0, a_1, ... found by least squares\n\nFor quadratic (d=2):\nŷ_t = a_0 + a_1*t + a_2*t^2\n\nSimple Explanation:","intuition":"Think of looking at a small section of your price chart and fitting a curved line through just those points, then using that curve's value at the middle as your smoothed estimate. The Leser filter does this for every point - it slides a window along your data, fits a curve (like a parabola) to each window, and takes the middle value. This means the smooth trend can curve and change direction naturally, following the local shape of your data rather than forcing one straight line through everything.","rawContent":"The Leser filter is a polynomial trend-fitting technique developed by C.E.V. Leser for extracting smooth trends from time series data. It fits low-degree polynomials (typically quadratic or cubic) to moving windows of data, creating a smoothed trend estimate. The method is similar to locally weighted regression but uses unweighted polynomial fits. It's particularly useful for handling data with changing slopes or curvature, as the polynomial can adapt to local characteristics of the trend.\n\nMathematical Formula:\nFor each time point t, fit a polynomial over a window [t-k, t+k]:\nP(x) = a_0 + a_1*x + a_2*x^2 + ... + a_d*x^d\n\nMinimize within window: Σ(y_i - P(i))^2\n\nWhere:\n- d = polynomial degree (typically 2 or 3)\n- k = half-window width\n- Trend estimate at t: ŷ_t = P(t)\n- Coefficients a_0, a_1, ... found by least squares\n\nFor quadratic (d=2):\nŷ_t = a_0 + a_1*t + a_2*t^2\n\nSimple Explanation:\nThink of looking at a small section of your price chart and fitting a curved line through just those points, then using that curve's value at the middle as your smoothed estimate. The Leser filter does this for every point - it slides a window along your data, fits a curve (like a parabola) to each window, and takes the middle value. This means the smooth trend can curve and change direction naturally, following the local shape of your data rather than forcing one straight line through everything.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Leser_Filter.txt","hasFullInfo":true},{"id":29,"title":"LMS (Least Mean Squares) Filter","filename":"LMS_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Least Mean Squares Family","summary":"Basic adaptive filtering","overview":"The Least Mean Squares (LMS) filter is a fundamental adaptive filtering algorithm that iteratively adjusts filter coefficients to minimize the mean squared error. Developed by Bernard Widrow and Ted Hoff in 1960, it's one of the most widely used adaptive algorithms due to its simplicity and robustness. The LMS algorithm uses a gradient descent approach to update filter weights, requiring only the current input, output, and error. It's particularly valuable in non-stationary environments where optimal filter characteristics change over time.","formula":"Mathematical Formula:\nWeight update equation:\nw_t+1 = w_t + μ * e_t * x_t","parameters":"Where:\n- w_t = weight vector at time t [w_0, w_1, ..., w_N]\n- x_t = input vector [x_t, x_t-1, ..., x_t-N]\n- e_t = error signal = d_t - ŷ_t\n- ŷ_t = filter output = w_t^T * x_t\n- d_t = desired output\n- μ = step size (learning rate), 0 < μ < 2/λ_max\n- λ_max = largest eigenvalue of input autocorrelation matrix\n\nOutput prediction: ŷ_t = Σ(i=0 to N) w_i * x_t-i","intuition":"Simple Explanation:\nImagine you're trying to predict tomorrow's price using the last few days. LMS is like a student learning from mistakes - after each prediction, it checks how far off it was and adjusts its strategy (weights) a bit in the direction that would have made a better prediction. The step size (μ) controls how big those adjustments are: too small and it learns slowly, too big and it might overcorrect and become unstable. Over time, it adapts to changing market conditions automatically.","rawContent":"The Least Mean Squares (LMS) filter is a fundamental adaptive filtering algorithm that iteratively adjusts filter coefficients to minimize the mean squared error. Developed by Bernard Widrow and Ted Hoff in 1960, it's one of the most widely used adaptive algorithms due to its simplicity and robustness. The LMS algorithm uses a gradient descent approach to update filter weights, requiring only the current input, output, and error. It's particularly valuable in non-stationary environments where optimal filter characteristics change over time.\n\nMathematical Formula:\nWeight update equation:\nw_t+1 = w_t + μ * e_t * x_t\n\nWhere:\n- w_t = weight vector at time t [w_0, w_1, ..., w_N]\n- x_t = input vector [x_t, x_t-1, ..., x_t-N]\n- e_t = error signal = d_t - ŷ_t\n- ŷ_t = filter output = w_t^T * x_t\n- d_t = desired output\n- μ = step size (learning rate), 0 < μ < 2/λ_max\n- λ_max = largest eigenvalue of input autocorrelation matrix\n\nOutput prediction: ŷ_t = Σ(i=0 to N) w_i * x_t-i\n\nSimple Explanation:\nImagine you're trying to predict tomorrow's price using the last few days. LMS is like a student learning from mistakes - after each prediction, it checks how far off it was and adjusts its strategy (weights) a bit in the direction that would have made a better prediction. The step size (μ) controls how big those adjustments are: too small and it learns slowly, too big and it might overcorrect and become unstable. Over time, it adapts to changing market conditions automatically.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/LMS_Filter.txt","hasFullInfo":true},{"id":30,"title":"MAMA/FAMA (MESA Adaptive Moving Average)","filename":"MAMA_FAMA.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Hilbert transform-based","overview":"MESA Adaptive Moving Average (MAMA) and its companion Following Adaptive Moving Average (FAMA) are indicators developed by John Ehlers that adapt to the dominant market cycle using Hilbert Transform techniques. MAMA uses the instantaneous phase rate of change to determine the current market cycle period, then adjusts its smoothing accordingly. FAMA is a slower adaptive average that follows MAMA. Crossovers between MAMA and FAMA generate trading signals, while their adaptive nature reduces whipsaws in choppy markets and maintains responsiveness in trends.","formula":"Mathematical Formula:\nPhase calculation (Hilbert Transform):\nInPhase_t and Quadrature_t from Hilbert Transform\n\nPhase = arctan(Quadrature / InPhase)\nΔPhase = Phase_t - Phase_t-1\n\nPeriod = 360 / ΔPhase\n\nAlpha (adaptation):\nFastLimit = 2/(FastPeriod + 1)\nSlowLimit = 2/(SlowPeriod + 1)\nα = FastLimit / Period\nα = max(α, SlowLimit)\n\nMAMA:\nMAMA_t = α * Price_t + (1 - α) * MAMA_t-1\n\nFAMA:\nFAMA_t = 0.5 * α * MAMA_t + (1 - 0.5 * α) * FAMA_t-1\n\nSimple Explanation:\nMAMA uses sophisticated math (Hilbert Transform) to detect the current dominant cycle in the market - how long it takes for price patterns to repeat. Once it knows the cycle length, it adjusts its smoothing to match: fast smoothing for short cycles, slow smoothing for long cycles. FAMA is a slower companion that follows MAMA. When MAMA crosses above FAMA, it's a buy signal; when below, it's a sell signal. The adaptive behavior means fewer false signals in choppy markets compared to fixed-period moving average crossovers.","parameters":"","intuition":"","rawContent":"MESA Adaptive Moving Average (MAMA) and its companion Following Adaptive Moving Average (FAMA) are indicators developed by John Ehlers that adapt to the dominant market cycle using Hilbert Transform techniques. MAMA uses the instantaneous phase rate of change to determine the current market cycle period, then adjusts its smoothing accordingly. FAMA is a slower adaptive average that follows MAMA. Crossovers between MAMA and FAMA generate trading signals, while their adaptive nature reduces whipsaws in choppy markets and maintains responsiveness in trends.\n\nMathematical Formula:\nPhase calculation (Hilbert Transform):\nInPhase_t and Quadrature_t from Hilbert Transform\n\nPhase = arctan(Quadrature / InPhase)\nΔPhase = Phase_t - Phase_t-1\n\nPeriod = 360 / ΔPhase\n\nAlpha (adaptation):\nFastLimit = 2/(FastPeriod + 1)\nSlowLimit = 2/(SlowPeriod + 1)\nα = FastLimit / Period\nα = max(α, SlowLimit)\n\nMAMA:\nMAMA_t = α * Price_t + (1 - α) * MAMA_t-1\n\nFAMA:\nFAMA_t = 0.5 * α * MAMA_t + (1 - 0.5 * α) * FAMA_t-1\n\nSimple Explanation:\nMAMA uses sophisticated math (Hilbert Transform) to detect the current dominant cycle in the market - how long it takes for price patterns to repeat. Once it knows the cycle length, it adjusts its smoothing to match: fast smoothing for short cycles, slow smoothing for long cycles. FAMA is a slower companion that follows MAMA. When MAMA crosses above FAMA, it's a buy signal; when below, it's a sell signal. The adaptive behavior means fewer false signals in choppy markets compared to fixed-period moving average crossovers.","tags":["DSP Filtering","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 2/MAMA_FAMA.txt","hasFullInfo":true},{"id":31,"title":"Musgrave Asymmetric Filter","filename":"Musgrave_Asymmetric_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Advanced Economic Filters","summary":"End-point problem solution","overview":"The Musgrave asymmetric filter addresses the end-point problem in symmetric moving average filters. Developed by John Musgrave, it provides asymmetric filter weights for observations near the beginning and end of a time series where symmetric filters cannot be applied. The Musgrave filter is designed to minimize revisions to trend estimates as new data arrives, making it valuable for real-time economic analysis and nowcasting. It's commonly used in conjunction with Henderson moving averages for official seasonal adjustment.","formula":"Mathematical Formula:\nFor symmetric filter: ŷ_t = Σ(j=-m to m) w_j * y_t+j\n\nAt endpoints (where symmetric filter impossible), use asymmetric weights:\nŷ_t = Σ(j=-m to r) v_j * y_t+j","parameters":"Where:\n- r < m (reduced forward reach near end of series)\n- v_j = Musgrave asymmetric weights\n- Weights derived to minimize: E[(ŷ_t - T_t)^2]\n- Subject to: polynomial preservation, weight sum = 1\n\nWeights designed to approximate the symmetric filter's properties while using only available data.\n\nSimple Explanation:\nImagine you're using a moving average that normally looks at 6 points before and 6 points after each data point. But what about the last 6 points in your data - you can't look forward because there's no future data yet! The Musgrave filter solves this by creating special weights for these end points that try to give you the same quality of smoothing even though you can only look backward. It's like having a backup plan for when your regular filter runs out of data.","intuition":"","rawContent":"The Musgrave asymmetric filter addresses the end-point problem in symmetric moving average filters. Developed by John Musgrave, it provides asymmetric filter weights for observations near the beginning and end of a time series where symmetric filters cannot be applied. The Musgrave filter is designed to minimize revisions to trend estimates as new data arrives, making it valuable for real-time economic analysis and nowcasting. It's commonly used in conjunction with Henderson moving averages for official seasonal adjustment.\n\nMathematical Formula:\nFor symmetric filter: ŷ_t = Σ(j=-m to m) w_j * y_t+j\n\nAt endpoints (where symmetric filter impossible), use asymmetric weights:\nŷ_t = Σ(j=-m to r) v_j * y_t+j\n\nWhere:\n- r < m (reduced forward reach near end of series)\n- v_j = Musgrave asymmetric weights\n- Weights derived to minimize: E[(ŷ_t - T_t)^2]\n- Subject to: polynomial preservation, weight sum = 1\n\nWeights designed to approximate the symmetric filter's properties while using only available data.\n\nSimple Explanation:\nImagine you're using a moving average that normally looks at 6 points before and 6 points after each data point. But what about the last 6 points in your data - you can't look forward because there's no future data yet! The Musgrave filter solves this by creating special weights for these end points that try to give you the same quality of smoothing even though you can only look backward. It's like having a backup plan for when your regular filter runs out of data.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Musgrave_Asymmetric_Filter.txt","hasFullInfo":true},{"id":32,"title":"NLMS (Normalized Least Mean Squares) Filter","filename":"NLMS_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Least Mean Squares Family","summary":"Normalized adaptive filter","overview":"The Normalized Least Mean Squares (NLMS) filter is an adaptive filtering algorithm that adjusts its coefficients to minimize the mean squared error between the filter output and a desired signal. It's a variant of the basic LMS algorithm with normalization of the step size by the input signal power, which provides more stable convergence and better performance when input signal power varies over time. NLMS is widely used in noise cancellation, echo cancellation, and adaptive prediction in financial time series.","formula":"Mathematical Formula:\nWeight update equation:\nw_t+1 = w_t + μ/(ε + ||x_t||^2) * e_t * x_t","parameters":"Where:\n- w_t = weight vector at time t\n- x_t = input vector at time t\n- e_t = error = d_t - w_t^T * x_t\n- d_t = desired output\n- μ = step size parameter (0 < μ < 2)\n- ε = small constant to prevent division by zero\n- ||x_t||^2 = x_t^T * x_t = power of input\n\nOutput: ŷ_t = w_t^T * x_t\n\nSimple Explanation:","intuition":"Think of NLMS as a smart filter that learns the best way to predict your next data point based on recent history. It constantly adjusts its internal \"recipe\" (weights) based on how wrong its last prediction was. The \"normalized\" part means it scales its learning rate based on how big the recent signals are - if prices are volatile, it takes smaller adjustment steps to avoid overreacting. It's like a student who learns from mistakes but adjusts how much to change based on how noisy the test was.","rawContent":"The Normalized Least Mean Squares (NLMS) filter is an adaptive filtering algorithm that adjusts its coefficients to minimize the mean squared error between the filter output and a desired signal. It's a variant of the basic LMS algorithm with normalization of the step size by the input signal power, which provides more stable convergence and better performance when input signal power varies over time. NLMS is widely used in noise cancellation, echo cancellation, and adaptive prediction in financial time series.\n\nMathematical Formula:\nWeight update equation:\nw_t+1 = w_t + μ/(ε + ||x_t||^2) * e_t * x_t\n\nWhere:\n- w_t = weight vector at time t\n- x_t = input vector at time t\n- e_t = error = d_t - w_t^T * x_t\n- d_t = desired output\n- μ = step size parameter (0 < μ < 2)\n- ε = small constant to prevent division by zero\n- ||x_t||^2 = x_t^T * x_t = power of input\n\nOutput: ŷ_t = w_t^T * x_t\n\nSimple Explanation:\nThink of NLMS as a smart filter that learns the best way to predict your next data point based on recent history. It constantly adjusts its internal \"recipe\" (weights) based on how wrong its last prediction was. The \"normalized\" part means it scales its learning rate based on how big the recent signals are - if prices are volatile, it takes smaller adjustment steps to avoid overreacting. It's like a student who learns from mistakes but adjusts how much to change based on how noisy the test was.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/NLMS_Filter.txt","hasFullInfo":true},{"id":33,"title":"Particle Filter (Sequential Monte Carlo)","filename":"Particle_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Nonlinear/non-Gaussian filtering","overview":"The Particle Filter, also known as Sequential Monte Carlo, is a recursive Bayesian filter that represents the posterior distribution using a set of weighted random samples (particles). Unlike Kalman filters, it can handle highly nonlinear and non-Gaussian systems. Each particle represents a possible state with an associated weight indicating its likelihood given observations. The algorithm involves prediction (particles evolve according to system dynamics), update (weights adjusted based on measurement likelihood), and resampling (particles with low weights replaced by those with high weights).","formula":"Mathematical Formula:\nParticle representation:\n{x_t^i, w_t^i}_{i=1}^N\n\nPrediction:\nx_t^i ~ p(x_t | x_t-1^i)  (sample from state transition)\n\nUpdate (importance weights):\nw_t^i ∝ w_t-1^i * p(z_t | x_t^i)\n\nNormalize: w_t^i = w_t^i / Σ_j w_t^j\n\nState estimate:\nx̂_t = Σ w_t^i * x_t^i\n\nResampling (when effective sample size low):\nN_eff = 1 / Σ(w_t^i)^2\nIf N_eff < threshold: resample particles proportional to weights\n\nSimple Explanation:\nImagine throwing 1000 darts at a dartboard where each dart represents a possible \"true state\" of the market. Initially they're spread randomly. As price data comes in, you weight each dart by how well its assumed state explains what you observed - darts in likely areas get heavy weights, unlikely ones get tiny weights. Your estimate is the weighted average of all darts. Periodically, you throw away the low-weight darts and replace them with copies of high-weight darts (resampling), concentrating your \"guesses\" in promising areas. This works even when the system is crazy nonlinear or has weird probability distributions.","parameters":"","intuition":"","rawContent":"The Particle Filter, also known as Sequential Monte Carlo, is a recursive Bayesian filter that represents the posterior distribution using a set of weighted random samples (particles). Unlike Kalman filters, it can handle highly nonlinear and non-Gaussian systems. Each particle represents a possible state with an associated weight indicating its likelihood given observations. The algorithm involves prediction (particles evolve according to system dynamics), update (weights adjusted based on measurement likelihood), and resampling (particles with low weights replaced by those with high weights).\n\nMathematical Formula:\nParticle representation:\n{x_t^i, w_t^i}_{i=1}^N\n\nPrediction:\nx_t^i ~ p(x_t | x_t-1^i)  (sample from state transition)\n\nUpdate (importance weights):\nw_t^i ∝ w_t-1^i * p(z_t | x_t^i)\n\nNormalize: w_t^i = w_t^i / Σ_j w_t^j\n\nState estimate:\nx̂_t = Σ w_t^i * x_t^i\n\nResampling (when effective sample size low):\nN_eff = 1 / Σ(w_t^i)^2\nIf N_eff < threshold: resample particles proportional to weights\n\nSimple Explanation:\nImagine throwing 1000 darts at a dartboard where each dart represents a possible \"true state\" of the market. Initially they're spread randomly. As price data comes in, you weight each dart by how well its assumed state explains what you observed - darts in likely areas get heavy weights, unlikely ones get tiny weights. Your estimate is the weighted average of all darts. Periodically, you throw away the low-weight darts and replace them with copies of high-weight darts (resampling), concentrating your \"guesses\" in promising areas. This works even when the system is crazy nonlinear or has weird probability distributions.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Particle_Filter.txt","hasFullInfo":true},{"id":34,"title":"Pollock Rational Square Wave Filter","filename":"Pollock_Rational_Square_Wave_Filter.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Trend-Cycle Decomposition","summary":"Frequency domain filtering","overview":"The Pollock Rational Square Wave filter is a frequency-domain filtering technique developed by D.S.G. Pollock for extracting trend and cyclical components from time series. It uses rational transfer functions in the frequency domain to achieve ideal filtering characteristics. The filter can be designed as low-pass (trend extraction), high-pass (detrending), or band-pass (cycle extraction) and offers precise control over the frequency response. Implementation typically involves Fourier transforms or recursive difference equations.","formula":"Mathematical Formula:\nFrequency domain transfer function:\nH(ω) = A(ω) / B(ω)","parameters":"Where:\n- A(ω), B(ω) = polynomials in exp(iω)\n- For low-pass (trend): H(ω) ≈ 1 for low ω, ≈ 0 for high ω\n- For band-pass (cycle): H(ω) ≈ 1 for ω_low < ω < ω_high\n\nTime domain implementation:\nB(L)y_t^filtered = A(L)y_t\n\nWhere L is the lag operator and A(L), B(L) are polynomial lag operators derived from the frequency response.\n\nSimple Explanation:","intuition":"Think of your price data as being made up of different \"notes\" or frequencies - slow-moving trends are like low bass notes, fast wiggles are like high-pitched sounds. The Pollock filter lets you design a precise \"equalizer\" that keeps exactly the frequencies you want (like only medium-tempo cycles) and removes everything else. It works in the \"frequency world\" where it's easier to see and control these different speeds of movement, then converts back to regular time-based data.","rawContent":"The Pollock Rational Square Wave filter is a frequency-domain filtering technique developed by D.S.G. Pollock for extracting trend and cyclical components from time series. It uses rational transfer functions in the frequency domain to achieve ideal filtering characteristics. The filter can be designed as low-pass (trend extraction), high-pass (detrending), or band-pass (cycle extraction) and offers precise control over the frequency response. Implementation typically involves Fourier transforms or recursive difference equations.\n\nMathematical Formula:\nFrequency domain transfer function:\nH(ω) = A(ω) / B(ω)\n\nWhere:\n- A(ω), B(ω) = polynomials in exp(iω)\n- For low-pass (trend): H(ω) ≈ 1 for low ω, ≈ 0 for high ω\n- For band-pass (cycle): H(ω) ≈ 1 for ω_low < ω < ω_high\n\nTime domain implementation:\nB(L)y_t^filtered = A(L)y_t\n\nWhere L is the lag operator and A(L), B(L) are polynomial lag operators derived from the frequency response.\n\nSimple Explanation:\nThink of your price data as being made up of different \"notes\" or frequencies - slow-moving trends are like low bass notes, fast wiggles are like high-pitched sounds. The Pollock filter lets you design a precise \"equalizer\" that keeps exactly the frequencies you want (like only medium-tempo cycles) and removes everything else. It works in the \"frequency world\" where it's easier to see and control these different speeds of movement, then converts back to regular time-based data.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Pollock_Rational_Square_Wave_Filter.txt","hasFullInfo":true},{"id":35,"title":"RLS (Recursive Least Squares) Filter","filename":"RLS_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Least Mean Squares Family","summary":"Fast convergence adaptive filter","overview":"The Recursive Least Squares (RLS) filter is an adaptive algorithm that provides faster convergence than LMS by using all past data with exponential weighting. It minimizes a weighted sum of squared errors, giving more recent data higher weight through a forgetting factor. RLS maintains an estimate of the inverse correlation matrix, allowing it to adapt quickly to changing conditions. While more computationally intensive than LMS, RLS converges much faster (typically N iterations vs. 10N for LMS, where N is filter length).","formula":"Mathematical Formula:\nInnovation: α_t = d_t - w_t-1^T * x_t\nGain vector: g_t = (P_t-1 * x_t) / (λ + x_t^T * P_t-1 * x_t)\nWeight update: w_t = w_t-1 + g_t * α_t\nCovariance update: P_t = (1/λ) * [P_t-1 - g_t * x_t^T * P_t-1]","parameters":"Where:\n- w_t = weight vector\n- x_t = input vector\n- d_t = desired output\n- P_t = inverse correlation matrix estimate\n- λ = forgetting factor (0.95 to 0.999, larger = more memory)\n- g_t = Kalman gain\n\nInitialize: P_0 = δ^-1 * I (δ small, like 0.01)","intuition":"Simple Explanation:\nRLS is like LMS's smarter, faster-learning cousin. While LMS adjusts weights based only on the current error, RLS keeps track of the entire history of errors (with recent ones counting more) and uses that bigger picture to make better weight updates. It's like having a detailed notebook of all your past trading mistakes versus just remembering yesterday - you learn the right lesson much faster. The trade-off is it takes more computational effort to maintain that \"notebook\" (the P matrix).","rawContent":"The Recursive Least Squares (RLS) filter is an adaptive algorithm that provides faster convergence than LMS by using all past data with exponential weighting. It minimizes a weighted sum of squared errors, giving more recent data higher weight through a forgetting factor. RLS maintains an estimate of the inverse correlation matrix, allowing it to adapt quickly to changing conditions. While more computationally intensive than LMS, RLS converges much faster (typically N iterations vs. 10N for LMS, where N is filter length).\n\nMathematical Formula:\nInnovation: α_t = d_t - w_t-1^T * x_t\nGain vector: g_t = (P_t-1 * x_t) / (λ + x_t^T * P_t-1 * x_t)\nWeight update: w_t = w_t-1 + g_t * α_t\nCovariance update: P_t = (1/λ) * [P_t-1 - g_t * x_t^T * P_t-1]\n\nWhere:\n- w_t = weight vector\n- x_t = input vector\n- d_t = desired output\n- P_t = inverse correlation matrix estimate\n- λ = forgetting factor (0.95 to 0.999, larger = more memory)\n- g_t = Kalman gain\n\nInitialize: P_0 = δ^-1 * I (δ small, like 0.01)\n\nSimple Explanation:\nRLS is like LMS's smarter, faster-learning cousin. While LMS adjusts weights based only on the current error, RLS keeps track of the entire history of errors (with recent ones counting more) and uses that bigger picture to make better weight updates. It's like having a detailed notebook of all your past trading mistakes versus just remembering yesterday - you learn the right lesson much faster. The trade-off is it takes more computational effort to maintain that \"notebook\" (the P matrix).","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/RLS_Filter.txt","hasFullInfo":true},{"id":36,"title":"Sign-Error LMS Filter","filename":"Sign-Error_LMS_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Least Mean Squares Family","summary":"Robust adaptive filtering","overview":"The Sign-Error LMS is a robust variant of the LMS algorithm that uses only the sign (positive or negative) of the error signal for weight updates, rather than the error magnitude. This modification reduces computational complexity and provides robustness against large error outliers or impulsive noise. The algorithm sacrifices some convergence speed for improved stability in noisy environments and requires fewer bits for implementation in hardware. It's particularly useful when error measurements are unreliable or when dealing with heavy-tailed noise distributions.","formula":"Mathematical Formula:\nWeight update equation:\nw_t+1 = w_t + μ * sign(e_t) * x_t","parameters":"Where:\n- sign(e_t) = +1 if e_t > 0\n            = -1 if e_t < 0\n            = 0 if e_t = 0\n- e_t = d_t - w_t^T * x_t (error)\n- μ = step size parameter\n- x_t = input vector\n- w_t = weight vector\n\nOutput: ŷ_t = w_t^T * x_t\n\nThe key difference from standard LMS: error magnitude is ignored, only direction matters.","intuition":"Simple Explanation:\nRegular LMS says \"you were off by $5, so make a big adjustment\" or \"you were off by $0.10, so make a tiny adjustment.\" Sign-Error LMS simplifies this to just \"you were too high, adjust down\" or \"you were too low, adjust up\" - the amount doesn't matter. This makes it more resistant to wild price spikes or bad data that would cause huge overreactions in regular LMS. It's like a trader who cares only about the direction of their mistake, not how big it was, making them less likely to panic.","rawContent":"The Sign-Error LMS is a robust variant of the LMS algorithm that uses only the sign (positive or negative) of the error signal for weight updates, rather than the error magnitude. This modification reduces computational complexity and provides robustness against large error outliers or impulsive noise. The algorithm sacrifices some convergence speed for improved stability in noisy environments and requires fewer bits for implementation in hardware. It's particularly useful when error measurements are unreliable or when dealing with heavy-tailed noise distributions.\n\nMathematical Formula:\nWeight update equation:\nw_t+1 = w_t + μ * sign(e_t) * x_t\n\nWhere:\n- sign(e_t) = +1 if e_t > 0\n            = -1 if e_t < 0\n            = 0 if e_t = 0\n- e_t = d_t - w_t^T * x_t (error)\n- μ = step size parameter\n- x_t = input vector\n- w_t = weight vector\n\nOutput: ŷ_t = w_t^T * x_t\n\nThe key difference from standard LMS: error magnitude is ignored, only direction matters.\n\nSimple Explanation:\nRegular LMS says \"you were off by $5, so make a big adjustment\" or \"you were off by $0.10, so make a tiny adjustment.\" Sign-Error LMS simplifies this to just \"you were too high, adjust down\" or \"you were too low, adjust up\" - the amount doesn't matter. This makes it more resistant to wild price spikes or bad data that would cause huge overreactions in regular LMS. It's like a trader who cares only about the direction of their mistake, not how big it was, making them less likely to panic.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Sign-Error_LMS_Filter.txt","hasFullInfo":true},{"id":37,"title":"Space-Time Particle Filter","filename":"Space-Time_Particle_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"High-dimensional particle filtering","overview":"The Space-Time Particle Filter is an extension of particle filtering designed for high-dimensional state spaces where standard particle filters suffer from severe degeneracy (curse of dimensionality). It decomposes the high-dimensional problem into lower-dimensional subproblems in both space and time, allowing particles to be propagated more efficiently. The method uses marginalization, conditioning, and structured approximations to reduce the effective dimension, making particle filtering tractable for systems with dozens or hundreds of state variables.","formula":"Mathematical Formula:\nDecomposition approach (simplified):\nx_t = [x_t^1, x_t^2, ..., x_t^M] (M spatial dimensions)\n\nRather than sampling full state:\np(x_t | z_1:t) = p(x_t^1 | z_1:t) * p(x_t^2 | x_t^1, z_1:t) * ... * p(x_t^M | x_t^{1:M-1}, z_1:t)\n\nSequential spatial sampling:\nFor m = 1 to M:\n  Sample x_t^m | x_t^{1:m-1}, z_1:t using particle filter\n\nWeight particles based on:\nw_t^i ∝ p(z_t | x_t^i) * p(x_t^i | x_t-1^i)\n\nTemporal dimension handled through standard particle filter recursion.\n\nSimple Explanation:\nStandard particle filters struggle when tracking many variables simultaneously - you'd need billions of particles to cover all possibilities. Space-Time Particle Filter cleverly breaks the problem into smaller pieces. Instead of trying to guess all variables at once, it guesses them one-by-one, using what it learned from previous guesses to inform the next. It's like solving a complex puzzle by working on one section at a time rather than trying to place all pieces simultaneously. This makes particle filtering practical for complex financial systems tracking many assets or state variables.","parameters":"","intuition":"","rawContent":"The Space-Time Particle Filter is an extension of particle filtering designed for high-dimensional state spaces where standard particle filters suffer from severe degeneracy (curse of dimensionality). It decomposes the high-dimensional problem into lower-dimensional subproblems in both space and time, allowing particles to be propagated more efficiently. The method uses marginalization, conditioning, and structured approximations to reduce the effective dimension, making particle filtering tractable for systems with dozens or hundreds of state variables.\n\nMathematical Formula:\nDecomposition approach (simplified):\nx_t = [x_t^1, x_t^2, ..., x_t^M] (M spatial dimensions)\n\nRather than sampling full state:\np(x_t | z_1:t) = p(x_t^1 | z_1:t) * p(x_t^2 | x_t^1, z_1:t) * ... * p(x_t^M | x_t^{1:M-1}, z_1:t)\n\nSequential spatial sampling:\nFor m = 1 to M:\n  Sample x_t^m | x_t^{1:m-1}, z_1:t using particle filter\n\nWeight particles based on:\nw_t^i ∝ p(z_t | x_t^i) * p(x_t^i | x_t-1^i)\n\nTemporal dimension handled through standard particle filter recursion.\n\nSimple Explanation:\nStandard particle filters struggle when tracking many variables simultaneously - you'd need billions of particles to cover all possibilities. Space-Time Particle Filter cleverly breaks the problem into smaller pieces. Instead of trying to guess all variables at once, it guesses them one-by-one, using what it learned from previous guesses to inform the next. It's like solving a complex puzzle by working on one section at a time rather than trying to place all pieces simultaneously. This makes particle filtering practical for complex financial systems tracking many assets or state variables.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Space-Time_Particle_Filter.txt","hasFullInfo":true},{"id":38,"title":"Unscented Kalman Filter (UKF)","filename":"Unscented_Kalman_Filter.txt","group":"group 2","groupNum":2,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Optimal state estimation for linear systems","overview":"The Unscented Kalman Filter (UKF) is a nonlinear filtering technique that uses the unscented transformation instead of linearization. Rather than approximating nonlinear functions with Taylor series (like EKF), UKF propagates a carefully chosen set of sample points (sigma points) through the nonlinear functions, then reconstructs the mean and covariance from the transformed points. This approach captures higher-order moments and typically provides better estimates than EKF for highly nonlinear systems, without requiring Jacobian calculations.","formula":"Mathematical Formula:\nSigma points (for n-dimensional state):\nχ_0 = x̂\nχ_i = x̂ + (√((n+λ)P))_i    for i = 1,...,n\nχ_i = x̂ - (√((n+λ)P))_{i-n}  for i = n+1,...,2n\n\nWeights:\nW_0^m = λ/(n+λ)\nW_0^c = λ/(n+λ) + (1-α^2+β)\nW_i^m = W_i^c = 1/(2(n+λ))    for i = 1,...,2n\n\nPrediction:\nχ_t|t-1 = f(χ_t-1|t-1)\nx̂_t|t-1 = Σ W_i^m * χ_i,t|t-1\nP_t|t-1 = Σ W_i^c * (χ_i,t|t-1 - x̂_t|t-1)(χ_i,t|t-1 - x̂_t|t-1)^T + Q\n\nUpdate: Similar using measurement function h(·)","parameters":"Parameters: λ = α^2(n+κ)-n, typical: α=10^-3, β=2, κ=0\n\nSimple Explanation:\nInstead of approximating curved surfaces with flat planes (like EKF), UKF samples strategic points around your current estimate, pushes each through the actual nonlinear system, then figures out where the cloud of transformed points ends up. It's like testing multiple \"what-if\" scenarios and seeing where they land, rather than assuming everything is a straight line. This gives better results for highly nonlinear systems and doesn't require calculating derivatives, making it both more accurate and sometimes easier to implement than EKF.","intuition":"","rawContent":"The Unscented Kalman Filter (UKF) is a nonlinear filtering technique that uses the unscented transformation instead of linearization. Rather than approximating nonlinear functions with Taylor series (like EKF), UKF propagates a carefully chosen set of sample points (sigma points) through the nonlinear functions, then reconstructs the mean and covariance from the transformed points. This approach captures higher-order moments and typically provides better estimates than EKF for highly nonlinear systems, without requiring Jacobian calculations.\n\nMathematical Formula:\nSigma points (for n-dimensional state):\nχ_0 = x̂\nχ_i = x̂ + (√((n+λ)P))_i    for i = 1,...,n\nχ_i = x̂ - (√((n+λ)P))_{i-n}  for i = n+1,...,2n\n\nWeights:\nW_0^m = λ/(n+λ)\nW_0^c = λ/(n+λ) + (1-α^2+β)\nW_i^m = W_i^c = 1/(2(n+λ))    for i = 1,...,2n\n\nPrediction:\nχ_t|t-1 = f(χ_t-1|t-1)\nx̂_t|t-1 = Σ W_i^m * χ_i,t|t-1\nP_t|t-1 = Σ W_i^c * (χ_i,t|t-1 - x̂_t|t-1)(χ_i,t|t-1 - x̂_t|t-1)^T + Q\n\nUpdate: Similar using measurement function h(·)\n\nParameters: λ = α^2(n+κ)-n, typical: α=10^-3, β=2, κ=0\n\nSimple Explanation:\nInstead of approximating curved surfaces with flat planes (like EKF), UKF samples strategic points around your current estimate, pushes each through the actual nonlinear system, then figures out where the cloud of transformed points ends up. It's like testing multiple \"what-if\" scenarios and seeing where they land, rather than assuming everything is a straight line. This gives better results for highly nonlinear systems and doesn't require calculating derivatives, making it both more accurate and sometimes easier to implement than EKF.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 2/Unscented_Kalman_Filter.txt","hasFullInfo":true},{"id":39,"title":"VIDYA (Variable Index Dynamic Average)","filename":"VIDYA.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"Group 2 Methods","subcategory":"General","summary":"Variable Index Dynamic Average (VIDYA) is an adaptive moving average developed by Tushar Chande that adjusts its smoothing constant based on price volatility. U...","overview":"Variable Index Dynamic Average (VIDYA) is an adaptive moving average developed by Tushar Chande that adjusts its smoothing constant based on price volatility. Unlike KAMA which uses efficiency, VIDYA uses the Chande Momentum Oscillator (CMO) or standard deviation to measure volatility. When volatility is high, VIDYA becomes more responsive (faster). When volatility is low, it becomes less responsive (slower). This makes VIDYA particularly useful for volatility-based trading strategies and reduces lag during volatile market conditions.","formula":"Mathematical Formula:\nVolatility calculation (using CMO):\nCMO = (Sum_up - Sum_down) / (Sum_up + Sum_down) * 100","parameters":"Where:\nSum_up = sum of positive price changes over n periods\nSum_down = sum of negative price changes over n periods\n\nAlternative: Use standard deviation of returns\n\nSmoothing Constant:\nSC = α * |CMO/100|\n\nOr: SC = α * (StdDev_current / StdDev_reference)\n\nVIDYA:\nVIDYA_t = SC * Price_t + (1 - SC) * VIDYA_t-1\n\nWhere α = 2/(period + 1) is the base smoothing constant","intuition":"Simple Explanation:\nVIDYA is a moving average that speeds up when the market gets volatile and slows down when it's calm. It uses volatility measures (like standard deviation or momentum) to adjust how quickly it responds to price changes. In wild, volatile markets, traders need faster signals, so VIDYA speeds up. In quiet, stable markets, you want to filter out noise, so VIDYA slows down. Think of it as a moving average with a volume knob that automatically turns up during exciting market action and down during boring periods.","rawContent":"Variable Index Dynamic Average (VIDYA) is an adaptive moving average developed by Tushar Chande that adjusts its smoothing constant based on price volatility. Unlike KAMA which uses efficiency, VIDYA uses the Chande Momentum Oscillator (CMO) or standard deviation to measure volatility. When volatility is high, VIDYA becomes more responsive (faster). When volatility is low, it becomes less responsive (slower). This makes VIDYA particularly useful for volatility-based trading strategies and reduces lag during volatile market conditions.\n\nMathematical Formula:\nVolatility calculation (using CMO):\nCMO = (Sum_up - Sum_down) / (Sum_up + Sum_down) * 100\n\nWhere:\nSum_up = sum of positive price changes over n periods\nSum_down = sum of negative price changes over n periods\n\nAlternative: Use standard deviation of returns\n\nSmoothing Constant:\nSC = α * |CMO/100|\n\nOr: SC = α * (StdDev_current / StdDev_reference)\n\nVIDYA:\nVIDYA_t = SC * Price_t + (1 - SC) * VIDYA_t-1\n\nWhere α = 2/(period + 1) is the base smoothing constant\n\nSimple Explanation:\nVIDYA is a moving average that speeds up when the market gets volatile and slows down when it's calm. It uses volatility measures (like standard deviation or momentum) to adjust how quickly it responds to price changes. In wild, volatile markets, traders need faster signals, so VIDYA speeds up. In quiet, stable markets, you want to filter out noise, so VIDYA slows down. Think of it as a moving average with a volume knob that automatically turns up during exciting market action and down during boring periods.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 2/VIDYA.txt","hasFullInfo":true},{"id":40,"title":"Whittaker-Henderson Smoothing","filename":"Whittaker-Henderson_Smoothing.txt","group":"group 2","groupNum":2,"categoryId":2,"categoryTitle":"2. ECONOMETRIC FILTERS","subcategory":"Advanced Economic Filters","summary":"Penalized least squares smoothing","overview":"Whittaker-Henderson smoothing is a penalized least squares method that balances fidelity to the data against smoothness of the result. Developed independently by E.T. Whittaker (1923) and Robert Henderson (1924), it minimizes the sum of squared deviations from the data plus a penalty on the roughness of the fitted curve. The penalty is based on differences (typically second or third order) of the smoothed values. The smoothing parameter controls the trade-off between fit and smoothness.","formula":"Mathematical Formula:\nMinimize: S = Σ(y_t - ŷ_t)^2 + λ * Σ(Δ^d ŷ_t)^2","parameters":"Where:\n- y_t = observed data\n- ŷ_t = smoothed values\n- λ = smoothing parameter (larger = smoother)\n- Δ^d = d-th order difference operator\n- Common choice: d = 2 (penalizes curvature)\n\nFor second differences:\nΔ^2 ŷ_t = ŷ_t - 2*ŷ_t-1 + ŷ_t-2\n\nSolution obtained by solving: (I + λD'D)ŷ = y\nWhere D is the difference matrix.\n\nSimple Explanation:\nImagine trying to draw a smooth curve through scattered data points. You want it to pass close to the points but not zigzag wildly between them. Whittaker-Henderson smoothing does this by finding the curve that's the best compromise between \"staying close to the data\" and \"not bending too sharply.\" The lambda parameter is your dial: turn it up for a very smooth curve that might miss some points, turn it down to follow the data more closely but with more wiggles.","intuition":"","rawContent":"Whittaker-Henderson smoothing is a penalized least squares method that balances fidelity to the data against smoothness of the result. Developed independently by E.T. Whittaker (1923) and Robert Henderson (1924), it minimizes the sum of squared deviations from the data plus a penalty on the roughness of the fitted curve. The penalty is based on differences (typically second or third order) of the smoothed values. The smoothing parameter controls the trade-off between fit and smoothness.\n\nMathematical Formula:\nMinimize: S = Σ(y_t - ŷ_t)^2 + λ * Σ(Δ^d ŷ_t)^2\n\nWhere:\n- y_t = observed data\n- ŷ_t = smoothed values\n- λ = smoothing parameter (larger = smoother)\n- Δ^d = d-th order difference operator\n- Common choice: d = 2 (penalizes curvature)\n\nFor second differences:\nΔ^2 ŷ_t = ŷ_t - 2*ŷ_t-1 + ŷ_t-2\n\nSolution obtained by solving: (I + λD'D)ŷ = y\nWhere D is the difference matrix.\n\nSimple Explanation:\nImagine trying to draw a smooth curve through scattered data points. You want it to pass close to the points but not zigzag wildly between them. Whittaker-Henderson smoothing does this by finding the curve that's the best compromise between \"staying close to the data\" and \"not bending too sharply.\" The lambda parameter is your dial: turn it up for a very smooth curve that might miss some points, turn it down to follow the data more closely but with more wiggles.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 2/Whittaker-Henderson_Smoothing.txt","hasFullInfo":true},{"id":41,"title":"Autocorrelation Periodogram","filename":"Autocorrelation_Periodogram.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Correlation-based spectrum","overview":"The Autocorrelation Periodogram identifies dominant cycle periods by measuring how well a time series correlates with lagged versions of itself at different time delays, with peaks in the autocorrelation function indicating the presence of cyclic behavior at those lag periods. Instead of using Fourier transforms, this method calculates the correlation coefficient between the price series and itself shifted by various lags, producing a correlation spectrum where high correlations at specific lags reveal the dominant cycle periods. This approach is particularly effective for detecting periodic patterns even in noisy market data.","formula":"Formula:\nAutocorr[k] = Σ((Price[i] - Mean) * (Price[i+k] - Mean)) / Σ((Price[i] - Mean)²)","parameters":"Where:\n- k = lag (time delay in bars)\n- i = bar index\n- Mean = average price over window\n- Result ranges from -1 to +1\n\nInterpretation:\n- Autocorr[k] ≈ +1: Strong positive correlation at lag k (cycle detected)\n- Autocorr[k] ≈ 0: No correlation (no cycle at that lag)\n- Autocorr[k] ≈ -1: Strong negative correlation (half-cycle)\n- First significant peak: Dominant cycle period\n\nProcess:\n1. Calculate mean of price series\n2. For each lag k (e.g., 2 to 50 bars):\n   - Correlate price[t] with price[t-k]\n3. Plot autocorrelation vs. lag\n4. Identify peaks in autocorrelation\n5. Peak locations = dominant cycle periods\n\nAdvantages:\n- Simple, intuitive concept\n- No complex math (just correlation)\n- Robust to noise\n- Works with short data samples\n- Easy to visualize\n\nApplications:\n- Dominant cycle detection\n- Harmonic analysis (peaks at multiples)\n- Seasonality detection\n- Optimal lookback period selection\n- Validation of other cycle methods","intuition":"Think of autocorrelation like asking \"Does today look like N days ago?\" You slide your price data over itself like transparencies and see where the patterns line up best. If the data lines up really well when you shift it by 20 bars, that means there's a 20-bar cycle - the market is repeating itself every 20 bars. It's like noticing your friend always gets coffee on Mondays - there's a 7-day cycle in their behavior. The autocorrelation periodogram does this mathematically to find the market's rhythm.","rawContent":"The Autocorrelation Periodogram identifies dominant cycle periods by measuring how well a time series correlates with lagged versions of itself at different time delays, with peaks in the autocorrelation function indicating the presence of cyclic behavior at those lag periods. Instead of using Fourier transforms, this method calculates the correlation coefficient between the price series and itself shifted by various lags, producing a correlation spectrum where high correlations at specific lags reveal the dominant cycle periods. This approach is particularly effective for detecting periodic patterns even in noisy market data.\n\nFormula:\nAutocorr[k] = Σ((Price[i] - Mean) * (Price[i+k] - Mean)) / Σ((Price[i] - Mean)²)\n\nWhere:\n- k = lag (time delay in bars)\n- i = bar index\n- Mean = average price over window\n- Result ranges from -1 to +1\n\nInterpretation:\n- Autocorr[k] ≈ +1: Strong positive correlation at lag k (cycle detected)\n- Autocorr[k] ≈ 0: No correlation (no cycle at that lag)\n- Autocorr[k] ≈ -1: Strong negative correlation (half-cycle)\n- First significant peak: Dominant cycle period\n\nProcess:\n1. Calculate mean of price series\n2. For each lag k (e.g., 2 to 50 bars):\n   - Correlate price[t] with price[t-k]\n3. Plot autocorrelation vs. lag\n4. Identify peaks in autocorrelation\n5. Peak locations = dominant cycle periods\n\nAdvantages:\n- Simple, intuitive concept\n- No complex math (just correlation)\n- Robust to noise\n- Works with short data samples\n- Easy to visualize\n\nApplications:\n- Dominant cycle detection\n- Harmonic analysis (peaks at multiples)\n- Seasonality detection\n- Optimal lookback period selection\n- Validation of other cycle methods\n\nThink of autocorrelation like asking \"Does today look like N days ago?\" You slide your price data over itself like transparencies and see where the patterns line up best. If the data lines up really well when you shift it by 20 bars, that means there's a 20-bar cycle - the market is repeating itself every 20 bars. It's like noticing your friend always gets coffee on Mondays - there's a 7-day cycle in their behavior. The autocorrelation periodogram does this mathematically to find the market's rhythm.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Autocorrelation_Periodogram.txt","hasFullInfo":true},{"id":42,"title":"Channelized Receiver Spectrum (42 Parallel IIR Filters)","filename":"Channelized_Receiver_Spectrum.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Multi-channel analysis","overview":"The Channelized Receiver Spectrum uses an array of 42 parallel bandpass filters (typically IIR Butterworth filters) each tuned to a different frequency channel to simultaneously analyze the entire spectrum of market cycles from approximately 8 to 50 bars. Originally adapted from radar and communications engineering where it's used to detect signals across multiple frequency bands, Ehlers applies this technique to decompose price data into separate frequency channels in real-time, creating a multi-channel spectrum analyzer that shows the power distribution across all cycle periods simultaneously. This approach provides instantaneous spectral analysis without the need for DFT calculations.","formula":"Architecture:\n- 42 parallel bandpass filters (one per frequency channel)\n- Channel spacing: Typically logarithmic (8, 10, 12, 15, 18, 20, 24, 28, 32, 36, 40, 45, 50 bars, etc.)\n- Each filter tuned to pass only its assigned frequency\n- Output: Power envelope from each channel\n- Display: Heat map or bar graph showing power per channel\n\nFilter Design:\n- Type: 2-pole Butterworth bandpass IIR\n- Bandwidth: Narrow enough to isolate frequency\n- Q-factor: Controls selectivity\n- Each channel processes same price input simultaneously\n\nCalculation Process:\n1. Price data fed to all 42 filters in parallel\n2. Each filter outputs signal in its frequency band\n3. Envelope detection: Amplitude = √(I² + Q²)\n4. Smooth envelope for stability\n5. Display power for each channel (spectrum)\n\nAdvantages:\n- Real-time spectrum analysis (no DFT lag)\n- Continuous monitoring of all frequencies\n- Computationally efficient for real-time trading\n- Shows evolving spectral content over time\n- Can detect multiple simultaneous cycles\n\nApplications:\n- Heat map spectrogram display\n- Dominant cycle identification\n- Multi-cycle trading strategies\n- Regime detection (trend vs. cycle)\n- Cycle strength comparison","parameters":"","intuition":"Think of this like having 42 different radio receivers, each tuned to a specific station (frequency). All 42 receivers are listening to the market simultaneously, and each one tells you how strong the signal is on its particular \"channel\" (cycle period). If the \"20-bar channel\" receiver is picking up a loud signal while the others are quiet, you know there's a strong 20-bar cycle. It's much faster than scanning through channels one-by-one (like DFT does) - you're monitoring everything at once.","rawContent":"The Channelized Receiver Spectrum uses an array of 42 parallel bandpass filters (typically IIR Butterworth filters) each tuned to a different frequency channel to simultaneously analyze the entire spectrum of market cycles from approximately 8 to 50 bars. Originally adapted from radar and communications engineering where it's used to detect signals across multiple frequency bands, Ehlers applies this technique to decompose price data into separate frequency channels in real-time, creating a multi-channel spectrum analyzer that shows the power distribution across all cycle periods simultaneously. This approach provides instantaneous spectral analysis without the need for DFT calculations.\n\nArchitecture:\n- 42 parallel bandpass filters (one per frequency channel)\n- Channel spacing: Typically logarithmic (8, 10, 12, 15, 18, 20, 24, 28, 32, 36, 40, 45, 50 bars, etc.)\n- Each filter tuned to pass only its assigned frequency\n- Output: Power envelope from each channel\n- Display: Heat map or bar graph showing power per channel\n\nFilter Design:\n- Type: 2-pole Butterworth bandpass IIR\n- Bandwidth: Narrow enough to isolate frequency\n- Q-factor: Controls selectivity\n- Each channel processes same price input simultaneously\n\nCalculation Process:\n1. Price data fed to all 42 filters in parallel\n2. Each filter outputs signal in its frequency band\n3. Envelope detection: Amplitude = √(I² + Q²)\n4. Smooth envelope for stability\n5. Display power for each channel (spectrum)\n\nAdvantages:\n- Real-time spectrum analysis (no DFT lag)\n- Continuous monitoring of all frequencies\n- Computationally efficient for real-time trading\n- Shows evolving spectral content over time\n- Can detect multiple simultaneous cycles\n\nApplications:\n- Heat map spectrogram display\n- Dominant cycle identification\n- Multi-cycle trading strategies\n- Regime detection (trend vs. cycle)\n- Cycle strength comparison\n\nThink of this like having 42 different radio receivers, each tuned to a specific station (frequency). All 42 receivers are listening to the market simultaneously, and each one tells you how strong the signal is on its particular \"channel\" (cycle period). If the \"20-bar channel\" receiver is picking up a loud signal while the others are quiet, you know there's a strong 20-bar cycle. It's much faster than scanning through channels one-by-one (like DFT does) - you're monitoring everything at once.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Channelized_Receiver_Spectrum.txt","hasFullInfo":true},{"id":43,"title":"Discrete Fourier Transform (DFT) for Cycle Detection","filename":"Discrete_Fourier_Transform_for_Cycle_Detection.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Frequency domain analysis","overview":"The Discrete Fourier Transform (DFT) converts time-domain price data into frequency-domain information, revealing which cycle periods (frequencies) are dominant in the market by decomposing the price series into a sum of sine and cosine waves of different frequencies. For cycle detection in trading, DFT calculates the amplitude and phase of cycles at specific periods by correlating the price data with sine and cosine waves at each test frequency, producing a spectrum that shows which cycle lengths have the most energy. This allows traders to identify the dominant cycle period and adapt their indicators accordingly.","formula":"Formula (for period N):\nReal[N] = Σ(Price[i] * cos(2πi/N)) for i=0 to Length-1\nImag[N] = Σ(Price[i] * sin(2πi/N)) for i=0 to Length-1\nPower[N] = √(Real[N]² + Imag[N]²)","parameters":"Where:\n- N = cycle period being tested\n- i = bar index within lookback window\n- Length = lookback window size\n- Power[N] = spectral power at period N\n\nProcess:\n1. Select range of periods to test (e.g., 8-50 bars)\n2. For each period, correlate price with sine and cosine\n3. Calculate power spectrum from real/imaginary components\n4. Dominant cycle = period with highest power\n5. Use dominant cycle to tune adaptive indicators\n\nApplications:\n- Dominant cycle measurement for MAMA/FAMA\n- Adaptive RSI period selection\n- Cycle-tuned bandpass filters\n- Spectral analysis for regime detection\n- Automatic indicator optimization\n\nAdvantages:\n- Mathematically rigorous frequency detection\n- Handles multiple cycles simultaneously\n- Quantifies cycle strength (power)\n- Can detect harmonic relationships","intuition":"Think of DFT like using a prism to split white light into its rainbow colors. Instead of light, you're splitting price movement into its different cycle \"colors\" (frequencies). Just as the prism shows you which colors are strongest in the light, DFT shows you which cycle periods are strongest in the price action. If you see a big spike at the \"20-bar color,\" that means there's a strong 20-bar cycle in the data. Traders use this to tune their indicators to match the market's natural rhythm instead of using fixed settings.","rawContent":"The Discrete Fourier Transform (DFT) converts time-domain price data into frequency-domain information, revealing which cycle periods (frequencies) are dominant in the market by decomposing the price series into a sum of sine and cosine waves of different frequencies. For cycle detection in trading, DFT calculates the amplitude and phase of cycles at specific periods by correlating the price data with sine and cosine waves at each test frequency, producing a spectrum that shows which cycle lengths have the most energy. This allows traders to identify the dominant cycle period and adapt their indicators accordingly.\n\nFormula (for period N):\nReal[N] = Σ(Price[i] * cos(2πi/N)) for i=0 to Length-1\nImag[N] = Σ(Price[i] * sin(2πi/N)) for i=0 to Length-1\nPower[N] = √(Real[N]² + Imag[N]²)\n\nWhere:\n- N = cycle period being tested\n- i = bar index within lookback window\n- Length = lookback window size\n- Power[N] = spectral power at period N\n\nProcess:\n1. Select range of periods to test (e.g., 8-50 bars)\n2. For each period, correlate price with sine and cosine\n3. Calculate power spectrum from real/imaginary components\n4. Dominant cycle = period with highest power\n5. Use dominant cycle to tune adaptive indicators\n\nApplications:\n- Dominant cycle measurement for MAMA/FAMA\n- Adaptive RSI period selection\n- Cycle-tuned bandpass filters\n- Spectral analysis for regime detection\n- Automatic indicator optimization\n\nAdvantages:\n- Mathematically rigorous frequency detection\n- Handles multiple cycles simultaneously\n- Quantifies cycle strength (power)\n- Can detect harmonic relationships\n\nThink of DFT like using a prism to split white light into its rainbow colors. Instead of light, you're splitting price movement into its different cycle \"colors\" (frequencies). Just as the prism shows you which colors are strongest in the light, DFT shows you which cycle periods are strongest in the price action. If you see a big spike at the \"20-bar color,\" that means there's a strong 20-bar cycle in the data. Traders use this to tune their indicators to match the market's natural rhythm instead of using fixed settings.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Discrete_Fourier_Transform_for_Cycle_Detection.txt","hasFullInfo":true},{"id":44,"title":"Distance-Squared Coefficient Filter","filename":"Distance_Squared_Coefficient_Filter.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Distance-based weighting","overview":"The Distance-Squared Coefficient Filter is a distance-based weighting scheme developed by Ehlers where filter coefficients are determined by the inverse square of the temporal distance from the current bar, giving exponentially more weight to recent data while maintaining smooth mathematical properties. Instead of using fixed coefficients or simple linear decay, this method calculates weights as 1/d² where d is the number of bars away from the current bar, creating a natural emphasis on recent price action that falls off rapidly with distance. This weighting scheme provides an alternative to exponential smoothing with different lag and smoothing characteristics.","formula":"Formula:\nWeight[i] = 1 / (Distance[i])²","parameters":"Where:\n- Distance[i] = absolute bar offset from current bar\n- Distance[0] = 1 (current bar, to avoid division by zero)\n- Distance[1] = 1, Distance[2] = 4, Distance[3] = 9, etc.\n- Weights normalized: Final_Weight = Weight[i] / Σ(All Weights)\n\nCalculation Example (5-bar filter):\nBar 0: Weight = 1/1² = 1.000\nBar 1: Weight = 1/1² = 1.000  \nBar 2: Weight = 1/2² = 0.250\nBar 3: Weight = 1/3² = 0.111\nBar 4: Weight = 1/4² = 0.063\nSum = 2.424, then normalize each weight\n\nCharacteristics:\n- Rapid decay with distance (faster than linear)\n- Smooth, continuous weighting function\n- More responsive than simple MA\n- Different lag properties vs exponential\n- Naturally adaptive to lookback period\n\nApplications:\n- Alternative to EMA smoothing\n- Trend line calculation\n- Adaptive moving average construction\n- Cycle analysis preprocessing","intuition":"Think of this like how much you trust people's advice based on how long ago they gave it. Yesterday's advice (distance=1) gets full weight. Advice from 2 days ago gets only 1/4 the weight. Advice from 3 days ago gets only 1/9 the weight. By the time you're looking at advice from a week ago, it barely matters. The Distance-Squared filter does this with price data - recent prices dominate the calculation, and old prices fade away really fast. It's not quite as aggressive as exponential smoothing, but it's much more focused on recent data than a simple average.","rawContent":"The Distance-Squared Coefficient Filter is a distance-based weighting scheme developed by Ehlers where filter coefficients are determined by the inverse square of the temporal distance from the current bar, giving exponentially more weight to recent data while maintaining smooth mathematical properties. Instead of using fixed coefficients or simple linear decay, this method calculates weights as 1/d² where d is the number of bars away from the current bar, creating a natural emphasis on recent price action that falls off rapidly with distance. This weighting scheme provides an alternative to exponential smoothing with different lag and smoothing characteristics.\n\nFormula:\nWeight[i] = 1 / (Distance[i])²\n\nWhere:\n- Distance[i] = absolute bar offset from current bar\n- Distance[0] = 1 (current bar, to avoid division by zero)\n- Distance[1] = 1, Distance[2] = 4, Distance[3] = 9, etc.\n- Weights normalized: Final_Weight = Weight[i] / Σ(All Weights)\n\nCalculation Example (5-bar filter):\nBar 0: Weight = 1/1² = 1.000\nBar 1: Weight = 1/1² = 1.000  \nBar 2: Weight = 1/2² = 0.250\nBar 3: Weight = 1/3² = 0.111\nBar 4: Weight = 1/4² = 0.063\nSum = 2.424, then normalize each weight\n\nCharacteristics:\n- Rapid decay with distance (faster than linear)\n- Smooth, continuous weighting function\n- More responsive than simple MA\n- Different lag properties vs exponential\n- Naturally adaptive to lookback period\n\nApplications:\n- Alternative to EMA smoothing\n- Trend line calculation\n- Adaptive moving average construction\n- Cycle analysis preprocessing\n\nThink of this like how much you trust people's advice based on how long ago they gave it. Yesterday's advice (distance=1) gets full weight. Advice from 2 days ago gets only 1/4 the weight. Advice from 3 days ago gets only 1/9 the weight. By the time you're looking at advice from a week ago, it barely matters. The Distance-Squared filter does this with price data - recent prices dominate the calculation, and old prices fade away really fast. It's not quite as aggressive as exponential smoothing, but it's much more focused on recent data than a simple average.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Distance_Squared_Coefficient_Filter.txt","hasFullInfo":true},{"id":45,"title":"Fisher Transform","filename":"Fisher_Transform.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Gaussian PDF transformation","overview":"The Fisher Transform is a technical indicator developed by John F. Ehlers that converts price data into a Gaussian normal distribution to identify potential market turning points with sharp, distinct signals. Unlike traditional oscillators, it transforms price movements to make extreme conditions stand out clearly, highlighting when prices have moved to unusual levels that often precede reversals. The indicator produces two lines - the Fisher line and a trigger/signal line - whose crossovers and extreme values generate trading signals.","formula":"Formula:\n1. Normalize price: Value = (Price - MinPrice) / (MaxPrice - MinPrice)\n2. Scale to -1 to +1: X = 2 * Value - 1\n3. Apply Fisher Transform: F = 0.5 * ln((1 + X) / (1 - X))\n4. Signal Line = F from previous period","parameters":"Where:\n- ln = natural logarithm\n- X = normalized price value between -1 and +1\n- F = Fisher Transform value\n- MinPrice/MaxPrice = lowest/highest price over lookback period (typically 9-10 periods)","intuition":"Think of the Fisher Transform like putting chaotic price movements through a filter that makes the really important moments pop out clearly. Instead of squinting at gradual curves, you get sharp spikes that say \"Hey! Something extreme is happening here!\" When prices reach unusual levels, the indicator shoots up or down dramatically, giving you a heads-up that the market might be about to change direction - kind of like a smoke alarm that only goes off when there's actual danger, not just burnt toast.","rawContent":"The Fisher Transform is a technical indicator developed by John F. Ehlers that converts price data into a Gaussian normal distribution to identify potential market turning points with sharp, distinct signals. Unlike traditional oscillators, it transforms price movements to make extreme conditions stand out clearly, highlighting when prices have moved to unusual levels that often precede reversals. The indicator produces two lines - the Fisher line and a trigger/signal line - whose crossovers and extreme values generate trading signals.\n\nFormula:\n1. Normalize price: Value = (Price - MinPrice) / (MaxPrice - MinPrice)\n2. Scale to -1 to +1: X = 2 * Value - 1\n3. Apply Fisher Transform: F = 0.5 * ln((1 + X) / (1 - X))\n4. Signal Line = F from previous period\n\nWhere:\n- ln = natural logarithm\n- X = normalized price value between -1 and +1\n- F = Fisher Transform value\n- MinPrice/MaxPrice = lowest/highest price over lookback period (typically 9-10 periods)\n\nThink of the Fisher Transform like putting chaotic price movements through a filter that makes the really important moments pop out clearly. Instead of squinting at gradual curves, you get sharp spikes that say \"Hey! Something extreme is happening here!\" When prices reach unusual levels, the indicator shoots up or down dramatically, giving you a heads-up that the market might be about to change direction - kind of like a smoke alarm that only goes off when there's actual danger, not just burnt toast.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Fisher_Transform.txt","hasFullInfo":true},{"id":46,"title":"Heat Map Spectrogram","filename":"Heat_Map_Spectrogram.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Visual frequency representation","overview":"A Heat Map Spectrogram is a visual representation of cycle power across both time (X-axis) and frequency/period (Y-axis), using color intensity to show the strength of different cycle periods as they evolve over time. Unlike a static periodogram that shows the current spectrum, a spectrogram creates a scrolling 2D display where horizontal rows represent different cycle periods, the horizontal progression shows time, and the color at each point indicates how strong that particular cycle was at that moment. This creates a dynamic, intuitive visualization that lets traders see at a glance which cycles are active, when they start/stop, and how cycle dominance shifts over time.","formula":"Display Structure:\n- Y-axis: Cycle period (e.g., 8-50 bars)\n- X-axis: Time (bars/dates progressing left to right)\n- Color: Power/amplitude (hot colors = strong, cool colors = weak)\n- Typical color scheme: Blue (low) → Green → Yellow → Red (high)\n\nCalculation:\n1. At each time point:\n   - Calculate power spectrum (DFT, periodogram, or filter bank)\n2. Map power values to colors\n3. Draw vertical stripe of colored pixels (one per period)\n4. Scroll display: New stripe added on right, old data scrolls left\n5. Result: 2D time-frequency heat map\n\nColor Encoding:\n- Blue/Black: No cycle energy (power near zero)\n- Green: Moderate cycle energy\n- Yellow: Strong cycle energy\n- Red/White: Very strong dominant cycle\n\nApplications:\n- Visual cycle tracking over time\n- Regime change detection (cycle to trend shifts)\n- Harmonic analysis (vertical patterns)\n- Cycle onset/decay visualization\n- Strategy parameter optimization timing\n\nAdvantages:\n- Intuitive visual interpretation\n- Shows cycle evolution, not just current state\n- Pattern recognition (visual cortex processing)\n- Detects cycle mode vs. trend mode transitions\n- Historical cycle context","parameters":"","intuition":"Think of a heat map spectrogram like a weather radar display for market cycles. Just as weather radar shows where rain is falling (red = heavy, blue = light) and how storm systems move over time, the spectrogram shows where cycle \"energy\" is present (red = strong cycle, blue = weak) and how dominant cycles shift over time. You can literally see a strong 20-bar cycle lighting up in red, then fading to blue as the market transitions to trending mode. It's way easier than trying to interpret numbers - your eyes immediately spot the patterns.","rawContent":"A Heat Map Spectrogram is a visual representation of cycle power across both time (X-axis) and frequency/period (Y-axis), using color intensity to show the strength of different cycle periods as they evolve over time. Unlike a static periodogram that shows the current spectrum, a spectrogram creates a scrolling 2D display where horizontal rows represent different cycle periods, the horizontal progression shows time, and the color at each point indicates how strong that particular cycle was at that moment. This creates a dynamic, intuitive visualization that lets traders see at a glance which cycles are active, when they start/stop, and how cycle dominance shifts over time.\n\nDisplay Structure:\n- Y-axis: Cycle period (e.g., 8-50 bars)\n- X-axis: Time (bars/dates progressing left to right)\n- Color: Power/amplitude (hot colors = strong, cool colors = weak)\n- Typical color scheme: Blue (low) → Green → Yellow → Red (high)\n\nCalculation:\n1. At each time point:\n   - Calculate power spectrum (DFT, periodogram, or filter bank)\n2. Map power values to colors\n3. Draw vertical stripe of colored pixels (one per period)\n4. Scroll display: New stripe added on right, old data scrolls left\n5. Result: 2D time-frequency heat map\n\nColor Encoding:\n- Blue/Black: No cycle energy (power near zero)\n- Green: Moderate cycle energy\n- Yellow: Strong cycle energy\n- Red/White: Very strong dominant cycle\n\nApplications:\n- Visual cycle tracking over time\n- Regime change detection (cycle to trend shifts)\n- Harmonic analysis (vertical patterns)\n- Cycle onset/decay visualization\n- Strategy parameter optimization timing\n\nAdvantages:\n- Intuitive visual interpretation\n- Shows cycle evolution, not just current state\n- Pattern recognition (visual cortex processing)\n- Detects cycle mode vs. trend mode transitions\n- Historical cycle context\n\nThink of a heat map spectrogram like a weather radar display for market cycles. Just as weather radar shows where rain is falling (red = heavy, blue = light) and how storm systems move over time, the spectrogram shows where cycle \"energy\" is present (red = strong cycle, blue = weak) and how dominant cycles shift over time. You can literally see a strong 20-bar cycle lighting up in red, then fading to blue as the market transitions to trending mode. It's way easier than trying to interpret numbers - your eyes immediately spot the patterns.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Heat_Map_Spectrogram.txt","hasFullInfo":true},{"id":47,"title":"Hilbert Cycle Period Measurement","filename":"Hilbert_Cycle_Period_Measurement.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Phase-based period","overview":"Hilbert Cycle Period Measurement uses the Hilbert Transform to create InPhase and Quadrature components from price data, then extracts the instantaneous cycle period by analyzing the rate of phase change between successive bars. The method calculates the phase angle at each bar using arctan(Q/I), then determines period as the inverse of the phase change rate - since a complete 360° rotation represents one cycle, the period equals 360 divided by the degrees of phase change per bar. This technique provides real-time, adaptive cycle measurement that continuously updates as market conditions change, allowing indicators to dynamically adjust their parameters to match the current dominant cycle.","formula":"Calculation Process:\n1. Apply Hilbert Transform to price:\n   - Smooth price (4-bar WMA)\n   - Detrender removes DC component\n   - Calculate InPhase (I) and Quadrature (Q) components\n\n2. Compute instantaneous phase:\n   Phase[0] = arctan(Q[0] / I[0])\n\n3. Calculate phase difference:\n   DeltaPhase = Phase[0] - Phase[1]\n\n4. Instantaneous period:\n   Period = 360 / DeltaPhase (in degrees per bar)\n\n5. Smooth period with EMA for stability\n\nBounds and Filtering:\n- Typical range: 6 to 50 bars (prevents unrealistic values)\n- EMA smoothing: Reduces jitter in period measurement\n- Median filtering: Removes outlier period estimates\n- Complex averaging: I&Q components averaged before phase calc\n\nApplications:\n- MAMA/FAMA adaptive alpha calculation\n- Cycle-tuned RSI period\n- Adaptive Stochastic lookback\n- Bandpass filter auto-tuning\n- Market mode detection (trend vs. cycle)\n\nAdvantages:\n- Real-time, bar-by-bar updates\n- No lookback window required\n- Adapts to changing cycles\n- Foundation for many Ehlers indicators\n\nLimitations:\n- Can be noisy (requires smoothing)\n- Sensitive to trend component\n- May give false readings in strong trends\n- Benefits from bounds and filtering","parameters":"","intuition":"Think of this like a tachometer in a car that measures engine RPM in real-time. Instead of counting full rotations over time, the tachometer measures how fast the shaft is rotating RIGHT NOW by looking at the rate of rotation. Hilbert Cycle Period does the same for market cycles - it looks at how fast the \"phase\" is rotating (how quickly you're moving through the cycle) and calculates \"If it's rotating this fast, a full cycle will take X bars.\" It updates constantly as the market speeds up or slows down its cyclic rhythm.","rawContent":"Hilbert Cycle Period Measurement uses the Hilbert Transform to create InPhase and Quadrature components from price data, then extracts the instantaneous cycle period by analyzing the rate of phase change between successive bars. The method calculates the phase angle at each bar using arctan(Q/I), then determines period as the inverse of the phase change rate - since a complete 360° rotation represents one cycle, the period equals 360 divided by the degrees of phase change per bar. This technique provides real-time, adaptive cycle measurement that continuously updates as market conditions change, allowing indicators to dynamically adjust their parameters to match the current dominant cycle.\n\nCalculation Process:\n1. Apply Hilbert Transform to price:\n   - Smooth price (4-bar WMA)\n   - Detrender removes DC component\n   - Calculate InPhase (I) and Quadrature (Q) components\n\n2. Compute instantaneous phase:\n   Phase[0] = arctan(Q[0] / I[0])\n\n3. Calculate phase difference:\n   DeltaPhase = Phase[0] - Phase[1]\n\n4. Instantaneous period:\n   Period = 360 / DeltaPhase (in degrees per bar)\n\n5. Smooth period with EMA for stability\n\nBounds and Filtering:\n- Typical range: 6 to 50 bars (prevents unrealistic values)\n- EMA smoothing: Reduces jitter in period measurement\n- Median filtering: Removes outlier period estimates\n- Complex averaging: I&Q components averaged before phase calc\n\nApplications:\n- MAMA/FAMA adaptive alpha calculation\n- Cycle-tuned RSI period\n- Adaptive Stochastic lookback\n- Bandpass filter auto-tuning\n- Market mode detection (trend vs. cycle)\n\nAdvantages:\n- Real-time, bar-by-bar updates\n- No lookback window required\n- Adapts to changing cycles\n- Foundation for many Ehlers indicators\n\nLimitations:\n- Can be noisy (requires smoothing)\n- Sensitive to trend component\n- May give false readings in strong trends\n- Benefits from bounds and filtering\n\nThink of this like a tachometer in a car that measures engine RPM in real-time. Instead of counting full rotations over time, the tachometer measures how fast the shaft is rotating RIGHT NOW by looking at the rate of rotation. Hilbert Cycle Period does the same for market cycles - it looks at how fast the \"phase\" is rotating (how quickly you're moving through the cycle) and calculates \"If it's rotating this fast, a full cycle will take X bars.\" It updates constantly as the market speeds up or slows down its cyclic rhythm.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Hilbert_Cycle_Period_Measurement.txt","hasFullInfo":true},{"id":48,"title":"Homodyne Discriminator","filename":"Homodyne_Discriminator.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Frequency measurement","overview":"The Homodyne Discriminator is a cycle measurement technique developed by John Ehlers that determines the dominant market cycle period by multiplying the price signal by itself from one bar ago to create a \"zero-frequency beat note\" that carries phase information. \"Homodyne\" means the signal is multiplied by itself (specifically, the signal multiplied by its complex conjugate from one bar earlier) to extract the instantaneous phase angle, which directly reveals the cycle period. This method exhibits superior performance in low signal-to-noise environments compared to other cycle measurement approaches, making it more accurate when markets are trending or noisy.","formula":"Calculation Process:\n1. Smooth price with 4-bar WMA (1 bar lag)\n2. Apply Detrender to remove DC component\n3. Calculate Hilbert Transform components:\n   - InPhase (I1) = real component\n   - Quadrature (Q1) = imaginary component\n4. Complex multiplication: Signal * Conjugate(Signal[1 bar ago])\n5. Filter the beat note to isolate phase angle\n6. Phase change rate = Cycle Period\n\nKey Concept:\nPhase Change = arctan(Q1 / I1)\nPeriod = 1 / (Phase Change Rate)\n\nTypical Range: 6 to 50 bars (bounded for stability)","parameters":"","intuition":"Imagine you're trying to figure out how long it takes waves to crash on a beach by listening to the sound. The Homodyne Discriminator is like comparing each wave's sound with the previous wave's sound - when you do this mathematical trick of multiplying them together, you get a special \"beat\" frequency that tells you exactly how long the cycle is. It's particularly good at picking out the real rhythm even when there's a lot of noise (like wind and seagulls) messing with your measurements. Instead of just guessing the cycle length, this method mathematically extracts it from the data itself.","rawContent":"The Homodyne Discriminator is a cycle measurement technique developed by John Ehlers that determines the dominant market cycle period by multiplying the price signal by itself from one bar ago to create a \"zero-frequency beat note\" that carries phase information. \"Homodyne\" means the signal is multiplied by itself (specifically, the signal multiplied by its complex conjugate from one bar earlier) to extract the instantaneous phase angle, which directly reveals the cycle period. This method exhibits superior performance in low signal-to-noise environments compared to other cycle measurement approaches, making it more accurate when markets are trending or noisy.\n\nCalculation Process:\n1. Smooth price with 4-bar WMA (1 bar lag)\n2. Apply Detrender to remove DC component\n3. Calculate Hilbert Transform components:\n   - InPhase (I1) = real component\n   - Quadrature (Q1) = imaginary component\n4. Complex multiplication: Signal * Conjugate(Signal[1 bar ago])\n5. Filter the beat note to isolate phase angle\n6. Phase change rate = Cycle Period\n\nKey Concept:\nPhase Change = arctan(Q1 / I1)\nPeriod = 1 / (Phase Change Rate)\n\nTypical Range: 6 to 50 bars (bounded for stability)\n\nImagine you're trying to figure out how long it takes waves to crash on a beach by listening to the sound. The Homodyne Discriminator is like comparing each wave's sound with the previous wave's sound - when you do this mathematical trick of multiplying them together, you get a special \"beat\" frequency that tells you exactly how long the cycle is. It's particularly good at picking out the real rhythm even when there's a lot of noise (like wind and seagulls) messing with your measurements. Instead of just guessing the cycle length, this method mathematically extracts it from the data itself.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Homodyne_Discriminator.txt","hasFullInfo":true},{"id":49,"title":"InPhase and Quadrature Components (I&Q)","filename":"InPhase_and_Quadrature_Components.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Hilbert pair","overview":"The InPhase (I) and Quadrature (Q) components are orthogonal (perpendicular) signal representations produced by the Hilbert Transform that form a complex number pair used to describe cyclic market behavior. The InPhase component is the real part representing the projection of the cycle onto a cosine wave, while the Quadrature component is the imaginary part representing the projection onto a sine wave (lagged by 90 degrees). Together, these components form a \"Hilbert pair\" that allows complete description of a cycle's amplitude, frequency, and phase at any moment in time, enabling sophisticated cycle analysis and measurement techniques.","formula":"Mathematical Relationship:\nComplex Signal = I + jQ (where j = √-1)\n- InPhase (I) = Real component (cosine-like)\n- Quadrature (Q) = Imaginary component (sine-like, 90° phase shift)\n\nKey Applications:\n- Phase Angle: θ = arctan(Q / I)\n- Amplitude: A = √(I² + Q²)\n- Dominant Cycle Period calculation\n- Homodyne Discriminator inputs\n- MAMA/FAMA adaptive moving averages\n- Instantaneous trendline calculation\n\nCalculation (Hilbert Transform):\nUses digital filtering to create 90° phase-shifted versions of price:\n- I component: Current filtered price (0° phase)\n- Q component: 90° phase-lagged filtered price","parameters":"","intuition":"Think of I&Q like describing a Ferris wheel's position. The InPhase component tells you how far left or right the cart is (horizontal position), while the Quadrature component tells you how far up or down it is (vertical position). Together, these two measurements can tell you exactly where the cart is on the wheel, which direction it's moving, and how fast it's spinning. In trading, instead of a Ferris wheel, you're tracking the \"rotation\" of market cycles - the I&Q components let you pinpoint exactly where you are in any cycle.","rawContent":"The InPhase (I) and Quadrature (Q) components are orthogonal (perpendicular) signal representations produced by the Hilbert Transform that form a complex number pair used to describe cyclic market behavior. The InPhase component is the real part representing the projection of the cycle onto a cosine wave, while the Quadrature component is the imaginary part representing the projection onto a sine wave (lagged by 90 degrees). Together, these components form a \"Hilbert pair\" that allows complete description of a cycle's amplitude, frequency, and phase at any moment in time, enabling sophisticated cycle analysis and measurement techniques.\n\nMathematical Relationship:\nComplex Signal = I + jQ (where j = √-1)\n- InPhase (I) = Real component (cosine-like)\n- Quadrature (Q) = Imaginary component (sine-like, 90° phase shift)\n\nKey Applications:\n- Phase Angle: θ = arctan(Q / I)\n- Amplitude: A = √(I² + Q²)\n- Dominant Cycle Period calculation\n- Homodyne Discriminator inputs\n- MAMA/FAMA adaptive moving averages\n- Instantaneous trendline calculation\n\nCalculation (Hilbert Transform):\nUses digital filtering to create 90° phase-shifted versions of price:\n- I component: Current filtered price (0° phase)\n- Q component: 90° phase-lagged filtered price\n\nThink of I&Q like describing a Ferris wheel's position. The InPhase component tells you how far left or right the cart is (horizontal position), while the Quadrature component tells you how far up or down it is (vertical position). Together, these two measurements can tell you exactly where the cart is on the wheel, which direction it's moving, and how fast it's spinning. In trading, instead of a Ferris wheel, you're tracking the \"rotation\" of market cycles - the I&Q components let you pinpoint exactly where you are in any cycle.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/InPhase_and_Quadrature_Components.txt","hasFullInfo":true},{"id":50,"title":"Instantaneous Cycle Period","filename":"Instantaneous_Cycle_Period.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Real-time cycle length","overview":"Instantaneous Cycle Period is the real-time measurement of the current dominant cycle length at each bar, calculated from the rate of phase change in the market's cyclic component without requiring a fixed lookback window. Unlike traditional cycle measurement methods that analyze historical windows of data, instantaneous period adapts tick-by-tick to changing market conditions by measuring how fast the cycle phase is advancing - when cycles speed up, the measured period decreases; when they slow down, it increases. This measurement forms the foundation for adaptive indicators that automatically adjust their parameters to match current market rhythms.","formula":"Core Concept:\nPeriod = 360° / (Phase Change per Bar)\n\nIf phase advances 18° per bar → Period = 360/18 = 20 bars\nIf phase advances 30° per bar → Period = 360/30 = 12 bars\nIf phase advances 10° per bar → Period = 360/10 = 36 bars\n\nMeasurement Methods:\n1. Hilbert Transform approach (most common)\n2. Homodyne Discriminator\n3. Phase Accumulation\n4. Dual Differentiator\n5. Autocorrelation peaks\n\nTypical Implementation:\n- Calculate I&Q components via Hilbert Transform\n- Phase = arctan(Q/I)\n- InstPeriod = 360 / (Phase[0] - Phase[1])\n- Apply bounds: max(6, min(50, InstPeriod))\n- Smooth with EMA or median filter\n\nCharacteristics:\n- Updates every bar (fully adaptive)\n- No fixed window length\n- Can track rapidly changing cycles\n- Requires smoothing for stability\n- Bounded to reasonable range (6-50 bars typical)\n\nApplications:\n- Adaptive indicator period input\n- MAMA FastLimit/SlowLimit calculation\n- Cycle-tuned oscillators\n- Market mode classification\n- Regime detection\n\nPractical Considerations:\n- Raw values are noisy → smooth before use\n- Trending markets → long/invalid periods\n- Use median or EMA smoothing\n- Combine with cycle strength metrics\n- Validate against multiple methods","parameters":"","intuition":"Think of instantaneous period like a smart drummer who adjusts tempo in real-time based on the band's energy. If the music speeds up, the drummer immediately plays faster (shorter period). If it slows down, the drummer stretches out the beats (longer period). The drummer doesn't wait to count 8 full measures to figure out the tempo - they sense the rate of change RIGHT NOW and adapt. That's what instantaneous cycle period does: it doesn't analyze history, it measures the current \"tempo\" of market cycles and adjusts immediately.","rawContent":"Instantaneous Cycle Period is the real-time measurement of the current dominant cycle length at each bar, calculated from the rate of phase change in the market's cyclic component without requiring a fixed lookback window. Unlike traditional cycle measurement methods that analyze historical windows of data, instantaneous period adapts tick-by-tick to changing market conditions by measuring how fast the cycle phase is advancing - when cycles speed up, the measured period decreases; when they slow down, it increases. This measurement forms the foundation for adaptive indicators that automatically adjust their parameters to match current market rhythms.\n\nCore Concept:\nPeriod = 360° / (Phase Change per Bar)\n\nIf phase advances 18° per bar → Period = 360/18 = 20 bars\nIf phase advances 30° per bar → Period = 360/30 = 12 bars\nIf phase advances 10° per bar → Period = 360/10 = 36 bars\n\nMeasurement Methods:\n1. Hilbert Transform approach (most common)\n2. Homodyne Discriminator\n3. Phase Accumulation\n4. Dual Differentiator\n5. Autocorrelation peaks\n\nTypical Implementation:\n- Calculate I&Q components via Hilbert Transform\n- Phase = arctan(Q/I)\n- InstPeriod = 360 / (Phase[0] - Phase[1])\n- Apply bounds: max(6, min(50, InstPeriod))\n- Smooth with EMA or median filter\n\nCharacteristics:\n- Updates every bar (fully adaptive)\n- No fixed window length\n- Can track rapidly changing cycles\n- Requires smoothing for stability\n- Bounded to reasonable range (6-50 bars typical)\n\nApplications:\n- Adaptive indicator period input\n- MAMA FastLimit/SlowLimit calculation\n- Cycle-tuned oscillators\n- Market mode classification\n- Regime detection\n\nPractical Considerations:\n- Raw values are noisy → smooth before use\n- Trending markets → long/invalid periods\n- Use median or EMA smoothing\n- Combine with cycle strength metrics\n- Validate against multiple methods\n\nThink of instantaneous period like a smart drummer who adjusts tempo in real-time based on the band's energy. If the music speeds up, the drummer immediately plays faster (shorter period). If it slows down, the drummer stretches out the beats (longer period). The drummer doesn't wait to count 8 full measures to figure out the tempo - they sense the rate of change RIGHT NOW and adapt. That's what instantaneous cycle period does: it doesn't analyze history, it measures the current \"tempo\" of market cycles and adjusts immediately.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Instantaneous_Cycle_Period.txt","hasFullInfo":true},{"id":51,"title":"Inverse Fisher Transform","filename":"Inverse_Fisher_Transform.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Gaussian PDF transformation","overview":"The Inverse Fisher Transform is a mathematical technique developed by John Ehlers that compresses oscillator values into a tight range between -1 and +1, creating clear, binary-like trading signals. Unlike the Fisher Transform which converts data to a Gaussian distribution, the Inverse Fisher Transform takes normalized indicator values and squashes them toward the extreme boundaries, making buy and sell signals more distinct and unambiguous. This compression makes moderate values nearly unchanged while forcing larger values strongly toward +1 or -1, producing sharp, decisive signals rather than gradual transitions.","formula":"Formula:\nIFT = (e^(2*V) - 1) / (e^(2*V) + 1)\n\nAlternative form:\nIFT = (exp(2*V) - 1) / (exp(2*V) + 1)","parameters":"Where:\n- V = normalized indicator value (typically from RSI, Stochastic, or other oscillator)\n- e = Euler's number (2.71828...)\n- exp = exponential function\n- IFT = Inverse Fisher Transform output (bounded between -1 and +1)\n\nCommon application on RSI:\n1. Calculate RSI\n2. Normalize: V = 0.1 * (RSI - 50)\n3. Smooth with WMA or EMA\n4. Apply IFT formula\n5. Signals: Buy when IFT crosses above -0.5, Sell when crosses below +0.5\n\nImagine you have a light switch instead of a dimmer. The Inverse Fisher Transform takes indicator readings that might wobble around in the middle range and squeezes them toward \"definitely on\" (+1) or \"definitely off\" (-1). So instead of getting wishy-washy signals like \"maybe it's time to buy?\", you get a clear \"YES, buy now!\" or \"NO, sell now!\" It's like having someone who refuses to say \"maybe\" and always gives you a straight answer - helpful when you need to make a decision but hate being indecisive.","intuition":"","rawContent":"The Inverse Fisher Transform is a mathematical technique developed by John Ehlers that compresses oscillator values into a tight range between -1 and +1, creating clear, binary-like trading signals. Unlike the Fisher Transform which converts data to a Gaussian distribution, the Inverse Fisher Transform takes normalized indicator values and squashes them toward the extreme boundaries, making buy and sell signals more distinct and unambiguous. This compression makes moderate values nearly unchanged while forcing larger values strongly toward +1 or -1, producing sharp, decisive signals rather than gradual transitions.\n\nFormula:\nIFT = (e^(2*V) - 1) / (e^(2*V) + 1)\n\nAlternative form:\nIFT = (exp(2*V) - 1) / (exp(2*V) + 1)\n\nWhere:\n- V = normalized indicator value (typically from RSI, Stochastic, or other oscillator)\n- e = Euler's number (2.71828...)\n- exp = exponential function\n- IFT = Inverse Fisher Transform output (bounded between -1 and +1)\n\nCommon application on RSI:\n1. Calculate RSI\n2. Normalize: V = 0.1 * (RSI - 50)\n3. Smooth with WMA or EMA\n4. Apply IFT formula\n5. Signals: Buy when IFT crosses above -0.5, Sell when crosses below +0.5\n\nImagine you have a light switch instead of a dimmer. The Inverse Fisher Transform takes indicator readings that might wobble around in the middle range and squeezes them toward \"definitely on\" (+1) or \"definitely off\" (-1). So instead of getting wishy-washy signals like \"maybe it's time to buy?\", you get a clear \"YES, buy now!\" or \"NO, sell now!\" It's like having someone who refuses to say \"maybe\" and always gives you a straight answer - helpful when you need to make a decision but hate being indecisive.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Inverse_Fisher_Transform.txt","hasFullInfo":true},{"id":52,"title":"Nonlinear Ehlers Filters (Order Statistic)","filename":"Nonlinear_Ehlers_Filters.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Rank-based filtering","overview":"Nonlinear Ehlers Filters based on order statistics use rank-based filtering methods (median, percentile, min/max operations) instead of traditional linear weighted averages to reduce noise while preserving sharp price movements and avoiding lag. Unlike conventional filters that average all values equally or with fixed weights, order statistic filters sort the data within a window and select specific ranked values (like the median or a particular percentile), making them robust to outliers and spikes. Ehlers adapted these techniques for trading to create filters that maintain edge definition during price breakouts while still smoothing noise during consolidation periods.","formula":"Common Order Statistic Filters:\n\nMedian Filter:\n- Sorts values in window, selects middle value\n- Excellent spike/outlier removal\n- Preserves edges better than moving averages\n- Non-linear: output ≠ weighted sum of inputs\n\nPercentile Filters:\n- 25th percentile: Lower quartile value\n- 75th percentile: Upper quartile value\n- Adaptive to price distribution\n\nMin/Max Filters:\n- Minimum filter: Lowest value in window\n- Maximum filter: Highest value in window\n- Useful for envelope construction\n\nHybrid Approaches:\n- Median + Linear filter combinations\n- Adaptive switching between linear/nonlinear\n- Conditional order statistic selection\n\nAdvantages:\n- Outlier resistant (doesn't average spikes)\n- Sharp edge preservation (maintains breakout moves)\n- No overshoot or ringing artifacts\n- Better noise immunity than linear filters","parameters":"","intuition":"Think of the median filter like choosing the \"middle kid\" in height when you line up a group of children - you ignore the really tall outlier and the really short outlier and just pick the one in the middle. This works great for filtering out weird price spikes (like a flash crash blip) because the median filter just ignores that crazy value and picks the normal middle price. Regular moving averages would get pulled by that spike and give you a distorted reading, but the median filter says \"nope, that's clearly an outlier, I'm using the middle value instead.\"","rawContent":"Nonlinear Ehlers Filters based on order statistics use rank-based filtering methods (median, percentile, min/max operations) instead of traditional linear weighted averages to reduce noise while preserving sharp price movements and avoiding lag. Unlike conventional filters that average all values equally or with fixed weights, order statistic filters sort the data within a window and select specific ranked values (like the median or a particular percentile), making them robust to outliers and spikes. Ehlers adapted these techniques for trading to create filters that maintain edge definition during price breakouts while still smoothing noise during consolidation periods.\n\nCommon Order Statistic Filters:\n\nMedian Filter:\n- Sorts values in window, selects middle value\n- Excellent spike/outlier removal\n- Preserves edges better than moving averages\n- Non-linear: output ≠ weighted sum of inputs\n\nPercentile Filters:\n- 25th percentile: Lower quartile value\n- 75th percentile: Upper quartile value\n- Adaptive to price distribution\n\nMin/Max Filters:\n- Minimum filter: Lowest value in window\n- Maximum filter: Highest value in window\n- Useful for envelope construction\n\nHybrid Approaches:\n- Median + Linear filter combinations\n- Adaptive switching between linear/nonlinear\n- Conditional order statistic selection\n\nAdvantages:\n- Outlier resistant (doesn't average spikes)\n- Sharp edge preservation (maintains breakout moves)\n- No overshoot or ringing artifacts\n- Better noise immunity than linear filters\n\nThink of the median filter like choosing the \"middle kid\" in height when you line up a group of children - you ignore the really tall outlier and the really short outlier and just pick the one in the middle. This works great for filtering out weird price spikes (like a flash crash blip) because the median filter just ignores that crazy value and picks the normal middle price. Regular moving averages would get pulled by that spike and give you a distorted reading, but the median filter says \"nope, that's clearly an outlier, I'm using the middle value instead.\"","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Nonlinear_Ehlers_Filters.txt","hasFullInfo":true},{"id":53,"title":"Periodogram-Based Spectrum Analysis","filename":"Periodogram_Based_Spectrum_Analysis.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Power spectral density","overview":"Periodogram-Based Spectrum Analysis estimates the power spectral density (PSD) of price data to identify dominant frequencies and cycle periods by squaring the magnitude of the Fourier transform components at each frequency. The periodogram is essentially a visual representation showing the distribution of signal power across different frequencies, with peaks indicating strong cyclic components at those periods. This technique transforms time-series price data into the frequency domain, allowing traders to see at a glance which cycle periods contain the most energy and are therefore most likely to be reliable for trading.","formula":"Formula:\nPeriodogram[f] = (1/N) * |DFT[f]|²","parameters":"Where:\n- f = frequency bin\n- N = number of samples\n- |DFT[f]| = magnitude of DFT at frequency f\n- Result = power at that frequency\n\nKey Components:\n- X-axis: Cycle period (or frequency)\n- Y-axis: Power/energy in that cycle\n- Peaks: Dominant cycles\n- Valleys: Weak or absent cycles\n\nCalculation Process:\n1. Apply window function to price data (optional)\n2. Calculate DFT for range of periods\n3. Compute power: Power = Real² + Imaginary²\n4. Normalize by window length\n5. Plot power vs. period to create periodogram\n\nImprovements:\n- Welch's method: Average multiple overlapping windows\n- Bartlett's method: Average non-overlapping windows\n- Smoothing: Apply MA to periodogram for clearer peaks\n- Windowing: Reduce spectral leakage (Hamming, Hanning, etc.)\n\nApplications:\n- Dominant cycle identification\n- Multi-timeframe cycle analysis\n- Market regime detection (trending vs. cycling)\n- Automatic parameter optimization\n- Cycle strength measurement","intuition":"Think of a periodogram like a music equalizer display showing which frequencies (bass, midrange, treble) are loudest in a song. Instead of sound frequencies, you're looking at price cycle frequencies - the display shows you which cycle lengths are \"loud\" (have lots of energy) and which are \"quiet\" (barely present). When you see a tall bar at 20 periods, that means the market has a strong 20-bar rhythm right now. Traders use this visual spectrum to pick the best indicator settings instead of guessing blindly.","rawContent":"Periodogram-Based Spectrum Analysis estimates the power spectral density (PSD) of price data to identify dominant frequencies and cycle periods by squaring the magnitude of the Fourier transform components at each frequency. The periodogram is essentially a visual representation showing the distribution of signal power across different frequencies, with peaks indicating strong cyclic components at those periods. This technique transforms time-series price data into the frequency domain, allowing traders to see at a glance which cycle periods contain the most energy and are therefore most likely to be reliable for trading.\n\nFormula:\nPeriodogram[f] = (1/N) * |DFT[f]|²\n\nWhere:\n- f = frequency bin\n- N = number of samples\n- |DFT[f]| = magnitude of DFT at frequency f\n- Result = power at that frequency\n\nKey Components:\n- X-axis: Cycle period (or frequency)\n- Y-axis: Power/energy in that cycle\n- Peaks: Dominant cycles\n- Valleys: Weak or absent cycles\n\nCalculation Process:\n1. Apply window function to price data (optional)\n2. Calculate DFT for range of periods\n3. Compute power: Power = Real² + Imaginary²\n4. Normalize by window length\n5. Plot power vs. period to create periodogram\n\nImprovements:\n- Welch's method: Average multiple overlapping windows\n- Bartlett's method: Average non-overlapping windows\n- Smoothing: Apply MA to periodogram for clearer peaks\n- Windowing: Reduce spectral leakage (Hamming, Hanning, etc.)\n\nApplications:\n- Dominant cycle identification\n- Multi-timeframe cycle analysis\n- Market regime detection (trending vs. cycling)\n- Automatic parameter optimization\n- Cycle strength measurement\n\nThink of a periodogram like a music equalizer display showing which frequencies (bass, midrange, treble) are loudest in a song. Instead of sound frequencies, you're looking at price cycle frequencies - the display shows you which cycle lengths are \"loud\" (have lots of energy) and which are \"quiet\" (barely present). When you see a tall bar at 20 periods, that means the market has a strong 20-bar rhythm right now. Traders use this visual spectrum to pick the best indicator settings instead of guessing blindly.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Periodogram_Based_Spectrum_Analysis.txt","hasFullInfo":true},{"id":54,"title":"Phase Accumulator","filename":"Phase_Accumulator.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Cycle phase tracking","overview":"The Phase Accumulator is a cycle measurement technique developed by John Ehlers that determines the dominant market cycle period by measuring phase at each bar using the arctangent of the Quadrature/InPhase ratio, then looking backward and accumulating the phase changes until they sum to 360 degrees (one complete cycle). At each new sample, the method calculates the incremental phase change (delta phase) between successive bars, then counts backward through historical data adding up these delta phases - when the accumulated phases reach 360 degrees, that lookback distance represents the average cycle period. This approach is considered the easiest to comprehend among cycle measurement methods and always uses exactly one full cycle's worth of historical data.","formula":"Calculation Process:\n1. Calculate Hilbert Transform components:\n   - InPhase (I) = real component  \n   - Quadrature (Q) = imaginary component\n2. Measure instantaneous phase: Phase = arctan(Q / I)\n3. Calculate delta phase: DeltaPhase = Phase[0] - Phase[1]\n4. Look backward, accumulating delta phases\n5. When sum of delta phases ≥ 360°, that bar count = Period\n6. Repeat for each new bar\n\nKey Features:\n- Uses exactly one cycle of historical data\n- Lookback typically limited to reasonable range (e.g., 10-50 bars)\n- Phase measured in degrees (360° = one complete cycle)\n- More stable than instantaneous methods","parameters":"","intuition":"Think of it like counting how many steps it takes you to walk in a complete circle. At every step, you measure how much you've turned (the phase change), then you look back at your previous steps and add up all those little turns. When all those turns add up to a full 360-degree rotation, you know \"Ah-ha! It took me THIS many steps to complete one circle.\" The Phase Accumulator does the same thing with market prices - it keeps adding up the tiny phase rotations until it completes a full cycle, telling you exactly how long that cycle lasted.","rawContent":"The Phase Accumulator is a cycle measurement technique developed by John Ehlers that determines the dominant market cycle period by measuring phase at each bar using the arctangent of the Quadrature/InPhase ratio, then looking backward and accumulating the phase changes until they sum to 360 degrees (one complete cycle). At each new sample, the method calculates the incremental phase change (delta phase) between successive bars, then counts backward through historical data adding up these delta phases - when the accumulated phases reach 360 degrees, that lookback distance represents the average cycle period. This approach is considered the easiest to comprehend among cycle measurement methods and always uses exactly one full cycle's worth of historical data.\n\nCalculation Process:\n1. Calculate Hilbert Transform components:\n   - InPhase (I) = real component  \n   - Quadrature (Q) = imaginary component\n2. Measure instantaneous phase: Phase = arctan(Q / I)\n3. Calculate delta phase: DeltaPhase = Phase[0] - Phase[1]\n4. Look backward, accumulating delta phases\n5. When sum of delta phases ≥ 360°, that bar count = Period\n6. Repeat for each new bar\n\nKey Features:\n- Uses exactly one cycle of historical data\n- Lookback typically limited to reasonable range (e.g., 10-50 bars)\n- Phase measured in degrees (360° = one complete cycle)\n- More stable than instantaneous methods\n\nThink of it like counting how many steps it takes you to walk in a complete circle. At every step, you measure how much you've turned (the phase change), then you look back at your previous steps and add up all those little turns. When all those turns add up to a full 360-degree rotation, you know \"Ah-ha! It took me THIS many steps to complete one circle.\" The Phase Accumulator does the same thing with market prices - it keeps adding up the tiny phase rotations until it completes a full cycle, telling you exactly how long that cycle lasted.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Phase_Accumulator.txt","hasFullInfo":true},{"id":55,"title":"Smoothed RSI Inverse Fisher Transform (Vervoort)","filename":"Smoothed_RSI_Inverse_Fisher_Transform_Vervoort.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Gaussian PDF transformation","overview":"The Smoothed RSI Inverse Fisher Transform, developed by Sylvain Vervoort, is an evolution of John Ehlers' Inverse Fisher Transform that applies multiple layers of smoothing to create clearer, faster turning points for trading decisions. The indicator first smooths price with a \"rainbow\" weighted moving average (10 nested LWMAs), calculates RSI from this smoothed price, applies Vervoort's zero-lag EMA smoothing to the RSI, and finally transforms the result with the inverse Fisher function. This multi-stage process produces exceptionally clear buy/sell signals with reduced noise while maintaining responsiveness to genuine price changes.","formula":"Formula Process:\n1. Rainbow WMA: Apply 10 nested and re-weighted LWMA(2) to price\n2. RSI Calculation: RSI = RSI(smoothed_price, period)\n3. Zero-Lag EMA: Smooth RSI with Vervoort zero-lag EMA\n4. Inverse Fisher: IFT = (exp(2*V) - 1) / (exp(2*V) + 1)\n   Where V = normalized smoothed RSI value\n\nDefault Parameters:\n- RSI Period: 4 (Vervoort default) or 5 (Ehlers default)\n- EMA Period: 4 for zero-lag smoothing\n- Output range: -10 to +110 (with key levels at 12 and 88)\n\nTrading Signals:\n- Buy: Breakout above 12 level\n- Sell: Breakdown below 88 level\n- Best used with slow stochastic and ARSI for confirmation","parameters":"","intuition":"Think of this as taking a noisy RSI signal and running it through a sophisticated car wash with multiple stages - first the price gets smoothed out gently, then RSI is calculated from that cleaner data, then it gets another polish with zero-lag smoothing, and finally it's compressed into crystal-clear buy/sell zones. Instead of squinting at fuzzy signals wondering \"should I trade this?\", you get sharp, definitive moments that say \"Yes, NOW!\" It's like the difference between trying to read smudged handwriting versus crisp, printed text.","rawContent":"The Smoothed RSI Inverse Fisher Transform, developed by Sylvain Vervoort, is an evolution of John Ehlers' Inverse Fisher Transform that applies multiple layers of smoothing to create clearer, faster turning points for trading decisions. The indicator first smooths price with a \"rainbow\" weighted moving average (10 nested LWMAs), calculates RSI from this smoothed price, applies Vervoort's zero-lag EMA smoothing to the RSI, and finally transforms the result with the inverse Fisher function. This multi-stage process produces exceptionally clear buy/sell signals with reduced noise while maintaining responsiveness to genuine price changes.\n\nFormula Process:\n1. Rainbow WMA: Apply 10 nested and re-weighted LWMA(2) to price\n2. RSI Calculation: RSI = RSI(smoothed_price, period)\n3. Zero-Lag EMA: Smooth RSI with Vervoort zero-lag EMA\n4. Inverse Fisher: IFT = (exp(2*V) - 1) / (exp(2*V) + 1)\n   Where V = normalized smoothed RSI value\n\nDefault Parameters:\n- RSI Period: 4 (Vervoort default) or 5 (Ehlers default)\n- EMA Period: 4 for zero-lag smoothing\n- Output range: -10 to +110 (with key levels at 12 and 88)\n\nTrading Signals:\n- Buy: Breakout above 12 level\n- Sell: Breakdown below 88 level\n- Best used with slow stochastic and ARSI for confirmation\n\nThink of this as taking a noisy RSI signal and running it through a sophisticated car wash with multiple stages - first the price gets smoothed out gently, then RSI is calculated from that cleaner data, then it gets another polish with zero-lag smoothing, and finally it's compressed into crystal-clear buy/sell zones. Instead of squinting at fuzzy signals wondering \"should I trade this?\", you get sharp, definitive moments that say \"Yes, NOW!\" It's like the difference between trying to read smudged handwriting versus crisp, printed text.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Smoothed_RSI_Inverse_Fisher_Transform_Vervoort.txt","hasFullInfo":true},{"id":56,"title":"Spectral Dilation Removal","filename":"Spectral_Dilation_and_Variable_Period_Convolution.txt","group":"group 3","groupNum":3,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Stochastic effect removal","overview":"Spectral Dilation is the artificial broadening of spectral peaks in oscillators caused by using a fixed lookback period when the actual cycle period varies, creating a smeared-out appearance that reduces the indicator's ability to identify precise turning points. When an indicator like Stochastic uses a fixed 14-bar lookback but the actual cycle is 20 bars, the mismatch causes the indicator's peaks and valleys to spread out (dilate) across multiple bars instead of forming sharp, distinct extremes. Removing spectral dilation involves adapting the indicator's lookback period to match the measured dominant cycle, ensuring the indicator stays synchronized with market rhythms and produces crisp, well-defined signals.","formula":"The Problem:\nFixed Period = 14 bars\nActual Cycle = 20 bars\nResult: Indicator peaks are \"smeared\" across 6+ bars\nEffect: Unclear signals, reduced amplitude, poor timing\n\nThe Solution:\nMeasure dominant cycle period (e.g., 20 bars)\nSet indicator lookback = DominantCycle / 2 (e.g., 10 bars)\nResult: Sharp peaks aligned with cycle extremes\nEffect: Clear signals, full amplitude, precise timing\n\nImplementation Methods:\n\n1. Roofing Filter Approach:\n   - Apply high-pass filter to remove spectral dilation\n   - Then apply indicator to filtered data\n   - Removes very long-period components\n\n2. Cycle-Adaptive Period:\n   - Measure dominant cycle with DFT, Hilbert Transform, etc.\n   - Set IndicatorPeriod = DominantCycle / 2\n   - Recalculate indicator with adaptive period\n\n3. Combination Approach:\n   - Roofing filter removes trend/long cycles\n   - Adaptive period matches remaining cycle\n   - Produces cleanest signals\n\nApplications:\n- MESA Stochastic (roofing filter + adaptive period)\n- Cycle-tuned RSI\n- Adaptive CCI\n- Any fixed-period oscillator improvement\n\nBenefits:\n- Sharper, more distinct peaks/valleys\n- Better timing of reversals\n- Increased signal amplitude\n- Reduced false signals\n- Improved synchronization with market","parameters":"","intuition":"Think of spectral dilation like trying to take a photo of a spinning fan with a slow shutter speed - you get a blurry mess instead of sharp blades. The fan (cycle) is spinning at one speed, but your camera settings (indicator period) don't match, so everything blurs together. Spectral dilation removal is like using the right shutter speed - suddenly you can see the individual blades clearly. In trading, removing spectral dilation means your indicators produce sharp, crisp signals instead of mushy, unclear peaks that leave you wondering \"Is THIS the top or should I wait?\"\n\n\n---\n\nConvolution with Variable-Period Sine/Cosine\n\nConvolution with Variable-Period Sine/Cosine correlates price data with sine and cosine waves whose period adapts to the measured dominant cycle, creating an adaptive bandpass filter that stays synchronized with changing market rhythms. Instead of using fixed-period sine/cosine waves (which lose effectiveness when cycles change), this technique continuously adjusts the test waveform period based on real-time cycle measurements, ensuring maximum correlation when the market is cycling and minimal response during trend modes. The result is a highly responsive cycle indicator that automatically tunes itself to market conditions.\n\nStandard Convolution:\nCorrelation = Σ(Price[i] * sin(2πi / FixedPeriod))\n\nAdaptive Convolution:\nCorrelation = Σ(Price[i] * sin(2πi / MeasuredPeriod[i]))\n\nWhere:\n- MeasuredPeriod[i] = dominant cycle at bar i (from Hilbert Transform, etc.)\n- Period adapts in real-time\n- Sine/Cosine waves stretch/compress to match current cycle\n\nImplementation:\n1. Measure dominant cycle period (Hilbert, DFT, etc.)\n2. Generate sine wave: sin(2πi / DominantCycle)\n3. Generate cosine wave: cos(2πi / DominantCycle)\n4. Correlate price with adaptive sine (I component)\n5. Correlate price with adaptive cosine (Q component)\n6. Combine: Amplitude = √(I² + Q²), Phase = arctan(Q/I)\n\nAdvantages:\n- Self-tuning to market cycles\n- No manual period optimization needed\n- Maximizes correlation during cyclic periods\n- Minimizes false signals during trends\n- Automatic regime adaptation\n\nApplications:\n- MESA Sine Wave indicator\n- Correlation Cycle Indicator\n- Adaptive bandpass filtering\n- Cycle strength measurement\n- Phase-based trading signals\n\nComparison:\nFixed-Period: May miss cycles, poor correlation when cycle changes\nVariable-Period: Follows cycle changes, maintains strong correlation\n\nThink of this like a dance partner who automatically adjusts to your rhythm. If you speed up, they speed up. If you slow down, they slow down. They're always perfectly in sync because they're constantly sensing your tempo and matching it. Variable-period convolution does the same thing with market cycles - it measures how fast the market is \"dancing\" (cycling) and adjusts the indicator's internal rhythm to match perfectly. No more stepping on toes (false signals) because the indicator is always in sync with the market's actual tempo.","rawContent":"Spectral Dilation is the artificial broadening of spectral peaks in oscillators caused by using a fixed lookback period when the actual cycle period varies, creating a smeared-out appearance that reduces the indicator's ability to identify precise turning points. When an indicator like Stochastic uses a fixed 14-bar lookback but the actual cycle is 20 bars, the mismatch causes the indicator's peaks and valleys to spread out (dilate) across multiple bars instead of forming sharp, distinct extremes. Removing spectral dilation involves adapting the indicator's lookback period to match the measured dominant cycle, ensuring the indicator stays synchronized with market rhythms and produces crisp, well-defined signals.\n\nThe Problem:\nFixed Period = 14 bars\nActual Cycle = 20 bars\nResult: Indicator peaks are \"smeared\" across 6+ bars\nEffect: Unclear signals, reduced amplitude, poor timing\n\nThe Solution:\nMeasure dominant cycle period (e.g., 20 bars)\nSet indicator lookback = DominantCycle / 2 (e.g., 10 bars)\nResult: Sharp peaks aligned with cycle extremes\nEffect: Clear signals, full amplitude, precise timing\n\nImplementation Methods:\n\n1. Roofing Filter Approach:\n   - Apply high-pass filter to remove spectral dilation\n   - Then apply indicator to filtered data\n   - Removes very long-period components\n\n2. Cycle-Adaptive Period:\n   - Measure dominant cycle with DFT, Hilbert Transform, etc.\n   - Set IndicatorPeriod = DominantCycle / 2\n   - Recalculate indicator with adaptive period\n\n3. Combination Approach:\n   - Roofing filter removes trend/long cycles\n   - Adaptive period matches remaining cycle\n   - Produces cleanest signals\n\nApplications:\n- MESA Stochastic (roofing filter + adaptive period)\n- Cycle-tuned RSI\n- Adaptive CCI\n- Any fixed-period oscillator improvement\n\nBenefits:\n- Sharper, more distinct peaks/valleys\n- Better timing of reversals\n- Increased signal amplitude\n- Reduced false signals\n- Improved synchronization with market\n\nThink of spectral dilation like trying to take a photo of a spinning fan with a slow shutter speed - you get a blurry mess instead of sharp blades. The fan (cycle) is spinning at one speed, but your camera settings (indicator period) don't match, so everything blurs together. Spectral dilation removal is like using the right shutter speed - suddenly you can see the individual blades clearly. In trading, removing spectral dilation means your indicators produce sharp, crisp signals instead of mushy, unclear peaks that leave you wondering \"Is THIS the top or should I wait?\"\n\n\n---\n\nConvolution with Variable-Period Sine/Cosine\n\nConvolution with Variable-Period Sine/Cosine correlates price data with sine and cosine waves whose period adapts to the measured dominant cycle, creating an adaptive bandpass filter that stays synchronized with changing market rhythms. Instead of using fixed-period sine/cosine waves (which lose effectiveness when cycles change), this technique continuously adjusts the test waveform period based on real-time cycle measurements, ensuring maximum correlation when the market is cycling and minimal response during trend modes. The result is a highly responsive cycle indicator that automatically tunes itself to market conditions.\n\nStandard Convolution:\nCorrelation = Σ(Price[i] * sin(2πi / FixedPeriod))\n\nAdaptive Convolution:\nCorrelation = Σ(Price[i] * sin(2πi / MeasuredPeriod[i]))\n\nWhere:\n- MeasuredPeriod[i] = dominant cycle at bar i (from Hilbert Transform, etc.)\n- Period adapts in real-time\n- Sine/Cosine waves stretch/compress to match current cycle\n\nImplementation:\n1. Measure dominant cycle period (Hilbert, DFT, etc.)\n2. Generate sine wave: sin(2πi / DominantCycle)\n3. Generate cosine wave: cos(2πi / DominantCycle)\n4. Correlate price with adaptive sine (I component)\n5. Correlate price with adaptive cosine (Q component)\n6. Combine: Amplitude = √(I² + Q²), Phase = arctan(Q/I)\n\nAdvantages:\n- Self-tuning to market cycles\n- No manual period optimization needed\n- Maximizes correlation during cyclic periods\n- Minimizes false signals during trends\n- Automatic regime adaptation\n\nApplications:\n- MESA Sine Wave indicator\n- Correlation Cycle Indicator\n- Adaptive bandpass filtering\n- Cycle strength measurement\n- Phase-based trading signals\n\nComparison:\nFixed-Period: May miss cycles, poor correlation when cycle changes\nVariable-Period: Follows cycle changes, maintains strong correlation\n\nThink of this like a dance partner who automatically adjusts to your rhythm. If you speed up, they speed up. If you slow down, they slow down. They're always perfectly in sync because they're constantly sensing your tempo and matching it. Variable-period convolution does the same thing with market cycles - it measures how fast the market is \"dancing\" (cycling) and adjusts the indicator's internal rhythm to match perfectly. No more stepping on toes (false signals) because the indicator is always in sync with the market's actual tempo.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Spectral_Dilation_and_Variable_Period_Convolution.txt","hasFullInfo":true},{"id":57,"title":"Stochastic RSI Transformation","filename":"Stochastic_RSI_Transformation.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"RSI applied to model","overview":"The Stochastic RSI Transformation applies the Stochastic oscillator formula to RSI values instead of price, creating a momentum indicator that oscillates between 0 and 100 and highlights extreme overbought/oversold conditions in the RSI itself. This transformation first calculates a standard RSI, then applies stochastic normalization to that RSI value by measuring where the current RSI falls within its own high-low range over a specified lookback period. The result is a more sensitive, faster-moving indicator that reaches extreme levels more frequently than standard RSI, making it useful for identifying short-term reversal opportunities.","formula":"Formula:\nStochRSI = (RSI - RSI_Low) / (RSI_High - RSI_Low) * 100","parameters":"Where:\n- RSI = Current RSI value\n- RSI_Low = Lowest RSI value over lookback period (typically 14 bars)\n- RSI_High = Highest RSI value over lookback period\n- Result scaled to 0-100 range\n\nTypical Parameters:\n- RSI Period: 14\n- Stochastic Period: 14\n- %K smoothing: 3 (optional)\n- %D signal line: 3-period SMA of %K\n\nTrading Signals:\n- Overbought: StochRSI > 80\n- Oversold: StochRSI < 20\n- Bullish: StochRSI crosses above 20\n- Bearish: StochRSI crosses below 80\n\nImagine RSI as a speedometer showing how fast the market is moving. Now imagine putting THAT speedometer's needle position through another calculation that asks \"Where is this speedometer needle compared to its usual range?\" That's Stochastic RSI - it's measuring the extremeness of momentum itself. So while RSI might be sitting at 60 (not extreme), Stochastic RSI might show 90 because that 60 reading is actually at the high end of where RSI has been lately. It's like noticing your friend is driving fast not just by looking at their speed, but by realizing they're going faster than they usually do.","intuition":"","rawContent":"The Stochastic RSI Transformation applies the Stochastic oscillator formula to RSI values instead of price, creating a momentum indicator that oscillates between 0 and 100 and highlights extreme overbought/oversold conditions in the RSI itself. This transformation first calculates a standard RSI, then applies stochastic normalization to that RSI value by measuring where the current RSI falls within its own high-low range over a specified lookback period. The result is a more sensitive, faster-moving indicator that reaches extreme levels more frequently than standard RSI, making it useful for identifying short-term reversal opportunities.\n\nFormula:\nStochRSI = (RSI - RSI_Low) / (RSI_High - RSI_Low) * 100\n\nWhere:\n- RSI = Current RSI value\n- RSI_Low = Lowest RSI value over lookback period (typically 14 bars)\n- RSI_High = Highest RSI value over lookback period\n- Result scaled to 0-100 range\n\nTypical Parameters:\n- RSI Period: 14\n- Stochastic Period: 14\n- %K smoothing: 3 (optional)\n- %D signal line: 3-period SMA of %K\n\nTrading Signals:\n- Overbought: StochRSI > 80\n- Oversold: StochRSI < 20\n- Bullish: StochRSI crosses above 20\n- Bearish: StochRSI crosses below 80\n\nImagine RSI as a speedometer showing how fast the market is moving. Now imagine putting THAT speedometer's needle position through another calculation that asks \"Where is this speedometer needle compared to its usual range?\" That's Stochastic RSI - it's measuring the extremeness of momentum itself. So while RSI might be sitting at 60 (not extreme), Stochastic RSI might show 90 because that 60 reading is actually at the high end of where RSI has been lately. It's like noticing your friend is driving fast not just by looking at their speed, but by realizing they're going faster than they usually do.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Stochastic_RSI_Transformation.txt","hasFullInfo":true},{"id":58,"title":"Volume-Weighted Ehlers Filter","filename":"Volume_Weighted_Ehlers_Filter.txt","group":"group 3","groupNum":3,"categoryId":8,"categoryTitle":"8. EHLERS TRANSFORMS & ADVANCED INDICATORS","subcategory":"General","summary":"Volume coefficient weighting","overview":"The Volume-Weighted Ehlers Filter incorporates volume data as weighting coefficients in Ehlers' digital signal processing filters, giving more importance to price movements that occur on higher volume and less weight to low-volume price changes. This modification of standard Ehlers filters (like Super Smoother, Butterworth, etc.) multiplies the filter coefficients by volume ratios, ensuring that the filtered output reflects not just price movement but the conviction behind those moves as measured by trading volume. The result is a filter that responds more strongly to high-volume price moves while dampening noise from low-volume fluctuations.","formula":"Implementation Approach:\n1. Calculate standard Ehlers filter coefficients (e.g., Butterworth, Super Smoother)\n2. Normalize volume: Vol_Ratio = Volume[i] / Avg_Volume\n3. Apply volume weighting: Weighted_Coeff = Filter_Coeff * Vol_Ratio\n4. Renormalize coefficients to sum to 1\n5. Apply weighted filter to price data\n\nKey Concept:\nStandard Filter: Output = Σ(Coefficient[i] * Price[i])\nVolume-Weighted: Output = Σ((Coefficient[i] * Volume_Weight[i]) * Price[i])\n\nApplications:\n- Volume-weighted Super Smoother\n- Volume-weighted instantaneous trendline\n- Volume-weighted cycle measurement\n- More responsive to institutional activity\n- Better trend confirmation\n\nAdvantages:\n- Ignores low-volume noise\n- Emphasizes meaningful price moves\n- Better for thinly traded instruments\n- Reduces false signals from low-volume wicks\n- Aligns with \"volume confirms trend\" principle","parameters":"","intuition":"Think of it like listening to a crowd's opinion, but giving more weight to people who are really committed. If someone whispers their view (low volume), you barely hear it. But if someone shouts their opinion loudly (high volume), you pay attention. A volume-weighted filter does the same - it mostly ignores price moves that happen on tiny volume (probably just noise or a few traders messing around) and focuses on price moves with serious volume behind them (where real money and conviction are involved). It's filtering out the whispers and listening to the shouts.","rawContent":"The Volume-Weighted Ehlers Filter incorporates volume data as weighting coefficients in Ehlers' digital signal processing filters, giving more importance to price movements that occur on higher volume and less weight to low-volume price changes. This modification of standard Ehlers filters (like Super Smoother, Butterworth, etc.) multiplies the filter coefficients by volume ratios, ensuring that the filtered output reflects not just price movement but the conviction behind those moves as measured by trading volume. The result is a filter that responds more strongly to high-volume price moves while dampening noise from low-volume fluctuations.\n\nImplementation Approach:\n1. Calculate standard Ehlers filter coefficients (e.g., Butterworth, Super Smoother)\n2. Normalize volume: Vol_Ratio = Volume[i] / Avg_Volume\n3. Apply volume weighting: Weighted_Coeff = Filter_Coeff * Vol_Ratio\n4. Renormalize coefficients to sum to 1\n5. Apply weighted filter to price data\n\nKey Concept:\nStandard Filter: Output = Σ(Coefficient[i] * Price[i])\nVolume-Weighted: Output = Σ((Coefficient[i] * Volume_Weight[i]) * Price[i])\n\nApplications:\n- Volume-weighted Super Smoother\n- Volume-weighted instantaneous trendline\n- Volume-weighted cycle measurement\n- More responsive to institutional activity\n- Better trend confirmation\n\nAdvantages:\n- Ignores low-volume noise\n- Emphasizes meaningful price moves\n- Better for thinly traded instruments\n- Reduces false signals from low-volume wicks\n- Aligns with \"volume confirms trend\" principle\n\nThink of it like listening to a crowd's opinion, but giving more weight to people who are really committed. If someone whispers their view (low volume), you barely hear it. But if someone shouts their opinion loudly (high volume), you pay attention. A volume-weighted filter does the same - it mostly ignores price moves that happen on tiny volume (probably just noise or a few traders messing around) and focuses on price moves with serious volume behind them (where real money and conviction are involved). It's filtering out the whispers and listening to the shouts.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 3/Volume_Weighted_Ehlers_Filter.txt","hasFullInfo":true},{"id":59,"title":"Adaptive Zero Lag EMA","filename":"Adaptive_Zero_Lag_EMA.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Cycle-adaptive zero-lag","overview":"Adaptive Zero Lag EMA combines zero-lag error correction with cycle-based period adaptation. The period of the moving average adjusts based on the dominant market cycle, and the zero-lag mechanism eliminates the lag from that adaptive period, creating a moving average that's both responsive and appropriately smoothed for current market conditions.","formula":"Calculation steps:\n1. Measure dominant cycle period (using Ehlers' methods like Hilbert Transform)\n2. Set adaptive period: AdaptivePeriod = f(DominantCycle)\n3. Calculate EMA with adaptive period: EMA1 = EMA(Price, AdaptivePeriod)\n4. Calculate error correction: Error = Price - EMA1\n5. Calculate adaptive gain: Gain = 2 / (AdaptivePeriod + 1)\n6. Adaptive ZLEMA: AZLEMA = EMA1 + (Gain * Error)\n\nThe adaptation makes the indicator faster in trending markets (shorter cycles) and smoother in ranging markets (longer cycles).","parameters":"","intuition":"Adaptive Zero Lag EMA is like a chameleon moving average that changes its behavior based on what the market is doing. In fast choppy markets, it uses a short period and compensates for lag aggressively. In slow trending markets, it uses a longer period with gentler lag compensation. It's always tuned to the market's current \"rhythm.\"","rawContent":"Adaptive Zero Lag EMA combines zero-lag error correction with cycle-based period adaptation. The period of the moving average adjusts based on the dominant market cycle, and the zero-lag mechanism eliminates the lag from that adaptive period, creating a moving average that's both responsive and appropriately smoothed for current market conditions.\n\nCalculation steps:\n1. Measure dominant cycle period (using Ehlers' methods like Hilbert Transform)\n2. Set adaptive period: AdaptivePeriod = f(DominantCycle)\n3. Calculate EMA with adaptive period: EMA1 = EMA(Price, AdaptivePeriod)\n4. Calculate error correction: Error = Price - EMA1\n5. Calculate adaptive gain: Gain = 2 / (AdaptivePeriod + 1)\n6. Adaptive ZLEMA: AZLEMA = EMA1 + (Gain * Error)\n\nThe adaptation makes the indicator faster in trending markets (shorter cycles) and smoother in ranging markets (longer cycles).\n\nAdaptive Zero Lag EMA is like a chameleon moving average that changes its behavior based on what the market is doing. In fast choppy markets, it uses a short period and compensates for lag aggressively. In slow trending markets, it uses a longer period with gentler lag compensation. It's always tuned to the market's current \"rhythm.\"","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Adaptive_Zero_Lag_EMA.txt","hasFullInfo":true},{"id":60,"title":"Correlation Cycle Indicator","filename":"Correlation_Cycle_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Cycle correlation","overview":"Correlation Cycle Indicator measures the correlation between price and its lagged versions at different periods to identify the dominant cycle. High correlation at a specific lag indicates a strong cycle at that period. This technique automates cycle period detection by finding which lag produces maximum correlation with current price.","formula":"Calculation for each test period P:\n1. For period P in range (e.g., 8 to 50):\n   Correlation[P] = Correlation(Price, Price shifted by P bars, over lookback window)\n\n2. Find period with maximum correlation:\n   DominantCycle = argmax(Correlation[P])\n\nDetailed correlation calculation:\nFor each period P:\n   Sx = Σ(Price[i])\n   Sy = Σ(Price[i-P])\n   Sxx = Σ(Price[i]²)\n   Syy = Σ(Price[i-P]²)\n   Sxy = Σ(Price[i] * Price[i-P])\n\nR[P] = (N*Sxy - Sx*Sy) / sqrt((N*Sxx - Sx²) * (N*Syy - Sy²))\n\nThe period P with highest R is the dominant cycle.","parameters":"","intuition":"Correlation Cycle Indicator is like trying to find the echo in a canyon by clapping your hands at different intervals. You clap, wait 1 second, clap again - is there an echo pattern? Try 2 seconds, 3 seconds, etc. When you hit the right interval (say, 5 seconds), the echo syncs perfectly with your claps. Similarly, this indicator tests different cycle lengths to find which one \"echoes\" or correlates best with current price patterns.","rawContent":"Correlation Cycle Indicator measures the correlation between price and its lagged versions at different periods to identify the dominant cycle. High correlation at a specific lag indicates a strong cycle at that period. This technique automates cycle period detection by finding which lag produces maximum correlation with current price.\n\nCalculation for each test period P:\n1. For period P in range (e.g., 8 to 50):\n   Correlation[P] = Correlation(Price, Price shifted by P bars, over lookback window)\n\n2. Find period with maximum correlation:\n   DominantCycle = argmax(Correlation[P])\n\nDetailed correlation calculation:\nFor each period P:\n   Sx = Σ(Price[i])\n   Sy = Σ(Price[i-P])\n   Sxx = Σ(Price[i]²)\n   Syy = Σ(Price[i-P]²)\n   Sxy = Σ(Price[i] * Price[i-P])\n   \n   R[P] = (N*Sxy - Sx*Sy) / sqrt((N*Sxx - Sx²) * (N*Syy - Sy²))\n\nThe period P with highest R is the dominant cycle.\n\nCorrelation Cycle Indicator is like trying to find the echo in a canyon by clapping your hands at different intervals. You clap, wait 1 second, clap again - is there an echo pattern? Try 2 seconds, 3 seconds, etc. When you hit the right interval (say, 5 seconds), the echo syncs perfectly with your claps. Similarly, this indicator tests different cycle lengths to find which one \"echoes\" or correlates best with current price patterns.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Correlation_Cycle_Indicator.txt","hasFullInfo":true},{"id":61,"title":"Cosine Lead Indicator","filename":"Cosine_Lead_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Phase-leading cosine","overview":"Cosine Lead Indicator is a 90-degree phase-advanced version of the sine wave cycle indicator. Since cosine is simply sine shifted by 90 degrees (π/2), it naturally leads the sine wave by one-quarter cycle, making it useful for predicting upcoming cycle extremes and zero crossings.","formula":"Mathematical relationship:\ncos(x) = sin(x + π/2)\n\nIn cycle analysis context:\n1. Measure dominant cycle and calculate sine wave:\n   Sine = sin(Phase)\n\n2. Cosine lead indicator:\n   CosineLead = cos(Phase) = sin(Phase + π/2)\n\nOr using Hilbert Transform components (I and Q):\n   Sine = I / √(I² + Q²)\n   CosineLead = Q / √(I² + Q²)","parameters":"","intuition":"Trading interpretation:\n- When CosineLead crosses zero upward, Sine will peak in ~1/4 cycle\n- When CosineLead crosses zero downward, Sine will trough in ~1/4 cycle\n- When CosineLead peaks, Sine crosses zero upward in ~1/4 cycle\n\nCosine Lead Indicator is mathematically identical to a 90-degree lead sine wave. Think of it like watching the moon phases: if the sine wave is the moon, the cosine is the same moon but you're looking at it one week earlier. When the cosine is at full (peak), you know the sine will be at full in one-quarter of the cycle. It's just a different viewpoint of the same cyclic pattern.","rawContent":"Cosine Lead Indicator is a 90-degree phase-advanced version of the sine wave cycle indicator. Since cosine is simply sine shifted by 90 degrees (π/2), it naturally leads the sine wave by one-quarter cycle, making it useful for predicting upcoming cycle extremes and zero crossings.\n\nMathematical relationship:\ncos(x) = sin(x + π/2)\n\nIn cycle analysis context:\n1. Measure dominant cycle and calculate sine wave:\n   Sine = sin(Phase)\n   \n2. Cosine lead indicator:\n   CosineLead = cos(Phase) = sin(Phase + π/2)\n\nOr using Hilbert Transform components (I and Q):\n   Sine = I / √(I² + Q²)\n   CosineLead = Q / √(I² + Q²)\n\nTrading interpretation:\n- When CosineLead crosses zero upward, Sine will peak in ~1/4 cycle\n- When CosineLead crosses zero downward, Sine will trough in ~1/4 cycle\n- When CosineLead peaks, Sine crosses zero upward in ~1/4 cycle\n\nCosine Lead Indicator is mathematically identical to a 90-degree lead sine wave. Think of it like watching the moon phases: if the sine wave is the moon, the cosine is the same moon but you're looking at it one week earlier. When the cosine is at full (peak), you know the sine will be at full in one-quarter of the cycle. It's just a different viewpoint of the same cyclic pattern.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Cosine_Lead_Indicator.txt","hasFullInfo":true},{"id":62,"title":"Cyber Cycle Indicator (IFT-Transformed)","filename":"Cyber_Cycle_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Inverse Fisher cycle","overview":"Cyber Cycle Indicator isolates the cycle component of price and then applies the Inverse Fisher Transform (IFT) to create a bounded oscillator between -1 and +1. Developed by John Ehlers, it combines cycle extraction with transformation to enhance signals and reduce noise, making cycle turning points more visually distinct.","formula":"Calculation:\n1. Remove trend with high-pass filter:\n   alpha = (1 - sin(2π / Period)) / cos(2π / Period)\n   HP = alpha/2 * (Price - Price[1]) + (1 - alpha) * HP[1]\n\n2. Apply Super Smoother to get cycle:\n   Cycle = SuperSmoother(HP, Period/2)\n\n3. Apply Inverse Fisher Transform:\n   V1 = 0.1 * (Cycle - Cycle[5])  [scaled change]\n   IFT = (exp(2*V1) - 1) / (exp(2*V1) + 1)\n\nResult: CyberCycle bounded between -1 and +1, with sharp transitions at cycle turns.\n\nTypical Period: 20-40 bars","parameters":"","intuition":"Cyber Cycle Indicator is like extracting just the waves from ocean data, then compressing those waves to fit on a chart from -1 to +1. First it removes the tide (trend), leaving just the wave motion (cycle). Then the Inverse Fisher Transform squashes and stretches those waves so the peaks hit +1, troughs hit -1, and transitions are super-crisp. You get a clean, bounded oscillator that clearly shows cycle phases.","rawContent":"Cyber Cycle Indicator isolates the cycle component of price and then applies the Inverse Fisher Transform (IFT) to create a bounded oscillator between -1 and +1. Developed by John Ehlers, it combines cycle extraction with transformation to enhance signals and reduce noise, making cycle turning points more visually distinct.\n\nCalculation:\n1. Remove trend with high-pass filter:\n   alpha = (1 - sin(2π / Period)) / cos(2π / Period)\n   HP = alpha/2 * (Price - Price[1]) + (1 - alpha) * HP[1]\n\n2. Apply Super Smoother to get cycle:\n   Cycle = SuperSmoother(HP, Period/2)\n\n3. Apply Inverse Fisher Transform:\n   V1 = 0.1 * (Cycle - Cycle[5])  [scaled change]\n   IFT = (exp(2*V1) - 1) / (exp(2*V1) + 1)\n\nResult: CyberCycle bounded between -1 and +1, with sharp transitions at cycle turns.\n\nTypical Period: 20-40 bars\n\nCyber Cycle Indicator is like extracting just the waves from ocean data, then compressing those waves to fit on a chart from -1 to +1. First it removes the tide (trend), leaving just the wave motion (cycle). Then the Inverse Fisher Transform squashes and stretches those waves so the peaks hit +1, troughs hit -1, and transitions are super-crisp. You get a clean, bounded oscillator that clearly shows cycle phases.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Cyber_Cycle_Indicator.txt","hasFullInfo":true},{"id":63,"title":"Cyclic Component Indicator","filename":"Cyclic_Component_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Isolated cycle","overview":"Cyclic Component Indicator isolates and displays only the cyclic (oscillating) portion of price movement by removing the trend component. This is achieved through high-pass filtering or by subtracting a smoothed trendline from price. The result oscillates around zero, showing the pure cycle without trend influence.","formula":"Method 1 - High-Pass Filter:\nalpha = (1 - sin(2π / Period)) / cos(2π / Period)\nHP = alpha/2 * (Price - Price[1]) + (1 - alpha) * HP[1]\nCyclicComponent = HP\n\nMethod 2 - Price minus Trend:\nTrend = SuperSmoother(Price, Period)\nCyclicComponent = Price - Trend\n\nMethod 3 - Bandpass Filter:\nApply bandpass filter centered on dominant cycle frequency:\nCyclicComponent = BandpassFilter(Price, DCPeriod)\n\nThe cyclic component oscillates positive when price is above trend, negative when below.\n\nTypical Period: Based on dominant cycle measurement (20-40 bars)","parameters":"","intuition":"Cyclic Component Indicator is like recording someone talking while walking up stairs. Their voice (cycle) goes up and down naturally, but they're also climbing (trend). If you subtract the stair-climbing motion, you're left with just the natural up-and-down voice oscillations. Similarly, this indicator removes the price \"climbing\" (trend) to show just the natural market \"voice\" (cycle) oscillating around zero.","rawContent":"Cyclic Component Indicator isolates and displays only the cyclic (oscillating) portion of price movement by removing the trend component. This is achieved through high-pass filtering or by subtracting a smoothed trendline from price. The result oscillates around zero, showing the pure cycle without trend influence.\n\nMethod 1 - High-Pass Filter:\nalpha = (1 - sin(2π / Period)) / cos(2π / Period)\nHP = alpha/2 * (Price - Price[1]) + (1 - alpha) * HP[1]\nCyclicComponent = HP\n\nMethod 2 - Price minus Trend:\nTrend = SuperSmoother(Price, Period)\nCyclicComponent = Price - Trend\n\nMethod 3 - Bandpass Filter:\nApply bandpass filter centered on dominant cycle frequency:\nCyclicComponent = BandpassFilter(Price, DCPeriod)\n\nThe cyclic component oscillates positive when price is above trend, negative when below.\n\nTypical Period: Based on dominant cycle measurement (20-40 bars)\n\nCyclic Component Indicator is like recording someone talking while walking up stairs. Their voice (cycle) goes up and down naturally, but they're also climbing (trend). If you subtract the stair-climbing motion, you're left with just the natural up-and-down voice oscillations. Similarly, this indicator removes the price \"climbing\" (trend) to show just the natural market \"voice\" (cycle) oscillating around zero.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Cyclic_Component_Indicator.txt","hasFullInfo":true},{"id":64,"title":"Dominant Cycle Measurement","filename":"Dominant_Cycle_Measurement.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Period estimation","overview":"Dominant Cycle Measurement identifies the primary cycle period in price data using autocorrelation, Hilbert Transform, or spectral analysis. Developed by John Ehlers, it measures how long the market takes to complete one full cycle (peak to peak or trough to trough), allowing other indicators to adapt to current market rhythm.","formula":"Hilbert Transform method:\n1. Calculate InPhase and Quadrature components:\n   I = Price[i] components\n   Q = Hilbert-transformed components\n\n2. Calculate phase:\n   Phase = arctan(Q / I)\n\n3. Measure phase change:\n   DeltaPhase = Phase - Phase[1]\n\n4. Calculate period:\n   DCPeriod = 2π / DeltaPhase\n\n5. Limit and smooth:\n   DCPeriod = min(max(DCPeriod, MinPeriod), MaxPeriod)\n   DCPeriod = smooth(DCPeriod)\n\nAutocorrelation method:\nFind the lag with maximum correlation between price and lagged price.\n\nResult: A value (typically 10-50) representing the dominant cycle length in bars.","parameters":"","intuition":"Dominant Cycle Measurement is like having a stopwatch that measures how long it takes for waves to hit the beach. One wave hits, you start the timer, next similar wave hits, you stop it - that's your cycle period. The market does the same thing - it has a rhythm of ups and downs. Measuring this rhythm (say, 20 bars peak-to-peak) lets you tune all your other indicators to that beat.","rawContent":"Dominant Cycle Measurement identifies the primary cycle period in price data using autocorrelation, Hilbert Transform, or spectral analysis. Developed by John Ehlers, it measures how long the market takes to complete one full cycle (peak to peak or trough to trough), allowing other indicators to adapt to current market rhythm.\n\nHilbert Transform method:\n1. Calculate InPhase and Quadrature components:\n   I = Price[i] components\n   Q = Hilbert-transformed components\n   \n2. Calculate phase:\n   Phase = arctan(Q / I)\n   \n3. Measure phase change:\n   DeltaPhase = Phase - Phase[1]\n   \n4. Calculate period:\n   DCPeriod = 2π / DeltaPhase\n   \n5. Limit and smooth:\n   DCPeriod = min(max(DCPeriod, MinPeriod), MaxPeriod)\n   DCPeriod = smooth(DCPeriod)\n\nAutocorrelation method:\nFind the lag with maximum correlation between price and lagged price.\n\nResult: A value (typically 10-50) representing the dominant cycle length in bars.\n\nDominant Cycle Measurement is like having a stopwatch that measures how long it takes for waves to hit the beach. One wave hits, you start the timer, next similar wave hits, you stop it - that's your cycle period. The market does the same thing - it has a rhythm of ups and downs. Measuring this rhythm (say, 20 bars peak-to-peak) lets you tune all your other indicators to that beat.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Dominant_Cycle_Measurement.txt","hasFullInfo":true},{"id":65,"title":"Ehlers Decycler Oscillator","filename":"Ehlers_Decycler_Oscillator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"High-pass filtered price","overview":"Ehlers Decycler Oscillator is created by applying a high-pass filter to price data to remove the cyclic component, leaving only the trend. The oscillator is then the difference between price and this trend (the removed cycles). It identifies overbought/oversold conditions by showing when price deviates significantly from the decycled trend.","formula":"Calculation:\n1. Apply high-pass filter to get trend (Decycler):\n   HP_alpha = (1 - sin(2π / HPPeriod)) / cos(2π / HPPeriod)\n   Decycler = HP_alpha/2 * (Price + Price[1]) + (1 - HP_alpha) * Decycler[1]\n\n2. Calculate oscillator:\n   Decycler_Oscillator = 100 * (Price - Decycler) / Price\n\nOr in separate steps:\n- Decycler = High-pass filtered price (the trend)\n- Oscillator = (Price - Decycler) / Price * 100\n\nTypical HPPeriod: 125 bars\n\nThe oscillator oscillates around zero, with positive values indicating price above trend and negative values indicating price below trend.","parameters":"","intuition":"Ehlers Decycler Oscillator is like measuring how far a car is bouncing above or below the road surface while driving. The \"Decycler\" finds the smooth road (trend), then the oscillator measures the car's suspension movement (cycles) above and below it. When the oscillator is high, you're bouncing way up (overbought). When it's low, you've compressed down (oversold).","rawContent":"Ehlers Decycler Oscillator is created by applying a high-pass filter to price data to remove the cyclic component, leaving only the trend. The oscillator is then the difference between price and this trend (the removed cycles). It identifies overbought/oversold conditions by showing when price deviates significantly from the decycled trend.\n\nCalculation:\n1. Apply high-pass filter to get trend (Decycler):\n   HP_alpha = (1 - sin(2π / HPPeriod)) / cos(2π / HPPeriod)\n   Decycler = HP_alpha/2 * (Price + Price[1]) + (1 - HP_alpha) * Decycler[1]\n\n2. Calculate oscillator:\n   Decycler_Oscillator = 100 * (Price - Decycler) / Price\n\nOr in separate steps:\n- Decycler = High-pass filtered price (the trend)\n- Oscillator = (Price - Decycler) / Price * 100\n\nTypical HPPeriod: 125 bars\n\nThe oscillator oscillates around zero, with positive values indicating price above trend and negative values indicating price below trend.\n\nEhlers Decycler Oscillator is like measuring how far a car is bouncing above or below the road surface while driving. The \"Decycler\" finds the smooth road (trend), then the oscillator measures the car's suspension movement (cycles) above and below it. When the oscillator is high, you're bouncing way up (overbought). When it's low, you've compressed down (oversold).","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Ehlers_Decycler_Oscillator.txt","hasFullInfo":true},{"id":66,"title":"Ehlers Instantaneous Trendline","filename":"Ehlers_Instantaneous_Trendline.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Adaptive trendline","overview":"Ehlers Instantaneous Trendline is an adaptive trendline that adjusts its characteristics based on the dominant cycle in the market. Developed by John Ehlers, it uses cycle measurement techniques to create a trendline that's neither too fast (whipsaw in ranging markets) nor too slow (lag in trending markets).","formula":"Basic calculation:\n1. Measure dominant cycle period using Hilbert Transform or autocorrelation\n2. Calculate adaptive alpha: alpha = 2 / (DCPeriod + 1)\n3. Apply to price with lag reduction:\n   ITrend = (alpha - alpha²/4) * Price + (alpha²/2) * Price[1] - (alpha - 3*alpha²/4) * Price[2] + 2*(1-alpha) * ITrend[1] - (1-alpha)² * ITrend[2]\n\nSimplified conceptual form:\nITrend = AdaptiveFilter(Price, DominantCyclePeriod)\n\nwhere the filter coefficients change as market cycles change.\n\nResult: A trendline that's smooth during ranging periods (long cycles) and responsive during trending periods (short cycles).","parameters":"","intuition":"Ehlers Instantaneous Trendline is like cruise control that adjusts not just to maintain speed, but changes its responsiveness based on road conditions. On a winding mountain road (choppy market), it smooths out your steering inputs more. On a straight highway (trending market), it responds quickly to any steering change. It's always \"tuned\" to match what the market is currently doing.","rawContent":"Ehlers Instantaneous Trendline is an adaptive trendline that adjusts its characteristics based on the dominant cycle in the market. Developed by John Ehlers, it uses cycle measurement techniques to create a trendline that's neither too fast (whipsaw in ranging markets) nor too slow (lag in trending markets).\n\nBasic calculation:\n1. Measure dominant cycle period using Hilbert Transform or autocorrelation\n2. Calculate adaptive alpha: alpha = 2 / (DCPeriod + 1)\n3. Apply to price with lag reduction:\n   ITrend = (alpha - alpha²/4) * Price + (alpha²/2) * Price[1] - (alpha - 3*alpha²/4) * Price[2] + 2*(1-alpha) * ITrend[1] - (1-alpha)² * ITrend[2]\n\nSimplified conceptual form:\nITrend = AdaptiveFilter(Price, DominantCyclePeriod)\n\nwhere the filter coefficients change as market cycles change.\n\nResult: A trendline that's smooth during ranging periods (long cycles) and responsive during trending periods (short cycles).\n\nEhlers Instantaneous Trendline is like cruise control that adjusts not just to maintain speed, but changes its responsiveness based on road conditions. On a winding mountain road (choppy market), it smooths out your steering inputs more. On a straight highway (trending market), it responds quickly to any steering change. It's always \"tuned\" to match what the market is currently doing.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Ehlers_Instantaneous_Trendline.txt","hasFullInfo":true},{"id":67,"title":"Error-Correcting (EC) Filter (Zero-Lag EMA Variant)","filename":"Error_Correcting_Filter.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Ehlers/Way method","overview":"Error-Correcting Filter, developed by Ehlers and Way, uses error feedback to eliminate lag from exponential moving averages. It continuously measures the difference between price and the EMA, then adds a multiple of that error back to \"push\" the EMA toward the current price, effectively predicting where the EMA should be.","formula":"EC Filter calculation:\n1. Calculate alpha: alpha = 2 / (Period + 1)\n2. Calculate basic EMA: EMA = alpha * Price + (1 - alpha) * EMA[1]\n3. Calculate error (lag): Error = Price - EMA\n4. Apply gain factor: Gain = alpha * alpha (or configurable)\n5. Error correction: EC = EMA + Gain * Error\n\nSimplified form:\nEC = EMA + (alpha^2) * (Price - EMA)\n\nOr equivalently:\nEC = (1 + alpha^2) * Price - alpha^2 * EMA\n\nThe alpha-squared gain provides optimal lag reduction while maintaining stability.","parameters":"","intuition":"Error-Correcting Filter is like a student who not only learns the lesson (basic EMA) but also notices their mistakes and corrects them immediately. If the EMA is lagging $2 behind price, the filter doesn't just show the lagging value - it adds back some of that $2 error to get closer to the real price. It's constantly learning from and fixing its own lag.","rawContent":"Error-Correcting Filter, developed by Ehlers and Way, uses error feedback to eliminate lag from exponential moving averages. It continuously measures the difference between price and the EMA, then adds a multiple of that error back to \"push\" the EMA toward the current price, effectively predicting where the EMA should be.\n\nEC Filter calculation:\n1. Calculate alpha: alpha = 2 / (Period + 1)\n2. Calculate basic EMA: EMA = alpha * Price + (1 - alpha) * EMA[1]\n3. Calculate error (lag): Error = Price - EMA\n4. Apply gain factor: Gain = alpha * alpha (or configurable)\n5. Error correction: EC = EMA + Gain * Error\n\nSimplified form:\nEC = EMA + (alpha^2) * (Price - EMA)\n\nOr equivalently:\nEC = (1 + alpha^2) * Price - alpha^2 * EMA\n\nThe alpha-squared gain provides optimal lag reduction while maintaining stability.\n\nError-Correcting Filter is like a student who not only learns the lesson (basic EMA) but also notices their mistakes and corrects them immediately. If the EMA is lagging $2 behind price, the filter doesn't just show the lagging value - it adds back some of that $2 error to get closer to the real price. It's constantly learning from and fixing its own lag.","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Error_Correcting_Filter.txt","hasFullInfo":true},{"id":68,"title":"Hilbert Transform - Instantaneous Trendline","filename":"Hilbert_Transform_Instantaneous_Trendline.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Instantaneous Trendline - Phase-based trend","overview":"Hilbert Transform Instantaneous Trendline uses the Hilbert Transform to create phase-based trend identification. It separates the trend component from the cyclic component by analyzing the instantaneous phase of the price signal, producing a smooth trendline that adapts to the dominant cycle in the market.","formula":"Calculation steps:\n1. Smooth price: Smooth = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10\n2. Compute Hilbert Transform components:\n   Detrender = (0.0962*Smooth + 0.5769*Smooth[2] - 0.5769*Smooth[4] - 0.0962*Smooth[6]) * (0.075*Period[1] + 0.54)\n3. Calculate InPhase and Quadrature components (I and Q)\n4. Calculate phase angle: Phase = arctan(Q / I)\n5. Calculate DCPeriod from phase\n6. Instantaneous Trendline = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10\n\nThe trendline adapts its smoothing based on the measured dominant cycle period.","parameters":"","intuition":"Hilbert Transform Instantaneous Trendline is like having a musical conductor who listens to the market's rhythm (cycle) and draws a smooth line that follows the melody (trend) while ignoring the individual notes (noise). It uses advanced math to figure out what \"beat\" the market is dancing to, then creates a trendline that moves at that same rhythm.","rawContent":"Hilbert Transform Instantaneous Trendline uses the Hilbert Transform to create phase-based trend identification. It separates the trend component from the cyclic component by analyzing the instantaneous phase of the price signal, producing a smooth trendline that adapts to the dominant cycle in the market.\n\nCalculation steps:\n1. Smooth price: Smooth = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10\n2. Compute Hilbert Transform components:\n   Detrender = (0.0962*Smooth + 0.5769*Smooth[2] - 0.5769*Smooth[4] - 0.0962*Smooth[6]) * (0.075*Period[1] + 0.54)\n3. Calculate InPhase and Quadrature components (I and Q)\n4. Calculate phase angle: Phase = arctan(Q / I)\n5. Calculate DCPeriod from phase\n6. Instantaneous Trendline = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10\n\nThe trendline adapts its smoothing based on the measured dominant cycle period.\n\nHilbert Transform Instantaneous Trendline is like having a musical conductor who listens to the market's rhythm (cycle) and draws a smooth line that follows the melody (trend) while ignoring the individual notes (noise). It uses advanced math to figure out what \"beat\" the market is dancing to, then creates a trendline that moves at that same rhythm.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Hilbert_Transform_Instantaneous_Trendline.txt","hasFullInfo":true},{"id":69,"title":"Hull Moving Average (HMA)","filename":"Hull_Moving_Average.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Weighted zero-lag","overview":"Hull Moving Average, developed by Alan Hull, dramatically reduces lag while maintaining smoothing by using weighted moving averages (WMA) in a nested calculation. It emphasizes recent data and uses a square root period to create a smooth, responsive moving average with minimal lag.","formula":"HMA calculation:\nHMA(n) = WMA(2 * WMA(n/2) - WMA(n), sqrt(n))\n\nStep-by-step:\n1. Calculate WMA with half period: WMA_half = WMA(Price, n/2)\n2. Calculate WMA with full period: WMA_full = WMA(Price, n)\n3. Calculate raw HMA: RawHMA = 2 * WMA_half - WMA_full\n4. Smooth with sqrt period: HMA = WMA(RawHMA, sqrt(n))\n\nExample with period 16:\n1. WMA_half = WMA(Price, 8)\n2. WMA_full = WMA(Price, 16)\n3. RawHMA = 2 * WMA_half - WMA_full\n4. HMA = WMA(RawHMA, 4)  [since sqrt(16) = 4]","parameters":"","intuition":"Hull Moving Average is like using two different speedometers in your car - one super-responsive (half period) and one slower (full period) - then calculating where you \"should\" be by doubling the fast reading and subtracting the slow one. Finally, you smooth that jumpy result just a little (sqrt period). You end up with a reading that's both quick to react and smooth enough to trust.","rawContent":"Hull Moving Average, developed by Alan Hull, dramatically reduces lag while maintaining smoothing by using weighted moving averages (WMA) in a nested calculation. It emphasizes recent data and uses a square root period to create a smooth, responsive moving average with minimal lag.\n\nHMA calculation:\nHMA(n) = WMA(2 * WMA(n/2) - WMA(n), sqrt(n))\n\nStep-by-step:\n1. Calculate WMA with half period: WMA_half = WMA(Price, n/2)\n2. Calculate WMA with full period: WMA_full = WMA(Price, n)\n3. Calculate raw HMA: RawHMA = 2 * WMA_half - WMA_full\n4. Smooth with sqrt period: HMA = WMA(RawHMA, sqrt(n))\n\nExample with period 16:\n1. WMA_half = WMA(Price, 8)\n2. WMA_full = WMA(Price, 16)\n3. RawHMA = 2 * WMA_half - WMA_full\n4. HMA = WMA(RawHMA, 4)  [since sqrt(16) = 4]\n\nHull Moving Average is like using two different speedometers in your car - one super-responsive (half period) and one slower (full period) - then calculating where you \"should\" be by doubling the fast reading and subtracting the slow one. Finally, you smooth that jumpy result just a little (sqrt period). You end up with a reading that's both quick to react and smooth enough to trust.","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Hull_Moving_Average.txt","hasFullInfo":true},{"id":70,"title":"Instantaneous Trend + Cycle Synthesis","filename":"Instantaneous_Trend_Cycle_Synthesis.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Market modeling","overview":"Instantaneous Trend + Cycle Synthesis decomposes price into two components - trend and cycle - then recombines them for analysis or prediction. This decomposition allows separate analysis of trending vs. oscillating market behavior, and synthesis enables reconstruction or forward projection of expected price movement.","formula":"Decomposition:\n1. Extract trend component:\n   Trend = iTrend(Price) or Trend = SuperSmoother(Price, DCPeriod*2)\n\n2. Extract cycle component:\n   Cycle = Price - Trend\n   or Cycle = BandpassFilter(Price, DCPeriod)\n\n3. Optionally measure cycle characteristics:\n   Amplitude = max(abs(Cycle))\n   Phase = current position in cycle\n\nSynthesis (reconstruction):\nPrice_Reconstructed = Trend + Cycle\n\nForward synthesis (prediction):\nPrice_Future = Trend_Projected + Cycle_Projected","parameters":"where:\n   Trend_Projected = extrapolate(Trend)\n   Cycle_Projected = Amplitude * sin(Phase + ΔPhase)","intuition":"Instantaneous Trend + Cycle Synthesis is like describing a walk on a spiral staircase. You're both going up (trend) AND going in circles (cycle). To understand your path, break it into \"how high am I climbing per step\" (trend) and \"where am I on the circle\" (cycle). Once you know both, you can either reconstruct exactly where you were, or predict where you'll be next - just project the climb and advance one step on the circle.","rawContent":"Instantaneous Trend + Cycle Synthesis decomposes price into two components - trend and cycle - then recombines them for analysis or prediction. This decomposition allows separate analysis of trending vs. oscillating market behavior, and synthesis enables reconstruction or forward projection of expected price movement.\n\nDecomposition:\n1. Extract trend component:\n   Trend = iTrend(Price) or Trend = SuperSmoother(Price, DCPeriod*2)\n\n2. Extract cycle component:\n   Cycle = Price - Trend\n   or Cycle = BandpassFilter(Price, DCPeriod)\n\n3. Optionally measure cycle characteristics:\n   Amplitude = max(abs(Cycle))\n   Phase = current position in cycle\n\nSynthesis (reconstruction):\nPrice_Reconstructed = Trend + Cycle\n\nForward synthesis (prediction):\nPrice_Future = Trend_Projected + Cycle_Projected\nwhere:\n   Trend_Projected = extrapolate(Trend)\n   Cycle_Projected = Amplitude * sin(Phase + ΔPhase)\n\nInstantaneous Trend + Cycle Synthesis is like describing a walk on a spiral staircase. You're both going up (trend) AND going in circles (cycle). To understand your path, break it into \"how high am I climbing per step\" (trend) and \"where am I on the circle\" (cycle). Once you know both, you can either reconstruct exactly where you were, or predict where you'll be next - just project the climb and advance one step on the circle.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Instantaneous_Trend_Cycle_Synthesis.txt","hasFullInfo":true},{"id":71,"title":"iTrend","filename":"iTrend.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Instantaneous trend indicator","overview":"iTrend (Instantaneous Trend) is an Ehlers indicator that provides a smooth trendline with minimal lag by using a two-pole low-pass filter. It's designed to remove cycle components while preserving the underlying trend, making it useful for trend identification without the whipsaws common in faster moving averages.","formula":"iTrend calculation:\nalpha = (1 - sin(2π / Period)) / cos(2π / Period)\n\niTrend = (alpha - alpha²/4) * Price \n       + (alpha²/2) * Price[1] \n       - (alpha - 3*alpha²/4) * Price[2] \n       + 2 * (1 - alpha) * iTrend[1] \n       - (1 - alpha)² * iTrend[2]\n\nInitial conditions: iTrend[1] = Price[1], iTrend[2] = Price[2]\n\nTypical Period: 20 to 40 bars\n\nThe two-pole filter provides steeper rolloff than a simple EMA, meaning it removes cycles more effectively while maintaining smooth trend following.","parameters":"","intuition":"iTrend is like a suspension system that filters out all the small bumps (short-term cycles) but smoothly follows the hill (trend) you're driving on. Unlike a simple moving average that just averages everything, iTrend uses a sophisticated two-stage filter that aggressively removes the wiggles while staying close to the actual price trend. It's smooth but not laggy.","rawContent":"iTrend (Instantaneous Trend) is an Ehlers indicator that provides a smooth trendline with minimal lag by using a two-pole low-pass filter. It's designed to remove cycle components while preserving the underlying trend, making it useful for trend identification without the whipsaws common in faster moving averages.\n\niTrend calculation:\nalpha = (1 - sin(2π / Period)) / cos(2π / Period)\n\niTrend = (alpha - alpha²/4) * Price \n       + (alpha²/2) * Price[1] \n       - (alpha - 3*alpha²/4) * Price[2] \n       + 2 * (1 - alpha) * iTrend[1] \n       - (1 - alpha)² * iTrend[2]\n\nInitial conditions: iTrend[1] = Price[1], iTrend[2] = Price[2]\n\nTypical Period: 20 to 40 bars\n\nThe two-pole filter provides steeper rolloff than a simple EMA, meaning it removes cycles more effectively while maintaining smooth trend following.\n\niTrend is like a suspension system that filters out all the small bumps (short-term cycles) but smoothly follows the hill (trend) you're driving on. Unlike a simple moving average that just averages everything, iTrend uses a sophisticated two-stage filter that aggressively removes the wiggles while staying close to the actual price trend. It's smooth but not laggy.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/iTrend.txt","hasFullInfo":true},{"id":72,"title":"Jurik Moving Average (JMA)","filename":"Jurik_Moving_Average.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Proprietary low-lag filter","overview":"Jurik Moving Average is a proprietary low-lag moving average developed by Mark Jurik that aims to eliminate lag while maintaining smoothness. It uses a sophisticated adaptive algorithm that responds quickly to price changes while filtering out market noise more effectively than traditional moving averages.","formula":"The exact formula is proprietary, but JMA works by:\n1. Calculating a volatility-based phase adjustment\n2. Applying adaptive smoothing that increases during low volatility and decreases during high volatility\n3. Using feedback mechanisms to minimize lag\n\nJMA(price, length, phase) = Adaptive calculation using volatility and phase parameters\nwhere phase typically ranges from -100 to +100 (0 is standard, negative reduces lag further)","parameters":"","intuition":"JMA is like a super-smart moving average that tries to \"predict\" where the price is going by watching how wild the price swings are. When prices are calm, it smooths more. When prices jump around, it responds faster - giving you both smoothness AND speed, which normal moving averages can't do well together.","rawContent":"Jurik Moving Average is a proprietary low-lag moving average developed by Mark Jurik that aims to eliminate lag while maintaining smoothness. It uses a sophisticated adaptive algorithm that responds quickly to price changes while filtering out market noise more effectively than traditional moving averages.\n\nThe exact formula is proprietary, but JMA works by:\n1. Calculating a volatility-based phase adjustment\n2. Applying adaptive smoothing that increases during low volatility and decreases during high volatility\n3. Using feedback mechanisms to minimize lag\n\nJMA(price, length, phase) = Adaptive calculation using volatility and phase parameters\nwhere phase typically ranges from -100 to +100 (0 is standard, negative reduces lag further)\n\nJMA is like a super-smart moving average that tries to \"predict\" where the price is going by watching how wild the price swings are. When prices are calm, it smooths more. When prices jump around, it responds faster - giving you both smoothness AND speed, which normal moving averages can't do well together.","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Jurik_Moving_Average.txt","hasFullInfo":true},{"id":73,"title":"Market Mode Identification (Trend vs Cycle)","filename":"Market_Mode_Identification.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Mode detection","overview":"Market Mode Identification automatically determines whether the market is currently in trend mode or cycle mode. This classification helps select appropriate trading strategies - trend-following indicators for trend mode, mean-reversion oscillators for cycle mode. John Ehlers developed several methods for this critical market state determination.","formula":"Method 1 - Cycle-to-Trend Ratio:\n1. Measure cycle component: Cycle = Price - Trend\n2. Calculate trend strength: TrendStrength = abs(Trend - Trend[Period])\n3. Calculate cycle strength: CycleStrength = StdDev(Cycle, Period)\n4. Ratio = CycleStrength / TrendStrength\n5. If Ratio > Threshold: Cycle Mode, else Trend Mode\n\nMethod 2 - Autocorrelation:\n1. Calculate autocorrelation at lag = DCPeriod\n2. High autocorrelation (>0.5) = Cycle Mode\n3. Low autocorrelation (<0.5) = Trend Mode\n\nMethod 3 - Decycler/Price Difference:\n1. Decycler = High-pass filtered price (removes cycle)\n2. Difference = abs(Price - Decycler)\n3. If Difference < Threshold: Trend Mode, else Cycle Mode\n\nTypical threshold values determined through optimization or observation.","parameters":"","intuition":"Market Mode Identification is like a coach watching a game and deciding whether to play offense or defense. Is the ball (price) steadily moving toward one goal (trending)? Play offense with trend-following. Is the ball bouncing back and forth in the middle (cycling)? Play defense with mean-reversion. The indicator automatically recognizes which game is being played so you can use the right strategy.","rawContent":"Market Mode Identification automatically determines whether the market is currently in trend mode or cycle mode. This classification helps select appropriate trading strategies - trend-following indicators for trend mode, mean-reversion oscillators for cycle mode. John Ehlers developed several methods for this critical market state determination.\n\nMethod 1 - Cycle-to-Trend Ratio:\n1. Measure cycle component: Cycle = Price - Trend\n2. Calculate trend strength: TrendStrength = abs(Trend - Trend[Period])\n3. Calculate cycle strength: CycleStrength = StdDev(Cycle, Period)\n4. Ratio = CycleStrength / TrendStrength\n5. If Ratio > Threshold: Cycle Mode, else Trend Mode\n\nMethod 2 - Autocorrelation:\n1. Calculate autocorrelation at lag = DCPeriod\n2. High autocorrelation (>0.5) = Cycle Mode\n3. Low autocorrelation (<0.5) = Trend Mode\n\nMethod 3 - Decycler/Price Difference:\n1. Decycler = High-pass filtered price (removes cycle)\n2. Difference = abs(Price - Decycler)\n3. If Difference < Threshold: Trend Mode, else Cycle Mode\n\nTypical threshold values determined through optimization or observation.\n\nMarket Mode Identification is like a coach watching a game and deciding whether to play offense or defense. Is the ball (price) steadily moving toward one goal (trending)? Play offense with trend-following. Is the ball bouncing back and forth in the middle (cycling)? Play defense with mean-reversion. The indicator automatically recognizes which game is being played so you can use the right strategy.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Market_Mode_Identification.txt","hasFullInfo":true},{"id":74,"title":"MESA Sine Wave","filename":"MESA_Sine_Wave.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Dominant cycle sine wave","overview":"MESA Sine Wave (Maximum Entropy Spectrum Analysis) generates a sine wave that matches the dominant cycle in price data. Developed by John Ehlers, it creates both a sine wave and a lead sine wave (90 degrees ahead) based on the measured dominant cycle period, providing early warnings of cycle turns.","formula":"Calculation:\n1. Measure dominant cycle period (DCPeriod) using Hilbert Transform\n2. Calculate instantaneous phase\n3. Generate sine wave based on phase:\n   Sine = sin(2π / DCPeriod * barIndex)\n   LeadSine = sin(2π / DCPeriod * barIndex + π/2)\n\nOr using phase directly:\n   Sine = sin(Phase)\n   LeadSine = sin(Phase + π/4) or cos(Phase)\n\nTrading signals:\n- Sine crossing above LeadSine = Buy signal\n- Sine crossing below LeadSine = Sell signal\n- Works best when market is in cycle mode (not trending)","parameters":"","intuition":"MESA Sine Wave is like having a metronome that automatically adjusts its speed to match the market's rhythm. Once it locks onto the dominant cycle (say, 20 bars), it generates a perfect sine wave at that frequency. The \"lead\" sine wave is a quarter-cycle ahead, so when they cross, it's like getting a \"heads up\" that the market cycle is about to turn.","rawContent":"MESA Sine Wave (Maximum Entropy Spectrum Analysis) generates a sine wave that matches the dominant cycle in price data. Developed by John Ehlers, it creates both a sine wave and a lead sine wave (90 degrees ahead) based on the measured dominant cycle period, providing early warnings of cycle turns.\n\nCalculation:\n1. Measure dominant cycle period (DCPeriod) using Hilbert Transform\n2. Calculate instantaneous phase\n3. Generate sine wave based on phase:\n   Sine = sin(2π / DCPeriod * barIndex)\n   LeadSine = sin(2π / DCPeriod * barIndex + π/2)\n\nOr using phase directly:\n   Sine = sin(Phase)\n   LeadSine = sin(Phase + π/4) or cos(Phase)\n\nTrading signals:\n- Sine crossing above LeadSine = Buy signal\n- Sine crossing below LeadSine = Sell signal\n- Works best when market is in cycle mode (not trending)\n\nMESA Sine Wave is like having a metronome that automatically adjusts its speed to match the market's rhythm. Once it locks onto the dominant cycle (say, 20 bars), it generates a perfect sine wave at that frequency. The \"lead\" sine wave is a quarter-cycle ahead, so when they cross, it's like getting a \"heads up\" that the market cycle is about to turn.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/MESA_Sine_Wave.txt","hasFullInfo":true},{"id":75,"title":"MESA Stochastic (with Roofing Filter)","filename":"MESA_Stochastic.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"High-pass + Super Smoother","overview":"MESA Stochastic applies the Roofing Filter to remove spectral dilation effects before calculating a stochastic oscillator. Spectral dilation occurs when trending markets make standard oscillators appear to have longer cycles than they actually do. The roofing filter removes this distortion, creating a stochastic that accurately reflects true market cycles.","formula":"Calculation:\n1. Apply Roofing Filter to price:\n   - High-pass filter (removes long-term trend)\n   - Super Smoother (removes high-frequency noise)\n   Roofed = RoofingFilter(Price, HPPeriod, SSPeriod)\n\n2. Calculate stochastic on roofed data:\n   HighestRoof = Highest(Roofed, StochPeriod)\n   LowestRoof = Lowest(Roofed, StochPeriod)\n\nStoch = (Roofed - LowestRoof) / (HighestRoof - LowestRoof) * 100\n\n3. Smooth the stochastic:\n   MESA_Stoch = EMA(Stoch, 3)\n\nTypical parameters: HPPeriod=48, SSPeriod=10, StochPeriod=20\n\nResult: Stochastic oscillator free from trend-induced distortion.","parameters":"","intuition":"MESA Stochastic with Roofing Filter is like measuring the temperature of water after filtering out the ice and steam. Regular stochastic gets confused when there's a strong trend (like ice or steam affecting your thermometer). The roofing filter removes both the trend (ice) and the noise (steam), leaving just the pure cyclic \"water temperature\" to measure. You get an accurate stochastic that shows real cycle extremes.","rawContent":"MESA Stochastic applies the Roofing Filter to remove spectral dilation effects before calculating a stochastic oscillator. Spectral dilation occurs when trending markets make standard oscillators appear to have longer cycles than they actually do. The roofing filter removes this distortion, creating a stochastic that accurately reflects true market cycles.\n\nCalculation:\n1. Apply Roofing Filter to price:\n   - High-pass filter (removes long-term trend)\n   - Super Smoother (removes high-frequency noise)\n   Roofed = RoofingFilter(Price, HPPeriod, SSPeriod)\n\n2. Calculate stochastic on roofed data:\n   HighestRoof = Highest(Roofed, StochPeriod)\n   LowestRoof = Lowest(Roofed, StochPeriod)\n   \n   Stoch = (Roofed - LowestRoof) / (HighestRoof - LowestRoof) * 100\n\n3. Smooth the stochastic:\n   MESA_Stoch = EMA(Stoch, 3)\n\nTypical parameters: HPPeriod=48, SSPeriod=10, StochPeriod=20\n\nResult: Stochastic oscillator free from trend-induced distortion.\n\nMESA Stochastic with Roofing Filter is like measuring the temperature of water after filtering out the ice and steam. Regular stochastic gets confused when there's a strong trend (like ice or steam affecting your thermometer). The roofing filter removes both the trend (ice) and the noise (steam), leaving just the pure cyclic \"water temperature\" to measure. You get an accurate stochastic that shows real cycle extremes.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/MESA_Stochastic.txt","hasFullInfo":true},{"id":76,"title":"Reflex Indicator","filename":"Reflex_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Cycle-based momentum","overview":"Reflex Indicator, developed by John Ehlers, measures the cyclic component of price by removing the trend component. It's essentially the opposite of a trend indicator - it isolates and displays the cycles. Positive and negative swings in the Reflex indicate the strength and phase of market cycles.","formula":"Calculation:\n1. Create super smoother trend:\n   a1 = exp(-√2 * π / SSPeriod)\n   b1 = 2 * a1 * cos(√2 * π / SSPeriod)\n   c2 = b1\n   c3 = -a1 * a1\n   c1 = 1 - c2 - c3\n\nFilt = c1 * (Price + Price[1]) / 2 + c2 * Filt[1] + c3 * Filt[2]\n\n2. Calculate Reflex (the cycle):\n   Reflex = Price - Filt\n\n3. Optionally smooth the Reflex:\n   MS = c1 * (Reflex + Reflex[1]) / 2 + c2 * MS[1] + c3 * MS[2]\n\nThe Reflex oscillates around zero, showing when price is in the cycle's peak (positive) or trough (negative).","parameters":"","intuition":"Reflex Indicator is like looking at ocean waves from a boat. The trend is the boat's average position as the tide comes in or goes out. The Reflex shows just the waves - how far you're riding up the wave crest (positive) or down in the trough (negative). It strips away where the tide is taking you and shows only the cyclic bouncing up and down.","rawContent":"Reflex Indicator, developed by John Ehlers, measures the cyclic component of price by removing the trend component. It's essentially the opposite of a trend indicator - it isolates and displays the cycles. Positive and negative swings in the Reflex indicate the strength and phase of market cycles.\n\nCalculation:\n1. Create super smoother trend:\n   a1 = exp(-√2 * π / SSPeriod)\n   b1 = 2 * a1 * cos(√2 * π / SSPeriod)\n   c2 = b1\n   c3 = -a1 * a1\n   c1 = 1 - c2 - c3\n   \n   Filt = c1 * (Price + Price[1]) / 2 + c2 * Filt[1] + c3 * Filt[2]\n\n2. Calculate Reflex (the cycle):\n   Reflex = Price - Filt\n\n3. Optionally smooth the Reflex:\n   MS = c1 * (Reflex + Reflex[1]) / 2 + c2 * MS[1] + c3 * MS[2]\n\nThe Reflex oscillates around zero, showing when price is in the cycle's peak (positive) or trough (negative).\n\nReflex Indicator is like looking at ocean waves from a boat. The trend is the boat's average position as the tide comes in or goes out. The Reflex shows just the waves - how far you're riding up the wave crest (positive) or down in the trough (negative). It strips away where the tide is taking you and shows only the cyclic bouncing up and down.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Reflex_Indicator.txt","hasFullInfo":true},{"id":77,"title":"Roofing Filter","filename":"Roofing_Filter.txt","group":"group 4","groupNum":4,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Spectral dilation removal","overview":"Roofing Filter, developed by John Ehlers, is a combination of a 2-pole high-pass filter followed by a Super Smoother low-pass filter. It removes very low-frequency components (long-term trends) and very high-frequency components (noise), leaving only the intermediate cycles. This \"roofs\" the frequency response, hence the name.","formula":"Calculation:\n1. High-pass filter (removes trend):\n   alpha1 = (1 - sin(2π / HPPeriod)) / cos(2π / HPPeriod)\n   HP = alpha1/2 * (Price - Price[1]) + (1 - alpha1) * HP[1]\n\n2. Super Smoother (removes noise):\n   a1 = exp(-√2 * π / SSPeriod)\n   b1 = 2 * a1 * cos(√2 * π / SSPeriod)\n   c2 = b1\n   c3 = -a1 * a1\n   c1 = 1 - c2 - c3\n\nRoof = c1 * (HP + HP[1]) / 2 + c2 * Roof[1] + c3 * Roof[2]\n\nTypical parameters: HPPeriod = 48, SSPeriod = 10\n\nResult: Signal containing only mid-range cycles, removing spectral dilation effects.","parameters":"","intuition":"Roofing Filter is like noise-canceling headphones with a twist. Regular headphones remove high-pitched noise. These also remove the deep bass rumble (long-term trend). What you're left with is only the mid-range frequencies - the actual music (market cycles). It's called \"roofing\" because the frequency response looks like a roof - flat in the middle, sloping down on both ends.","rawContent":"Roofing Filter, developed by John Ehlers, is a combination of a 2-pole high-pass filter followed by a Super Smoother low-pass filter. It removes very low-frequency components (long-term trends) and very high-frequency components (noise), leaving only the intermediate cycles. This \"roofs\" the frequency response, hence the name.\n\nCalculation:\n1. High-pass filter (removes trend):\n   alpha1 = (1 - sin(2π / HPPeriod)) / cos(2π / HPPeriod)\n   HP = alpha1/2 * (Price - Price[1]) + (1 - alpha1) * HP[1]\n\n2. Super Smoother (removes noise):\n   a1 = exp(-√2 * π / SSPeriod)\n   b1 = 2 * a1 * cos(√2 * π / SSPeriod)\n   c2 = b1\n   c3 = -a1 * a1\n   c1 = 1 - c2 - c3\n   \n   Roof = c1 * (HP + HP[1]) / 2 + c2 * Roof[1] + c3 * Roof[2]\n\nTypical parameters: HPPeriod = 48, SSPeriod = 10\n\nResult: Signal containing only mid-range cycles, removing spectral dilation effects.\n\nRoofing Filter is like noise-canceling headphones with a twist. Regular headphones remove high-pitched noise. These also remove the deep bass rumble (long-term trend). What you're left with is only the mid-range frequencies - the actual music (market cycles). It's called \"roofing\" because the frequency response looks like a roof - flat in the middle, sloping down on both ends.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 4/Roofing_Filter.txt","hasFullInfo":true},{"id":78,"title":"Sinewave Lead Indicator","filename":"Sinewave_Lead_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Phase-leading sine","overview":"Sinewave Lead Indicator is a component of Ehlers' MESA Sine Wave system that generates a sine wave advanced in phase (leading) relative to the current market cycle. Typically leading by 45 degrees (π/4 radians) or 90 degrees (π/2 radians), it provides early warning signals before the main sine wave crosses zero or reaches extremes.","formula":"Calculation:\n1. Measure dominant cycle period (DCPeriod)\n2. Calculate instantaneous phase (φ)\n3. Generate lead sine wave:\n\nFor 45-degree lead:\n   LeadSine = sin(φ + π/4)\n\nFor 90-degree lead:\n   LeadSine = sin(φ + π/2) = cos(φ)\n\nAlternatively, using the InPhase (I) and Quadrature (Q) components:\n   LeadSine = (I + Q) / √2  [for 45-degree lead]\n   LeadSine = Q  [for 90-degree lead]\n\nTrading application:\nWhen LeadSine crosses zero or extremes, it predicts that the main cycle will do the same in 1/8 or 1/4 cycle later.","parameters":"","intuition":"Sinewave Lead Indicator is like having a friend who runs ahead of you on a race track and shouts warnings. If the track curves left in 100 meters, they yell \"curve coming!\" when you're still on the straight. The lead sine wave does this for market cycles - it's the same wave pattern as the market, just shifted forward in time, giving you advance notice of upcoming cycle turns.","rawContent":"Sinewave Lead Indicator is a component of Ehlers' MESA Sine Wave system that generates a sine wave advanced in phase (leading) relative to the current market cycle. Typically leading by 45 degrees (π/4 radians) or 90 degrees (π/2 radians), it provides early warning signals before the main sine wave crosses zero or reaches extremes.\n\nCalculation:\n1. Measure dominant cycle period (DCPeriod)\n2. Calculate instantaneous phase (φ)\n3. Generate lead sine wave:\n   \n   For 45-degree lead:\n   LeadSine = sin(φ + π/4)\n   \n   For 90-degree lead:\n   LeadSine = sin(φ + π/2) = cos(φ)\n\nAlternatively, using the InPhase (I) and Quadrature (Q) components:\n   LeadSine = (I + Q) / √2  [for 45-degree lead]\n   LeadSine = Q  [for 90-degree lead]\n\nTrading application:\nWhen LeadSine crosses zero or extremes, it predicts that the main cycle will do the same in 1/8 or 1/4 cycle later.\n\nSinewave Lead Indicator is like having a friend who runs ahead of you on a race track and shouts warnings. If the track curves left in 100 meters, they yell \"curve coming!\" when you're still on the straight. The lead sine wave does this for market cycles - it's the same wave pattern as the market, just shifted forward in time, giving you advance notice of upcoming cycle turns.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Sinewave_Lead_Indicator.txt","hasFullInfo":true},{"id":79,"title":"Super Smoother Filter","filename":"Super_Smoother_Filter.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"2-pole Butterworth","overview":"Super Smoother Filter is a 2-pole Butterworth low-pass filter developed by John Ehlers that provides superior smoothing with less lag than simple moving averages. The two-pole design creates a steeper frequency cutoff, meaning it removes high-frequency noise more effectively while preserving low-frequency trend information.","formula":"Calculation:\na1 = exp(-√2 * π / Period)\nb1 = 2 * a1 * cos(√2 * π / Period)\n\nCoefficients:\nc2 = b1\nc3 = -a1 * a1\nc1 = 1 - c2 - c3\n\nSuper Smoother:\nSS = c1 * (Price + Price[1]) / 2 + c2 * SS[1] + c3 * SS[2]\n\nInitial conditions: SS[1] = Price[1], SS[2] = Price[2]\n\nTypical period: 10 to 20 bars\n\nThe filter has zero lag at DC (very low frequencies) and provides -3dB cutoff at the specified period.","parameters":"","intuition":"Super Smoother Filter is like upgrading from a basic water filter to a multi-stage purification system. A regular moving average is like pouring water through a single screen - some debris gets through. Super Smoother uses two stages (two-pole), so it catches way more noise while letting the clean trend water through smoothly. The result is a much cleaner signal with less delay than you'd expect from something this smooth.","rawContent":"Super Smoother Filter is a 2-pole Butterworth low-pass filter developed by John Ehlers that provides superior smoothing with less lag than simple moving averages. The two-pole design creates a steeper frequency cutoff, meaning it removes high-frequency noise more effectively while preserving low-frequency trend information.\n\nCalculation:\na1 = exp(-√2 * π / Period)\nb1 = 2 * a1 * cos(√2 * π / Period)\n\nCoefficients:\nc2 = b1\nc3 = -a1 * a1\nc1 = 1 - c2 - c3\n\nSuper Smoother:\nSS = c1 * (Price + Price[1]) / 2 + c2 * SS[1] + c3 * SS[2]\n\nInitial conditions: SS[1] = Price[1], SS[2] = Price[2]\n\nTypical period: 10 to 20 bars\n\nThe filter has zero lag at DC (very low frequencies) and provides -3dB cutoff at the specified period.\n\nSuper Smoother Filter is like upgrading from a basic water filter to a multi-stage purification system. A regular moving average is like pouring water through a single screen - some debris gets through. Super Smoother uses two stages (two-pole), so it catches way more noise while letting the clean trend water through smoothly. The result is a much cleaner signal with less delay than you'd expect from something this smooth.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Super_Smoother_Filter.txt","hasFullInfo":true},{"id":80,"title":"Swing Wave Indicator (Heat Map Array)","filename":"Swing_Wave_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Visual cycle display","overview":"Swing Wave Indicator creates a visual heat map display showing cycle energy across different cycle periods simultaneously. Developed by John Ehlers, it runs multiple bandpass filters at different cycle periods and displays their outputs as a color-coded array, making dominant cycles visually obvious through intensity and color patterns.","formula":"Calculation:\n1. Define period range (e.g., 8 to 50 bars)\n\n2. For each period P in range:\n   - Calculate bandpass filter at period P:\n     BP[P] = BandpassFilter(Price, P)\n\n3. Normalize and scale each bandpass output:\n   Intensity[P] = abs(BP[P]) / MaxAmplitude * ColorScale\n\n4. Display as heat map:\n   - X-axis: Time (bars)\n   - Y-axis: Period (8, 10, 12, ... 50)\n   - Color: Intensity of BP[P] (hot = high amplitude, cool = low amplitude)\n\nVisual interpretation:\n- Bright horizontal band = dominant cycle at that period\n- Band moving up = cycle period lengthening\n- Band moving down = cycle period shortening","parameters":"","intuition":"Swing Wave Indicator is like a music equalizer display, but for market cycles instead of sound frequencies. Each horizontal row represents a different cycle length (like bass, midrange, treble). The colors show how strong each cycle is right now - bright red means that cycle period is really active, blue means quiet. You can literally see which \"frequency\" the market is dancing to at any moment.","rawContent":"Swing Wave Indicator creates a visual heat map display showing cycle energy across different cycle periods simultaneously. Developed by John Ehlers, it runs multiple bandpass filters at different cycle periods and displays their outputs as a color-coded array, making dominant cycles visually obvious through intensity and color patterns.\n\nCalculation:\n1. Define period range (e.g., 8 to 50 bars)\n\n2. For each period P in range:\n   - Calculate bandpass filter at period P:\n     BP[P] = BandpassFilter(Price, P)\n   \n3. Normalize and scale each bandpass output:\n   Intensity[P] = abs(BP[P]) / MaxAmplitude * ColorScale\n\n4. Display as heat map:\n   - X-axis: Time (bars)\n   - Y-axis: Period (8, 10, 12, ... 50)\n   - Color: Intensity of BP[P] (hot = high amplitude, cool = low amplitude)\n\nVisual interpretation:\n- Bright horizontal band = dominant cycle at that period\n- Band moving up = cycle period lengthening\n- Band moving down = cycle period shortening\n\nSwing Wave Indicator is like a music equalizer display, but for market cycles instead of sound frequencies. Each horizontal row represents a different cycle length (like bass, midrange, treble). The colors show how strong each cycle is right now - bright red means that cycle period is really active, blue means quiet. You can literally see which \"frequency\" the market is dancing to at any moment.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Swing_Wave_Indicator.txt","hasFullInfo":true},{"id":81,"title":"T3 (Triple Exponential Moving Average)","filename":"T3_Triple_Exponential_MA.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Tilson's T3","overview":"T3, developed by Tim Tillson, is a smoothing technique that applies exponential moving averages multiple times with a volume factor to achieve extremely smooth output with reduced lag. It uses six iterations of EMA with a configurable volume factor (typically 0.7) that controls the tradeoff between smoothness and responsiveness.","formula":"T3 calculation with volume factor (vf):\na = vf\nb = vf^2\nc = vf^3\n\ne1 = EMA(Price, Period)\ne2 = EMA(e1, Period)\ne3 = EMA(e2, Period)\ne4 = EMA(e3, Period)\ne5 = EMA(e4, Period)\ne6 = EMA(e5, Period)\n\nT3 = -a^3 * e6 + (3*a^2 + 3*a^3) * e5 + (-6*a^2 - 3*a - 3*a^3) * e4 + (1 + 3*a + a^3 + 3*a^2) * e3\n\nTypical volume factor: vf = 0.7\nCommon period: 5","parameters":"","intuition":"T3 is like putting your price data through a car wash six times, but each wash is gentler than the last (controlled by the volume factor). The magic is in how it combines all six washes - it doesn't just use the final result, but weighs all the stages together in a special formula. This creates an incredibly smooth line that still responds reasonably fast to real price changes.","rawContent":"T3, developed by Tim Tillson, is a smoothing technique that applies exponential moving averages multiple times with a volume factor to achieve extremely smooth output with reduced lag. It uses six iterations of EMA with a configurable volume factor (typically 0.7) that controls the tradeoff between smoothness and responsiveness.\n\nT3 calculation with volume factor (vf):\na = vf\nb = vf^2\nc = vf^3\n\ne1 = EMA(Price, Period)\ne2 = EMA(e1, Period)\ne3 = EMA(e2, Period)\ne4 = EMA(e3, Period)\ne5 = EMA(e4, Period)\ne6 = EMA(e5, Period)\n\nT3 = -a^3 * e6 + (3*a^2 + 3*a^3) * e5 + (-6*a^2 - 3*a - 3*a^3) * e4 + (1 + 3*a + a^3 + 3*a^2) * e3\n\nTypical volume factor: vf = 0.7\nCommon period: 5\n\nT3 is like putting your price data through a car wash six times, but each wash is gentler than the last (controlled by the volume factor). The magic is in how it combines all six washes - it doesn't just use the final result, but weighs all the stages together in a special formula. This creates an incredibly smooth line that still responds reasonably fast to real price changes.","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/T3_Triple_Exponential_MA.txt","hasFullInfo":true},{"id":82,"title":"Tillson T3","filename":"Tillson_T3.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Smoothing with reduced lag","overview":"Tillson T3 is the same as T3 (Triple Exponential Moving Average) developed by Tim Tillson. It's a generalized digital filter that uses multiple passes of exponential smoothing with a volume factor to create an extremely smooth moving average with minimal lag. The \"T3\" name comes from \"Tillson T3\" or \"Triple Exponential.\"","formula":"T3 calculation:\n1. Choose volume factor (vf), typically 0.7, range 0 to 1\n2. Choose period (n), typically 5\n3. Apply EMA six times in succession: e1 through e6\n4. Combine using polynomial coefficients derived from vf:\n   T3 = c1*e6 + c2*e5 + c3*e4 + c4*e3\n   where coefficients are functions of vf^1, vf^2, vf^3\n\nVolume factor effects:\n- vf = 0: Maximum smoothness, most lag\n- vf = 1: Least smoothing, least lag\n- vf = 0.7: Optimal balance (Tillson's recommendation)","parameters":"","intuition":"Tillson T3 is like adjusting the tension on a shock absorber. Turn the volume factor down (toward 0) and you get a super-smooth ride that's slow to respond - like luxury car suspension. Turn it up (toward 1) and you feel every bump but react instantly - like race car suspension. At 0.7, you get the sweet spot where it's smooth enough to filter noise but responsive enough for trading.","rawContent":"Tillson T3 is the same as T3 (Triple Exponential Moving Average) developed by Tim Tillson. It's a generalized digital filter that uses multiple passes of exponential smoothing with a volume factor to create an extremely smooth moving average with minimal lag. The \"T3\" name comes from \"Tillson T3\" or \"Triple Exponential.\"\n\nT3 calculation:\n1. Choose volume factor (vf), typically 0.7, range 0 to 1\n2. Choose period (n), typically 5\n3. Apply EMA six times in succession: e1 through e6\n4. Combine using polynomial coefficients derived from vf:\n   T3 = c1*e6 + c2*e5 + c3*e4 + c4*e3\n   where coefficients are functions of vf^1, vf^2, vf^3\n\nVolume factor effects:\n- vf = 0: Maximum smoothness, most lag\n- vf = 1: Least smoothing, least lag\n- vf = 0.7: Optimal balance (Tillson's recommendation)\n\nTillson T3 is like adjusting the tension on a shock absorber. Turn the volume factor down (toward 0) and you get a super-smooth ride that's slow to respond - like luxury car suspension. Turn it up (toward 1) and you feel every bump but react instantly - like race car suspension. At 0.7, you get the sweet spot where it's smooth enough to filter noise but responsive enough for trading.","tags":["DSP Filtering","Zero-Lag"],"relPath":"public/concept-list/list-concepts/group 4/Tillson_T3.txt","hasFullInfo":true},{"id":83,"title":"Trendflex Indicator","filename":"Trendflex_Indicator.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Trend flexibility measure","overview":"Trendflex Indicator, developed by John Ehlers, measures the flexibility or \"bendiness\" of the trend by comparing the current trend to a super-smoothed version. It helps identify whether the market is in a strong directional trend (low Trendflex) or a choppy/ranging condition (high Trendflex).","formula":"Calculation:\n1. Calculate sum of price changes over period:\n   Sum = Σ(Price[i] - Price[i+1]) for i = 0 to Period-1\n\n2. Apply super smoother to the sum:\n   a1 = exp(-√2 * π / Period)\n   b1 = 2 * a1 * cos(√2 * π / Period)\n   c2 = b1\n   c3 = -a1 * a1\n   c1 = 1 - c2 - c3\n\nTrendflex = c1 * (Sum + Sum[1]) / 2 + c2 * Trendflex[1] + c3 * Trendflex[2]\n\n3. Normalize:\n   Trendflex = Trendflex / Period\n\nInterpretation:\n- Values near 0: Strong trend\n- Large positive/negative values: Ranging/choppy market","parameters":"","intuition":"Trendflex Indicator is like measuring how much your steering wheel turns per mile driven. On a straight highway (strong trend), you barely turn the wheel - Trendflex is near zero. On a winding mountain road (ranging market), you're constantly turning back and forth - Trendflex is high. It tells you whether the market is going in one direction or constantly changing its mind.","rawContent":"Trendflex Indicator, developed by John Ehlers, measures the flexibility or \"bendiness\" of the trend by comparing the current trend to a super-smoothed version. It helps identify whether the market is in a strong directional trend (low Trendflex) or a choppy/ranging condition (high Trendflex).\n\nCalculation:\n1. Calculate sum of price changes over period:\n   Sum = Σ(Price[i] - Price[i+1]) for i = 0 to Period-1\n\n2. Apply super smoother to the sum:\n   a1 = exp(-√2 * π / Period)\n   b1 = 2 * a1 * cos(√2 * π / Period)\n   c2 = b1\n   c3 = -a1 * a1\n   c1 = 1 - c2 - c3\n   \n   Trendflex = c1 * (Sum + Sum[1]) / 2 + c2 * Trendflex[1] + c3 * Trendflex[2]\n\n3. Normalize:\n   Trendflex = Trendflex / Period\n\nInterpretation:\n- Values near 0: Strong trend\n- Large positive/negative values: Ranging/choppy market\n\nTrendflex Indicator is like measuring how much your steering wheel turns per mile driven. On a straight highway (strong trend), you barely turn the wheel - Trendflex is near zero. On a winding mountain road (ranging market), you're constantly turning back and forth - Trendflex is high. It tells you whether the market is going in one direction or constantly changing its mind.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Trendflex_Indicator.txt","hasFullInfo":true},{"id":84,"title":"Two-Pole Super Smoother","filename":"Two_Pole_Super_Smoother.txt","group":"group 4","groupNum":4,"categoryId":7,"categoryTitle":"7. EHLERS CYCLE ANALYSIS FILTERS","subcategory":"General","summary":"Enhanced smoothing","overview":"Two-Pole Super Smoother is the same as the Super Smoother Filter - it's a 2-pole Butterworth low-pass filter. The \"two-pole\" name explicitly refers to the fact that the filter uses two stages of smoothing (second-order system), which provides superior noise reduction compared to single-pole (first-order) filters like simple EMA.","formula":"Calculation:\na1 = exp(-√2 * π / Period)\nb1 = 2 * a1 * cos(√2 * π / Period)\n\nc1 = 1 - b1 + a1²\nc2 = b1\nc3 = -a1²\n\nFilter output:\nSS2 = c1 * (Price + Price[1]) / 2 + c2 * SS2[1] + c3 * SS2[2]\n\nThe \"two-pole\" in the name indicates:\n- Two feedback terms (SS[1] and SS[2])\n- Second-order differential equation\n- Steeper rolloff than one-pole filters\n- Better noise rejection at cutoff frequency","parameters":"","intuition":"Two-Pole Super Smoother is just emphasizing that it's a two-stage filter. Think of it like a two-stage rocket: the first stage (first pole) does some smoothing, and the second stage (second pole) does more smoothing. Together, they create a much steeper \"cliff\" in the frequency response - noise above the cutoff gets killed much more aggressively than with a one-stage (one-pole) filter like regular EMA.","rawContent":"Two-Pole Super Smoother is the same as the Super Smoother Filter - it's a 2-pole Butterworth low-pass filter. The \"two-pole\" name explicitly refers to the fact that the filter uses two stages of smoothing (second-order system), which provides superior noise reduction compared to single-pole (first-order) filters like simple EMA.\n\nCalculation:\na1 = exp(-√2 * π / Period)\nb1 = 2 * a1 * cos(√2 * π / Period)\n\nc1 = 1 - b1 + a1²\nc2 = b1\nc3 = -a1²\n\nFilter output:\nSS2 = c1 * (Price + Price[1]) / 2 + c2 * SS2[1] + c3 * SS2[2]\n\nThe \"two-pole\" in the name indicates:\n- Two feedback terms (SS[1] and SS[2])\n- Second-order differential equation\n- Steeper rolloff than one-pole filters\n- Better noise rejection at cutoff frequency\n\nTwo-Pole Super Smoother is just emphasizing that it's a two-stage filter. Think of it like a two-stage rocket: the first stage (first pole) does some smoothing, and the second stage (second pole) does more smoothing. Together, they create a much steeper \"cliff\" in the frequency response - noise above the cutoff gets killed much more aggressively than with a one-stage (one-pole) filter like regular EMA.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 4/Two_Pole_Super_Smoother.txt","hasFullInfo":true},{"id":85,"title":"Zero Lag BMT","filename":"Zero_Lag_BMT.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Zero-lag variant","overview":"Zero Lag BMT is a zero-lag variant of an unspecified \"BMT\" indicator (likely a proprietary or specialized moving average). While the exact base BMT indicator varies by implementation, the zero-lag version applies lag reduction techniques such as error correction, predictive filtering, or zero-lag EMA methods to the underlying BMT calculation.","formula":"General Zero Lag approach for any indicator:\n1. Calculate base indicator: BMT = f(Price, parameters)\n2. Determine lag period: Lag = g(parameters)\n3. Apply zero-lag correction:\n\nOption A - Input adjustment:\n   AdjPrice = Price + (Price - Price[Lag])\n   ZLBMT = BMT(AdjPrice, parameters)\n\nOption B - Error correction:\n   Error = Price - BMT\n   Gain = optimization parameter\n   ZLBMT = BMT + (Gain * Error)\n\nOption C - Predictive extension:\n   Predicted = BMT + velocity * Lag\n   ZLBMT = Predicted\n\nWithout knowing the specific BMT indicator, the zero-lag variant follows standard lag reduction principles.","parameters":"","intuition":"Zero Lag BMT is like putting training wheels on a bicycle, then later adding a motor to go faster. The \"BMT\" is some kind of smoothing or averaging method (the training wheels for stability), and adding \"Zero Lag\" means modifying it to respond faster (the motor) while keeping its original smoothing character. The exact method depends on what BMT actually does.","rawContent":"Zero Lag BMT is a zero-lag variant of an unspecified \"BMT\" indicator (likely a proprietary or specialized moving average). While the exact base BMT indicator varies by implementation, the zero-lag version applies lag reduction techniques such as error correction, predictive filtering, or zero-lag EMA methods to the underlying BMT calculation.\n\nGeneral Zero Lag approach for any indicator:\n1. Calculate base indicator: BMT = f(Price, parameters)\n2. Determine lag period: Lag = g(parameters)\n3. Apply zero-lag correction:\n   \n   Option A - Input adjustment:\n   AdjPrice = Price + (Price - Price[Lag])\n   ZLBMT = BMT(AdjPrice, parameters)\n   \n   Option B - Error correction:\n   Error = Price - BMT\n   Gain = optimization parameter\n   ZLBMT = BMT + (Gain * Error)\n   \n   Option C - Predictive extension:\n   Predicted = BMT + velocity * Lag\n   ZLBMT = Predicted\n\nWithout knowing the specific BMT indicator, the zero-lag variant follows standard lag reduction principles.\n\nZero Lag BMT is like putting training wheels on a bicycle, then later adding a motor to go faster. The \"BMT\" is some kind of smoothing or averaging method (the training wheels for stability), and adding \"Zero Lag\" means modifying it to respond faster (the motor) while keeping its original smoothing character. The exact method depends on what BMT actually does.","tags":["DSP Filtering","Zero-Lag"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_BMT.txt","hasFullInfo":true},{"id":86,"title":"Zero Lag Double Exponential Moving Average","filename":"Zero_Lag_DEMA.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"DEMA with zero-lag","overview":"Zero Lag DEMA combines the Double Exponential Moving Average with zero-lag error correction techniques. DEMA itself already reduces lag by using two EMAs, but adding zero-lag correction further reduces the remaining lag, creating an extremely responsive moving average.","formula":"Standard DEMA:\nDEMA = 2 * EMA(Price, n) - EMA(EMA(Price, n), n)\n\nZero Lag DEMA approach:\n1. Calculate lag compensation: Lag = (Period - 1) / 2\n2. Adjusted price: AdjPrice = Price + (Price - Price[Lag])\n3. Apply DEMA to adjusted price:\n   EMA1 = EMA(AdjPrice, Period)\n   EMA2 = EMA(EMA1, Period)\n   ZLDEMA = 2 * EMA1 - EMA2\n\nAlternative method - Error correction on DEMA:\n1. Calculate standard DEMA\n2. Error = Price - DEMA\n3. Alpha = 2 / (Period + 1)\n4. ZLDEMA = DEMA + (Alpha^2 * Error)","parameters":"","intuition":"Zero Lag DEMA is like strapping a rocket to an already-fast sports car. Regular DEMA is already quick because it subtracts the slow parts, but Zero Lag DEMA goes further by either feeding it \"future-adjusted\" prices or adding error correction on top. The result is a moving average that hugs price action so tightly it almost predicts turns before they happen.","rawContent":"Zero Lag DEMA combines the Double Exponential Moving Average with zero-lag error correction techniques. DEMA itself already reduces lag by using two EMAs, but adding zero-lag correction further reduces the remaining lag, creating an extremely responsive moving average.\n\nStandard DEMA:\nDEMA = 2 * EMA(Price, n) - EMA(EMA(Price, n), n)\n\nZero Lag DEMA approach:\n1. Calculate lag compensation: Lag = (Period - 1) / 2\n2. Adjusted price: AdjPrice = Price + (Price - Price[Lag])\n3. Apply DEMA to adjusted price:\n   EMA1 = EMA(AdjPrice, Period)\n   EMA2 = EMA(EMA1, Period)\n   ZLDEMA = 2 * EMA1 - EMA2\n\nAlternative method - Error correction on DEMA:\n1. Calculate standard DEMA\n2. Error = Price - DEMA\n3. Alpha = 2 / (Period + 1)\n4. ZLDEMA = DEMA + (Alpha^2 * Error)\n\nZero Lag DEMA is like strapping a rocket to an already-fast sports car. Regular DEMA is already quick because it subtracts the slow parts, but Zero Lag DEMA goes further by either feeding it \"future-adjusted\" prices or adding error correction on top. The result is a moving average that hugs price action so tightly it almost predicts turns before they happen.","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_DEMA.txt","hasFullInfo":true},{"id":87,"title":"Zero Lag Exponential Moving Average (ZLEMA)","filename":"Zero_Lag_EMA.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Lag-reduced EMA","overview":"Zero Lag Exponential Moving Average attempts to eliminate the inherent lag in exponential moving averages by adjusting the input data based on the difference between current price and a lagged price. It was developed to provide faster response to price changes while maintaining the smoothing characteristics of EMA.","formula":"ZLEMA calculation:\nLag = (Period - 1) / 2\nZLEMA = EMA(Price + (Price - Price[Lag]), Period)\n\nOr step-by-step:\n1. Calculate lag value: Lag = (Period - 1) / 2\n2. Get price from Lag bars ago: PriceLag = Price[Lag]\n3. Calculate error correction: ErrorCorrection = Price - PriceLag\n4. Adjusted price: AdjustedPrice = Price + ErrorCorrection\n5. Apply EMA to adjusted price: ZLEMA = EMA(AdjustedPrice, Period)","parameters":"","intuition":"ZLEMA is like adding rocket boosters to a regular moving average. It looks at how far behind the normal EMA would be, then \"pushes\" the price data forward by that amount before smoothing it. So if the EMA would lag by 5 bars, ZLEMA adds the last 5 bars of movement to current price first, making it respond almost instantly.","rawContent":"Zero Lag Exponential Moving Average attempts to eliminate the inherent lag in exponential moving averages by adjusting the input data based on the difference between current price and a lagged price. It was developed to provide faster response to price changes while maintaining the smoothing characteristics of EMA.\n\nZLEMA calculation:\nLag = (Period - 1) / 2\nZLEMA = EMA(Price + (Price - Price[Lag]), Period)\n\nOr step-by-step:\n1. Calculate lag value: Lag = (Period - 1) / 2\n2. Get price from Lag bars ago: PriceLag = Price[Lag]\n3. Calculate error correction: ErrorCorrection = Price - PriceLag\n4. Adjusted price: AdjustedPrice = Price + ErrorCorrection\n5. Apply EMA to adjusted price: ZLEMA = EMA(AdjustedPrice, Period)\n\nZLEMA is like adding rocket boosters to a regular moving average. It looks at how far behind the normal EMA would be, then \"pushes\" the price data forward by that amount before smoothing it. So if the EMA would lag by 5 bars, ZLEMA adds the last 5 bars of movement to current price first, making it respond almost instantly.","tags":["DSP Filtering","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_EMA.txt","hasFullInfo":true},{"id":88,"title":"Zero Lag EMA (Ehlers)","filename":"Zero_Lag_EMA_Ehlers.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Error correction method","overview":"Zero Lag EMA by John Ehlers uses an error correction method to compensate for the lag inherent in exponential moving averages. Unlike traditional ZLEMA, Ehlers' version calculates the difference between price and the EMA, then adds a portion of that error back to create a leading indicator.","formula":"Ehlers Zero Lag EMA calculation:\n1. Calculate standard EMA: EMA1 = EMA(Price, Period)\n2. Calculate error (lag): Error = Price - EMA1\n3. Calculate gain coefficient: Gain = 2 / (Period + 1)\n4. Zero Lag EMA: ZLEMA = EMA1 + (Gain * Error)\n\nAlternative formulation:\nZLEMA = EMA + EMA(Price - EMA)\n\nThis creates a moving average that anticipates price movement by the amount it would normally lag.","parameters":"","intuition":"Think of Ehlers' Zero Lag EMA as a GPS that not only shows where you are but also predicts where you're heading. It measures how far behind the normal EMA is (the error), then jumps ahead by that distance. If price is $100 and EMA is stuck at $98, it doesn't just show $98 - it leaps forward to compensate for being slow.","rawContent":"Zero Lag EMA by John Ehlers uses an error correction method to compensate for the lag inherent in exponential moving averages. Unlike traditional ZLEMA, Ehlers' version calculates the difference between price and the EMA, then adds a portion of that error back to create a leading indicator.\n\nEhlers Zero Lag EMA calculation:\n1. Calculate standard EMA: EMA1 = EMA(Price, Period)\n2. Calculate error (lag): Error = Price - EMA1\n3. Calculate gain coefficient: Gain = 2 / (Period + 1)\n4. Zero Lag EMA: ZLEMA = EMA1 + (Gain * Error)\n\nAlternative formulation:\nZLEMA = EMA + EMA(Price - EMA)\n\nThis creates a moving average that anticipates price movement by the amount it would normally lag.\n\nThink of Ehlers' Zero Lag EMA as a GPS that not only shows where you are but also predicts where you're heading. It measures how far behind the normal EMA is (the error), then jumps ahead by that distance. If price is $100 and EMA is stuck at $98, it doesn't just show $98 - it leaps forward to compensate for being slow.","tags":["DSP Filtering","Cycle & Spectral","Zero-Lag","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_EMA_Ehlers.txt","hasFullInfo":true},{"id":89,"title":"Zero Lag FIR Filter","filename":"Zero_Lag_FIR_Filter.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Forward-backward FIR","overview":"Zero Lag FIR Filter achieves zero-phase distortion by applying a Finite Impulse Response filter both forward and backward through the data. This forward-backward filtering technique effectively cancels out the phase lag, though it requires future data (non-causal) or introduces edge effects in real-time applications.","formula":"Forward-Backward FIR Process:\n1. Apply FIR filter forward through data: Y_forward = FIR(Price)\n2. Reverse the filtered data\n3. Apply same FIR filter to reversed data: Y_backward = FIR(reverse(Y_forward))\n4. Reverse the result again: Y_final = reverse(Y_backward)\n\nResult: Y_final has zero phase lag but requires future data\n\nFor real-time use, can approximate by:\n1. Using symmetric FIR coefficients\n2. Applying predictive extension\n3. Accepting edge effects at current bar","parameters":"","intuition":"Zero Lag FIR is like watching a recording of a race and using slow-motion to perfectly track the runner's position - you can be exactly accurate because you can look forward AND backward. But if you're watching live, you can only approximate this by guessing what's about to happen next. That's why it works perfectly on historical data but needs tricks for live trading.","rawContent":"Zero Lag FIR Filter achieves zero-phase distortion by applying a Finite Impulse Response filter both forward and backward through the data. This forward-backward filtering technique effectively cancels out the phase lag, though it requires future data (non-causal) or introduces edge effects in real-time applications.\n\nForward-Backward FIR Process:\n1. Apply FIR filter forward through data: Y_forward = FIR(Price)\n2. Reverse the filtered data\n3. Apply same FIR filter to reversed data: Y_backward = FIR(reverse(Y_forward))\n4. Reverse the result again: Y_final = reverse(Y_backward)\n\nResult: Y_final has zero phase lag but requires future data\n\nFor real-time use, can approximate by:\n1. Using symmetric FIR coefficients\n2. Applying predictive extension\n3. Accepting edge effects at current bar\n\nZero Lag FIR is like watching a recording of a race and using slow-motion to perfectly track the runner's position - you can be exactly accurate because you can look forward AND backward. But if you're watching live, you can only approximate this by guessing what's about to happen next. That's why it works perfectly on historical data but needs tricks for live trading.","tags":["DSP Filtering","Zero-Lag"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_FIR_Filter.txt","hasFullInfo":true},{"id":90,"title":"Zero Lag IIR Filter","filename":"Zero_Lag_IIR_Filter.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Predictive IIR","overview":"Zero Lag IIR Filter uses predictive techniques combined with Infinite Impulse Response filtering to minimize lag. Unlike FIR filters, IIR filters have feedback loops, making true zero-lag impossible in real-time, but predictive extrapolation can approximate zero-lag behavior by forecasting the next value.","formula":"Predictive IIR approach:\n1. Calculate standard IIR filter: IIR1 = IIR(Price, coefficients)\n2. Estimate prediction: Prediction = Price + (Price - Price[1]) * PredictiveFactor\n3. Apply IIR to predicted value: IIR2 = IIR(Prediction, coefficients)\n4. Blend actual and predictive: ZLIIR = α * IIR2 + (1-α) * IIR1\n\nAlternative method:\n1. Run IIR filter\n2. Calculate lag error: Error = Price - IIR1\n3. Add error compensation: ZLIIR = IIR1 + k * Error\n\nwhere k is the lag reduction coefficient (0 to 1)","parameters":"","intuition":"Zero Lag IIR is like trying to catch a ball while wearing a heavy glove (the IIR filter smooths but slows you down). To compensate, you watch the ball's path and move your hand where you predict it will be in the next moment. You're still using the heavy glove for smoothness, but you're positioning it ahead of time based on momentum.","rawContent":"Zero Lag IIR Filter uses predictive techniques combined with Infinite Impulse Response filtering to minimize lag. Unlike FIR filters, IIR filters have feedback loops, making true zero-lag impossible in real-time, but predictive extrapolation can approximate zero-lag behavior by forecasting the next value.\n\nPredictive IIR approach:\n1. Calculate standard IIR filter: IIR1 = IIR(Price, coefficients)\n2. Estimate prediction: Prediction = Price + (Price - Price[1]) * PredictiveFactor\n3. Apply IIR to predicted value: IIR2 = IIR(Prediction, coefficients)\n4. Blend actual and predictive: ZLIIR = α * IIR2 + (1-α) * IIR1\n\nAlternative method:\n1. Run IIR filter\n2. Calculate lag error: Error = Price - IIR1\n3. Add error compensation: ZLIIR = IIR1 + k * Error\n\nwhere k is the lag reduction coefficient (0 to 1)\n\nZero Lag IIR is like trying to catch a ball while wearing a heavy glove (the IIR filter smooths but slows you down). To compensate, you watch the ball's path and move your hand where you predict it will be in the next moment. You're still using the heavy glove for smoothness, but you're positioning it ahead of time based on momentum.","tags":["DSP Filtering","Zero-Lag"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_IIR_Filter.txt","hasFullInfo":true},{"id":91,"title":"Zero Lag RSI","filename":"Zero_Lag_RSI.txt","group":"group 4","groupNum":4,"categoryId":6,"categoryTitle":"6. ZERO-LAG & LOW-LAG FILTERS","subcategory":"General","summary":"Lag-reduced RSI","overview":"Zero Lag RSI applies zero-lag techniques to the Relative Strength Index to create a more responsive momentum oscillator. It modifies either the price input to RSI or the smoothing within RSI calculation to reduce lag, allowing faster detection of overbought/oversold conditions and divergences.","formula":"Method 1 - Zero Lag Price Input:\n1. Calculate lag: Lag = (Period - 1) / 2\n2. Error correction: AdjPrice = Price + (Price - Price[Lag])\n3. Calculate RSI on adjusted price: ZLRSI = RSI(AdjPrice, Period)\n\nMethod 2 - Zero Lag EMA within RSI:\n1. Calculate gains and losses\n2. Instead of EMA(Gains) and EMA(Losses), use ZLEMA:\n   AvgGain = ZLEMA(Gains, Period)\n   AvgLoss = ZLEMA(Losses, Period)\n3. Calculate RS and RSI normally:\n   RS = AvgGain / AvgLoss\n   ZLRSI = 100 - (100 / (1 + RS))\n\nBoth methods produce RSI that responds faster to momentum changes while maintaining the 0-100 bounded behavior.","parameters":"","intuition":"Zero Lag RSI is like upgrading from a regular thermometer to an instant-read thermometer for measuring market \"temperature\" (momentum). Regular RSI takes time to register changes because it smooths the data heavily. Zero Lag RSI compensates for that delay, so when momentum shifts, you see it reflected in the oscillator almost immediately instead of waiting several bars.","rawContent":"Zero Lag RSI applies zero-lag techniques to the Relative Strength Index to create a more responsive momentum oscillator. It modifies either the price input to RSI or the smoothing within RSI calculation to reduce lag, allowing faster detection of overbought/oversold conditions and divergences.\n\nMethod 1 - Zero Lag Price Input:\n1. Calculate lag: Lag = (Period - 1) / 2\n2. Error correction: AdjPrice = Price + (Price - Price[Lag])\n3. Calculate RSI on adjusted price: ZLRSI = RSI(AdjPrice, Period)\n\nMethod 2 - Zero Lag EMA within RSI:\n1. Calculate gains and losses\n2. Instead of EMA(Gains) and EMA(Losses), use ZLEMA:\n   AvgGain = ZLEMA(Gains, Period)\n   AvgLoss = ZLEMA(Losses, Period)\n3. Calculate RS and RSI normally:\n   RS = AvgGain / AvgLoss\n   ZLRSI = 100 - (100 / (1 + RS))\n\nBoth methods produce RSI that responds faster to momentum changes while maintaining the 0-100 bounded behavior.\n\nZero Lag RSI is like upgrading from a regular thermometer to an instant-read thermometer for measuring market \"temperature\" (momentum). Regular RSI takes time to register changes because it smooths the data heavily. Zero Lag RSI compensates for that delay, so when momentum shifts, you see it reflected in the oscillator almost immediately instead of waiting several bars.","tags":["DSP Filtering","Zero-Lag"],"relPath":"public/concept-list/list-concepts/group 4/Zero_Lag_RSI.txt","hasFullInfo":true},{"id":92,"title":"ARSV (Autoregressive Stochastic Volatility)","filename":"ARSV.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"Stochastic Volatility","summary":"AR(1) log-volatility","overview":"ARSV - Autoregressive Stochastic Volatility - is a model where log-volatility follows an AR(1) process, allowing volatility to evolve as a persistent but random latent variable independent of returns. Unlike GARCH where volatility depends deterministically on past returns, ARSV treats volatility as having its own stochastic dynamics driven by independent shocks. This provides a more flexible framework for capturing volatility persistence, fat tails, and volatility clustering observed in financial markets.","formula":"r(t) = exp(h(t)/2) * z(t)\nh(t) = φ * h(t-1) + η(t)","parameters":"Where:\n- r(t) = asset return at time t\n- h(t) = log-volatility (latent state)\n- exp(h(t)/2) = volatility level\n- z(t) ~ N(0,1) = standardized return shock\n- φ = persistence parameter (-1 < φ < 1)\n- η(t) ~ N(0, σ²ₙ) = volatility innovation\n- z(t) and η(t) are independent\n- Higher |φ| = more volatility persistence\n\nARSV imagines volatility as a hidden ghost that moves around on its own, independently from price movements. While prices bounce up and down based on current volatility, the volatility ghost wanders around following its own random walk with memory - if volatility was high yesterday, it'll probably stay somewhat high today, but it can change for reasons unrelated to whether prices went up or down. This separation makes the model more flexible than GARCH for capturing real market behavior.","intuition":"","rawContent":"ARSV - Autoregressive Stochastic Volatility - is a model where log-volatility follows an AR(1) process, allowing volatility to evolve as a persistent but random latent variable independent of returns. Unlike GARCH where volatility depends deterministically on past returns, ARSV treats volatility as having its own stochastic dynamics driven by independent shocks. This provides a more flexible framework for capturing volatility persistence, fat tails, and volatility clustering observed in financial markets.\n\nr(t) = exp(h(t)/2) * z(t)\nh(t) = φ * h(t-1) + η(t)\n\nWhere:\n- r(t) = asset return at time t\n- h(t) = log-volatility (latent state)\n- exp(h(t)/2) = volatility level\n- z(t) ~ N(0,1) = standardized return shock\n- φ = persistence parameter (-1 < φ < 1)\n- η(t) ~ N(0, σ²ₙ) = volatility innovation\n- z(t) and η(t) are independent\n- Higher |φ| = more volatility persistence\n\nARSV imagines volatility as a hidden ghost that moves around on its own, independently from price movements. While prices bounce up and down based on current volatility, the volatility ghost wanders around following its own random walk with memory - if volatility was high yesterday, it'll probably stay somewhat high today, but it can change for reasons unrelated to whether prices went up or down. This separation makes the model more flexible than GARCH for capturing real market behavior.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/ARSV.txt","hasFullInfo":true},{"id":93,"title":"EGARCH (Exponential GARCH)","filename":"EGARCH.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Asymmetric volatility modeling","overview":"EGARCH - Exponential Generalized Autoregressive Conditional Heteroskedasticity - is an extension of GARCH that models the logarithm of volatility instead of volatility itself, allowing for asymmetric responses to positive and negative returns. This captures the \"leverage effect\" where negative returns (bad news) tend to increase volatility more than positive returns (good news) of the same magnitude. The exponential form also ensures volatility remains positive without parameter constraints.","formula":"log(σ²(t)) = ω + β * log(σ²(t-1)) + α * |z(t-1)| + γ * z(t-1)","parameters":"Where:\n- σ²(t) = forecasted variance\n- ω = constant term\n- β = persistence of volatility shocks\n- z(t-1) = standardized residual (r(t-1) / σ(t-1))\n- α = magnitude effect (size of shock)\n- γ = asymmetry parameter (leverage effect)\n- If γ < 0, negative shocks increase volatility more","intuition":"EGARCH is like GARCH's smarter cousin that noticed markets freak out more when they drop than when they rise. A 5% crash scares traders more than a 5% rally excites them, creating more volatility. EGARCH accounts for this psychological asymmetry - bad news creates bigger waves than good news, which is why market crashes are often more volatile than rallies.","rawContent":"EGARCH - Exponential Generalized Autoregressive Conditional Heteroskedasticity - is an extension of GARCH that models the logarithm of volatility instead of volatility itself, allowing for asymmetric responses to positive and negative returns. This captures the \"leverage effect\" where negative returns (bad news) tend to increase volatility more than positive returns (good news) of the same magnitude. The exponential form also ensures volatility remains positive without parameter constraints.\n\nlog(σ²(t)) = ω + β * log(σ²(t-1)) + α * |z(t-1)| + γ * z(t-1)\n\nWhere:\n- σ²(t) = forecasted variance\n- ω = constant term\n- β = persistence of volatility shocks\n- z(t-1) = standardized residual (r(t-1) / σ(t-1))\n- α = magnitude effect (size of shock)\n- γ = asymmetry parameter (leverage effect)\n- If γ < 0, negative shocks increase volatility more\n\nEGARCH is like GARCH's smarter cousin that noticed markets freak out more when they drop than when they rise. A 5% crash scares traders more than a 5% rally excites them, creating more volatility. EGARCH accounts for this psychological asymmetry - bad news creates bigger waves than good news, which is why market crashes are often more volatile than rallies.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/EGARCH.txt","hasFullInfo":true},{"id":94,"title":"FIGARCH (Fractionally Integrated GARCH)","filename":"FIGARCH.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Long memory volatility","overview":"FIGARCH - Fractionally Integrated Generalized Autoregressive Conditional Heteroskedasticity - extends the standard GARCH model to capture long memory in volatility. While regular GARCH assumes volatility shocks decay exponentially and quickly, FIGARCH allows for hyperbolic (slow power-law) decay, meaning that a volatility shock today can influence volatility forecasts far into the future. The fractional differencing parameter controls the persistence of volatility shocks.","formula":"σ²(t) = ω + [1 - (1-β*L)⁻¹ * (1-φ*L) * (1-L)^d] * r²(t) + β * σ²(t-1)","parameters":"Where:\n- σ²(t) = forecasted variance\n- ω = constant term\n- d = fractional differencing parameter (0 < d < 1)\n- φ = short-run dynamics parameter\n- β = GARCH coefficient\n- L = lag operator\n- If d = 0: reduces to GARCH\n- If d = 1: integrated (I)GARCH with infinite persistence\n- 0 < d < 1: long memory\n\nFIGARCH models volatility like a bell that rings for a long, long time. In regular GARCH, a big market shock creates volatility that fades quickly, like snapping your fingers. But in reality, major events like the 2008 crash or COVID-19 keep markets jittery for months or years. FIGARCH captures this \"elephants never forget\" property of market volatility, where the echoes of past shocks persist much longer than simple models suggest.","intuition":"","rawContent":"FIGARCH - Fractionally Integrated Generalized Autoregressive Conditional Heteroskedasticity - extends the standard GARCH model to capture long memory in volatility. While regular GARCH assumes volatility shocks decay exponentially and quickly, FIGARCH allows for hyperbolic (slow power-law) decay, meaning that a volatility shock today can influence volatility forecasts far into the future. The fractional differencing parameter controls the persistence of volatility shocks.\n\nσ²(t) = ω + [1 - (1-β*L)⁻¹ * (1-φ*L) * (1-L)^d] * r²(t) + β * σ²(t-1)\n\nWhere:\n- σ²(t) = forecasted variance\n- ω = constant term\n- d = fractional differencing parameter (0 < d < 1)\n- φ = short-run dynamics parameter\n- β = GARCH coefficient\n- L = lag operator\n- If d = 0: reduces to GARCH\n- If d = 1: integrated (I)GARCH with infinite persistence\n- 0 < d < 1: long memory\n\nFIGARCH models volatility like a bell that rings for a long, long time. In regular GARCH, a big market shock creates volatility that fades quickly, like snapping your fingers. But in reality, major events like the 2008 crash or COVID-19 keep markets jittery for months or years. FIGARCH captures this \"elephants never forget\" property of market volatility, where the echoes of past shocks persist much longer than simple models suggest.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/FIGARCH.txt","hasFullInfo":true},{"id":95,"title":"GARCH(1,1)","filename":"GARCH_1_1.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Generalized autoregressive conditional heteroskedasticity","overview":"GARCH(1,1) - Generalized Autoregressive Conditional Heteroskedasticity - is a statistical model that forecasts volatility by assuming that today's volatility depends on yesterday's volatility and yesterday's squared return. It captures the clustering effect where high volatility periods tend to follow high volatility periods, and low volatility follows low volatility. The (1,1) notation means it uses one lag of past variance and one lag of past squared returns.","formula":"σ²(t) = ω + α * r²(t-1) + β * σ²(t-1)","parameters":"Where:\n- σ²(t) = forecasted variance for today\n- ω = long-run average variance (constant term)\n- α = weight on yesterday's squared return shock\n- r²(t-1) = yesterday's squared return\n- β = weight on yesterday's variance forecast\n- Constraint: α + β < 1 for stability","intuition":"GARCH(1,1) is like a weather forecast for market turbulence. Just as tomorrow's weather often resembles today's weather, market volatility tends to persist. If the market was crazy yesterday, it'll probably stay somewhat crazy today. The model learns from recent price swings and recent volatility predictions to guess how wild the market will be next.","rawContent":"GARCH(1,1) - Generalized Autoregressive Conditional Heteroskedasticity - is a statistical model that forecasts volatility by assuming that today's volatility depends on yesterday's volatility and yesterday's squared return. It captures the clustering effect where high volatility periods tend to follow high volatility periods, and low volatility follows low volatility. The (1,1) notation means it uses one lag of past variance and one lag of past squared returns.\n\nσ²(t) = ω + α * r²(t-1) + β * σ²(t-1)\n\nWhere:\n- σ²(t) = forecasted variance for today\n- ω = long-run average variance (constant term)\n- α = weight on yesterday's squared return shock\n- r²(t-1) = yesterday's squared return\n- β = weight on yesterday's variance forecast\n- Constraint: α + β < 1 for stability\n\nGARCH(1,1) is like a weather forecast for market turbulence. Just as tomorrow's weather often resembles today's weather, market volatility tends to persist. If the market was crazy yesterday, it'll probably stay somewhat crazy today. The model learns from recent price swings and recent volatility predictions to guess how wild the market will be next.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/GARCH_1_1.txt","hasFullInfo":true},{"id":96,"title":"GARCH Diffusion Model","filename":"GARCH_Diffusion_Model.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Continuous-time GARCH","overview":"GARCH Diffusion Model is a continuous-time formulation of the GARCH process, representing volatility dynamics as stochastic differential equations rather than discrete-time updates. This approach bridges the gap between discrete GARCH models used for daily data and continuous diffusion processes used in option pricing theory. The model allows for instantaneous volatility updates and provides a more theoretically rigorous framework for high-frequency data and derivatives pricing.","formula":"dS(t) = μ * S(t) * dt + σ(t) * S(t) * dW₁(t)\ndσ²(t) = κ * (θ - σ²(t)) * dt + λ * σ(t) * dW₂(t)","parameters":"Where:\n- S(t) = asset price at time t\n- σ²(t) = instantaneous variance\n- μ = drift (expected return)\n- κ = mean reversion speed of variance\n- θ = long-run variance level\n- λ = volatility of volatility\n- dW₁, dW₂ = correlated Brownian motions\n- dt = infinitesimal time increment\n- Correlation ρ captures leverage effect\n\nGARCH Diffusion Model treats volatility as a continuously flowing river rather than discrete daily buckets. Instead of updating volatility once per day like regular GARCH, this model lets volatility change smoothly from moment to moment. It's like having a speedometer that updates constantly versus one that only updates once per mile. This makes it better for pricing options and analyzing high-speed trading data where volatility can shift within minutes or seconds.","intuition":"","rawContent":"GARCH Diffusion Model is a continuous-time formulation of the GARCH process, representing volatility dynamics as stochastic differential equations rather than discrete-time updates. This approach bridges the gap between discrete GARCH models used for daily data and continuous diffusion processes used in option pricing theory. The model allows for instantaneous volatility updates and provides a more theoretically rigorous framework for high-frequency data and derivatives pricing.\n\ndS(t) = μ * S(t) * dt + σ(t) * S(t) * dW₁(t)\ndσ²(t) = κ * (θ - σ²(t)) * dt + λ * σ(t) * dW₂(t)\n\nWhere:\n- S(t) = asset price at time t\n- σ²(t) = instantaneous variance\n- μ = drift (expected return)\n- κ = mean reversion speed of variance\n- θ = long-run variance level\n- λ = volatility of volatility\n- dW₁, dW₂ = correlated Brownian motions\n- dt = infinitesimal time increment\n- Correlation ρ captures leverage effect\n\nGARCH Diffusion Model treats volatility as a continuously flowing river rather than discrete daily buckets. Instead of updating volatility once per day like regular GARCH, this model lets volatility change smoothly from moment to moment. It's like having a speedometer that updates constantly versus one that only updates once per mile. This makes it better for pricing options and analyzing high-speed trading data where volatility can shift within minutes or seconds.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/GARCH_Diffusion_Model.txt","hasFullInfo":true},{"id":97,"title":"GARCH-MIDAS","filename":"GARCH_MIDAS.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Mixed data sampling GARCH","overview":"GARCH-MIDAS - GARCH with Mixed Data Sampling - is a two-component volatility model that separates short-term (high-frequency) volatility fluctuations from long-term (low-frequency) volatility trends. It combines daily GARCH dynamics with slower-moving components driven by monthly or quarterly variables like realized volatility, economic indicators, or macroeconomic uncertainty. This allows the model to incorporate information at different time scales simultaneously.","formula":"Short-term: σ²(t) = (1 - α - β) * τ(t) + α * r²(t-1) + β * σ²(t-1)\nLong-term: τ(t) = exp(m + θ * Σ φ(k) * RV(t-k))","parameters":"Where:\n- σ²(t) = short-term daily variance\n- τ(t) = long-term secular volatility component\n- α, β = short-term GARCH parameters\n- m = unconditional log variance\n- θ = impact of realized volatility on long-term component\n- φ(k) = weighting scheme (e.g., beta weights)\n- RV(t-k) = realized volatility at lower frequency\n- k = lag index for monthly/quarterly data","intuition":"GARCH-MIDAS is like having both a daily weather forecast and a seasonal climate outlook. Daily volatility wiggles up and down like daily temperature changes, but there's also a slower-moving \"climate\" of volatility that shifts over months based on economic conditions. A stock might have calm daily moves during a volatile economic period, or choppy daily moves during calm times. This model tracks both the fast jitters and the slow-moving mood of the market.","rawContent":"GARCH-MIDAS - GARCH with Mixed Data Sampling - is a two-component volatility model that separates short-term (high-frequency) volatility fluctuations from long-term (low-frequency) volatility trends. It combines daily GARCH dynamics with slower-moving components driven by monthly or quarterly variables like realized volatility, economic indicators, or macroeconomic uncertainty. This allows the model to incorporate information at different time scales simultaneously.\n\nShort-term: σ²(t) = (1 - α - β) * τ(t) + α * r²(t-1) + β * σ²(t-1)\nLong-term: τ(t) = exp(m + θ * Σ φ(k) * RV(t-k))\n\nWhere:\n- σ²(t) = short-term daily variance\n- τ(t) = long-term secular volatility component\n- α, β = short-term GARCH parameters\n- m = unconditional log variance\n- θ = impact of realized volatility on long-term component\n- φ(k) = weighting scheme (e.g., beta weights)\n- RV(t-k) = realized volatility at lower frequency\n- k = lag index for monthly/quarterly data\n\nGARCH-MIDAS is like having both a daily weather forecast and a seasonal climate outlook. Daily volatility wiggles up and down like daily temperature changes, but there's also a slower-moving \"climate\" of volatility that shifts over months based on economic conditions. A stock might have calm daily moves during a volatile economic period, or choppy daily moves during calm times. This model tracks both the fast jitters and the slow-moving mood of the market.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/GARCH_MIDAS.txt","hasFullInfo":true},{"id":98,"title":"GJR-GARCH","filename":"GJR_GARCH.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Threshold GARCH","overview":"GJR-GARCH - named after Glosten, Jagannathan, and Runkle - is a threshold GARCH model that allows volatility to respond differently to positive and negative returns of equal magnitude. It adds an asymmetric term that activates only when returns are negative, capturing the leverage effect where downside moves increase volatility more than upside moves. This model is simpler than EGARCH while still capturing asymmetric volatility responses.","formula":"σ²(t) = ω + α * r²(t-1) + γ * I(t-1) * r²(t-1) + β * σ²(t-1)","parameters":"Where:\n- σ²(t) = forecasted variance\n- ω = long-run average variance\n- α = symmetric shock coefficient\n- r²(t-1) = yesterday's squared return\n- γ = additional impact from negative returns\n- I(t-1) = indicator function (1 if r(t-1) < 0, else 0)\n- β = persistence of past variance\n- Total effect of negative shock = α + γ","intuition":"GJR-GARCH recognizes that markets are like a nervous dog - they react more strongly to threats (losses) than to treats (gains). When prices drop, traders panic and volatility spikes. When prices rise by the same amount, everyone stays calmer. This model adds extra sensitivity specifically for the downside moves, making volatility forecasts more realistic during market stress.","rawContent":"GJR-GARCH - named after Glosten, Jagannathan, and Runkle - is a threshold GARCH model that allows volatility to respond differently to positive and negative returns of equal magnitude. It adds an asymmetric term that activates only when returns are negative, capturing the leverage effect where downside moves increase volatility more than upside moves. This model is simpler than EGARCH while still capturing asymmetric volatility responses.\n\nσ²(t) = ω + α * r²(t-1) + γ * I(t-1) * r²(t-1) + β * σ²(t-1)\n\nWhere:\n- σ²(t) = forecasted variance\n- ω = long-run average variance\n- α = symmetric shock coefficient\n- r²(t-1) = yesterday's squared return\n- γ = additional impact from negative returns\n- I(t-1) = indicator function (1 if r(t-1) < 0, else 0)\n- β = persistence of past variance\n- Total effect of negative shock = α + γ\n\nGJR-GARCH recognizes that markets are like a nervous dog - they react more strongly to threats (losses) than to treats (gains). When prices drop, traders panic and volatility spikes. When prices rise by the same amount, everyone stays calmer. This model adds extra sensitivity specifically for the downside moves, making volatility forecasts more realistic during market stress.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/GJR_GARCH.txt","hasFullInfo":true},{"id":99,"title":"Heston Model Filter","filename":"Heston_Model_Filter.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"Stochastic Volatility","summary":"Square-root volatility process","overview":"Heston Model Filter is a stochastic volatility model where both price and volatility follow random processes, with volatility modeled as a mean-reverting square-root process. Unlike GARCH which determines volatility from past returns, the Heston model treats volatility as an independent latent variable with its own random dynamics. This allows for richer volatility behavior including fat tails, volatility clustering, and the leverage effect, making it popular for option pricing and filtering volatility from price observations.","formula":"dS(t) = μ * S(t) * dt + √V(t) * S(t) * dW₁(t)\ndV(t) = κ * (θ - V(t)) * dt + σᵥ * √V(t) * dW₂(t)","parameters":"Where:\n- S(t) = asset price\n- V(t) = instantaneous variance (always positive)\n- μ = expected return\n- κ = mean reversion rate of variance\n- θ = long-run average variance\n- σᵥ = volatility of volatility (vol-of-vol)\n- dW₁, dW₂ = Brownian motions with correlation ρ\n- ρ < 0 captures leverage effect\n- √V(t) ensures variance stays positive\n\nThe Heston Model treats volatility like a yo-yo on a string. Volatility bounces around randomly, but the string (mean reversion) keeps pulling it back toward an average level. When volatility gets too high, it tends to fall back down; when too low, it drifts back up. Meanwhile, the price wiggles based on current volatility. The model captures how volatility itself is uncertain and changes unpredictably, not just mechanically responding to past price moves.","intuition":"","rawContent":"Heston Model Filter is a stochastic volatility model where both price and volatility follow random processes, with volatility modeled as a mean-reverting square-root process. Unlike GARCH which determines volatility from past returns, the Heston model treats volatility as an independent latent variable with its own random dynamics. This allows for richer volatility behavior including fat tails, volatility clustering, and the leverage effect, making it popular for option pricing and filtering volatility from price observations.\n\ndS(t) = μ * S(t) * dt + √V(t) * S(t) * dW₁(t)\ndV(t) = κ * (θ - V(t)) * dt + σᵥ * √V(t) * dW₂(t)\n\nWhere:\n- S(t) = asset price\n- V(t) = instantaneous variance (always positive)\n- μ = expected return\n- κ = mean reversion rate of variance\n- θ = long-run average variance\n- σᵥ = volatility of volatility (vol-of-vol)\n- dW₁, dW₂ = Brownian motions with correlation ρ\n- ρ < 0 captures leverage effect\n- √V(t) ensures variance stays positive\n\nThe Heston Model treats volatility like a yo-yo on a string. Volatility bounces around randomly, but the string (mean reversion) keeps pulling it back toward an average level. When volatility gets too high, it tends to fall back down; when too low, it drifts back up. Meanwhile, the price wiggles based on current volatility. The model captures how volatility itself is uncertain and changes unpredictably, not just mechanically responding to past price moves.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Heston_Model_Filter.txt","hasFullInfo":true},{"id":100,"title":"Hodges-Lehmann Estimator","filename":"Hodges_Lehmann_Estimator.txt","group":"group 5","groupNum":5,"categoryId":13,"categoryTitle":"13. PERCENTILE & QUANTILE FILTERS","subcategory":"General","summary":"Median of pairwise means","overview":"Hodges-Lehmann Estimator is a robust measure of central tendency calculated as the median of all pairwise averages in a dataset. For n observations, it computes the average of every possible pair (including each value paired with itself), then takes the median of these pairwise means. This estimator is highly resistant to outliers while being more efficient than the simple median, providing a stable center estimate even when data contains extreme values or is asymmetrically distributed.","formula":"HL = median{(X(i) + X(j)) / 2 : i ≤ j}","parameters":"Where:\n- X = dataset of n observations\n- Compute all n(n+1)/2 pairwise averages\n- Including (X(i) + X(i))/2 = X(i) for each i\n- Sort all pairwise averages\n- HL = median of these averages\n- Estimator of location (center)\n- Breakdown point ≈ 29%\n- More efficient than median\n- Asymptotically normal","intuition":"Hodges-Lehmann Estimator is like finding the center of a group by averaging every possible pairing of people's positions, then picking the middle result. If you have 5 data points, you'd calculate averages for all pairs: (1st + 1st), (1st + 2nd), (1st + 3rd), etc. Then you find the median of all those paired averages. This averaging-then-medianing combo makes it ignore outliers better than a simple mean, while being more stable than a simple median - getting you a really solid \"true center\" of your data.","rawContent":"Hodges-Lehmann Estimator is a robust measure of central tendency calculated as the median of all pairwise averages in a dataset. For n observations, it computes the average of every possible pair (including each value paired with itself), then takes the median of these pairwise means. This estimator is highly resistant to outliers while being more efficient than the simple median, providing a stable center estimate even when data contains extreme values or is asymmetrically distributed.\n\nHL = median{(X(i) + X(j)) / 2 : i ≤ j}\n\nWhere:\n- X = dataset of n observations\n- Compute all n(n+1)/2 pairwise averages\n- Including (X(i) + X(i))/2 = X(i) for each i\n- Sort all pairwise averages\n- HL = median of these averages\n- Estimator of location (center)\n- Breakdown point ≈ 29%\n- More efficient than median\n- Asymptotically normal\n\nHodges-Lehmann Estimator is like finding the center of a group by averaging every possible pairing of people's positions, then picking the middle result. If you have 5 data points, you'd calculate averages for all pairs: (1st + 1st), (1st + 2nd), (1st + 3rd), etc. Then you find the median of all those paired averages. This averaging-then-medianing combo makes it ignore outliers better than a simple mean, while being more stable than a simple median - getting you a really solid \"true center\" of your data.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Hodges_Lehmann_Estimator.txt","hasFullInfo":true},{"id":101,"title":"Hull-White Model","filename":"Hull_White_Model.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"Stochastic Volatility","summary":"Interest rate volatility","overview":"Hull-White Model is a mean-reverting interest rate model extended to general asset pricing, where the short rate (or volatility) follows an Ornstein-Uhlenbeck process with time-varying parameters. Originally designed for bond pricing, it allows for term structure fitting and mean reversion to a time-dependent level. In volatility filtering contexts, it provides a framework for modeling volatility that reverts to a moving target rather than a fixed long-run average, useful when fundamental volatility levels shift over time.","formula":"dr(t) = [θ(t) - α * r(t)] * dt + σ * dW(t)","parameters":"Where:\n- r(t) = short rate or volatility at time t\n- θ(t) = time-varying mean reversion level\n- α = speed of mean reversion\n- σ = volatility of the process (constant)\n- dW(t) = Brownian motion increment\n- θ(t) can be calibrated to fit term structure\n- Mean reversion level: θ(t)/α\n- Process is Gaussian (can go negative)\n\nHull-White Model imagines volatility (or interest rates) as a dog on a moving walkway. The dog wanders around randomly, but there's a leash (mean reversion) pulling it toward the walkway's current position. Unlike simpler models where the dog is pulled toward a fixed spot, here the target spot itself is moving along the walkway. This allows the model to adapt to changing market conditions where \"normal\" volatility shifts over time rather than staying constant.","intuition":"","rawContent":"Hull-White Model is a mean-reverting interest rate model extended to general asset pricing, where the short rate (or volatility) follows an Ornstein-Uhlenbeck process with time-varying parameters. Originally designed for bond pricing, it allows for term structure fitting and mean reversion to a time-dependent level. In volatility filtering contexts, it provides a framework for modeling volatility that reverts to a moving target rather than a fixed long-run average, useful when fundamental volatility levels shift over time.\n\ndr(t) = [θ(t) - α * r(t)] * dt + σ * dW(t)\n\nWhere:\n- r(t) = short rate or volatility at time t\n- θ(t) = time-varying mean reversion level\n- α = speed of mean reversion\n- σ = volatility of the process (constant)\n- dW(t) = Brownian motion increment\n- θ(t) can be calibrated to fit term structure\n- Mean reversion level: θ(t)/α\n- Process is Gaussian (can go negative)\n\nHull-White Model imagines volatility (or interest rates) as a dog on a moving walkway. The dog wanders around randomly, but there's a leash (mean reversion) pulling it toward the walkway's current position. Unlike simpler models where the dog is pulled toward a fixed spot, here the target spot itself is moving along the walkway. This allows the model to adapt to changing market conditions where \"normal\" volatility shifts over time rather than staying constant.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Hull_White_Model.txt","hasFullInfo":true},{"id":102,"title":"MAD (Median Absolute Deviation)","filename":"MAD.txt","group":"group 5","groupNum":5,"categoryId":13,"categoryTitle":"13. PERCENTILE & QUANTILE FILTERS","subcategory":"General","summary":"Robust dispersion measure","overview":"MAD - Median Absolute Deviation - is a robust measure of statistical dispersion that quantifies spread by taking the median of absolute deviations from the median. Unlike standard deviation which is sensitive to extreme outliers, MAD provides a more stable estimate of variability in the presence of noise or anomalous data points. It's particularly useful in financial markets where occasional extreme events would distort standard deviation-based measures.","formula":"MAD = median(|X(i) - median(X)|)","parameters":"Where:\n- X = dataset (e.g., price returns over period)\n- median(X) = median of the dataset\n- |X(i) - median(X)| = absolute deviation from median\n- MAD = median of all absolute deviations\n- Normalized MAD = MAD / 0.6745 (comparable to σ for normal dist)\n- More robust than standard deviation\n- Breakdown point of 50% (vs 0% for std dev)","intuition":"MAD is like measuring how spread out data is, but being smart enough to ignore the crazy outliers. Imagine measuring how tall people are in a room. Standard deviation freaks out if one 7-foot NBA player walks in. MAD just shrugs and focuses on the typical person's height. In trading, if you had 19 normal days and one flash crash day, MAD gives you the \"normal\" volatility while standard deviation gets distorted by that one crazy day.","rawContent":"MAD - Median Absolute Deviation - is a robust measure of statistical dispersion that quantifies spread by taking the median of absolute deviations from the median. Unlike standard deviation which is sensitive to extreme outliers, MAD provides a more stable estimate of variability in the presence of noise or anomalous data points. It's particularly useful in financial markets where occasional extreme events would distort standard deviation-based measures.\n\nMAD = median(|X(i) - median(X)|)\n\nWhere:\n- X = dataset (e.g., price returns over period)\n- median(X) = median of the dataset\n- |X(i) - median(X)| = absolute deviation from median\n- MAD = median of all absolute deviations\n- Normalized MAD = MAD / 0.6745 (comparable to σ for normal dist)\n- More robust than standard deviation\n- Breakdown point of 50% (vs 0% for std dev)\n\nMAD is like measuring how spread out data is, but being smart enough to ignore the crazy outliers. Imagine measuring how tall people are in a room. Standard deviation freaks out if one 7-foot NBA player walks in. MAD just shrugs and focuses on the typical person's height. In trading, if you had 19 normal days and one flash crash day, MAD gives you the \"normal\" volatility while standard deviation gets distorted by that one crazy day.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/MAD.txt","hasFullInfo":true},{"id":103,"title":"Quantile Regression Filter","filename":"Quantile_Regression_Filter.txt","group":"group 5","groupNum":5,"categoryId":13,"categoryTitle":"13. PERCENTILE & QUANTILE FILTERS","subcategory":"General","summary":"Conditional quantile estimation","overview":"Quantile Regression Filter estimates conditional quantiles of a distribution rather than the conditional mean, allowing you to model different parts of the distribution (e.g., 10th, 50th, 90th percentiles) separately. Unlike ordinary regression which minimizes squared errors and targets the average, quantile regression minimizes asymmetric absolute errors to target specific percentiles. This is valuable for creating adaptive support/resistance levels, risk bands, or understanding how the tails of the distribution behave differently from the center.","formula":"Minimize: Σ ρ_τ(r(i) - β' * X(i))","parameters":"Where:\n- ρ_τ(u) = u * (τ - I(u<0)) is the check function\n- τ = target quantile (e.g., 0.25 for 25th percentile)\n- r(i) = returns or price changes\n- X(i) = predictor variables (time, lagged values, etc.)\n- β = regression coefficients\n- Different β for each quantile τ\n- τ = 0.5 gives median regression\n- Creates conditional quantile curves","intuition":"Quantile Regression is like asking \"What's the price floor and ceiling?\" instead of \"What's the average price?\" Regular regression finds the middle of the road. Quantile regression finds the guardrails. You can model the 10th percentile to see where prices rarely go below (support) and the 90th percentile for where they rarely go above (resistance). It's especially useful because markets don't behave symmetrically - the downside and upside can have completely different dynamics.","rawContent":"Quantile Regression Filter estimates conditional quantiles of a distribution rather than the conditional mean, allowing you to model different parts of the distribution (e.g., 10th, 50th, 90th percentiles) separately. Unlike ordinary regression which minimizes squared errors and targets the average, quantile regression minimizes asymmetric absolute errors to target specific percentiles. This is valuable for creating adaptive support/resistance levels, risk bands, or understanding how the tails of the distribution behave differently from the center.\n\nMinimize: Σ ρ_τ(r(i) - β' * X(i))\n\nWhere:\n- ρ_τ(u) = u * (τ - I(u<0)) is the check function\n- τ = target quantile (e.g., 0.25 for 25th percentile)\n- r(i) = returns or price changes\n- X(i) = predictor variables (time, lagged values, etc.)\n- β = regression coefficients\n- Different β for each quantile τ\n- τ = 0.5 gives median regression\n- Creates conditional quantile curves\n\nQuantile Regression is like asking \"What's the price floor and ceiling?\" instead of \"What's the average price?\" Regular regression finds the middle of the road. Quantile regression finds the guardrails. You can model the 10th percentile to see where prices rarely go below (support) and the 90th percentile for where they rarely go above (resistance). It's especially useful because markets don't behave symmetrically - the downside and upside can have completely different dynamics.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Quantile_Regression_Filter.txt","hasFullInfo":true},{"id":104,"title":"SV-GARCH Hybrid","filename":"SV_GARCH_Hybrid.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"Stochastic Volatility","summary":"Combined approach","overview":"SV-GARCH Hybrid combines features of both Stochastic Volatility (SV) and GARCH models to create a more flexible volatility framework. It incorporates GARCH's dependence on past returns with SV's independent stochastic volatility component, capturing both the predictable volatility clustering from past shocks and the unpredictable random volatility innovations. This hybrid approach provides richer dynamics than either model alone, better fitting the complex volatility patterns observed in real financial data.","formula":"σ²(t) = ω + α * r²(t-1) + β * σ²(t-1) + V(t)\ndV(t) = κ * (θ - V(t)) * dt + σᵥ * √V(t) * dW(t)","parameters":"Where:\n- σ²(t) = total conditional variance\n- ω, α, β = GARCH parameters\n- r²(t-1) = squared return (GARCH component)\n- V(t) = stochastic volatility component\n- κ = mean reversion speed\n- θ = long-run SV level\n- σᵥ = volatility of SV process\n- dW(t) = Brownian motion driving SV\n- Combines predictable and random volatility","intuition":"SV-GARCH Hybrid is like combining a thermostat with random weather. The GARCH part is like a thermostat that adjusts based on recent temperature (returns) - if it was hot yesterday, expect warmth today. The SV part is like unpredictable weather changes that happen regardless of yesterday's temperature. Together, you get volatility that responds both to recent market moves (GARCH's memory) and to random storms of uncertainty (SV's randomness), making it more realistic than either alone.","rawContent":"SV-GARCH Hybrid combines features of both Stochastic Volatility (SV) and GARCH models to create a more flexible volatility framework. It incorporates GARCH's dependence on past returns with SV's independent stochastic volatility component, capturing both the predictable volatility clustering from past shocks and the unpredictable random volatility innovations. This hybrid approach provides richer dynamics than either model alone, better fitting the complex volatility patterns observed in real financial data.\n\nσ²(t) = ω + α * r²(t-1) + β * σ²(t-1) + V(t)\ndV(t) = κ * (θ - V(t)) * dt + σᵥ * √V(t) * dW(t)\n\nWhere:\n- σ²(t) = total conditional variance\n- ω, α, β = GARCH parameters\n- r²(t-1) = squared return (GARCH component)\n- V(t) = stochastic volatility component\n- κ = mean reversion speed\n- θ = long-run SV level\n- σᵥ = volatility of SV process\n- dW(t) = Brownian motion driving SV\n- Combines predictable and random volatility\n\nSV-GARCH Hybrid is like combining a thermostat with random weather. The GARCH part is like a thermostat that adjusts based on recent temperature (returns) - if it was hot yesterday, expect warmth today. The SV part is like unpredictable weather changes that happen regardless of yesterday's temperature. Together, you get volatility that responds both to recent market moves (GARCH's memory) and to random storms of uncertainty (SV's randomness), making it more realistic than either alone.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/SV_GARCH_Hybrid.txt","hasFullInfo":true},{"id":105,"title":"TGARCH (Threshold GARCH)","filename":"TGARCH.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"GARCH Family","summary":"Leverage effect modeling","overview":"TGARCH - Threshold Generalized Autoregressive Conditional Heteroskedasticity - is a volatility model that splits the impact of price shocks into positive and negative components using a threshold at zero. It allows the model to apply different coefficients to upside and downside moves, capturing asymmetric volatility responses. TGARCH is essentially equivalent to GJR-GARCH, both modeling the leverage effect where negative returns amplify volatility more than positive returns.","formula":"σ²(t) = ω + α⁺ * max(r(t-1), 0)² + α⁻ * max(-r(t-1), 0)² + β * σ²(t-1)","parameters":"Where:\n- σ²(t) = forecasted variance\n- ω = constant baseline variance\n- α⁺ = coefficient for positive returns\n- α⁻ = coefficient for negative returns\n- r(t-1) = previous period return\n- max(r, 0) = positive part of return\n- max(-r, 0) = negative part of return\n- β = persistence of volatility\n- Typically α⁻ > α⁺ (losses impact more)\n\nTGARCH treats market gains and losses like two different animals. Imagine volatility as a spring - when the market drops, the spring compresses hard (big volatility increase), but when the market rises by the same amount, the spring barely moves. This model uses separate dials for up moves and down moves, reflecting the real-world observation that fear is stronger than greed.","intuition":"","rawContent":"TGARCH - Threshold Generalized Autoregressive Conditional Heteroskedasticity - is a volatility model that splits the impact of price shocks into positive and negative components using a threshold at zero. It allows the model to apply different coefficients to upside and downside moves, capturing asymmetric volatility responses. TGARCH is essentially equivalent to GJR-GARCH, both modeling the leverage effect where negative returns amplify volatility more than positive returns.\n\nσ²(t) = ω + α⁺ * max(r(t-1), 0)² + α⁻ * max(-r(t-1), 0)² + β * σ²(t-1)\n\nWhere:\n- σ²(t) = forecasted variance\n- ω = constant baseline variance\n- α⁺ = coefficient for positive returns\n- α⁻ = coefficient for negative returns\n- r(t-1) = previous period return\n- max(r, 0) = positive part of return\n- max(-r, 0) = negative part of return\n- β = persistence of volatility\n- Typically α⁻ > α⁺ (losses impact more)\n\nTGARCH treats market gains and losses like two different animals. Imagine volatility as a spring - when the market drops, the spring compresses hard (big volatility increase), but when the market rises by the same amount, the spring barely moves. This model uses separate dials for up moves and down moves, reflecting the real-world observation that fear is stronger than greed.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/TGARCH.txt","hasFullInfo":true},{"id":106,"title":"3/2 Stochastic Volatility Model","filename":"Three_Half_Stochastic_Volatility_Model.txt","group":"group 5","groupNum":5,"categoryId":12,"categoryTitle":"12. VOLATILITY MODELING FILTERS","subcategory":"Stochastic Volatility","summary":"Alternative volatility process","overview":"3/2 Stochastic Volatility Model is an alternative to the Heston model where variance follows a process with V^(3/2) volatility coefficient instead of the square-root structure. This produces different tail behavior and volatility dynamics, often providing a better fit to empirical volatility distributions and option prices. The model name comes from the power 3/2 appearing in the diffusion term, creating unique mathematical properties and richer volatility clustering patterns.","formula":"dS(t) = μ * S(t) * dt + √V(t) * S(t) * dW₁(t)\ndV(t) = κ * (θ - V(t)) * dt + σᵥ * V(t)^(3/2) * dW₂(t)","parameters":"Where:\n- S(t) = asset price\n- V(t) = instantaneous variance\n- μ = expected return (drift)\n- κ = mean reversion speed\n- θ = long-run variance level\n- σᵥ = volatility of volatility parameter\n- V(t)^(3/2) = 3/2 power diffusion term\n- dW₁, dW₂ = correlated Brownian motions\n- Creates different tail behavior than Heston","intuition":"The 3/2 Model is like the Heston model's exotic cousin with different physics. While Heston's volatility bounces around with intensity proportional to √volatility, this model's volatility wiggles with intensity proportional to volatility^(3/2). When volatility is high, it becomes even MORE volatile in this model, creating wilder swings and fatter tails. It's like a feedback loop where scary markets get even scarier faster, better matching the extreme behavior seen in real market crashes.","rawContent":"3/2 Stochastic Volatility Model is an alternative to the Heston model where variance follows a process with V^(3/2) volatility coefficient instead of the square-root structure. This produces different tail behavior and volatility dynamics, often providing a better fit to empirical volatility distributions and option prices. The model name comes from the power 3/2 appearing in the diffusion term, creating unique mathematical properties and richer volatility clustering patterns.\n\ndS(t) = μ * S(t) * dt + √V(t) * S(t) * dW₁(t)\ndV(t) = κ * (θ - V(t)) * dt + σᵥ * V(t)^(3/2) * dW₂(t)\n\nWhere:\n- S(t) = asset price\n- V(t) = instantaneous variance\n- μ = expected return (drift)\n- κ = mean reversion speed\n- θ = long-run variance level\n- σᵥ = volatility of volatility parameter\n- V(t)^(3/2) = 3/2 power diffusion term\n- dW₁, dW₂ = correlated Brownian motions\n- Creates different tail behavior than Heston\n\nThe 3/2 Model is like the Heston model's exotic cousin with different physics. While Heston's volatility bounces around with intensity proportional to √volatility, this model's volatility wiggles with intensity proportional to volatility^(3/2). When volatility is high, it becomes even MORE volatile in this model, creating wilder swings and fatter tails. It's like a feedback loop where scary markets get even scarier faster, better matching the extreme behavior seen in real market crashes.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Three_Half_Stochastic_Volatility_Model.txt","hasFullInfo":true},{"id":107,"title":"Trimmed Mean Filter","filename":"Trimmed_Mean_Filter.txt","group":"group 5","groupNum":5,"categoryId":13,"categoryTitle":"13. PERCENTILE & QUANTILE FILTERS","subcategory":"General","summary":"Outlier removal via trimming","overview":"Trimmed Mean Filter calculates the average after removing a specified percentage of the smallest and largest values from the dataset, reducing the influence of extreme outliers on the mean estimate. For example, a 10% trimmed mean removes the bottom 10% and top 10% of values before averaging the remaining 80%. This provides a more robust central tendency measure than the simple mean while being more efficient than the median, making it useful for smoothing price data in the presence of occasional spikes or gaps.","formula":"Trimmed_Mean = (1/(n*(1-2α))) * Σ X_(i)","parameters":"Where:\n- Sort values: X_(1) ≤ X_(2) ≤ ... ≤ X_(n)\n- α = trim proportion (e.g., 0.1 for 10% trim)\n- Remove lowest k = floor(n*α) values\n- Remove highest k values\n- Sum remaining middle (n - 2k) values\n- Divide by count of remaining values\n- Common trims: 5%, 10%, 20%, 25%","intuition":"Trimmed Mean Filter is like calculating the average test score in a class, but throwing out the highest and lowest scores first to avoid getting skewed by one genius or one person who didn't study. In markets, you might have 98 normal price ticks and 2 crazy outliers from a glitch or news spike. The trimmed mean ignores those extremes and tells you what \"normal\" trading really looks like, giving you a cleaner average without being totally distorted by weird events.","rawContent":"Trimmed Mean Filter calculates the average after removing a specified percentage of the smallest and largest values from the dataset, reducing the influence of extreme outliers on the mean estimate. For example, a 10% trimmed mean removes the bottom 10% and top 10% of values before averaging the remaining 80%. This provides a more robust central tendency measure than the simple mean while being more efficient than the median, making it useful for smoothing price data in the presence of occasional spikes or gaps.\n\nTrimmed_Mean = (1/(n*(1-2α))) * Σ X_(i)\n\nWhere:\n- Sort values: X_(1) ≤ X_(2) ≤ ... ≤ X_(n)\n- α = trim proportion (e.g., 0.1 for 10% trim)\n- Remove lowest k = floor(n*α) values\n- Remove highest k values\n- Sum remaining middle (n - 2k) values\n- Divide by count of remaining values\n- Common trims: 5%, 10%, 20%, 25%\n\nTrimmed Mean Filter is like calculating the average test score in a class, but throwing out the highest and lowest scores first to avoid getting skewed by one genius or one person who didn't study. In markets, you might have 98 normal price ticks and 2 crazy outliers from a glitch or news spike. The trimmed mean ignores those extremes and tells you what \"normal\" trading really looks like, giving you a cleaner average without being totally distorted by weird events.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Trimmed_Mean_Filter.txt","hasFullInfo":true},{"id":108,"title":"True Range Percentile","filename":"True_Range_Percentile.txt","group":"group 5","groupNum":5,"categoryId":13,"categoryTitle":"13. PERCENTILE & QUANTILE FILTERS","subcategory":"General","summary":"Percentile-based range","overview":"True Range Percentile ranks the current True Range value against its historical distribution over a lookback period, expressing it as a percentile (0-100). This provides context for whether current volatility is high or low relative to recent history, rather than just measuring absolute volatility. A value of 80 means the current range is larger than 80% of recent ranges, indicating elevated volatility. This normalization makes volatility comparable across different market conditions and assets.","formula":"TR(t) = max(high(t) - low(t), |high(t) - close(t-1)|, |low(t) - close(t-1)|)\nTRP(t) = Percentile_Rank(TR(t), [TR(t-n)...TR(t-1)])","parameters":"Where:\n- TR(t) = True Range for current period\n- high(t), low(t) = current high and low\n- close(t-1) = previous close\n- n = lookback period (e.g., 20 or 50)\n- TRP(t) = percentile rank (0 to 100)\n- TRP = 90 means current TR exceeds 90% of past values\n- TRP = 10 means current TR is in bottom 10%\n\nTrue Range Percentile answers \"How wild is today compared to usual?\" If a stock normally moves $1-$2 per day but today it moved $5, the percentile might be 95%, showing this is exceptionally volatile. But if that same $5 move happens on a stock that routinely swings $4-$6, the percentile might be only 60%, showing it's just moderately active. It's like comparing today's temperature not to absolute degrees, but to how hot or cold it is relative to this time of year.","intuition":"","rawContent":"True Range Percentile ranks the current True Range value against its historical distribution over a lookback period, expressing it as a percentile (0-100). This provides context for whether current volatility is high or low relative to recent history, rather than just measuring absolute volatility. A value of 80 means the current range is larger than 80% of recent ranges, indicating elevated volatility. This normalization makes volatility comparable across different market conditions and assets.\n\nTR(t) = max(high(t) - low(t), |high(t) - close(t-1)|, |low(t) - close(t-1)|)\nTRP(t) = Percentile_Rank(TR(t), [TR(t-n)...TR(t-1)])\n\nWhere:\n- TR(t) = True Range for current period\n- high(t), low(t) = current high and low\n- close(t-1) = previous close\n- n = lookback period (e.g., 20 or 50)\n- TRP(t) = percentile rank (0 to 100)\n- TRP = 90 means current TR exceeds 90% of past values\n- TRP = 10 means current TR is in bottom 10%\n\nTrue Range Percentile answers \"How wild is today compared to usual?\" If a stock normally moves $1-$2 per day but today it moved $5, the percentile might be 95%, showing this is exceptionally volatile. But if that same $5 move happens on a stock that routinely swings $4-$6, the percentile might be only 60%, showing it's just moderately active. It's like comparing today's temperature not to absolute degrees, but to how hot or cold it is relative to this time of year.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/True_Range_Percentile.txt","hasFullInfo":true},{"id":109,"title":"Winsorized Mean Filter","filename":"Winsorized_Mean_Filter.txt","group":"group 5","groupNum":5,"categoryId":13,"categoryTitle":"13. PERCENTILE & QUANTILE FILTERS","subcategory":"General","summary":"Outlier capping","overview":"Winsorized Mean Filter calculates the average after replacing extreme values with less extreme ones, rather than removing them entirely. Values below the lower threshold are replaced with the threshold value, and values above the upper threshold are replaced with the upper threshold. This caps outliers while retaining the sample size, providing a compromise between the sensitivity of the mean and the robustness of the median. It's useful for smoothing noisy price data while preserving the overall distribution shape.","formula":"Winsorized_Mean = (1/n) * Σ W(X(i))","parameters":"Where:\n- W(X(i)) = transformed value\n- If X(i) < P_α, then W(X(i)) = P_α (lower threshold)\n- If X(i) > P_(1-α), then W(X(i)) = P_(1-α) (upper threshold)\n- Otherwise W(X(i)) = X(i)\n- P_α = α-th percentile (e.g., 5th percentile)\n- P_(1-α) = (1-α)-th percentile (e.g., 95th percentile)\n- α typically 0.05, 0.10, or 0.25\n- All n values retained, but extremes capped","intuition":"Winsorized Mean is like trimmed mean's gentler cousin. Instead of kicking out the extreme students' test scores completely, you just change them to match the next-highest or next-lowest acceptable score. If someone scored 5/100, you might bump it up to match the next person's 60. If someone scored 150/100 (extra credit gone wild), you drop it to 98 to match the next highest. You keep everyone in the calculation, but crazy outliers get tamed to reduce their distortion.","rawContent":"Winsorized Mean Filter calculates the average after replacing extreme values with less extreme ones, rather than removing them entirely. Values below the lower threshold are replaced with the threshold value, and values above the upper threshold are replaced with the upper threshold. This caps outliers while retaining the sample size, providing a compromise between the sensitivity of the mean and the robustness of the median. It's useful for smoothing noisy price data while preserving the overall distribution shape.\n\nWinsorized_Mean = (1/n) * Σ W(X(i))\n\nWhere:\n- W(X(i)) = transformed value\n- If X(i) < P_α, then W(X(i)) = P_α (lower threshold)\n- If X(i) > P_(1-α), then W(X(i)) = P_(1-α) (upper threshold)\n- Otherwise W(X(i)) = X(i)\n- P_α = α-th percentile (e.g., 5th percentile)\n- P_(1-α) = (1-α)-th percentile (e.g., 95th percentile)\n- α typically 0.05, 0.10, or 0.25\n- All n values retained, but extremes capped\n\nWinsorized Mean is like trimmed mean's gentler cousin. Instead of kicking out the extreme students' test scores completely, you just change them to match the next-highest or next-lowest acceptable score. If someone scored 5/100, you might bump it up to match the next person's 60. If someone scored 150/100 (extra credit gone wild), you drop it to 98 to match the next highest. You keep everyone in the calculation, but crazy outliers get tamed to reduce their distortion.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 5/Winsorized_Mean_Filter.txt","hasFullInfo":true},{"id":110,"title":"Arnaud Legoux Moving Average (ALMA)","filename":"ALMA.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Gaussian-weighted","overview":"ALMA is a sophisticated moving average that applies a Gaussian (bell-curve) distribution to weight prices, with the unique ability to shift the curve backward or forward in time. Unlike traditional moving averages that suffer from lag, ALMA can be configured to reduce lag significantly while maintaining smoothness. The Gaussian weighting provides superior noise reduction compared to simple or exponential moving averages.","formula":"Key parameters are: period (window size), offset (shifts the Gaussian curve, -1 to 1), and sigma (controls the curve's width/sharpness). An offset of 0.85 is common for reduced lag, while sigma of 6 provides good smoothness.\n\nALMA = Σ(w(i) * Price(i)) / Σ(w(i))\n\nWhere weights: w(i) = exp(-((i - m)^2) / (2 * s^2))\nm = offset * (period - 1)\ns = period / sigma","parameters":"","intuition":"Think of ALMA as a spotlight with a dimmer switch that shines brightest on recent prices but can be aimed slightly into the future or past. Regular moving averages always look backward, creating lag. ALMA's offset parameter lets you \"aim\" the brightest part of your spotlight closer to current price, reducing the delay in detecting trends while keeping the line smooth.","rawContent":"ALMA is a sophisticated moving average that applies a Gaussian (bell-curve) distribution to weight prices, with the unique ability to shift the curve backward or forward in time. Unlike traditional moving averages that suffer from lag, ALMA can be configured to reduce lag significantly while maintaining smoothness. The Gaussian weighting provides superior noise reduction compared to simple or exponential moving averages.\n\nKey parameters are: period (window size), offset (shifts the Gaussian curve, -1 to 1), and sigma (controls the curve's width/sharpness). An offset of 0.85 is common for reduced lag, while sigma of 6 provides good smoothness.\n\nALMA = Σ(w(i) * Price(i)) / Σ(w(i))\n\nWhere weights: w(i) = exp(-((i - m)^2) / (2 * s^2))\nm = offset * (period - 1)\ns = period / sigma\n\nThink of ALMA as a spotlight with a dimmer switch that shines brightest on recent prices but can be aimed slightly into the future or past. Regular moving averages always look backward, creating lag. ALMA's offset parameter lets you \"aim\" the brightest part of your spotlight closer to current price, reducing the delay in detecting trends while keeping the line smooth.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/ALMA.txt","hasFullInfo":true},{"id":111,"title":"Autoencoder-Based Denoising","filename":"Autoencoder_Denoising.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Neural network denoising","overview":"An autoencoder is a neural network trained to compress data into a lower-dimensional representation (encoding) and then reconstruct it back to the original form (decoding). For denoising, the network is trained on noisy inputs but learns to output clean versions, forcing it to learn the essential structure of the data while ignoring noise. In trading, denoising autoencoders can clean price series, remove tick-level noise from high-frequency data, or extract clean signals from noisy indicator combinations.","formula":"The bottleneck layer forces the network to learn compressed, essential features.\n\nArchitecture:\nInput (noisy data) → Encoder → Bottleneck → Decoder → Output (clean data)\n\nTraining objective: Minimize ||X_clean - Decoder(Encoder(X_noisy))||²\n\nCommon structure:\nEncoder: Dense(n → k) with activation (k < n)\nDecoder: Dense(k → n) with activation","parameters":"","intuition":"Think of an autoencoder as a clever data compressor that learns what's important. Imagine trying to compress a noisy price chart into just 5 numbers, then uncompress it back. The network can't keep the noise in those 5 numbers - there's no room! So it learns to capture only the essential price movements. When it reconstructs the full chart from those 5 numbers, the noise is gone because it learned what \"real price movement\" looks like versus random jitter.","rawContent":"An autoencoder is a neural network trained to compress data into a lower-dimensional representation (encoding) and then reconstruct it back to the original form (decoding). For denoising, the network is trained on noisy inputs but learns to output clean versions, forcing it to learn the essential structure of the data while ignoring noise. In trading, denoising autoencoders can clean price series, remove tick-level noise from high-frequency data, or extract clean signals from noisy indicator combinations.\n\nThe bottleneck layer forces the network to learn compressed, essential features.\n\nArchitecture:\nInput (noisy data) → Encoder → Bottleneck → Decoder → Output (clean data)\n\nTraining objective: Minimize ||X_clean - Decoder(Encoder(X_noisy))||²\n\nCommon structure:\nEncoder: Dense(n → k) with activation (k < n)\nDecoder: Dense(k → n) with activation\n\nThink of an autoencoder as a clever data compressor that learns what's important. Imagine trying to compress a noisy price chart into just 5 numbers, then uncompress it back. The network can't keep the noise in those 5 numbers - there's no room! So it learns to capture only the essential price movements. When it reconstructs the full chart from those 5 numbers, the noise is gone because it learned what \"real price movement\" looks like versus random jitter.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/Autoencoder_Denoising.txt","hasFullInfo":true},{"id":112,"title":"B-Spline Filter","filename":"B_Spline_Filter.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Piecewise polynomial","overview":"B-Spline (Basis Spline) filtering uses piecewise polynomial basis functions to create smooth approximations of time series data. B-splines offer local control - changing one data point only affects a limited region of the curve - making them computationally efficient and numerically stable. They can be of various orders (linear, quadratic, cubic, etc.), with cubic B-splines being most common in financial applications due to their smoothness and continuity properties.","formula":"B-splines form a basis for representing any smooth curve and are widely used in computer graphics, CAD, and signal processing.\n\nf(x) = Σ(c(i) * B(i,k)(x))","parameters":"Where: B(i,k)(x) = B-spline basis function of order k at position i\nc(i) = control points (coefficients determined by fitting to data)\nk = spline order (typically 3 for cubic)\n\nImagine building a smooth track using LEGO pieces that click together perfectly. Each piece (basis function) covers a small section, and they overlap smoothly with neighbors. You can adjust one section without rebuilding the entire track - that's the \"local control\" property. B-splines connect these pieces into one continuous, smooth curve that follows your price data without sharp corners or discontinuities.","intuition":"","rawContent":"B-Spline (Basis Spline) filtering uses piecewise polynomial basis functions to create smooth approximations of time series data. B-splines offer local control - changing one data point only affects a limited region of the curve - making them computationally efficient and numerically stable. They can be of various orders (linear, quadratic, cubic, etc.), with cubic B-splines being most common in financial applications due to their smoothness and continuity properties.\n\nB-splines form a basis for representing any smooth curve and are widely used in computer graphics, CAD, and signal processing.\n\nf(x) = Σ(c(i) * B(i,k)(x))\n\nWhere: B(i,k)(x) = B-spline basis function of order k at position i\nc(i) = control points (coefficients determined by fitting to data)\nk = spline order (typically 3 for cubic)\n\nImagine building a smooth track using LEGO pieces that click together perfectly. Each piece (basis function) covers a small section, and they overlap smoothly with neighbors. You can adjust one section without rebuilding the entire track - that's the \"local control\" property. B-splines connect these pieces into one continuous, smooth curve that follows your price data without sharp corners or discontinuities.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 6/B_Spline_Filter.txt","hasFullInfo":true},{"id":113,"title":"Cubic Spline Smoothing","filename":"Cubic_Spline_Smoothing.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Third-order polynomial","overview":"Cubic spline smoothing creates a smooth curve through data points using piecewise third-degree polynomials that connect at knot points with continuous first and second derivatives. This ensures the resulting curve has no abrupt changes in slope or curvature, making it visually smooth and mathematically well-behaved. Cubic splines are the lowest-degree polynomials that achieve smoothness in both value, slope, and curvature at connection points.","formula":"The method determines coefficients for each cubic segment such that they join smoothly, creating a natural-looking curve through financial data.\n\nFor each segment i: S(i)(x) = a(i) + b(i)*(x - x(i)) + c(i)*(x - x(i))^2 + d(i)*(x - x(i))^3\n\nConstraints at knots:\nS(i)(x(i+1)) = S(i+1)(x(i+1)) (continuity)\nS'(i)(x(i+1)) = S'(i+1)(x(i+1)) (smooth slope)\nS''(i)(x(i+1)) = S''(i+1)(x(i+1)) (smooth curvature)","parameters":"","intuition":"Think of cubic spline smoothing as hiring a skilled artist to draw a flowing curve through your price points. The artist ensures the line never has sharp corners or sudden kinks - at every data point, the curve flows smoothly both in direction and in how fast the direction changes. The result looks natural and elegant, like water flowing rather than a jagged lightning bolt.","rawContent":"Cubic spline smoothing creates a smooth curve through data points using piecewise third-degree polynomials that connect at knot points with continuous first and second derivatives. This ensures the resulting curve has no abrupt changes in slope or curvature, making it visually smooth and mathematically well-behaved. Cubic splines are the lowest-degree polynomials that achieve smoothness in both value, slope, and curvature at connection points.\n\nThe method determines coefficients for each cubic segment such that they join smoothly, creating a natural-looking curve through financial data.\n\nFor each segment i: S(i)(x) = a(i) + b(i)*(x - x(i)) + c(i)*(x - x(i))^2 + d(i)*(x - x(i))^3\n\nConstraints at knots:\nS(i)(x(i+1)) = S(i+1)(x(i+1)) (continuity)\nS'(i)(x(i+1)) = S'(i+1)(x(i+1)) (smooth slope)\nS''(i)(x(i+1)) = S''(i+1)(x(i+1)) (smooth curvature)\n\nThink of cubic spline smoothing as hiring a skilled artist to draw a flowing curve through your price points. The artist ensures the line never has sharp corners or sudden kinks - at every data point, the curve flows smoothly both in direction and in how fast the direction changes. The result looks natural and elegant, like water flowing rather than a jagged lightning bolt.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/Cubic_Spline_Smoothing.txt","hasFullInfo":true},{"id":114,"title":"Double Exponential Smoothing","filename":"Double_Exponential_Smoothing.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Trend-adjusted smoothing","overview":"Double Exponential Smoothing, also known as Holt's Linear Trend Method, extends simple exponential smoothing by adding a trend component. While simple exponential smoothing assumes data fluctuates around a constant level, double exponential smoothing recognizes that markets can have persistent directional movement (trends). This method separately tracks both the current level and the rate of change (trend), making it more responsive to trending markets.","formula":"It uses two smoothing parameters: alpha for the level and beta for the trend. This approach is particularly useful for short-term forecasting in trending markets and forms the basis for more complex smoothing methods.\n\nLevel: L(t) = alpha * Y(t) + (1 - alpha) * (L(t-1) + T(t-1))\nTrend: T(t) = beta * (L(t) - L(t-1)) + (1 - beta) * T(t-1)\nForecast: F(t+h) = L(t) + h * T(t)","parameters":"Where: Y(t) = observed value, h = forecast horizon (steps ahead)\n\nImagine you're driving and want to know where you'll be in 5 minutes. Simple smoothing just looks at your current location. Double smoothing looks at both your location AND your speed/direction - it knows you're moving and accounts for that momentum when predicting your future position. In trading, this helps anticipate where price is headed, not just where it is.","intuition":"","rawContent":"Double Exponential Smoothing, also known as Holt's Linear Trend Method, extends simple exponential smoothing by adding a trend component. While simple exponential smoothing assumes data fluctuates around a constant level, double exponential smoothing recognizes that markets can have persistent directional movement (trends). This method separately tracks both the current level and the rate of change (trend), making it more responsive to trending markets.\n\nIt uses two smoothing parameters: alpha for the level and beta for the trend. This approach is particularly useful for short-term forecasting in trending markets and forms the basis for more complex smoothing methods.\n\nLevel: L(t) = alpha * Y(t) + (1 - alpha) * (L(t-1) + T(t-1))\nTrend: T(t) = beta * (L(t) - L(t-1)) + (1 - beta) * T(t-1)\nForecast: F(t+h) = L(t) + h * T(t)\n\nWhere: Y(t) = observed value, h = forecast horizon (steps ahead)\n\nImagine you're driving and want to know where you'll be in 5 minutes. Simple smoothing just looks at your current location. Double smoothing looks at both your location AND your speed/direction - it knows you're moving and accounts for that momentum when predicting your future position. In trading, this helps anticipate where price is headed, not just where it is.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/Double_Exponential_Smoothing.txt","hasFullInfo":true},{"id":115,"title":"Elastic Net Regularization","filename":"Elastic_Net_Regularization.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"L1 + L2 combination","overview":"Elastic Net combines both L1 (LASSO) and L2 (Ridge) regularization penalties in a single regression framework. This hybrid approach gets the best of both worlds: the feature selection capability of LASSO and the stability of Ridge when predictors are correlated. Elastic Net is particularly effective when you have groups of correlated predictors (like multiple related technical indicators) where LASSO might arbitrarily select one while Ridge would keep all with shrunken coefficients.","formula":"The method uses two parameters to control the mix of L1 and L2 penalties.\n\nMinimize: Σ(Y(i) - Σ(β(j) * X(i,j)))² + λ₁ * Σ|β(j)| + λ₂ * Σ(β(j)²)\n\nAlternative parameterization:\nMinimize: Σ(Y(i) - ŷ(i))² + λ * [α * Σ|β(j)| + (1-α) * Σ(β(j)²)]","parameters":"Where:\nα = mixing parameter (0 = pure Ridge, 1 = pure LASSO)\nλ = overall regularization strength","intuition":"Think of Elastic Net as a smart compromise between two extremes. LASSO is aggressive - \"pick only the best indicators and dump the rest.\" Ridge is cautious - \"keep everything but shrink it all.\" Elastic Net says \"let's do both\" - it can eliminate truly useless predictors (LASSO part) while handling correlated useful predictors gracefully (Ridge part). It's like having a selective hiring process that also trains all employees, not just picking one person from each skill area.","rawContent":"Elastic Net combines both L1 (LASSO) and L2 (Ridge) regularization penalties in a single regression framework. This hybrid approach gets the best of both worlds: the feature selection capability of LASSO and the stability of Ridge when predictors are correlated. Elastic Net is particularly effective when you have groups of correlated predictors (like multiple related technical indicators) where LASSO might arbitrarily select one while Ridge would keep all with shrunken coefficients.\n\nThe method uses two parameters to control the mix of L1 and L2 penalties.\n\nMinimize: Σ(Y(i) - Σ(β(j) * X(i,j)))² + λ₁ * Σ|β(j)| + λ₂ * Σ(β(j)²)\n\nAlternative parameterization:\nMinimize: Σ(Y(i) - ŷ(i))² + λ * [α * Σ|β(j)| + (1-α) * Σ(β(j)²)]\n\nWhere:\nα = mixing parameter (0 = pure Ridge, 1 = pure LASSO)\nλ = overall regularization strength\n\nThink of Elastic Net as a smart compromise between two extremes. LASSO is aggressive - \"pick only the best indicators and dump the rest.\" Ridge is cautious - \"keep everything but shrink it all.\" Elastic Net says \"let's do both\" - it can eliminate truly useless predictors (LASSO part) while handling correlated useful predictors gracefully (Ridge part). It's like having a selective hiring process that also trains all employees, not just picking one person from each skill area.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/Elastic_Net_Regularization.txt","hasFullInfo":true},{"id":116,"title":"Elastic Volume Weighted Moving Average (eVWMA)","filename":"eVWMA.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Volume-elastic","overview":"The Elastic Volume Weighted Moving Average is an adaptive moving average that weights prices by volume but adjusts its effective period based on volume patterns. Unlike standard VWMA which uses fixed periods, eVWMA \"stretches\" (becomes slower) during low-volume periods and \"contracts\" (becomes faster) during high-volume periods. This creates a moving average that responds more to high-conviction price moves (high volume) while filtering out low-volume noise.","formula":"The elastic property makes it particularly useful for identifying significant support/resistance levels and volume-confirmed trends.\n\neVWMA(t) = Σ(Price(i) * Volume(i) * elasticity(i)) / Σ(Volume(i) * elasticity(i))\n\nWhere elasticity factor adjusts based on:\nelasticity(i) = f(Volume(i) / Average_Volume)\n\nHigher volume → lower elasticity → more weight to recent data\nLower volume → higher elasticity → more smoothing","parameters":"","intuition":"Think of eVWMA as a spring-loaded moving average that stretches and compresses based on trading activity. When volume is high (lots of traders agreeing on price), the spring compresses and the average quickly moves toward current price - that's \"important\" price action. When volume is low (few traders, questionable moves), the spring extends and the average barely budges - filtering out unreliable signals. It's a moving average that knows when to pay attention.","rawContent":"The Elastic Volume Weighted Moving Average is an adaptive moving average that weights prices by volume but adjusts its effective period based on volume patterns. Unlike standard VWMA which uses fixed periods, eVWMA \"stretches\" (becomes slower) during low-volume periods and \"contracts\" (becomes faster) during high-volume periods. This creates a moving average that responds more to high-conviction price moves (high volume) while filtering out low-volume noise.\n\nThe elastic property makes it particularly useful for identifying significant support/resistance levels and volume-confirmed trends.\n\neVWMA(t) = Σ(Price(i) * Volume(i) * elasticity(i)) / Σ(Volume(i) * elasticity(i))\n\nWhere elasticity factor adjusts based on:\nelasticity(i) = f(Volume(i) / Average_Volume)\n\nHigher volume → lower elasticity → more weight to recent data\nLower volume → higher elasticity → more smoothing\n\nThink of eVWMA as a spring-loaded moving average that stretches and compresses based on trading activity. When volume is high (lots of traders agreeing on price), the spring compresses and the average quickly moves toward current price - that's \"important\" price action. When volume is low (few traders, questionable moves), the spring extends and the average barely budges - filtering out unreliable signals. It's a moving average that knows when to pay attention.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/eVWMA.txt","hasFullInfo":true},{"id":117,"title":"EWMA (Exponentially Weighted Moving Average)","filename":"EWMA.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Exponential weighting","overview":"EWMA is a type of moving average that gives more weight to recent prices and exponentially decreasing weight to older prices. Unlike a simple moving average where all data points have equal weight, EWMA creates a smoothed price series that responds more quickly to recent price changes while still considering historical data. This makes it particularly useful for trend following and detecting momentum shifts in financial markets.","formula":"The key parameter is alpha (smoothing factor), typically between 0 and 1, where higher values give more weight to recent data. EWMA is the foundation for many technical indicators including EMA, MACD, and various oscillators.\n\nEWMA(t) = alpha * Price(t) + (1 - alpha) * EWMA(t-1)\n\nAlternative formulation with period N:\nalpha = 2 / (N + 1)\nEWMA(t) = (Price(t) - EWMA(t-1)) * alpha + EWMA(t-1)","parameters":"","intuition":"EWMA is like a \"fading memory\" average - imagine if you remembered yesterday's price clearly, last week's price somewhat, and last month's price only vaguely. Recent price action matters more than old price action, which helps you react faster to market changes while still keeping the bigger picture in mind.","rawContent":"EWMA is a type of moving average that gives more weight to recent prices and exponentially decreasing weight to older prices. Unlike a simple moving average where all data points have equal weight, EWMA creates a smoothed price series that responds more quickly to recent price changes while still considering historical data. This makes it particularly useful for trend following and detecting momentum shifts in financial markets.\n\nThe key parameter is alpha (smoothing factor), typically between 0 and 1, where higher values give more weight to recent data. EWMA is the foundation for many technical indicators including EMA, MACD, and various oscillators.\n\nEWMA(t) = alpha * Price(t) + (1 - alpha) * EWMA(t-1)\n\nAlternative formulation with period N:\nalpha = 2 / (N + 1)\nEWMA(t) = (Price(t) - EWMA(t-1)) * alpha + EWMA(t-1)\n\nEWMA is like a \"fading memory\" average - imagine if you remembered yesterday's price clearly, last week's price somewhat, and last month's price only vaguely. Recent price action matters more than old price action, which helps you react faster to market changes while still keeping the bigger picture in mind.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/EWMA.txt","hasFullInfo":true},{"id":118,"title":"Holt-Winters (Triple Exponential Smoothing)","filename":"Holt_Winters.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Trend + seasonality","overview":"Holt-Winters is an advanced smoothing technique that extends exponential smoothing to capture three components of time series data: level (average value), trend (direction and rate of change), and seasonality (repeating patterns). This method is particularly powerful for forecasting because it can model data with both trending behavior and seasonal fluctuations, making it superior to simple exponential smoothing for complex market data.","formula":"There are two variants: additive (for constant seasonal variations) and multiplicative (for seasonal variations that scale with level). The method uses three smoothing parameters (alpha, beta, gamma) to control how quickly each component adapts to new data.\n\nLevel: L(t) = alpha * (Y(t) - S(t-s)) + (1 - alpha) * (L(t-1) + T(t-1))\nTrend: T(t) = beta * (L(t) - L(t-1)) + (1 - beta) * T(t-1)\nSeasonal: S(t) = gamma * (Y(t) - L(t)) + (1 - gamma) * S(t-s)\nForecast: F(t+h) = L(t) + h * T(t) + S(t+h-s)","parameters":"Where: Y(t) = observed value, s = seasonal period, h = forecast horizon","intuition":"Think of Holt-Winters as a smart tracker that follows three things at once: where the price is right now (level), where it's heading (trend), and any repeating weekly or monthly patterns (seasonality). It's like having a GPS that knows not just your current location and direction, but also that traffic is always bad on Friday afternoons.","rawContent":"Holt-Winters is an advanced smoothing technique that extends exponential smoothing to capture three components of time series data: level (average value), trend (direction and rate of change), and seasonality (repeating patterns). This method is particularly powerful for forecasting because it can model data with both trending behavior and seasonal fluctuations, making it superior to simple exponential smoothing for complex market data.\n\nThere are two variants: additive (for constant seasonal variations) and multiplicative (for seasonal variations that scale with level). The method uses three smoothing parameters (alpha, beta, gamma) to control how quickly each component adapts to new data.\n\nLevel: L(t) = alpha * (Y(t) - S(t-s)) + (1 - alpha) * (L(t-1) + T(t-1))\nTrend: T(t) = beta * (L(t) - L(t-1)) + (1 - beta) * T(t-1)\nSeasonal: S(t) = gamma * (Y(t) - L(t)) + (1 - gamma) * S(t-s)\nForecast: F(t+h) = L(t) + h * T(t) + S(t+h-s)\n\nWhere: Y(t) = observed value, s = seasonal period, h = forecast horizon\n\nThink of Holt-Winters as a smart tracker that follows three things at once: where the price is right now (level), where it's heading (trend), and any repeating weekly or monthly patterns (seasonality). It's like having a GPS that knows not just your current location and direction, but also that traffic is always bad on Friday afternoons.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/Holt_Winters.txt","hasFullInfo":true},{"id":119,"title":"Independent Component Analysis (ICA)","filename":"ICA.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Signal separation","overview":"ICA is a signal separation technique that decomposes a multivariate signal into statistically independent components. Unlike PCA which finds uncorrelated components, ICA finds components that are statistically independent - a stronger condition. It's based on the assumption that observed data is a mixture of independent source signals. In trading, ICA can separate mixed market signals (like trend, mean-reversion, and noise) from combined price/indicator data, or extract independent market factors from correlated assets.","formula":"ICA is particularly powerful when you believe multiple independent processes are influencing your data.\n\nModel: X = A * S","parameters":"Where:\nX = observed mixed signals (indicators, prices)\nS = independent source signals (unobserved)\nA = mixing matrix\n\nICA estimates: S_est = W * X, where W ≈ A⁻¹\n\nMaximizes independence by minimizing mutual information or maximizing non-Gaussianity","intuition":"Think of ICA as unmixing a smoothie back into its original ingredients. Imagine you blend strawberries, bananas, and yogurt together - that's your mixed market data. ICA figures out \"this blob came from strawberries, that came from bananas, this from yogurt\" by assuming the original ingredients were independent. In markets, price action might be a blend of trend-followers, mean-reverters, and random noise. ICA can separate these independent trading forces from the mixed signal.","rawContent":"ICA is a signal separation technique that decomposes a multivariate signal into statistically independent components. Unlike PCA which finds uncorrelated components, ICA finds components that are statistically independent - a stronger condition. It's based on the assumption that observed data is a mixture of independent source signals. In trading, ICA can separate mixed market signals (like trend, mean-reversion, and noise) from combined price/indicator data, or extract independent market factors from correlated assets.\n\nICA is particularly powerful when you believe multiple independent processes are influencing your data.\n\nModel: X = A * S\n\nWhere:\nX = observed mixed signals (indicators, prices)\nS = independent source signals (unobserved)\nA = mixing matrix\n\nICA estimates: S_est = W * X, where W ≈ A⁻¹\n\nMaximizes independence by minimizing mutual information or maximizing non-Gaussianity\n\nThink of ICA as unmixing a smoothie back into its original ingredients. Imagine you blend strawberries, bananas, and yogurt together - that's your mixed market data. ICA figures out \"this blob came from strawberries, that came from bananas, this from yogurt\" by assuming the original ingredients were independent. In markets, price action might be a blend of trend-followers, mean-reverters, and random noise. ICA can separate these independent trading forces from the mixed signal.","tags":["DSP Filtering","Machine Learning","Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 6/ICA.txt","hasFullInfo":true},{"id":120,"title":"Kernel PCA Filter","filename":"Kernel_PCA_Filter.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Nonlinear PCA","overview":"Kernel PCA extends principal component analysis to capture nonlinear relationships in data by first mapping the data into a higher-dimensional space using a kernel function, then performing PCA in that space. This allows it to identify curved or complex patterns that linear PCA would miss. Common kernels include RBF (Gaussian), polynomial, and sigmoid. In trading, kernel PCA can reveal nonlinear market regimes or complex relationships between price and indicators that aren't apparent in linear analysis.","formula":"The kernel trick avoids explicitly computing the high-dimensional transformation, making it computationally efficient.\n\nKernel function examples:\nRBF: K(x, y) = exp(-γ * ||x - y||²)\nPolynomial: K(x, y) = (x · y + c)^d\nSigmoid: K(x, y) = tanh(α * x · y + c)\n\nProcess:\n1. Compute kernel matrix: K(i,j) = k(x(i), x(j))\n2. Center the kernel matrix\n3. Compute eigenvectors of centered K\n4. Project data using kernel evaluations","parameters":"","intuition":"Think of kernel PCA as PCA with curved glasses. Regular PCA can only find straight-line patterns in your data - if the real pattern is a curve, it misses it. Kernel PCA warps the space (like looking through curved lenses) so that curved patterns become straight in the new view, then applies PCA there. It's like reshaping your data until the complex patterns look simple, then extracting those simplified patterns. Great for finding hidden nonlinear regimes in markets.","rawContent":"Kernel PCA extends principal component analysis to capture nonlinear relationships in data by first mapping the data into a higher-dimensional space using a kernel function, then performing PCA in that space. This allows it to identify curved or complex patterns that linear PCA would miss. Common kernels include RBF (Gaussian), polynomial, and sigmoid. In trading, kernel PCA can reveal nonlinear market regimes or complex relationships between price and indicators that aren't apparent in linear analysis.\n\nThe kernel trick avoids explicitly computing the high-dimensional transformation, making it computationally efficient.\n\nKernel function examples:\nRBF: K(x, y) = exp(-γ * ||x - y||²)\nPolynomial: K(x, y) = (x · y + c)^d\nSigmoid: K(x, y) = tanh(α * x · y + c)\n\nProcess:\n1. Compute kernel matrix: K(i,j) = k(x(i), x(j))\n2. Center the kernel matrix\n3. Compute eigenvectors of centered K\n4. Project data using kernel evaluations\n\nThink of kernel PCA as PCA with curved glasses. Regular PCA can only find straight-line patterns in your data - if the real pattern is a curve, it misses it. Kernel PCA warps the space (like looking through curved lenses) so that curved patterns become straight in the new view, then applies PCA there. It's like reshaping your data until the complex patterns look simple, then extracting those simplified patterns. Great for finding hidden nonlinear regimes in markets.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/Kernel_PCA_Filter.txt","hasFullInfo":true},{"id":121,"title":"LASSO Regularization","filename":"LASSO_Regularization.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"L1 regularization","overview":"LASSO (Least Absolute Shrinkage and Selection Operator) is a regularization technique that adds an L1 penalty (sum of absolute values of coefficients) to regression. Unlike ridge regression which shrinks all coefficients proportionally, LASSO can shrink some coefficients exactly to zero, effectively performing automatic feature selection. This makes LASSO particularly valuable when you have many potential predictors and want to identify which ones actually matter for predicting price movements.","formula":"The L1 penalty creates sparse solutions - only the most important features retain non-zero coefficients.\n\nMinimize: Σ(Y(i) - Σ(β(j) * X(i,j)))² + λ * Σ|β(j)|","parameters":"Where:\nY = target values\nX = feature matrix\nβ = regression coefficients\nλ = regularization strength\n|β(j)| = absolute value of coefficient j","intuition":"Think of LASSO as a picky trend fitter that's also a minimalist. Given 20 potential indicators to use, regular regression tries to use all of them. LASSO says \"I only need these 3 indicators, the rest are noise\" and zeros out 17 of them completely. It's feature selection and fitting in one step - LASSO automatically figures out which predictors are useful and which to ignore, giving you a simple, interpretable model with only the important stuff.","rawContent":"LASSO (Least Absolute Shrinkage and Selection Operator) is a regularization technique that adds an L1 penalty (sum of absolute values of coefficients) to regression. Unlike ridge regression which shrinks all coefficients proportionally, LASSO can shrink some coefficients exactly to zero, effectively performing automatic feature selection. This makes LASSO particularly valuable when you have many potential predictors and want to identify which ones actually matter for predicting price movements.\n\nThe L1 penalty creates sparse solutions - only the most important features retain non-zero coefficients.\n\nMinimize: Σ(Y(i) - Σ(β(j) * X(i,j)))² + λ * Σ|β(j)|\n\nWhere:\nY = target values\nX = feature matrix\nβ = regression coefficients\nλ = regularization strength\n|β(j)| = absolute value of coefficient j\n\nThink of LASSO as a picky trend fitter that's also a minimalist. Given 20 potential indicators to use, regular regression tries to use all of them. LASSO says \"I only need these 3 indicators, the rest are noise\" and zeros out 17 of them completely. It's feature selection and fitting in one step - LASSO automatically figures out which predictors are useful and which to ignore, giving you a simple, interpretable model with only the important stuff.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/LASSO_Regularization.txt","hasFullInfo":true},{"id":122,"title":"LOESS/LOWESS (Locally Weighted Scatterplot Smoothing)","filename":"LOESS_LOWESS.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Local regression","overview":"LOESS (locally estimated scatterplot smoothing) or LOWESS (locally weighted scatterplot smoothing) fits a weighted regression to each point using only nearby data points. At each position, it performs a polynomial regression (usually linear or quadratic) on a local neighborhood, with weights decreasing for points further away. This creates a smooth curve that adapts to local patterns in the data without requiring a global functional form.","formula":"The method is particularly robust to outliers when using robust weighting schemes and excels at revealing underlying trends in noisy data.\n\nFor each point x:\n1. Select k nearest neighbors\n2. Compute weights: w(i) = (1 - (|x - x(i)| / d(x))^3)^3 for points within distance d(x)\n3. Fit weighted polynomial: minimize Σ(w(i) * (Y(i) - β₀ - β₁*x(i))^2)\n4. Predicted value: f(x) = β₀ + β₁*x","parameters":"Where: d(x) = distance to k-th nearest neighbor, k = span parameter\n\nImagine predicting the weather at your house by only asking neighbors within walking distance, giving more weight to those closest to you. LOESS does the same with price data - at each point, it looks at nearby prices, gives more importance to the closest ones, fits a simple trend line through them, and uses that for the smooth value. Move to the next point, get a new set of neighbors, fit a new local trend. The result adapts to whatever's happening locally.","intuition":"","rawContent":"LOESS (locally estimated scatterplot smoothing) or LOWESS (locally weighted scatterplot smoothing) fits a weighted regression to each point using only nearby data points. At each position, it performs a polynomial regression (usually linear or quadratic) on a local neighborhood, with weights decreasing for points further away. This creates a smooth curve that adapts to local patterns in the data without requiring a global functional form.\n\nThe method is particularly robust to outliers when using robust weighting schemes and excels at revealing underlying trends in noisy data.\n\nFor each point x:\n1. Select k nearest neighbors\n2. Compute weights: w(i) = (1 - (|x - x(i)| / d(x))^3)^3 for points within distance d(x)\n3. Fit weighted polynomial: minimize Σ(w(i) * (Y(i) - β₀ - β₁*x(i))^2)\n4. Predicted value: f(x) = β₀ + β₁*x\n\nWhere: d(x) = distance to k-th nearest neighbor, k = span parameter\n\nImagine predicting the weather at your house by only asking neighbors within walking distance, giving more weight to those closest to you. LOESS does the same with price data - at each point, it looks at nearby prices, gives more importance to the closest ones, fits a simple trend line through them, and uses that for the smooth value. Move to the next point, get a new set of neighbors, fit a new local trend. The result adapts to whatever's happening locally.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/LOESS_LOWESS.txt","hasFullInfo":true},{"id":123,"title":"McGinley Dynamic","filename":"McGinley_Dynamic.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Price-responsive smoothing","overview":"The McGinley Dynamic is a moving average that automatically adjusts its smoothing speed based on market conditions. Unlike fixed-period moving averages, it speeds up in trending markets and slows down in choppy markets, making it highly adaptive. This automatic adjustment minimizes whipsaws (false signals) in sideways markets while maintaining responsiveness during trends. It was designed to solve the problem of traditional moving averages being either too fast (noisy) or too slow (laggy).","formula":"The key innovation is the dynamic adjustment factor in the denominator, which changes based on the ratio of price to the previous McGinley value.\n\nMD(t) = MD(t-1) + (Price(t) - MD(t-1)) / (N * (Price(t) / MD(t-1))^4)","parameters":"Where: N = period parameter (typical values 10-20)","intuition":"The McGinley Dynamic is like cruise control that automatically speeds up on highways and slows down in traffic. When price is trending strongly (moving far from the average), it accelerates to keep up. When price is choppy (staying near the average), it slows down to avoid overreacting to noise. This gives you a smooth line that's responsive when it matters and stable when it doesn't.","rawContent":"The McGinley Dynamic is a moving average that automatically adjusts its smoothing speed based on market conditions. Unlike fixed-period moving averages, it speeds up in trending markets and slows down in choppy markets, making it highly adaptive. This automatic adjustment minimizes whipsaws (false signals) in sideways markets while maintaining responsiveness during trends. It was designed to solve the problem of traditional moving averages being either too fast (noisy) or too slow (laggy).\n\nThe key innovation is the dynamic adjustment factor in the denominator, which changes based on the ratio of price to the previous McGinley value.\n\nMD(t) = MD(t-1) + (Price(t) - MD(t-1)) / (N * (Price(t) / MD(t-1))^4)\n\nWhere: N = period parameter (typical values 10-20)\n\nThe McGinley Dynamic is like cruise control that automatically speeds up on highways and slows down in traffic. When price is trending strongly (moving far from the average), it accelerates to keep up. When price is choppy (staying near the average), it slows down to avoid overreacting to noise. This gives you a smooth line that's responsive when it matters and stable when it doesn't.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/McGinley_Dynamic.txt","hasFullInfo":true},{"id":124,"title":"Principal Component Analysis (PCA) Filter","filename":"PCA_Filter.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Dimensionality reduction","overview":"PCA is a dimensionality reduction technique that transforms a set of correlated variables (like multiple technical indicators) into a smaller set of uncorrelated variables called principal components. These components are ordered by how much variance they explain - the first component captures the most important pattern in the data, the second captures the next most important orthogonal pattern, and so on. In trading, PCA can extract the dominant trend from multiple noisy indicators or reduce a large indicator set to a few key signals.","formula":"PCA finds the directions of maximum variance in high-dimensional data.\n\nSteps:\n1. Standardize data: Z = (X - mean) / std\n2. Compute covariance matrix: Σ = (1/n) * Z' * Z\n3. Calculate eigenvalues (λ) and eigenvectors (v) of Σ\n4. Sort by eigenvalue (largest first)\n5. Transform: PC = Z * v\n\nFirst principal component: PC₁ = Z * v₁ (direction of max variance)","parameters":"","intuition":"Think of PCA as finding the \"essence\" of your data. Imagine you're tracking 10 different momentum indicators that mostly move together. PCA looks at all 10 and says \"really, 95% of what's happening can be explained by these 2 underlying patterns.\" It rotates your view of the data to see the fundamental forces at work, filtering out redundant information. Instead of tracking 10 correlated lines, you track 2 independent components that capture the real signal.","rawContent":"PCA is a dimensionality reduction technique that transforms a set of correlated variables (like multiple technical indicators) into a smaller set of uncorrelated variables called principal components. These components are ordered by how much variance they explain - the first component captures the most important pattern in the data, the second captures the next most important orthogonal pattern, and so on. In trading, PCA can extract the dominant trend from multiple noisy indicators or reduce a large indicator set to a few key signals.\n\nPCA finds the directions of maximum variance in high-dimensional data.\n\nSteps:\n1. Standardize data: Z = (X - mean) / std\n2. Compute covariance matrix: Σ = (1/n) * Z' * Z\n3. Calculate eigenvalues (λ) and eigenvectors (v) of Σ\n4. Sort by eigenvalue (largest first)\n5. Transform: PC = Z * v\n\nFirst principal component: PC₁ = Z * v₁ (direction of max variance)\n\nThink of PCA as finding the \"essence\" of your data. Imagine you're tracking 10 different momentum indicators that mostly move together. PCA looks at all 10 and says \"really, 95% of what's happening can be explained by these 2 underlying patterns.\" It rotates your view of the data to see the fundamental forces at work, filtering out redundant information. Instead of tracking 10 correlated lines, you track 2 independent components that capture the real signal.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/PCA_Filter.txt","hasFullInfo":true},{"id":125,"title":"Rainbow Moving Average (Nested WMA)","filename":"Rainbow_Moving_Average.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Multiple WMA layers","overview":"The Rainbow Moving Average is a visualization technique that creates multiple smoothed moving averages by repeatedly applying weighted moving averages (WMA) to the same data. Each layer is a WMA of the previous WMA, creating progressively smoother lines that form a \"rainbow\" of curves. The relationship between these layers reveals trend strength and potential reversals - when all layers align in order, the trend is strong; when they tangle, the market may be consolidating or reversing.","formula":"Typically uses 2-10 layers, with each subsequent layer becoming smoother and lagging more.\n\nLayer 1: WMA₁ = WMA(Price, N)\nLayer 2: WMA₂ = WMA(WMA₁, N)\nLayer 3: WMA₃ = WMA(WMA₂, N)\n...\nLayer k: WMA_k = WMA(WMA_(k-1), N)","parameters":"Where: N = period (commonly 2-10), k = number of layers (typically 10)","intuition":"Think of the rainbow moving average as a stack of translucent colored sheets, each one slightly blurrier than the last. When the market is trending strongly, all the sheets line up in a neat gradient from price to the smoothest layer. When the market gets choppy, the sheets start to cross over each other and tangle up. Traders watch for when price crosses through all these layers - that's often a strong signal that something significant is changing.","rawContent":"The Rainbow Moving Average is a visualization technique that creates multiple smoothed moving averages by repeatedly applying weighted moving averages (WMA) to the same data. Each layer is a WMA of the previous WMA, creating progressively smoother lines that form a \"rainbow\" of curves. The relationship between these layers reveals trend strength and potential reversals - when all layers align in order, the trend is strong; when they tangle, the market may be consolidating or reversing.\n\nTypically uses 2-10 layers, with each subsequent layer becoming smoother and lagging more.\n\nLayer 1: WMA₁ = WMA(Price, N)\nLayer 2: WMA₂ = WMA(WMA₁, N)\nLayer 3: WMA₃ = WMA(WMA₂, N)\n...\nLayer k: WMA_k = WMA(WMA_(k-1), N)\n\nWhere: N = period (commonly 2-10), k = number of layers (typically 10)\n\nThink of the rainbow moving average as a stack of translucent colored sheets, each one slightly blurrier than the last. When the market is trending strongly, all the sheets line up in a neat gradient from price to the smoothest layer. When the market gets choppy, the sheets start to cross over each other and tangle up. Traders watch for when price crosses through all these layers - that's often a strong signal that something significant is changing.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/Rainbow_Moving_Average.txt","hasFullInfo":true},{"id":126,"title":"Reference Fast/Slow Trend Lines","filename":"Reference_Fast_Slow_Trend_Lines.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Dual-speed trends","overview":"Reference Fast/Slow Trend Lines use two moving averages of different speeds (periods) to establish a reference framework for trend identification. The fast line (shorter period) responds quickly to price changes, while the slow line (longer period) represents the underlying trend. The relationship between these lines - their crossovers, separation distance, and relative slopes - provides signals about trend strength, direction, and potential reversals.","formula":"This dual-line approach forms the foundation for many trading systems including MACD and moving average crossover strategies.\n\nFast_Line = MA(Price, N_fast)\nSlow_Line = MA(Price, N_slow)","parameters":"Where: N_fast < N_slow (commonly 10-20 for fast, 50-200 for slow)\n\nSignal generation:\n- Fast > Slow: Uptrend\n- Fast < Slow: Downtrend  \n- Crossover: Potential trend change\n- Distance between lines: Trend strength","intuition":"Think of the fast/slow trend lines as a rabbit and a turtle racing along your price path. The rabbit (fast MA) reacts quickly to every twist and turn. The turtle (slow MA) plods along steadily representing the overall direction. When the rabbit crosses ahead of the turtle, the market is accelerating upward. When the rabbit falls behind, momentum is weakening. The distance between them tells you how strong the trend is.","rawContent":"Reference Fast/Slow Trend Lines use two moving averages of different speeds (periods) to establish a reference framework for trend identification. The fast line (shorter period) responds quickly to price changes, while the slow line (longer period) represents the underlying trend. The relationship between these lines - their crossovers, separation distance, and relative slopes - provides signals about trend strength, direction, and potential reversals.\n\nThis dual-line approach forms the foundation for many trading systems including MACD and moving average crossover strategies.\n\nFast_Line = MA(Price, N_fast)\nSlow_Line = MA(Price, N_slow)\n\nWhere: N_fast < N_slow (commonly 10-20 for fast, 50-200 for slow)\n\nSignal generation:\n- Fast > Slow: Uptrend\n- Fast < Slow: Downtrend  \n- Crossover: Potential trend change\n- Distance between lines: Trend strength\n\nThink of the fast/slow trend lines as a rabbit and a turtle racing along your price path. The rabbit (fast MA) reacts quickly to every twist and turn. The turtle (slow MA) plods along steadily representing the overall direction. When the rabbit crosses ahead of the turtle, the market is accelerating upward. When the rabbit falls behind, momentum is weakening. The distance between them tells you how strong the trend is.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/Reference_Fast_Slow_Trend_Lines.txt","hasFullInfo":true},{"id":127,"title":"Regularized Exponential Moving Average","filename":"Regularized_EMA.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Ridge regularization","overview":"Regularized EMA applies ridge regularization (L2 penalty) to the standard exponential moving average to reduce sensitivity to outliers and extreme price movements. By penalizing large deviations from the smoothed trend, it creates a more stable moving average that resists being pulled around by price spikes or gaps. This technique borrows from machine learning regularization methods to improve robustness in financial time series.","formula":"The regularization parameter lambda controls the strength of the penalty - higher values create more smoothing and outlier resistance, while lower values approach standard EMA behavior.\n\nRegularized_EMA(t) = argmin[Σ(alpha^i * (Price(t-i) - EMA)^2) + lambda * EMA^2]\n\nSimplified update form:\nReg_EMA(t) = (alpha * Price(t) + (1 - alpha) * Reg_EMA(t-1)) / (1 + lambda)","parameters":"Where: alpha = 2/(N+1), lambda = regularization strength (typically 0.01 to 0.1)\n\nImagine a moving average that \"remembers\" it should stay reasonable and not overreact. Regular EMAs will jump toward price spikes immediately. Regularized EMA is more skeptical - when it sees an extreme price, it thinks \"that might be noise\" and doesn't move as aggressively toward it. This creates a smoother, more stable trend line that filters out weird price action.","intuition":"","rawContent":"Regularized EMA applies ridge regularization (L2 penalty) to the standard exponential moving average to reduce sensitivity to outliers and extreme price movements. By penalizing large deviations from the smoothed trend, it creates a more stable moving average that resists being pulled around by price spikes or gaps. This technique borrows from machine learning regularization methods to improve robustness in financial time series.\n\nThe regularization parameter lambda controls the strength of the penalty - higher values create more smoothing and outlier resistance, while lower values approach standard EMA behavior.\n\nRegularized_EMA(t) = argmin[Σ(alpha^i * (Price(t-i) - EMA)^2) + lambda * EMA^2]\n\nSimplified update form:\nReg_EMA(t) = (alpha * Price(t) + (1 - alpha) * Reg_EMA(t-1)) / (1 + lambda)\n\nWhere: alpha = 2/(N+1), lambda = regularization strength (typically 0.01 to 0.1)\n\nImagine a moving average that \"remembers\" it should stay reasonable and not overreact. Regular EMAs will jump toward price spikes immediately. Regularized EMA is more skeptical - when it sees an extreme price, it thinks \"that might be noise\" and doesn't move as aggressively toward it. This creates a smoother, more stable trend line that filters out weird price action.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/Regularized_EMA.txt","hasFullInfo":true},{"id":128,"title":"Regularized EMA (Chris Satchwell)","filename":"Regularized_EMA_Satchwell.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Constrained EMA","overview":"Chris Satchwell's Regularized EMA applies constraints to the standard exponential moving average to prevent excessive deviation from the price series while maintaining smoothness. The regularization adds a penalty term that discourages large jumps in the EMA value, creating a more stable trend line that resists being pulled by sudden price spikes or gaps. This approach is particularly valuable in volatile markets where standard EMAs can become erratic.","formula":"The method balances responsiveness to genuine price changes against stability in the face of noise.\n\nReg_EMA(t) = EMA(t-1) + alpha * (Price(t) - EMA(t-1)) - lambda * (EMA(t-1) - EMA(t-2))","parameters":"Where: \nalpha = 2/(N+1) = standard EMA smoothing factor\nlambda = regularization strength (typically 0.1 to 0.5)\n\nThe second term (lambda * difference) acts as a \"brake\" on rapid EMA changes\n\nImagine a moving average with a built-in speed limiter. Regular EMAs can jump around wildly when price gaps or spikes. Satchwell's version says \"I'll move toward the new price, but I won't make huge leaps.\" It's like cruise control that can speed up or slow down smoothly but won't floor the accelerator or slam the brakes. This creates a trend line that evolves steadily rather than jerking around with every price hiccup.","intuition":"","rawContent":"Chris Satchwell's Regularized EMA applies constraints to the standard exponential moving average to prevent excessive deviation from the price series while maintaining smoothness. The regularization adds a penalty term that discourages large jumps in the EMA value, creating a more stable trend line that resists being pulled by sudden price spikes or gaps. This approach is particularly valuable in volatile markets where standard EMAs can become erratic.\n\nThe method balances responsiveness to genuine price changes against stability in the face of noise.\n\nReg_EMA(t) = EMA(t-1) + alpha * (Price(t) - EMA(t-1)) - lambda * (EMA(t-1) - EMA(t-2))\n\nWhere: \nalpha = 2/(N+1) = standard EMA smoothing factor\nlambda = regularization strength (typically 0.1 to 0.5)\n\nThe second term (lambda * difference) acts as a \"brake\" on rapid EMA changes\n\nImagine a moving average with a built-in speed limiter. Regular EMAs can jump around wildly when price gaps or spikes. Satchwell's version says \"I'll move toward the new price, but I won't make huge leaps.\" It's like cruise control that can speed up or slow down smoothly but won't floor the accelerator or slam the brakes. This creates a trend line that evolves steadily rather than jerking around with every price hiccup.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/Regularized_EMA_Satchwell.txt","hasFullInfo":true},{"id":129,"title":"Ridge Regression (Tikhonov Regularization)","filename":"Ridge_Regression.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"L2 regularization","overview":"Ridge Regression is a regularized linear regression technique that adds an L2 penalty term to prevent overfitting and handle multicollinearity. The penalty term (lambda * sum of squared coefficients) shrinks regression coefficients toward zero, creating more stable predictions when predictors are correlated or when sample size is limited. In trading applications, ridge regression can create robust trend lines and filters that don't overfit to recent noise.","formula":"The regularization parameter lambda controls the trade-off between fitting the data and keeping coefficients small.\n\nMinimize: Σ(Y(i) - Σ(β(j) * X(i,j)))² + λ * Σ(β(j)²)\n\nSolution: β = (X'X + λI)⁻¹ X'Y","parameters":"Where:\nY = target values (prices)\nX = feature matrix (lagged prices, indicators)\nβ = regression coefficients\nλ = regularization strength (higher = more shrinkage)\nI = identity matrix","intuition":"Think of ridge regression as a cautious trend fitter. Regular regression might draw a wild, wavy line through your data points trying to hit every one perfectly - that's overfitting. Ridge regression adds a penalty for complexity, preferring simpler, smoother solutions. It's like telling the algorithm \"yes, fit the data, but don't get too fancy about it\" - the result is a more stable, generalizable trend that won't freak out with new data.","rawContent":"Ridge Regression is a regularized linear regression technique that adds an L2 penalty term to prevent overfitting and handle multicollinearity. The penalty term (lambda * sum of squared coefficients) shrinks regression coefficients toward zero, creating more stable predictions when predictors are correlated or when sample size is limited. In trading applications, ridge regression can create robust trend lines and filters that don't overfit to recent noise.\n\nThe regularization parameter lambda controls the trade-off between fitting the data and keeping coefficients small.\n\nMinimize: Σ(Y(i) - Σ(β(j) * X(i,j)))² + λ * Σ(β(j)²)\n\nSolution: β = (X'X + λI)⁻¹ X'Y\n\nWhere:\nY = target values (prices)\nX = feature matrix (lagged prices, indicators)\nβ = regression coefficients\nλ = regularization strength (higher = more shrinkage)\nI = identity matrix\n\nThink of ridge regression as a cautious trend fitter. Regular regression might draw a wild, wavy line through your data points trying to hit every one perfectly - that's overfitting. Ridge regression adds a penalty for complexity, preferring simpler, smoother solutions. It's like telling the algorithm \"yes, fit the data, but don't get too fancy about it\" - the result is a more stable, generalizable trend that won't freak out with new data.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/Ridge_Regression.txt","hasFullInfo":true},{"id":130,"title":"Slow Adaptive Trend Line","filename":"Slow_Adaptive_Trend_Line.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Gradual adaptation","overview":"A Slow Adaptive Trend Line adjusts its smoothing rate gradually based on market conditions, but with intentional damping to prevent rapid changes. Unlike aggressive adaptive methods that can switch speeds abruptly, the slow adaptive approach changes its effective period smoothly over many bars. This creates a stable trend line that evolves its responsiveness rather than switching it, making it useful for identifying major trend changes while filtering out short-term volatility.","formula":"The \"slow\" adaptation prevents whipsaws in choppy markets while still allowing eventual response to genuine trend shifts.\n\nAdaptive_Period(t) = Adaptive_Period(t-1) + damping * (New_Period - Adaptive_Period(t-1))\n\nTrend_Line(t) = MA(Price, Adaptive_Period(t))","parameters":"Where:\ndamping = slow adaptation rate (typically 0.05 to 0.2)\nNew_Period = calculated optimal period based on current conditions\nLower damping → slower adaptation","intuition":"Think of this as a moving average that's a slow learner - in a good way. When market conditions change, it doesn't immediately jump to a new speed. Instead, it gradually adjusts over days or weeks, like someone slowly turning a dial rather than flipping a switch. This prevents false signals from temporary market shifts while still allowing the trend line to evolve when conditions genuinely change and persist.","rawContent":"A Slow Adaptive Trend Line adjusts its smoothing rate gradually based on market conditions, but with intentional damping to prevent rapid changes. Unlike aggressive adaptive methods that can switch speeds abruptly, the slow adaptive approach changes its effective period smoothly over many bars. This creates a stable trend line that evolves its responsiveness rather than switching it, making it useful for identifying major trend changes while filtering out short-term volatility.\n\nThe \"slow\" adaptation prevents whipsaws in choppy markets while still allowing eventual response to genuine trend shifts.\n\nAdaptive_Period(t) = Adaptive_Period(t-1) + damping * (New_Period - Adaptive_Period(t-1))\n\nTrend_Line(t) = MA(Price, Adaptive_Period(t))\n\nWhere:\ndamping = slow adaptation rate (typically 0.05 to 0.2)\nNew_Period = calculated optimal period based on current conditions\nLower damping → slower adaptation\n\nThink of this as a moving average that's a slow learner - in a good way. When market conditions change, it doesn't immediately jump to a new speed. Instead, it gradually adjusts over days or weeks, like someone slowly turning a dial rather than flipping a switch. This prevents false signals from temporary market shifts while still allowing the trend line to evolve when conditions genuinely change and persist.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/Slow_Adaptive_Trend_Line.txt","hasFullInfo":true},{"id":131,"title":"Smoothing Spline","filename":"Smoothing_Spline.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Penalized least squares","overview":"A smoothing spline is a curve-fitting technique that balances fitting the data closely against maintaining smoothness. It constructs a piecewise cubic polynomial (spline) that minimizes both the squared distance from the data points and the integrated squared second derivative (curvature). This creates an optimal smooth curve through noisy data. The smoothing parameter controls the trade-off between fidelity to the data and smoothness of the result.","formula":"Unlike moving averages that use fixed windows, smoothing splines use all data points but weight nearby points more heavily, producing a globally optimal smooth fit.\n\nMinimize: Σ(Y(i) - f(x(i)))^2 + λ ∫(f''(x))^2 dx","parameters":"Where: f(x) = smoothing spline, λ = smoothing parameter (higher = smoother)\nf''(x) = second derivative (measures curvature)","intuition":"Think of a smoothing spline as drawing a flexible ruler through scattered dots on paper. The ruler wants to pass near all the dots (fit the data) but also wants to be as straight and smooth as possible (minimize wiggling). The smoothing parameter controls how flexible the ruler is - high values create a nearly straight line, low values let it bend more to hit the dots.","rawContent":"A smoothing spline is a curve-fitting technique that balances fitting the data closely against maintaining smoothness. It constructs a piecewise cubic polynomial (spline) that minimizes both the squared distance from the data points and the integrated squared second derivative (curvature). This creates an optimal smooth curve through noisy data. The smoothing parameter controls the trade-off between fidelity to the data and smoothness of the result.\n\nUnlike moving averages that use fixed windows, smoothing splines use all data points but weight nearby points more heavily, producing a globally optimal smooth fit.\n\nMinimize: Σ(Y(i) - f(x(i)))^2 + λ ∫(f''(x))^2 dx\n\nWhere: f(x) = smoothing spline, λ = smoothing parameter (higher = smoother)\nf''(x) = second derivative (measures curvature)\n\nThink of a smoothing spline as drawing a flexible ruler through scattered dots on paper. The ruler wants to pass near all the dots (fit the data) but also wants to be as straight and smooth as possible (minimize wiggling). The smoothing parameter controls how flexible the ruler is - high values create a nearly straight line, low values let it bend more to hit the dots.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 6/Smoothing_Spline.txt","hasFullInfo":true},{"id":132,"title":"Triangular Weighted Moving Average (Double-Smoothed SMA)","filename":"TWMA.txt","group":"group 6","groupNum":6,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Double smoothing","overview":"The Triangular Weighted Moving Average is created by applying a simple moving average twice - essentially smoothing the smoothed data. This double-smoothing process creates weights that follow a triangular distribution, with maximum weight at the center of the period and linearly decreasing weights toward the edges. The result is significantly smoother than a single SMA of the same length, with reduced sensitivity to outliers at the expense of increased lag.","formula":"It's called \"triangular\" because plotting the weights forms a triangle shape.\n\nTWMA = SMA(SMA(Price, N), N)\n\nEquivalent weight distribution:\nFor period N, effective weights form triangle:\nw(i) = (N - |i - N/2|) / (N²/2)\n\nExample for N=5: weights are [1, 2, 3, 2, 1] / 9","parameters":"","intuition":"Think of TWMA as applying two layers of blurring to your price data. The first blur creates a smooth line, then blurring that smooth line creates an even smoother result. This is like taking a photo, applying a soft focus filter, then applying it again - you get a very dreamy, smooth image but you lose fine details. In trading, this means a very stable moving average that won't whipsaw you, but it'll be slower to react to changes.","rawContent":"The Triangular Weighted Moving Average is created by applying a simple moving average twice - essentially smoothing the smoothed data. This double-smoothing process creates weights that follow a triangular distribution, with maximum weight at the center of the period and linearly decreasing weights toward the edges. The result is significantly smoother than a single SMA of the same length, with reduced sensitivity to outliers at the expense of increased lag.\n\nIt's called \"triangular\" because plotting the weights forms a triangle shape.\n\nTWMA = SMA(SMA(Price, N), N)\n\nEquivalent weight distribution:\nFor period N, effective weights form triangle:\nw(i) = (N - |i - N/2|) / (N²/2)\n\nExample for N=5: weights are [1, 2, 3, 2, 1] / 9\n\nThink of TWMA as applying two layers of blurring to your price data. The first blur creates a smooth line, then blurring that smooth line creates an even smoother result. This is like taking a photo, applying a soft focus filter, then applying it again - you get a very dreamy, smooth image but you lose fine details. In trading, this means a very stable moving average that won't whipsaw you, but it'll be slower to react to changes.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 6/TWMA.txt","hasFullInfo":true},{"id":133,"title":"Wiener Filter","filename":"Wiener_Filter.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Optimal linear filter","overview":"The Wiener filter is an optimal linear filter for estimating a signal from noisy observations, designed to minimize the mean squared error between the estimated and true signal. It requires knowledge (or estimation) of both the signal and noise power spectra. The filter automatically adapts its frequency response - suppressing frequencies where noise dominates and passing frequencies where signal dominates. In trading, Wiener filtering can optimally extract price trends from noisy tick data or clean indicator signals.","formula":"The Wiener filter is optimal in the least-squares sense for stationary signals.\n\nFrequency domain: H(f) = S_signal(f) / [S_signal(f) + S_noise(f)]","parameters":"Where:\nH(f) = filter frequency response\nS_signal(f) = signal power spectrum\nS_noise(f) = noise power spectrum\n\nTime domain: Minimize E[(signal - estimate)²]","intuition":"Think of the Wiener filter as a smart noise cancellation system that knows exactly which frequencies are signal and which are noise. Like noise-canceling headphones that know what engine hum sounds like and remove just that frequency, the Wiener filter identifies which parts of your price data are real trends (signal) and which are random jitter (noise), then optimally separates them. It's mathematically optimal - no other linear filter does a better job at this specific task.","rawContent":"The Wiener filter is an optimal linear filter for estimating a signal from noisy observations, designed to minimize the mean squared error between the estimated and true signal. It requires knowledge (or estimation) of both the signal and noise power spectra. The filter automatically adapts its frequency response - suppressing frequencies where noise dominates and passing frequencies where signal dominates. In trading, Wiener filtering can optimally extract price trends from noisy tick data or clean indicator signals.\n\nThe Wiener filter is optimal in the least-squares sense for stationary signals.\n\nFrequency domain: H(f) = S_signal(f) / [S_signal(f) + S_noise(f)]\n\nWhere:\nH(f) = filter frequency response\nS_signal(f) = signal power spectrum\nS_noise(f) = noise power spectrum\n\nTime domain: Minimize E[(signal - estimate)²]\n\nThink of the Wiener filter as a smart noise cancellation system that knows exactly which frequencies are signal and which are noise. Like noise-canceling headphones that know what engine hum sounds like and remove just that frequency, the Wiener filter identifies which parts of your price data are real trends (signal) and which are random jitter (noise), then optimally separates them. It's mathematically optimal - no other linear filter does a better job at this specific task.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/Wiener_Filter.txt","hasFullInfo":true},{"id":134,"title":"Wiener-Kolmogorov Filter","filename":"Wiener_Kolmogorov_Filter.txt","group":"group 6","groupNum":6,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Kriging/optimal prediction","overview":"The Wiener-Kolmogorov filter extends Wiener filtering to handle prediction (forecasting future values) and smoothing (estimating past values) in addition to filtering current values. It's a general optimal linear predictor that minimizes mean squared prediction error. In trading, this framework can provide optimal multi-step-ahead price forecasts based on historical data and known statistical properties. It's equivalent to Kriging in spatial statistics and forms the theoretical foundation for many modern forecasting methods.","formula":"The filter produces optimal linear predictions given the signal's autocorrelation structure.\n\nPrediction: x̂(t+h|t) = Σ w(i) * x(t-i)\n\nOptimal weights solve: R * w = r","parameters":"Where:\nR = autocorrelation matrix of signal\nr = cross-correlation vector between x(t+h) and x(t-i)\nw = optimal filter weights\nh = prediction horizon","intuition":"Think of Wiener-Kolmogorov as the ultimate fortune teller for time series - but only using math and statistics. Given a signal's patterns and correlations, it figures out the absolute best way to predict future values using past data. It's \"optimal\" meaning no other linear method can beat it for prediction accuracy. In trading, it's like having a crystal ball that's calibrated perfectly to the statistical properties of your data - not magic, just optimal mathematics.","rawContent":"The Wiener-Kolmogorov filter extends Wiener filtering to handle prediction (forecasting future values) and smoothing (estimating past values) in addition to filtering current values. It's a general optimal linear predictor that minimizes mean squared prediction error. In trading, this framework can provide optimal multi-step-ahead price forecasts based on historical data and known statistical properties. It's equivalent to Kriging in spatial statistics and forms the theoretical foundation for many modern forecasting methods.\n\nThe filter produces optimal linear predictions given the signal's autocorrelation structure.\n\nPrediction: x̂(t+h|t) = Σ w(i) * x(t-i)\n\nOptimal weights solve: R * w = r\n\nWhere:\nR = autocorrelation matrix of signal\nr = cross-correlation vector between x(t+h) and x(t-i)\nw = optimal filter weights\nh = prediction horizon\n\nThink of Wiener-Kolmogorov as the ultimate fortune teller for time series - but only using math and statistics. Given a signal's patterns and correlations, it figures out the absolute best way to predict future values using past data. It's \"optimal\" meaning no other linear method can beat it for prediction accuracy. In trading, it's like having a crystal ball that's calibrated perfectly to the statistical properties of your data - not magic, just optimal mathematics.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 6/Wiener_Kolmogorov_Filter.txt","hasFullInfo":true},{"id":135,"title":"Ahrens Moving Average","filename":"Ahrens_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Proprietary formula","overview":"The Ahrens Moving Average is a proprietary moving average formula developed to provide smooth trend following with reduced lag. While the exact formula is proprietary, it typically combines weighted averaging techniques with adaptive elements to balance responsiveness and smoothness. It aims to stay close to price during trends while filtering out noise.","formula":"General Characteristics:\n- Proprietary weighting scheme (exact formula not publicly disclosed)\n- Emphasis on lag reduction while maintaining smoothness\n- May incorporate volatility or momentum adjustments\n- Designed for trend identification and trade entry timing\n\nTypical Behavior:\n- Faster response to trend changes than SMA\n- Smoother than EMA with similar speed\n- Reduces whipsaws in ranging markets\n- Works across multiple timeframes\n\nImplementation Note:\nSince the exact formula is proprietary, implementations may vary. Some versions use polynomial weighting, others combine multiple EMAs with specific ratios, or employ adaptive smoothing based on price action characteristics.","parameters":"","intuition":"The Ahrens Moving Average is like a secret recipe for smoothing price data - the exact ingredients aren't public, but the goal is clear: follow trends quickly without jumping at every little price bump. Think of it as a \"smart\" average that tries to hug the price during strong moves but stays calm during choppy periods. It's designed to give you earlier signals than a simple average while keeping you out of false breakouts.","rawContent":"The Ahrens Moving Average is a proprietary moving average formula developed to provide smooth trend following with reduced lag. While the exact formula is proprietary, it typically combines weighted averaging techniques with adaptive elements to balance responsiveness and smoothness. It aims to stay close to price during trends while filtering out noise.\n\nGeneral Characteristics:\n- Proprietary weighting scheme (exact formula not publicly disclosed)\n- Emphasis on lag reduction while maintaining smoothness\n- May incorporate volatility or momentum adjustments\n- Designed for trend identification and trade entry timing\n\nTypical Behavior:\n- Faster response to trend changes than SMA\n- Smoother than EMA with similar speed\n- Reduces whipsaws in ranging markets\n- Works across multiple timeframes\n\nImplementation Note:\nSince the exact formula is proprietary, implementations may vary. Some versions use polynomial weighting, others combine multiple EMAs with specific ratios, or employ adaptive smoothing based on price action characteristics.\n\nThe Ahrens Moving Average is like a secret recipe for smoothing price data - the exact ingredients aren't public, but the goal is clear: follow trends quickly without jumping at every little price bump. Think of it as a \"smart\" average that tries to hug the price during strong moves but stays calm during choppy periods. It's designed to give you earlier signals than a simple average while keeping you out of false breakouts.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Ahrens_Moving_Average.txt","hasFullInfo":true},{"id":136,"title":"Curve Fitting (Polynomial, Exponential, Logarithmic)","filename":"Curve_Fitting.txt","group":"group 7","groupNum":7,"categoryId":14,"categoryTitle":"14. GEOMETRIC & PATTERN FILTERS","subcategory":"General","summary":"Parametric fitting","overview":"Curve Fitting involves finding a mathematical function that best approximates a price series. Different function types capture different market behaviors: polynomial for trend reversals and cycles, exponential for growth/decay patterns, and logarithmic for diminishing returns or saturation effects.","formula":"Polynomial Fitting:\ny = a0 + a1*x + a2*x^2 + ... + an*x^n\n- Linear (n=1): Straight trend line\n- Quadratic (n=2): Single curve (parabola)\n- Cubic (n=3): S-curves and inflection points\n- Higher orders: Multiple turning points (risk of overfitting)\n\nExponential Fitting:\ny = a * e^(b*x)\n- Models accelerating growth (b > 0) or decay (b < 0)\n- Common in momentum breakouts and bubble formations\n- Logarithmic form: ln(y) = ln(a) + b*x\n\nLogarithmic Fitting:\ny = a + b*ln(x)\n- Models diminishing returns, saturation effects\n- Useful for post-breakout price stabilization\n- Growth rate decreases over time\n\nFitting Method (Least Squares):\nMinimize: Σ(actual_price - fitted_price)^2","parameters":"","intuition":"Curve fitting is like finding the \"best guess line\" through your messy price data. A straight line works for simple trends, but sometimes prices curve up like a skateboard ramp (polynomial), shoot up exponentially like a rocket (exponential), or level off like climbing stairs that get shorter (logarithmic). The math finds the smoothest curve that comes closest to all your price points, helping you see the underlying pattern instead of getting lost in daily noise.","rawContent":"Curve Fitting involves finding a mathematical function that best approximates a price series. Different function types capture different market behaviors: polynomial for trend reversals and cycles, exponential for growth/decay patterns, and logarithmic for diminishing returns or saturation effects.\n\nPolynomial Fitting:\ny = a0 + a1*x + a2*x^2 + ... + an*x^n\n- Linear (n=1): Straight trend line\n- Quadratic (n=2): Single curve (parabola)\n- Cubic (n=3): S-curves and inflection points\n- Higher orders: Multiple turning points (risk of overfitting)\n\nExponential Fitting:\ny = a * e^(b*x)\n- Models accelerating growth (b > 0) or decay (b < 0)\n- Common in momentum breakouts and bubble formations\n- Logarithmic form: ln(y) = ln(a) + b*x\n\nLogarithmic Fitting:\ny = a + b*ln(x)\n- Models diminishing returns, saturation effects\n- Useful for post-breakout price stabilization\n- Growth rate decreases over time\n\nFitting Method (Least Squares):\nMinimize: Σ(actual_price - fitted_price)^2\n\nCurve fitting is like finding the \"best guess line\" through your messy price data. A straight line works for simple trends, but sometimes prices curve up like a skateboard ramp (polynomial), shoot up exponentially like a rocket (exponential), or level off like climbing stairs that get shorter (logarithmic). The math finds the smoothest curve that comes closest to all your price points, helping you see the underlying pattern instead of getting lost in daily noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 7/Curve_Fitting.txt","hasFullInfo":true},{"id":137,"title":"Elastic Volume Weighted Moving Average (EVWMA)","filename":"Elastic_Volume_Weighted_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":10,"categoryTitle":"10. ADVANCED SMOOTHING TECHNIQUES","subcategory":"General","summary":"Volume-elastic","overview":"The Elastic Volume Weighted Moving Average is an adaptive moving average that adjusts its smoothing period based on volume, becoming more responsive during high-volume periods and smoother during low-volume periods. It combines volume-weighting principles with elastic (adaptive) period calculation to track price more intelligently.","formula":"EVWMA Calculation:\n1. Calculate volume ratio: VR = current_volume / average_volume(N)\n2. Adjust smoothing factor: α_adjusted = α * VR\n3. Apply elastic EMA: EVWMA = α_adjusted * price + (1 - α_adjusted) * EVWMA_prev\n\nAlternative Formulation:\nElastic Period = base_period / volume_ratio\nApply volume-weighted price with elastic period\n\nVolume Adaptation:\n- High volume → shorter effective period → more responsive\n- Low volume → longer effective period → smoother\n- Price moves confirmed by volume get more weight\n- Low-volume noise gets filtered aggressively\n\nCharacteristics:\n- Adapts to volume conditions automatically\n- Responsive during high-conviction moves\n- Stable during low-volume noise\n- Combines VWAP concept with adaptive smoothing\n- Self-adjusting to market conditions\n\nAdvantages:\n- Ignores low-volume whipsaws\n- Follows high-volume breakouts quickly\n- No manual parameter adjustment needed\n- Incorporates volume confirmation naturally\n\nApplications:\n- Trend following in liquid markets\n- Volume-confirmed breakout detection\n- Dynamic support/resistance\n- Institutional order flow tracking\n\nComparison to Standard VWMA:\n- VWMA: Fixed period, volume-weighted prices\n- EVWMA: Dynamic period adjusts to volume\n- EVWMA more adaptive to changing conditions","parameters":"","intuition":"The Elastic Volume Weighted Moving Average is like a smart moving average that pays attention to how much trading is happening. When lots of people are trading (high volume), it assumes something important is happening and reacts quickly. When trading is light (low volume), it stays calm and smooth, treating price moves as probably just noise. Think of it as having a BS detector for price moves - it only gets excited when there's actual trading volume backing up the move, otherwise it just yawns and stays steady.","rawContent":"The Elastic Volume Weighted Moving Average is an adaptive moving average that adjusts its smoothing period based on volume, becoming more responsive during high-volume periods and smoother during low-volume periods. It combines volume-weighting principles with elastic (adaptive) period calculation to track price more intelligently.\n\nEVWMA Calculation:\n1. Calculate volume ratio: VR = current_volume / average_volume(N)\n2. Adjust smoothing factor: α_adjusted = α * VR\n3. Apply elastic EMA: EVWMA = α_adjusted * price + (1 - α_adjusted) * EVWMA_prev\n\nAlternative Formulation:\nElastic Period = base_period / volume_ratio\nApply volume-weighted price with elastic period\n\nVolume Adaptation:\n- High volume → shorter effective period → more responsive\n- Low volume → longer effective period → smoother\n- Price moves confirmed by volume get more weight\n- Low-volume noise gets filtered aggressively\n\nCharacteristics:\n- Adapts to volume conditions automatically\n- Responsive during high-conviction moves\n- Stable during low-volume noise\n- Combines VWAP concept with adaptive smoothing\n- Self-adjusting to market conditions\n\nAdvantages:\n- Ignores low-volume whipsaws\n- Follows high-volume breakouts quickly\n- No manual parameter adjustment needed\n- Incorporates volume confirmation naturally\n\nApplications:\n- Trend following in liquid markets\n- Volume-confirmed breakout detection\n- Dynamic support/resistance\n- Institutional order flow tracking\n\nComparison to Standard VWMA:\n- VWMA: Fixed period, volume-weighted prices\n- EVWMA: Dynamic period adjusts to volume\n- EVWMA more adaptive to changing conditions\n\nThe Elastic Volume Weighted Moving Average is like a smart moving average that pays attention to how much trading is happening. When lots of people are trading (high volume), it assumes something important is happening and reacts quickly. When trading is light (low volume), it stays calm and smooth, treating price moves as probably just noise. Think of it as having a BS detector for price moves - it only gets excited when there's actual trading volume backing up the move, otherwise it just yawns and stays steady.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Elastic_Volume_Weighted_Moving_Average.txt","hasFullInfo":true},{"id":138,"title":"Fibonacci's Weighted Moving Average","filename":"Fibonacci_Weighted_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Fibonacci weights","overview":"Fibonacci's Weighted Moving Average applies weights to price data using the Fibonacci sequence (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...), giving more importance to recent prices in a pattern that reflects natural growth ratios. This weighting scheme emphasizes recent data progressively according to the golden ratio's underlying mathematical principles.","formula":"Fibonacci Sequence:\nF(0) = 1, F(1) = 1\nF(n) = F(n-1) + F(n-2) for n ≥ 2\nSequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...\n\nFWMA Calculation:\nFor N-period FWMA:\n1. Generate first N Fibonacci numbers\n2. Assign most recent price the highest Fibonacci weight\n3. Work backwards, decreasing weights according to sequence\n4. Calculate weighted average and normalize\n\nFormula:\nFWMA = Σ(Price[i] * Fib[N-i]) / Σ(Fib[N-i])\nwhere i ranges from 0 to N-1\n\nExample (5-period):\nWeights: [1, 2, 3, 5, 8] (most recent gets 8)\nSum of weights = 19\nFWMA = (P1*1 + P2*2 + P3*3 + P4*5 + P5*8) / 19\n\nCharacteristics:\n- Progressive weighting following natural ratios\n- More responsive than SMA\n- Organic weight distribution\n- Relates to golden ratio (1.618...)\n- Smooth but responsive to trends\n\nFibonacci's Weighted Moving Average uses nature's favorite number sequence to weight recent prices more heavily than old ones. The Fibonacci sequence shows up everywhere in nature - flower petals, seashells, galaxy spirals - and here it determines how much each price matters. The newest price gets the biggest Fibonacci number, the second newest gets the next one down, and so on. It's like saying \"today matters a lot, yesterday matters less, and last week barely matters at all\" - but following a natural mathematical progression instead of an arbitrary one.","parameters":"","intuition":"","rawContent":"Fibonacci's Weighted Moving Average applies weights to price data using the Fibonacci sequence (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...), giving more importance to recent prices in a pattern that reflects natural growth ratios. This weighting scheme emphasizes recent data progressively according to the golden ratio's underlying mathematical principles.\n\nFibonacci Sequence:\nF(0) = 1, F(1) = 1\nF(n) = F(n-1) + F(n-2) for n ≥ 2\nSequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...\n\nFWMA Calculation:\nFor N-period FWMA:\n1. Generate first N Fibonacci numbers\n2. Assign most recent price the highest Fibonacci weight\n3. Work backwards, decreasing weights according to sequence\n4. Calculate weighted average and normalize\n\nFormula:\nFWMA = Σ(Price[i] * Fib[N-i]) / Σ(Fib[N-i])\nwhere i ranges from 0 to N-1\n\nExample (5-period):\nWeights: [1, 2, 3, 5, 8] (most recent gets 8)\nSum of weights = 19\nFWMA = (P1*1 + P2*2 + P3*3 + P4*5 + P5*8) / 19\n\nCharacteristics:\n- Progressive weighting following natural ratios\n- More responsive than SMA\n- Organic weight distribution\n- Relates to golden ratio (1.618...)\n- Smooth but responsive to trends\n\nFibonacci's Weighted Moving Average uses nature's favorite number sequence to weight recent prices more heavily than old ones. The Fibonacci sequence shows up everywhere in nature - flower petals, seashells, galaxy spirals - and here it determines how much each price matters. The newest price gets the biggest Fibonacci number, the second newest gets the next one down, and so on. It's like saying \"today matters a lot, yesterday matters less, and last week barely matters at all\" - but following a natural mathematical progression instead of an arbitrary one.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Fibonacci_Weighted_Moving_Average.txt","hasFullInfo":true},{"id":139,"title":"Integral of Linear Regression Slope (ILRS)","filename":"Integral_of_Linear_Regression_Slope.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Integrated slope","overview":"The Integral of Linear Regression Slope is an advanced indicator that calculates the cumulative sum (integral) of the slope of a linear regression line over time. It tracks the accumulation of trend momentum, providing insight into whether the trend is accelerating, decelerating, or reversing. The ILRS turns slope changes into a smoothed oscillator-like indicator.","formula":"ILRS Calculation:\n1. Calculate linear regression slope for N-period window\n   Slope = (N*Σ(xy) - Σx*Σy) / (N*Σ(x²) - (Σx)²)\n2. Integrate (sum) the slopes over time\n   ILRS = Σ(Slope) over M periods\n3. Optionally normalize or smooth the result\n\nInterpretation:\n- Rising ILRS → Trend strengthening/accelerating\n- Falling ILRS → Trend weakening/decelerating\n- ILRS peak → Momentum exhaustion, potential reversal\n- ILRS crosses zero → Trend direction change\n- ILRS divergence → Warning of trend change\n\nMathematical Concept:\nSlope = first derivative (rate of change)\nIntegral = cumulative sum (area under curve)\nILRS = ∫(slope) dt ≈ Σ(slope)\n\nCharacteristics:\n- Momentum accumulation measure\n- Leads price at turning points\n- Smooth representation of trend strength\n- Can oscillate around zero\n- Identifies acceleration/deceleration\n\nApplications:\n- Divergence detection (ILRS vs Price)\n- Overbought/oversold identification\n- Trend exhaustion signals\n- Momentum confirmation\n- Early reversal warnings\n\nComparison:\n- Linear Regression Slope: Shows current trend rate\n- ILRS: Shows accumulated momentum over time\n- ILRS more like an oscillator, LR Slope more like rate","parameters":"","intuition":"The Integral of Linear Regression Slope is like keeping a running total of how steep the trend has been. Instead of just measuring \"is the trend going up or down right now,\" it adds up all those measurements over time. Think of it as a momentum bank account - when the trend is strong and getting stronger, deposits keep piling up. When the trend weakens, deposits slow down or even turn to withdrawals. When this \"momentum account\" hits a peak and starts declining, it's often an early warning that the trend is running out of steam, even if price is still going up.","rawContent":"The Integral of Linear Regression Slope is an advanced indicator that calculates the cumulative sum (integral) of the slope of a linear regression line over time. It tracks the accumulation of trend momentum, providing insight into whether the trend is accelerating, decelerating, or reversing. The ILRS turns slope changes into a smoothed oscillator-like indicator.\n\nILRS Calculation:\n1. Calculate linear regression slope for N-period window\n   Slope = (N*Σ(xy) - Σx*Σy) / (N*Σ(x²) - (Σx)²)\n2. Integrate (sum) the slopes over time\n   ILRS = Σ(Slope) over M periods\n3. Optionally normalize or smooth the result\n\nInterpretation:\n- Rising ILRS → Trend strengthening/accelerating\n- Falling ILRS → Trend weakening/decelerating\n- ILRS peak → Momentum exhaustion, potential reversal\n- ILRS crosses zero → Trend direction change\n- ILRS divergence → Warning of trend change\n\nMathematical Concept:\nSlope = first derivative (rate of change)\nIntegral = cumulative sum (area under curve)\nILRS = ∫(slope) dt ≈ Σ(slope)\n\nCharacteristics:\n- Momentum accumulation measure\n- Leads price at turning points\n- Smooth representation of trend strength\n- Can oscillate around zero\n- Identifies acceleration/deceleration\n\nApplications:\n- Divergence detection (ILRS vs Price)\n- Overbought/oversold identification\n- Trend exhaustion signals\n- Momentum confirmation\n- Early reversal warnings\n\nComparison:\n- Linear Regression Slope: Shows current trend rate\n- ILRS: Shows accumulated momentum over time\n- ILRS more like an oscillator, LR Slope more like rate\n\nThe Integral of Linear Regression Slope is like keeping a running total of how steep the trend has been. Instead of just measuring \"is the trend going up or down right now,\" it adds up all those measurements over time. Think of it as a momentum bank account - when the trend is strong and getting stronger, deposits keep piling up. When the trend weakens, deposits slow down or even turn to withdrawals. When this \"momentum account\" hits a peak and starts declining, it's often an early warning that the trend is running out of steam, even if price is still going up.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Integral_of_Linear_Regression_Slope.txt","hasFullInfo":true},{"id":140,"title":"Linear Regression Moving Average","filename":"Linear_Regression_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Least squares line","overview":"The Linear Regression Moving Average (LRMA), also called Least Squares Moving Average (LSMA), calculates the endpoint of a linear regression line fitted through price data. It uses the least squares method to find the line that minimizes the sum of squared distances from all prices, providing an optimal linear fit that serves as a trend-following indicator.","formula":"LRMA Calculation:\n1. Assign x-values: 0, 1, 2, ..., N-1 for N bars\n2. Calculate slope (m): m = (N*Σ(x*y) - Σx*Σy) / (N*Σ(x²) - (Σx)²)\n3. Calculate intercept (b): b = (Σy - m*Σx) / N\n4. LRMA = m*(N-1) + b\n\nSimplified Formula:\nLRMA = b + m*(N-1)\nwhere the regression line is: y = mx + b\n\nLeast Squares Principle:\nMinimizes: Σ(actual_price - predicted_price)²\nFinds the \"best fit\" line through the data points\n\nKey Properties:\n- Mathematically optimal linear fit\n- Endpoint represents current trend value\n- Automatically captures trend direction and magnitude\n- Lower lag than SMA with similar smoothness\n- Adapts to changing trend slopes\n\nCharacteristics:\n- Smooth trending line\n- Predictive element (projects trend)\n- Reduces noise effectively\n- Can lead price in strong trends\n- Susceptible to whipsaws in ranges\n\nComparison to SMA:\n- SMA: Equal weight to all prices\n- LRMA: Weights optimized for linear trend\n- LRMA responds faster to trend changes\n- LRMA incorporates directional bias\n\nApplications:\n- Trend identification\n- Dynamic support/resistance\n- Trend strength measurement\n- Crossover signals\n- Momentum confirmation","parameters":"","intuition":"The Linear Regression Moving Average fits the mathematically \"best\" straight line through your recent prices and shows you where that line points right now. Think of it like having a ruler that automatically adjusts to follow the trend - the ruler always shows you the smoothest path through the chaos. Because it's optimized to find the best linear fit, it naturally points in the trend direction and responds faster than a regular average when the trend actually changes, while ignoring random wiggles that don't matter.","rawContent":"The Linear Regression Moving Average (LRMA), also called Least Squares Moving Average (LSMA), calculates the endpoint of a linear regression line fitted through price data. It uses the least squares method to find the line that minimizes the sum of squared distances from all prices, providing an optimal linear fit that serves as a trend-following indicator.\n\nLRMA Calculation:\n1. Assign x-values: 0, 1, 2, ..., N-1 for N bars\n2. Calculate slope (m): m = (N*Σ(x*y) - Σx*Σy) / (N*Σ(x²) - (Σx)²)\n3. Calculate intercept (b): b = (Σy - m*Σx) / N\n4. LRMA = m*(N-1) + b\n\nSimplified Formula:\nLRMA = b + m*(N-1)\nwhere the regression line is: y = mx + b\n\nLeast Squares Principle:\nMinimizes: Σ(actual_price - predicted_price)²\nFinds the \"best fit\" line through the data points\n\nKey Properties:\n- Mathematically optimal linear fit\n- Endpoint represents current trend value\n- Automatically captures trend direction and magnitude\n- Lower lag than SMA with similar smoothness\n- Adapts to changing trend slopes\n\nCharacteristics:\n- Smooth trending line\n- Predictive element (projects trend)\n- Reduces noise effectively\n- Can lead price in strong trends\n- Susceptible to whipsaws in ranges\n\nComparison to SMA:\n- SMA: Equal weight to all prices\n- LRMA: Weights optimized for linear trend\n- LRMA responds faster to trend changes\n- LRMA incorporates directional bias\n\nApplications:\n- Trend identification\n- Dynamic support/resistance\n- Trend strength measurement\n- Crossover signals\n- Momentum confirmation\n\nThe Linear Regression Moving Average fits the mathematically \"best\" straight line through your recent prices and shows you where that line points right now. Think of it like having a ruler that automatically adjusts to follow the trend - the ruler always shows you the smoothest path through the chaos. Because it's optimized to find the best linear fit, it naturally points in the trend direction and responds faster than a regular average when the trend actually changes, while ignoring random wiggles that don't matter.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Linear_Regression_Moving_Average.txt","hasFullInfo":true},{"id":141,"title":"Parabolic Weighted Moving Average","filename":"Parabolic_Weighted_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Parabolic weighting","overview":"The Parabolic Weighted Moving Average applies weights based on a parabolic (quadratic) function, creating a weight distribution that heavily emphasizes recent data while maintaining smooth transitions. The parabolic weighting scheme provides stronger recent price emphasis than linear weighting but smoother than exponential weighting.","formula":"PWMA Calculation:\nFor N-period PWMA:\nWeight[i] = (i + 1)^2\nwhere i ranges from 0 to N-1 (0 = oldest, N-1 = most recent)\n\nFormula:\nPWMA = Σ(Price[i] * (i+1)^2) / Σ((i+1)^2)\n\nWeighting Pattern:\n- Oldest price: weight = 1^2 = 1\n- Next: weight = 2^2 = 4\n- Next: weight = 3^2 = 9\n- Most recent: weight = N^2\n\nWeight increases quadratically toward present\n\nExample (5-period):\nPosition:  1    2    3    4    5  (oldest to newest)\nWeight:    1    4    9   16   25\nSum = 55\nMost recent price has 25/55 ≈ 45% influence\n\nCharacteristics:\n- Strong recent price emphasis\n- Smooth weight progression\n- More responsive than linear WMA\n- Less whipsaw than EMA\n- Quadratic growth in weights\n- Good balance of smoothness and speed\n\nComparison to Linear WMA:\nLinear: 1, 2, 3, 4, 5 (arithmetic progression)\nParabolic: 1, 4, 9, 16, 25 (quadratic progression)\nParabolic gives much more weight to recent prices\n\nApplications:\n- Fast trend detection\n- Momentum confirmation\n- Dynamic support/resistance\n- Breakout validation","parameters":"","intuition":"The Parabolic Weighted Moving Average ramps up the importance of recent prices in a curved, accelerating way - like a skateboard ramp that gets steeper as you go up. Instead of increasing the weight by the same amount each step (1, 2, 3, 4, 5), it squares each position (1, 4, 9, 16, 25), making the most recent prices way more important than the old ones. This means your moving average hugs the current price action tightly while still considering history. Think of it as having a really good short-term memory but a foggy long-term memory.","rawContent":"The Parabolic Weighted Moving Average applies weights based on a parabolic (quadratic) function, creating a weight distribution that heavily emphasizes recent data while maintaining smooth transitions. The parabolic weighting scheme provides stronger recent price emphasis than linear weighting but smoother than exponential weighting.\n\nPWMA Calculation:\nFor N-period PWMA:\nWeight[i] = (i + 1)^2\nwhere i ranges from 0 to N-1 (0 = oldest, N-1 = most recent)\n\nFormula:\nPWMA = Σ(Price[i] * (i+1)^2) / Σ((i+1)^2)\n\nWeighting Pattern:\n- Oldest price: weight = 1^2 = 1\n- Next: weight = 2^2 = 4\n- Next: weight = 3^2 = 9\n- Most recent: weight = N^2\n\nWeight increases quadratically toward present\n\nExample (5-period):\nPosition:  1    2    3    4    5  (oldest to newest)\nWeight:    1    4    9   16   25\nSum = 55\nMost recent price has 25/55 ≈ 45% influence\n\nCharacteristics:\n- Strong recent price emphasis\n- Smooth weight progression\n- More responsive than linear WMA\n- Less whipsaw than EMA\n- Quadratic growth in weights\n- Good balance of smoothness and speed\n\nComparison to Linear WMA:\nLinear: 1, 2, 3, 4, 5 (arithmetic progression)\nParabolic: 1, 4, 9, 16, 25 (quadratic progression)\nParabolic gives much more weight to recent prices\n\nApplications:\n- Fast trend detection\n- Momentum confirmation\n- Dynamic support/resistance\n- Breakout validation\n\nThe Parabolic Weighted Moving Average ramps up the importance of recent prices in a curved, accelerating way - like a skateboard ramp that gets steeper as you go up. Instead of increasing the weight by the same amount each step (1, 2, 3, 4, 5), it squares each position (1, 4, 9, 16, 25), making the most recent prices way more important than the old ones. This means your moving average hugs the current price action tightly while still considering history. Think of it as having a really good short-term memory but a foggy long-term memory.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Parabolic_Weighted_Moving_Average.txt","hasFullInfo":true},{"id":142,"title":"Pentuple Exponential Moving Average","filename":"Pentuple_Exponential_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"5x EMA","overview":"The Pentuple Exponential Moving Average (PEMA) applies exponential smoothing five times to achieve an extremely smooth curve with significantly reduced lag compared to a single EMA of equivalent smoothness. It belongs to the family of multiple exponential moving averages that balance smoothness and responsiveness through repeated filtering.","formula":"PEMA Calculation:\nEMA1 = EMA(price, N)\nEMA2 = EMA(EMA1, N)\nEMA3 = EMA(EMA2, N)\nEMA4 = EMA(EMA3, N)\nEMA5 = EMA(EMA4, N)\n\nLag Reduction Formula:\nPEMA = (5 * EMA1) - (10 * EMA2) + (10 * EMA3) - (5 * EMA4) + EMA5\n\nCoefficients Pattern:\n[5, -10, 10, -5, 1] - Similar to Pascal's triangle row\nSum = 1 (normalized)\n\nCharacteristics:\n- Extremely smooth curve\n- Reduced lag through coefficient weighting\n- Responsive to significant trend changes\n- Filters out high-frequency noise effectively\n- More complex calculation than lower-order EMAs\n\nComparison:\n- Smoother than TEMA (Triple EMA)\n- Smoother than QEMA (Quadruple EMA)\n- Lower lag than single EMA with equivalent smoothness\n- Best for major trend identification","parameters":"","intuition":"The Pentuple Exponential Moving Average takes smoothing to the extreme by running the exponential average five times, but then uses some mathematical magic (adding and subtracting different combinations) to speed it back up. Think of it like repeatedly filtering water to make it crystal clear, but then adding back just enough minerals to make it taste good. You get an incredibly smooth line that still keeps up with price reasonably well - perfect for seeing the forest instead of the trees.","rawContent":"The Pentuple Exponential Moving Average (PEMA) applies exponential smoothing five times to achieve an extremely smooth curve with significantly reduced lag compared to a single EMA of equivalent smoothness. It belongs to the family of multiple exponential moving averages that balance smoothness and responsiveness through repeated filtering.\n\nPEMA Calculation:\nEMA1 = EMA(price, N)\nEMA2 = EMA(EMA1, N)\nEMA3 = EMA(EMA2, N)\nEMA4 = EMA(EMA3, N)\nEMA5 = EMA(EMA4, N)\n\nLag Reduction Formula:\nPEMA = (5 * EMA1) - (10 * EMA2) + (10 * EMA3) - (5 * EMA4) + EMA5\n\nCoefficients Pattern:\n[5, -10, 10, -5, 1] - Similar to Pascal's triangle row\nSum = 1 (normalized)\n\nCharacteristics:\n- Extremely smooth curve\n- Reduced lag through coefficient weighting\n- Responsive to significant trend changes\n- Filters out high-frequency noise effectively\n- More complex calculation than lower-order EMAs\n\nComparison:\n- Smoother than TEMA (Triple EMA)\n- Smoother than QEMA (Quadruple EMA)\n- Lower lag than single EMA with equivalent smoothness\n- Best for major trend identification\n\nThe Pentuple Exponential Moving Average takes smoothing to the extreme by running the exponential average five times, but then uses some mathematical magic (adding and subtracting different combinations) to speed it back up. Think of it like repeatedly filtering water to make it crystal clear, but then adding back just enough minerals to make it taste good. You get an incredibly smooth line that still keeps up with price reasonably well - perfect for seeing the forest instead of the trees.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Pentuple_Exponential_Moving_Average.txt","hasFullInfo":true},{"id":143,"title":"Perpendicular Distance Simplification","filename":"Perpendicular_Distance_Simplification.txt","group":"group 7","groupNum":7,"categoryId":14,"categoryTitle":"14. GEOMETRIC & PATTERN FILTERS","subcategory":"General","summary":"Distance-based reduction","overview":"Perpendicular Distance Simplification is a curve reduction technique that removes points based on their perpendicular distance from a simplified representation of the curve. Points that lie very close to the generalized trend line are considered redundant and eliminated, while points that deviate significantly are retained as they represent important features.","formula":"PD Calculation:\nFor point P and line segment from A to B:\n1. Calculate vector AB = (Bx - Ax, By - Ay)\n2. Calculate vector AP = (Px - Ax, Py - Ay)\n3. Project AP onto AB: t = dot(AP, AB) / dot(AB, AB)\n4. Find closest point on line: C = A + t * AB\n5. Perpendicular distance = |PC| = sqrt((Px - Cx)^2 + (Py - Cy)^2)\n\nSimplification Strategy:\n- Points with distance < threshold are removed (noise)\n- Points with distance > threshold are kept (significant features)\n- Adaptive threshold based on local volatility can improve results\n\nPerpendicular Distance Simplification cleans up your price chart by measuring how far each point strays from the main trend. Imagine drawing a straight line through a section of your chart - if a price point sits almost exactly on that line, it's probably not telling you anything new and can be removed. But if a point jumps way off the line, that's a significant price move worth keeping. This method helps you focus on the price movements that actually matter for your trading decisions.","parameters":"","intuition":"","rawContent":"Perpendicular Distance Simplification is a curve reduction technique that removes points based on their perpendicular distance from a simplified representation of the curve. Points that lie very close to the generalized trend line are considered redundant and eliminated, while points that deviate significantly are retained as they represent important features.\n\nPD Calculation:\nFor point P and line segment from A to B:\n1. Calculate vector AB = (Bx - Ax, By - Ay)\n2. Calculate vector AP = (Px - Ax, Py - Ay)\n3. Project AP onto AB: t = dot(AP, AB) / dot(AB, AB)\n4. Find closest point on line: C = A + t * AB\n5. Perpendicular distance = |PC| = sqrt((Px - Cx)^2 + (Py - Cy)^2)\n\nSimplification Strategy:\n- Points with distance < threshold are removed (noise)\n- Points with distance > threshold are kept (significant features)\n- Adaptive threshold based on local volatility can improve results\n\nPerpendicular Distance Simplification cleans up your price chart by measuring how far each point strays from the main trend. Imagine drawing a straight line through a section of your chart - if a price point sits almost exactly on that line, it's probably not telling you anything new and can be removed. But if a point jumps way off the line, that's a significant price move worth keeping. This method helps you focus on the price movements that actually matter for your trading decisions.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 7/Perpendicular_Distance_Simplification.txt","hasFullInfo":true},{"id":144,"title":"Piecewise Linear Approximation","filename":"Piecewise_Linear_Approximation.txt","group":"group 7","groupNum":7,"categoryId":14,"categoryTitle":"14. GEOMETRIC & PATTERN FILTERS","subcategory":"General","summary":"Segmented linear fitting","overview":"Piecewise Linear Approximation (PLA) represents a complex curve as a series of connected straight line segments. This method identifies key breakpoints where trend direction or slope changes significantly, then connects these points with straight lines. It's particularly effective for segmenting price action into distinct trending phases.","formula":"PLA Construction:\n1. Identify breakpoints (local extrema, trend changes, volatility shifts)\n2. Connect consecutive breakpoints with straight lines\n3. Each segment has equation: y = mx + b\n4. Result: Continuous curve made of linear pieces\n\nBreakpoint Selection Methods:\n- Fixed interval: Break every N bars\n- Error threshold: New segment when deviation exceeds limit\n- Sliding window: Fit lines within moving windows\n- Bottom-up merging: Start detailed, merge similar segments\n- Top-down splitting: Start simple, split where error is high\n\nCommon Applications:\n- Support/resistance level identification\n- Trend phase segmentation\n- Chart pattern recognition\n- Swing high/low extraction","parameters":"","intuition":"Piecewise Linear Approximation turns your complicated price chart into a connect-the-dots drawing. Instead of following every little wiggle, it draws straight lines between the important turning points. Think of it like describing a mountain range - you don't need to mention every rock, just connect the peaks and valleys with straight lines. This makes it much easier to spot when the trend actually changed direction versus when price was just doing its normal back-and-forth dance.","rawContent":"Piecewise Linear Approximation (PLA) represents a complex curve as a series of connected straight line segments. This method identifies key breakpoints where trend direction or slope changes significantly, then connects these points with straight lines. It's particularly effective for segmenting price action into distinct trending phases.\n\nPLA Construction:\n1. Identify breakpoints (local extrema, trend changes, volatility shifts)\n2. Connect consecutive breakpoints with straight lines\n3. Each segment has equation: y = mx + b\n4. Result: Continuous curve made of linear pieces\n\nBreakpoint Selection Methods:\n- Fixed interval: Break every N bars\n- Error threshold: New segment when deviation exceeds limit\n- Sliding window: Fit lines within moving windows\n- Bottom-up merging: Start detailed, merge similar segments\n- Top-down splitting: Start simple, split where error is high\n\nCommon Applications:\n- Support/resistance level identification\n- Trend phase segmentation\n- Chart pattern recognition\n- Swing high/low extraction\n\nPiecewise Linear Approximation turns your complicated price chart into a connect-the-dots drawing. Instead of following every little wiggle, it draws straight lines between the important turning points. Think of it like describing a mountain range - you don't need to mention every rock, just connect the peaks and valleys with straight lines. This makes it much easier to spot when the trend actually changed direction versus when price was just doing its normal back-and-forth dance.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 7/Piecewise_Linear_Approximation.txt","hasFullInfo":true},{"id":145,"title":"Quadruple Exponential Moving Average","filename":"Quadruple_Exponential_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"4x EMA","overview":"The Quadruple Exponential Moving Average (QEMA) applies exponential smoothing four times and then combines them with specific coefficients to create a highly smooth indicator with reduced lag. It's part of the multiple EMA family designed to achieve better smoothness-to-responsiveness ratios than single or double EMAs.","formula":"QEMA Calculation:\nEMA1 = EMA(price, N)\nEMA2 = EMA(EMA1, N)\nEMA3 = EMA(EMA2, N)\nEMA4 = EMA(EMA3, N)\n\nLag Reduction Formula:\nQEMA = (4 * EMA1) - (6 * EMA2) + (4 * EMA3) - EMA4\n\nCoefficients: [4, -6, 4, -1]\nPattern follows binomial expansion\nSum = 1 (normalized)\n\nAlternative Names:\n- Quadruple EMA\n- 4EMA\n- Four-Times Exponential Moving Average\n\nCharacteristics:\n- Very smooth trending line\n- Lag reduction through weighted combination\n- Better noise filtering than TEMA\n- Responsive to genuine trend changes\n- Less whipsaw than lower-order EMAs\n\nApplications:\n- Long-term trend identification\n- Dynamic support/resistance levels\n- Trend confirmation tool\n- Crossover signal generation\n\nComparison:\n- Smoother than TEMA (Triple EMA)\n- More lag than TEMA but cleaner signals\n- Less smooth than PEMA but faster","parameters":"","intuition":"The Quadruple Exponential Moving Average is like a super-smooth version of the regular moving average that doesn't lag as much as you'd expect. It runs the exponential smoothing process four times to get an incredibly clean line, then cleverly combines all four versions with different weights to speed it back up. Imagine polishing a piece of wood four times to make it really smooth, but doing it in a special way that doesn't take forever. You get a beautiful, clean trend line that still reacts when the market really moves.","rawContent":"The Quadruple Exponential Moving Average (QEMA) applies exponential smoothing four times and then combines them with specific coefficients to create a highly smooth indicator with reduced lag. It's part of the multiple EMA family designed to achieve better smoothness-to-responsiveness ratios than single or double EMAs.\n\nQEMA Calculation:\nEMA1 = EMA(price, N)\nEMA2 = EMA(EMA1, N)\nEMA3 = EMA(EMA2, N)\nEMA4 = EMA(EMA3, N)\n\nLag Reduction Formula:\nQEMA = (4 * EMA1) - (6 * EMA2) + (4 * EMA3) - EMA4\n\nCoefficients: [4, -6, 4, -1]\nPattern follows binomial expansion\nSum = 1 (normalized)\n\nAlternative Names:\n- Quadruple EMA\n- 4EMA\n- Four-Times Exponential Moving Average\n\nCharacteristics:\n- Very smooth trending line\n- Lag reduction through weighted combination\n- Better noise filtering than TEMA\n- Responsive to genuine trend changes\n- Less whipsaw than lower-order EMAs\n\nApplications:\n- Long-term trend identification\n- Dynamic support/resistance levels\n- Trend confirmation tool\n- Crossover signal generation\n\nComparison:\n- Smoother than TEMA (Triple EMA)\n- More lag than TEMA but cleaner signals\n- Less smooth than PEMA but faster\n\nThe Quadruple Exponential Moving Average is like a super-smooth version of the regular moving average that doesn't lag as much as you'd expect. It runs the exponential smoothing process four times to get an incredibly clean line, then cleverly combines all four versions with different weights to speed it back up. Imagine polishing a piece of wood four times to make it really smooth, but doing it in a special way that doesn't take forever. You get a beautiful, clean trend line that still reacts when the market really moves.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Quadruple_Exponential_Moving_Average.txt","hasFullInfo":true},{"id":146,"title":"Ramer-Douglas-Peucker Algorithm (RDP)","filename":"Ramer_Douglas_Peucker_Algorithm.txt","group":"group 7","groupNum":7,"categoryId":14,"categoryTitle":"14. GEOMETRIC & PATTERN FILTERS","subcategory":"General","summary":"Curve simplification","overview":"The Ramer-Douglas-Peucker (RDP) algorithm is a curve simplification method that reduces the number of points in a price series while preserving its overall shape. It works by recursively finding the point with the maximum perpendicular distance from a line segment connecting two endpoints, and if that distance exceeds a threshold (epsilon), it splits the curve at that point and repeats the process.","formula":"RDP Process:\n1. Draw line between first and last point\n2. Find point with maximum perpendicular distance from this line\n3. If distance > epsilon: split at that point and recurse on both segments\n4. If distance ≤ epsilon: keep only endpoints, discard intermediate points\n5. Combine all kept points to form simplified curve\n\nThe Ramer-Douglas-Peucker algorithm helps you see the \"big picture\" of price movement by throwing away zigzags and noise that don't matter much. Imagine tracing a coastline on a map - you don't need every tiny bump, just the major features. The algorithm keeps the important turning points and removes the minor wiggles, giving you a cleaner chart that's easier to read and trade from.","parameters":"","intuition":"","rawContent":"The Ramer-Douglas-Peucker (RDP) algorithm is a curve simplification method that reduces the number of points in a price series while preserving its overall shape. It works by recursively finding the point with the maximum perpendicular distance from a line segment connecting two endpoints, and if that distance exceeds a threshold (epsilon), it splits the curve at that point and repeats the process.\n\nRDP Process:\n1. Draw line between first and last point\n2. Find point with maximum perpendicular distance from this line\n3. If distance > epsilon: split at that point and recurse on both segments\n4. If distance ≤ epsilon: keep only endpoints, discard intermediate points\n5. Combine all kept points to form simplified curve\n\nThe Ramer-Douglas-Peucker algorithm helps you see the \"big picture\" of price movement by throwing away zigzags and noise that don't matter much. Imagine tracing a coastline on a map - you don't need every tiny bump, just the major features. The algorithm keeps the important turning points and removes the minor wiggles, giving you a cleaner chart that's easier to read and trade from.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 7/Ramer_Douglas_Peucker_Algorithm.txt","hasFullInfo":true},{"id":147,"title":"Sine Weighted Moving Average","filename":"Sine_Weighted_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Sinusoidal weighting","overview":"The Sine Weighted Moving Average applies weights derived from a sine wave function, creating a smooth weighting distribution that emphasizes the middle portion of the data window. The sinusoidal weighting pattern provides a natural transition from low to high to low weights across the period, resulting in very smooth output with minimal lag.","formula":"SWMA Calculation:\nFor N-period SWMA:\nWeight[i] = sin(π * (i + 1) / (N + 1))\nwhere i ranges from 0 to N-1\n\nFormula:\nSWMA = Σ(Price[i] * Weight[i]) / Σ(Weight[i])\n\nWeighting Pattern:\n- Weights start low (near 0)\n- Rise smoothly to peak at middle of period\n- Decrease symmetrically back to near 0\n- Creates bell-shaped weight distribution\n- Middle values most emphasized\n\nExample (7-period):\ni:      0    1    2    3    4    5    6\nAngle: 22.5° 45° 67.5° 90° 112.5° 135° 157.5°\nWeight: 0.38 0.71 0.92 1.00 0.92 0.71 0.38\n\nNormalized weights sum to 1.0\n\nCharacteristics:\n- Very smooth output\n- Symmetrical weighting\n- Natural weight distribution\n- Emphasizes central tendency\n- Low noise susceptibility\n- Moderate lag (similar to triangular MA)\n\nApplications:\n- Trend smoothing\n- Cycle analysis\n- Signal filtering\n- Support/resistance identification","parameters":"","intuition":"The Sine Weighted Moving Average weights your prices using a sine wave pattern - starting low, rising to a peak in the middle, then falling back down. Think of it like a gentle hill: the prices in the middle of your lookback period sit at the top of the hill and matter most, while the oldest and newest prices sit at the bottom and matter least. This creates a super-smooth average that focuses on the \"heart\" of your data window, filtering out noise while still tracking trends. It's like looking at the center of a wave to understand where the ocean is going.","rawContent":"The Sine Weighted Moving Average applies weights derived from a sine wave function, creating a smooth weighting distribution that emphasizes the middle portion of the data window. The sinusoidal weighting pattern provides a natural transition from low to high to low weights across the period, resulting in very smooth output with minimal lag.\n\nSWMA Calculation:\nFor N-period SWMA:\nWeight[i] = sin(π * (i + 1) / (N + 1))\nwhere i ranges from 0 to N-1\n\nFormula:\nSWMA = Σ(Price[i] * Weight[i]) / Σ(Weight[i])\n\nWeighting Pattern:\n- Weights start low (near 0)\n- Rise smoothly to peak at middle of period\n- Decrease symmetrically back to near 0\n- Creates bell-shaped weight distribution\n- Middle values most emphasized\n\nExample (7-period):\ni:      0    1    2    3    4    5    6\nAngle: 22.5° 45° 67.5° 90° 112.5° 135° 157.5°\nWeight: 0.38 0.71 0.92 1.00 0.92 0.71 0.38\n\nNormalized weights sum to 1.0\n\nCharacteristics:\n- Very smooth output\n- Symmetrical weighting\n- Natural weight distribution\n- Emphasizes central tendency\n- Low noise susceptibility\n- Moderate lag (similar to triangular MA)\n\nApplications:\n- Trend smoothing\n- Cycle analysis\n- Signal filtering\n- Support/resistance identification\n\nThe Sine Weighted Moving Average weights your prices using a sine wave pattern - starting low, rising to a peak in the middle, then falling back down. Think of it like a gentle hill: the prices in the middle of your lookback period sit at the top of the hill and matter most, while the oldest and newest prices sit at the bottom and matter least. This creates a super-smooth average that focuses on the \"heart\" of your data window, filtering out noise while still tracking trends. It's like looking at the center of a wave to understand where the ocean is going.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Sine_Weighted_Moving_Average.txt","hasFullInfo":true},{"id":148,"title":"Time Series Moving Average (TSMA)","filename":"Time_Series_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Linear regression slope","overview":"The Time Series Moving Average, also known as Linear Regression Moving Average or End Point Moving Average, represents the endpoint value of a linear regression line fitted to the price data over a specified period. Instead of averaging prices directly, it calculates where the best-fit trend line ends, providing a forward-looking smoothed value.","formula":"TSMA Calculation:\n1. Perform linear regression on N periods: y = mx + b\n2. Calculate slope (m) and intercept (b)\n3. TSMA = m * (N-1) + b (endpoint of regression line)\n\nLinear Regression Components:\nm = (N * Σ(xy) - Σx * Σy) / (N * Σ(x²) - (Σx)²)\nb = (Σy - m * Σx) / N\n\nwhere x = bar position (0 to N-1), y = price\n\nAlternative Calculation:\nTSMA = Forecast(Linear Regression, period N, 0 bars ahead)\n\nCharacteristics:\n- Projects current trend direction\n- Smoother than simple moving average\n- Less lag than SMA of same period\n- Automatically incorporates trend slope\n- Mathematically optimal fit to recent data\n\nAdvantages:\n- Responds faster to trend changes\n- Built-in trend direction awareness\n- Reduces whipsaws in trending markets\n- Statistically rigorous calculation\n\nDisadvantages:\n- Can overshoot in choppy markets\n- Sensitive to outliers\n- May generate false signals in ranges\n\nApplications:\n- Trend following\n- Support/resistance identification\n- Entry/exit timing\n- Trend strength assessment\n\nThe Time Series Moving Average doesn't just average your prices - it draws the best straight line through them and tells you where that line ends right now. Imagine plotting your last 20 prices and drawing the line that fits them best (like the \"trend line\" tool on your chart). The TSMA is just the value of that line at the current bar. This makes it naturally forward-looking and trend-aware, so it responds faster to real trend changes while ignoring random noise. It's like asking \"if this trend continues at its current pace, where are we headed?\"","parameters":"","intuition":"","rawContent":"The Time Series Moving Average, also known as Linear Regression Moving Average or End Point Moving Average, represents the endpoint value of a linear regression line fitted to the price data over a specified period. Instead of averaging prices directly, it calculates where the best-fit trend line ends, providing a forward-looking smoothed value.\n\nTSMA Calculation:\n1. Perform linear regression on N periods: y = mx + b\n2. Calculate slope (m) and intercept (b)\n3. TSMA = m * (N-1) + b (endpoint of regression line)\n\nLinear Regression Components:\nm = (N * Σ(xy) - Σx * Σy) / (N * Σ(x²) - (Σx)²)\nb = (Σy - m * Σx) / N\n\nwhere x = bar position (0 to N-1), y = price\n\nAlternative Calculation:\nTSMA = Forecast(Linear Regression, period N, 0 bars ahead)\n\nCharacteristics:\n- Projects current trend direction\n- Smoother than simple moving average\n- Less lag than SMA of same period\n- Automatically incorporates trend slope\n- Mathematically optimal fit to recent data\n\nAdvantages:\n- Responds faster to trend changes\n- Built-in trend direction awareness\n- Reduces whipsaws in trending markets\n- Statistically rigorous calculation\n\nDisadvantages:\n- Can overshoot in choppy markets\n- Sensitive to outliers\n- May generate false signals in ranges\n\nApplications:\n- Trend following\n- Support/resistance identification\n- Entry/exit timing\n- Trend strength assessment\n\nThe Time Series Moving Average doesn't just average your prices - it draws the best straight line through them and tells you where that line ends right now. Imagine plotting your last 20 prices and drawing the line that fits them best (like the \"trend line\" tool on your chart). The TSMA is just the value of that line at the current bar. This makes it naturally forward-looking and trend-aware, so it responds faster to real trend changes while ignoring random noise. It's like asking \"if this trend continues at its current pace, where are we headed?\"","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Time_Series_Moving_Average.txt","hasFullInfo":true},{"id":149,"title":"Triangular Moving Average","filename":"Triangular_Moving_Average.txt","group":"group 7","groupNum":7,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Double SMA","overview":"The Triangular Moving Average (TMA) is a double-smoothed moving average that applies a Simple Moving Average twice, resulting in a triangular weighting pattern where the middle values have the highest weight. This produces a very smooth curve that heavily emphasizes the center of the period, making it excellent for identifying underlying trends while filtering noise.","formula":"TMA Calculation:\n1. Calculate SMA with period N\n2. Calculate SMA of that SMA with period M\n3. For symmetric TMA: M = (N + 1) / 2 (if N is odd) or M = N / 2 + 1 (if N is even)\n\nFormula:\nTMA = SMA(SMA(price, N), M)\n\nWeighting Pattern:\n- Center values receive highest weight (triangular peak)\n- Edge values receive lowest weight\n- Smooth, gradual transition between weights\n- Total weight sums to 1 (normalized)\n\nExample for 7-period TMA:\nWeights: [1, 2, 3, 4, 3, 2, 1] / 16\nMiddle value (4th) has 4x weight of edges\n\nCharacteristics:\n- Very smooth, minimal noise\n- Higher lag than single SMA\n- Excellent for major trend identification\n- Reduces false signals significantly","parameters":"","intuition":"The Triangular Moving Average is like averaging your average - it's extra smooth because it's been filtered twice. Imagine putting your price data through a blender, then putting that smoothie through the blender again. The result emphasizes the middle of your data period most heavily, like a triangle shape, which makes it super stable and reliable for spotting the big trend. It's slower to react than a regular average, but that's the trade-off for being so smooth and dependable.","rawContent":"The Triangular Moving Average (TMA) is a double-smoothed moving average that applies a Simple Moving Average twice, resulting in a triangular weighting pattern where the middle values have the highest weight. This produces a very smooth curve that heavily emphasizes the center of the period, making it excellent for identifying underlying trends while filtering noise.\n\nTMA Calculation:\n1. Calculate SMA with period N\n2. Calculate SMA of that SMA with period M\n3. For symmetric TMA: M = (N + 1) / 2 (if N is odd) or M = N / 2 + 1 (if N is even)\n\nFormula:\nTMA = SMA(SMA(price, N), M)\n\nWeighting Pattern:\n- Center values receive highest weight (triangular peak)\n- Edge values receive lowest weight\n- Smooth, gradual transition between weights\n- Total weight sums to 1 (normalized)\n\nExample for 7-period TMA:\nWeights: [1, 2, 3, 4, 3, 2, 1] / 16\nMiddle value (4th) has 4x weight of edges\n\nCharacteristics:\n- Very smooth, minimal noise\n- Higher lag than single SMA\n- Excellent for major trend identification\n- Reduces false signals significantly\n\nThe Triangular Moving Average is like averaging your average - it's extra smooth because it's been filtered twice. Imagine putting your price data through a blender, then putting that smoothie through the blender again. The result emphasizes the middle of your data period most heavily, like a triangle shape, which makes it super stable and reliable for spotting the big trend. It's slower to react than a regular average, but that's the trade-off for being so smooth and dependable.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 7/Triangular_Moving_Average.txt","hasFullInfo":true},{"id":150,"title":"Visvalingam-Whyatt Algorithm","filename":"Visvalingam_Whyatt_Algorithm.txt","group":"group 7","groupNum":7,"categoryId":14,"categoryTitle":"14. GEOMETRIC & PATTERN FILTERS","subcategory":"General","summary":"Area-based simplification","overview":"The Visvalingam-Whyatt algorithm is an area-based curve simplification method that progressively removes points by calculating the triangular area formed by each point and its neighbors. Points forming the smallest triangular areas are eliminated first, as they contribute least to the overall shape of the curve.","formula":"VW Process:\n1. For each point, calculate area of triangle formed with adjacent neighbors\n2. Remove point with smallest triangular area\n3. Recalculate areas for affected neighbors\n4. Repeat until desired number of points remain or minimum area threshold reached\n5. Result preserves perceptually important features\n\nArea Calculation:\nArea = 0.5 * |x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2)|","parameters":"","intuition":"The Visvalingam-Whyatt algorithm simplifies your price chart by removing the points that matter least. Think of it like editing a photo - you want to keep the important details but remove the unnecessary clutter. The algorithm looks at each price point and asks \"how much does this really add to the picture?\" If a point creates only a tiny triangle with its neighbors, it's probably just noise and gets removed. This leaves you with the meaningful price swings while filtering out the irrelevant bumps.","rawContent":"The Visvalingam-Whyatt algorithm is an area-based curve simplification method that progressively removes points by calculating the triangular area formed by each point and its neighbors. Points forming the smallest triangular areas are eliminated first, as they contribute least to the overall shape of the curve.\n\nVW Process:\n1. For each point, calculate area of triangle formed with adjacent neighbors\n2. Remove point with smallest triangular area\n3. Recalculate areas for affected neighbors\n4. Repeat until desired number of points remain or minimum area threshold reached\n5. Result preserves perceptually important features\n\nArea Calculation:\nArea = 0.5 * |x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2)|\n\nThe Visvalingam-Whyatt algorithm simplifies your price chart by removing the points that matter least. Think of it like editing a photo - you want to keep the important details but remove the unnecessary clutter. The algorithm looks at each price point and asks \"how much does this really add to the picture?\" If a point creates only a tiny triangle with its neighbors, it's probably just noise and gets removed. This leaves you with the meaningful price swings while filtering out the irrelevant bumps.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 7/Visvalingam_Whyatt_Algorithm.txt","hasFullInfo":true},{"id":151,"title":"6-Tap Low-Pass FIR Filter","filename":"6_Tap_Low_Pass_FIR_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Ehlers' favorite filter","overview":"The 6-Tap Low-Pass FIR Filter is John Ehlers' preferred simple smoothing filter, using six coefficients to achieve a good balance between lag reduction and noise filtering. It's specifically designed for financial data, providing better phase response than traditional moving averages while remaining computationally efficient.","formula":"In trading, this filter is a practical workhorse for smoothing price data, indicators, and oscillators without excessive lag, making it suitable for trend following and signal generation in real-time applications.\n\nMathematical representation:\ny[i] = a₀*x[i] + a₁*x[i-1] + a₂*x[i-2] + a₃*x[i-3] + a₄*x[i-4] + a₅*x[i-5]\n\nEhlers' recommended coefficients:\na₀ = 0.166\na₁ = 0.300\na₂ = 0.300\na₃ = 0.166\na₄ = 0.050\na₅ = 0.018\n\nSum of coefficients = 1.000 (unity gain at DC)\n\nAlternative normalized form:\nWeights: [1, 1.8, 1.8, 1, 0.3, 0.11]\nDivided by sum = 5.01\n\nProperties:\n- 6 taps (uses last 6 data points)\n- Symmetric coefficients (linear phase)\n- ~3-bar group delay\n- Cutoff frequency ≈ 0.15-0.20 (normalized)\n\nFrequency response:\n|H(f)| = |Σ(n=0 to 5) aₙ * e^(-j2πfn)|","parameters":"","intuition":"The 6-tap filter is like Ehlers' \"goldilocks\" solution - not too simple (like a 3-point average), not too complex (like a 20-tap optimal filter), but just right for most trading applications. Six carefully chosen weights give you solid smoothing without drowning in lag.","rawContent":"The 6-Tap Low-Pass FIR Filter is John Ehlers' preferred simple smoothing filter, using six coefficients to achieve a good balance between lag reduction and noise filtering. It's specifically designed for financial data, providing better phase response than traditional moving averages while remaining computationally efficient.\n\nIn trading, this filter is a practical workhorse for smoothing price data, indicators, and oscillators without excessive lag, making it suitable for trend following and signal generation in real-time applications.\n\nMathematical representation:\ny[i] = a₀*x[i] + a₁*x[i-1] + a₂*x[i-2] + a₃*x[i-3] + a₄*x[i-4] + a₅*x[i-5]\n\nEhlers' recommended coefficients:\na₀ = 0.166\na₁ = 0.300\na₂ = 0.300\na₃ = 0.166\na₄ = 0.050\na₅ = 0.018\n\nSum of coefficients = 1.000 (unity gain at DC)\n\nAlternative normalized form:\nWeights: [1, 1.8, 1.8, 1, 0.3, 0.11]\nDivided by sum = 5.01\n\nProperties:\n- 6 taps (uses last 6 data points)\n- Symmetric coefficients (linear phase)\n- ~3-bar group delay\n- Cutoff frequency ≈ 0.15-0.20 (normalized)\n\nFrequency response:\n|H(f)| = |Σ(n=0 to 5) aₙ * e^(-j2πfn)|\n\nThe 6-tap filter is like Ehlers' \"goldilocks\" solution - not too simple (like a 3-point average), not too complex (like a 20-tap optimal filter), but just right for most trading applications. Six carefully chosen weights give you solid smoothing without drowning in lag.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/6_Tap_Low_Pass_FIR_Filter.txt","hasFullInfo":true},{"id":152,"title":"Adjustable Lag FIR Filter","filename":"Adjustable_Lag_FIR_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Configurable lag reduction","overview":"An Adjustable Lag FIR filter is designed with configurable phase characteristics, allowing you to trade off between lag reduction and filtering performance. Unlike fixed FIR designs, it includes parameters to control how much phase delay the filter introduces, enabling optimization for specific applications where some lag is acceptable in exchange for better noise reduction.","formula":"In trading, adjustable lag filters let you fine-tune the balance between signal responsiveness (low lag for fast entries/exits) and noise rejection (more lag but cleaner signals), making them adaptable to different market conditions and trading timeframes.\n\nMathematical representation:\nGeneral form with lag parameter α:\ny[i] = Σ(n=0 to N) h[n,α] * x[i-n+offset(α)]","parameters":"Where:\n- α ∈ [0,1] controls lag/responsiveness tradeoff\n- offset(α) adjusts the filter delay\n- h[n,α] are α-dependent coefficients\n\nTypical implementation:\nh[n,α] = (1-α)*h_standard[n] + α*h_zerophase[n]\n\nPhase response:\nφ(ω,α) = -ω*τ(α)\n\nWhere τ(α) is the adjustable group delay:\nτ(α) = τ_max * (1-α)\n\nParameters:\n- α = 0: maximum lag, best filtering\n- α = 1: minimum lag, less filtering\n- 0 < α < 1: intermediate tradeoff\n\nFrequency-domain adjustment:\nH(ω,α) = |H(ω)| * e^(-jω*τ(α))","intuition":"An adjustable lag filter is like a car's suspension settings - you can dial it from \"comfort\" (smooth ride, slow response) to \"sport\" (harsher but more responsive). Turn the knob toward less lag when you need faster signals, or toward more filtering when the market is noisy.","rawContent":"An Adjustable Lag FIR filter is designed with configurable phase characteristics, allowing you to trade off between lag reduction and filtering performance. Unlike fixed FIR designs, it includes parameters to control how much phase delay the filter introduces, enabling optimization for specific applications where some lag is acceptable in exchange for better noise reduction.\n\nIn trading, adjustable lag filters let you fine-tune the balance between signal responsiveness (low lag for fast entries/exits) and noise rejection (more lag but cleaner signals), making them adaptable to different market conditions and trading timeframes.\n\nMathematical representation:\nGeneral form with lag parameter α:\ny[i] = Σ(n=0 to N) h[n,α] * x[i-n+offset(α)]\n\nWhere:\n- α ∈ [0,1] controls lag/responsiveness tradeoff\n- offset(α) adjusts the filter delay\n- h[n,α] are α-dependent coefficients\n\nTypical implementation:\nh[n,α] = (1-α)*h_standard[n] + α*h_zerophase[n]\n\nPhase response:\nφ(ω,α) = -ω*τ(α)\n\nWhere τ(α) is the adjustable group delay:\nτ(α) = τ_max * (1-α)\n\nParameters:\n- α = 0: maximum lag, best filtering\n- α = 1: minimum lag, less filtering\n- 0 < α < 1: intermediate tradeoff\n\nFrequency-domain adjustment:\nH(ω,α) = |H(ω)| * e^(-jω*τ(α))\n\nAn adjustable lag filter is like a car's suspension settings - you can dial it from \"comfort\" (smooth ride, slow response) to \"sport\" (harsher but more responsive). Turn the knob toward less lag when you need faster signals, or toward more filtering when the market is noisy.","tags":["DSP Filtering","Zero-Lag"],"relPath":"public/concept-list/list-concepts/group 8/Adjustable_Lag_FIR_Filter.txt","hasFullInfo":true},{"id":153,"title":"Bandpass Filter Array (8-50 Period Parallel Filters)","filename":"Bandpass_Filter_Array.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Passes frequencies within range","overview":"A Bandpass Filter Array consists of multiple bandpass filters running in parallel, each tuned to a different frequency (period), creating a complete spectral decomposition of the input signal. The array typically covers a range from 8 to 50 bars, allowing simultaneous extraction of all potentially relevant cycle components.","formula":"In trading, filter arrays enable comprehensive spectrum analysis, heat map visualization of cycle activity, and multi-frequency signal processing, revealing which cycle periods are currently active and their relative strengths.\n\nMathematical representation:\n\nFor each period P in range [8, 50]:\nδₚ = exp(-BW/2)\nβₚ = 2*δₚ*cos(2π/P)\n\nBPₚ[i] = 0.5*(1-δₚ)*(x[i] - x[i-2]) + βₚ*BPₚ[i-1] - δₚ²*BPₚ[i-2]\n\nArray structure:\nBP₈[i], BP₉[i], BP₁₀[i], ..., BP₄₉[i], BP₅₀[i]\n\nTypical implementation:\n- 43 parallel filters (periods 8-50)\n- Fixed bandwidth (e.g., BW = 0.3 for all)\n- Simultaneous computation each bar\n\nOutput analysis:\nPower[P,i] = BPₚ[i]²\nSpectrum[i] = {Power[8,i], Power[9,i], ..., Power[50,i]}\n\nApplications:\n1. Spectrum visualization: plot Power vs Period\n2. Heat map: color-code Power[P,i] over time\n3. Dominant period: P_max = argmax(Power[P,i])\n4. Multi-frequency trading: combine signals from different P\n\nComputation optimization:\n- Pre-calculate δₚ and βₚ for all periods\n- Vectorize when possible\n- Update all filters each bar","parameters":"","intuition":"A bandpass array is like having 43 radio receivers, each tuned to a different frequency, all listening simultaneously. You get a complete picture of which \"stations\" (cycle periods) are broadcasting strongly right now, creating a real-time spectrum analyzer for market cycles.","rawContent":"A Bandpass Filter Array consists of multiple bandpass filters running in parallel, each tuned to a different frequency (period), creating a complete spectral decomposition of the input signal. The array typically covers a range from 8 to 50 bars, allowing simultaneous extraction of all potentially relevant cycle components.\n\nIn trading, filter arrays enable comprehensive spectrum analysis, heat map visualization of cycle activity, and multi-frequency signal processing, revealing which cycle periods are currently active and their relative strengths.\n\nMathematical representation:\n\nFor each period P in range [8, 50]:\nδₚ = exp(-BW/2)\nβₚ = 2*δₚ*cos(2π/P)\n\nBPₚ[i] = 0.5*(1-δₚ)*(x[i] - x[i-2]) + βₚ*BPₚ[i-1] - δₚ²*BPₚ[i-2]\n\nArray structure:\nBP₈[i], BP₉[i], BP₁₀[i], ..., BP₄₉[i], BP₅₀[i]\n\nTypical implementation:\n- 43 parallel filters (periods 8-50)\n- Fixed bandwidth (e.g., BW = 0.3 for all)\n- Simultaneous computation each bar\n\nOutput analysis:\nPower[P,i] = BPₚ[i]²\nSpectrum[i] = {Power[8,i], Power[9,i], ..., Power[50,i]}\n\nApplications:\n1. Spectrum visualization: plot Power vs Period\n2. Heat map: color-code Power[P,i] over time\n3. Dominant period: P_max = argmax(Power[P,i])\n4. Multi-frequency trading: combine signals from different P\n\nComputation optimization:\n- Pre-calculate δₚ and βₚ for all periods\n- Vectorize when possible\n- Update all filters each bar\n\nA bandpass array is like having 43 radio receivers, each tuned to a different frequency, all listening simultaneously. You get a complete picture of which \"stations\" (cycle periods) are broadcasting strongly right now, creating a real-time spectrum analyzer for market cycles.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Bandpass_Filter_Array.txt","hasFullInfo":true},{"id":154,"title":"Band-pass Filter","filename":"Band_pass_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Passes frequencies within range","overview":"A Band-pass Filter allows frequencies within a specified range to pass through while attenuating frequencies outside that range (both lower and higher). It combines the characteristics of a high-pass and low-pass filter to isolate a specific frequency band of interest, making it essential for cycle extraction and spectral analysis.","formula":"In trading, band-pass filters are used to isolate dominant market cycles, extract periodic components from price data, and build cycle-based indicators that focus on specific timeframe oscillations while removing both trend and high-frequency noise.\n\nMathematical representation:\nIdeal band-pass response:\n       ⎧ 1  if f₁ ≤ |f| ≤ f₂\nH(f) = ⎨\n       ⎩ 0  otherwise\n\nWhere f₁ = lower cutoff, f₂ = upper cutoff\n\nIIR implementation (cascade):\nH(s) = H_highpass(s) * H_lowpass(s)\n\nOr direct 2nd-order band-pass:\nH(s) = (s*BW) / (s² + s*BW + ω₀²)","parameters":"Where:\n- ω₀ = √(ω₁ω₂) = center frequency  \n- BW = ω₂ - ω₁ = bandwidth\n- Q = ω₀/BW = quality factor (selectivity)\n\nDigital (bilinear transform):\nH(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)\n\nOutput:\ny[i] = b₀*x[i] + b₁*x[i-1] + b₂*x[i-2] - a₁*y[i-1] - a₂*y[i-2]\n\nParameters:\n- Center period or frequency\n- Bandwidth (narrow = specific cycle, wide = range of cycles)\n- Q factor (higher = more selective)","intuition":"A band-pass filter is like a radio tuner - you dial in to a specific \"station\" (cycle period) and it lets through just that frequency range while blocking everything else. Perfect for extracting the 20-day cycle from price data while ignoring the long-term trend and daily noise.","rawContent":"A Band-pass Filter allows frequencies within a specified range to pass through while attenuating frequencies outside that range (both lower and higher). It combines the characteristics of a high-pass and low-pass filter to isolate a specific frequency band of interest, making it essential for cycle extraction and spectral analysis.\n\nIn trading, band-pass filters are used to isolate dominant market cycles, extract periodic components from price data, and build cycle-based indicators that focus on specific timeframe oscillations while removing both trend and high-frequency noise.\n\nMathematical representation:\nIdeal band-pass response:\n       ⎧ 1  if f₁ ≤ |f| ≤ f₂\nH(f) = ⎨\n       ⎩ 0  otherwise\n\nWhere f₁ = lower cutoff, f₂ = upper cutoff\n\nIIR implementation (cascade):\nH(s) = H_highpass(s) * H_lowpass(s)\n\nOr direct 2nd-order band-pass:\nH(s) = (s*BW) / (s² + s*BW + ω₀²)\n\nWhere:\n- ω₀ = √(ω₁ω₂) = center frequency  \n- BW = ω₂ - ω₁ = bandwidth\n- Q = ω₀/BW = quality factor (selectivity)\n\nDigital (bilinear transform):\nH(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)\n\nOutput:\ny[i] = b₀*x[i] + b₁*x[i-1] + b₂*x[i-2] - a₁*y[i-1] - a₂*y[i-2]\n\nParameters:\n- Center period or frequency\n- Bandwidth (narrow = specific cycle, wide = range of cycles)\n- Q factor (higher = more selective)\n\nA band-pass filter is like a radio tuner - you dial in to a specific \"station\" (cycle period) and it lets through just that frequency range while blocking everything else. Perfect for extracting the 20-day cycle from price data while ignoring the long-term trend and daily noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Band_pass_Filter.txt","hasFullInfo":true},{"id":155,"title":"Band-stop (Notch) Filter","filename":"Band_stop_Notch_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Rejects specific frequency","overview":"A Band-stop Filter (also called a Notch Filter or Band-reject Filter) attenuates frequencies within a specified range while passing all frequencies outside that range. It's the inverse of a band-pass filter, used to remove unwanted periodic components, interference, or specific cycle periods from a signal.","formula":"In trading, notch filters can remove known market cycles (like weekly or monthly periodicities), eliminate calendar-based patterns, or suppress specific oscillation frequencies that represent noise rather than useful signal.\n\nMathematical representation:\nIdeal band-stop response:\n       ⎧ 0  if f₁ ≤ |f| ≤ f₂\nH(f) = ⎨\n       ⎩ 1  otherwise\n\nWhere f₁ = lower cutoff, f₂ = upper cutoff\n\n2nd-order notch filter:\nH(s) = (s² + ω₀²) / (s² + s*BW + ω₀²)","parameters":"Where:\n- ω₀ = notch center frequency\n- BW = notch bandwidth\n- Q = ω₀/BW = notch selectivity (higher = narrower notch)\n\nDigital implementation:\nH(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)\n\nCoefficients for notch at ωₙ:\nb₀ = 1\nb₁ = -2cos(ωₙ)\nb₂ = 1\na₁ = -2r*cos(ωₙ)\na₂ = r²\n\nWhere r < 1 controls notch width (r closer to 1 = narrower notch)\n\nOutput:\ny[i] = b₀*x[i] + b₁*x[i-1] + b₂*x[i-2] - a₁*y[i-1] - a₂*y[i-2]","intuition":"A notch filter is like noise-canceling headphones for a specific frequency - if you know there's an annoying 30-day cycle in your data that's just calendar-based noise, you can surgically remove exactly that frequency while keeping everything else intact. It's a frequency scalpel.","rawContent":"A Band-stop Filter (also called a Notch Filter or Band-reject Filter) attenuates frequencies within a specified range while passing all frequencies outside that range. It's the inverse of a band-pass filter, used to remove unwanted periodic components, interference, or specific cycle periods from a signal.\n\nIn trading, notch filters can remove known market cycles (like weekly or monthly periodicities), eliminate calendar-based patterns, or suppress specific oscillation frequencies that represent noise rather than useful signal.\n\nMathematical representation:\nIdeal band-stop response:\n       ⎧ 0  if f₁ ≤ |f| ≤ f₂\nH(f) = ⎨\n       ⎩ 1  otherwise\n\nWhere f₁ = lower cutoff, f₂ = upper cutoff\n\n2nd-order notch filter:\nH(s) = (s² + ω₀²) / (s² + s*BW + ω₀²)\n\nWhere:\n- ω₀ = notch center frequency\n- BW = notch bandwidth\n- Q = ω₀/BW = notch selectivity (higher = narrower notch)\n\nDigital implementation:\nH(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²)\n\nCoefficients for notch at ωₙ:\nb₀ = 1\nb₁ = -2cos(ωₙ)\nb₂ = 1\na₁ = -2r*cos(ωₙ)\na₂ = r²\n\nWhere r < 1 controls notch width (r closer to 1 = narrower notch)\n\nOutput:\ny[i] = b₀*x[i] + b₁*x[i-1] + b₂*x[i-2] - a₁*y[i-1] - a₂*y[i-2]\n\nA notch filter is like noise-canceling headphones for a specific frequency - if you know there's an annoying 30-day cycle in your data that's just calendar-based noise, you can surgically remove exactly that frequency while keeping everything else intact. It's a frequency scalpel.","tags":["DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 8/Band_stop_Notch_Filter.txt","hasFullInfo":true},{"id":156,"title":"Bessel Filter","filename":"Bessel_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Linear phase response","overview":"A Bessel filter (also called a Thomson filter) is optimized for linear phase response, meaning it preserves the shape and timing relationships of signals in the passband better than any other classical filter design. While it has a slower rolloff than Butterworth, Chebyshev, or Elliptic filters, it introduces minimal phase distortion, making it ideal when signal shape preservation is more important than aggressive noise rejection.","formula":"In trading, Bessel filters are valuable for preserving the exact timing and shape of price patterns, trends, and reversals without introducing the phase distortion that can shift signals in time.\n\nMathematical representation:\nH(s) = θn(0) / θn(s/ωc)","parameters":"Where:\n- θn(s) = reverse Bessel polynomial of order n\n- θn(0) = normalization constant\n- ωc = cutoff frequency\n\nBessel polynomials are recursively defined:\nθ0(s) = 1\nθ1(s) = s + 1  \nθn(s) = (2n-1)θn-1(s) + s²θn-2(s)\n\nKey characteristic: maximally flat group delay (constant time delay across passband frequencies).\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...","intuition":"A Bessel filter is like a careful curator moving art - it doesn't block as aggressively as other filters, but everything that gets through arrives at exactly the right time with its original shape perfectly preserved. If you need to see price patterns without any time-shifting or shape distortion, Bessel is your filter.","rawContent":"A Bessel filter (also called a Thomson filter) is optimized for linear phase response, meaning it preserves the shape and timing relationships of signals in the passband better than any other classical filter design. While it has a slower rolloff than Butterworth, Chebyshev, or Elliptic filters, it introduces minimal phase distortion, making it ideal when signal shape preservation is more important than aggressive noise rejection.\n\nIn trading, Bessel filters are valuable for preserving the exact timing and shape of price patterns, trends, and reversals without introducing the phase distortion that can shift signals in time.\n\nMathematical representation:\nH(s) = θn(0) / θn(s/ωc)\n\nWhere:\n- θn(s) = reverse Bessel polynomial of order n\n- θn(0) = normalization constant\n- ωc = cutoff frequency\n\nBessel polynomials are recursively defined:\nθ0(s) = 1\nθ1(s) = s + 1  \nθn(s) = (2n-1)θn-1(s) + s²θn-2(s)\n\nKey characteristic: maximally flat group delay (constant time delay across passband frequencies).\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nA Bessel filter is like a careful curator moving art - it doesn't block as aggressively as other filters, but everything that gets through arrives at exactly the right time with its original shape perfectly preserved. If you need to see price patterns without any time-shifting or shape distortion, Bessel is your filter.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Bessel_Filter.txt","hasFullInfo":true},{"id":157,"title":"Biorthogonal Wavelets (bior)","filename":"Biorthogonal_Wavelets.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"Linear phase wavelets","overview":"Biorthogonal wavelets relax the orthogonality constraint to achieve perfect symmetry in both decomposition and reconstruction. Unlike orthogonal wavelets, biorthogonal wavelets use different filters for analysis (decomposition) and synthesis (reconstruction), enabling linear phase response while maintaining perfect reconstruction.","formula":"In trading, biorthogonal wavelets provide zero phase distortion, ensuring that features (peaks, valleys, breakouts) appear at their exact temporal locations without shift, critical for precise timing in entry/exit signals and pattern recognition.\n\nMathematical representation:\n\nDual scaling and wavelet functions:\nAnalysis: φ̃(t), ψ̃(t) with filters h̃, g̃\nSynthesis: φ(t), ψ(t) with filters h, g\n\nBiorthogonality condition:\n⟨φ̃(t-k), φ(t-l)⟩ = δₖₗ\n⟨ψ̃(t-k), ψ(t-l)⟩ = δₖₗ\n\nPerfect reconstruction:\nH(z)H̃(z⁻¹) + G(z)G̃(z⁻¹) = 2\n\nCommon families:\n- bior1.1: Haar (symmetric)\n- bior1.3: 1 vanishing moment (decomp), 3 (recon)\n- bior2.2: 2 vanishing moments each (popular)\n- bior3.3: 3 vanishing moments each\n- bior4.4: 4 vanishing moments each (very smooth)\n- bior6.8: 6 (decomp), 8 (recon) - asymmetric coefficients\n\nDecomposition (analysis):\nAⱼ[i] = Σ h̃ₖAⱼ₊₁[2i-k]\nDⱼ[i] = Σ g̃ₖAⱼ₊₁[2i-k]\n\nReconstruction (synthesis):\nAⱼ₊₁[i] = Σ hₖ(Aⱼ[k] + Dⱼ[k])\n\nProperties:\n- Linear phase (symmetric filters)\n- No temporal shift\n- Flexible vanishing moments\n- Perfect reconstruction guaranteed\n\nBiorthogonal wavelets are like using different lenses for looking (analysis) and projecting (synthesis) - this flexibility lets you have perfect symmetry (no time shift) which is impossible with orthogonal wavelets. When you detect a price peak, it appears at its exact true time.","parameters":"","intuition":"","rawContent":"Biorthogonal wavelets relax the orthogonality constraint to achieve perfect symmetry in both decomposition and reconstruction. Unlike orthogonal wavelets, biorthogonal wavelets use different filters for analysis (decomposition) and synthesis (reconstruction), enabling linear phase response while maintaining perfect reconstruction.\n\nIn trading, biorthogonal wavelets provide zero phase distortion, ensuring that features (peaks, valleys, breakouts) appear at their exact temporal locations without shift, critical for precise timing in entry/exit signals and pattern recognition.\n\nMathematical representation:\n\nDual scaling and wavelet functions:\nAnalysis: φ̃(t), ψ̃(t) with filters h̃, g̃\nSynthesis: φ(t), ψ(t) with filters h, g\n\nBiorthogonality condition:\n⟨φ̃(t-k), φ(t-l)⟩ = δₖₗ\n⟨ψ̃(t-k), ψ(t-l)⟩ = δₖₗ\n\nPerfect reconstruction:\nH(z)H̃(z⁻¹) + G(z)G̃(z⁻¹) = 2\n\nCommon families:\n- bior1.1: Haar (symmetric)\n- bior1.3: 1 vanishing moment (decomp), 3 (recon)\n- bior2.2: 2 vanishing moments each (popular)\n- bior3.3: 3 vanishing moments each\n- bior4.4: 4 vanishing moments each (very smooth)\n- bior6.8: 6 (decomp), 8 (recon) - asymmetric coefficients\n\nDecomposition (analysis):\nAⱼ[i] = Σ h̃ₖAⱼ₊₁[2i-k]\nDⱼ[i] = Σ g̃ₖAⱼ₊₁[2i-k]\n\nReconstruction (synthesis):\nAⱼ₊₁[i] = Σ hₖ(Aⱼ[k] + Dⱼ[k])\n\nProperties:\n- Linear phase (symmetric filters)\n- No temporal shift\n- Flexible vanishing moments\n- Perfect reconstruction guaranteed\n\nBiorthogonal wavelets are like using different lenses for looking (analysis) and projecting (synthesis) - this flexibility lets you have perfect symmetry (no time shift) which is impossible with orthogonal wavelets. When you detect a price peak, it appears at its exact true time.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Biorthogonal_Wavelets.txt","hasFullInfo":true},{"id":158,"title":"Butterworth Filter (Type I)","filename":"Butterworth_Filter_Type_I.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Maximally flat passband","overview":"A Butterworth filter is a type of signal processing filter designed to have a frequency response that is as flat as possible in the passband (the range of frequencies you want to keep). It's called \"maximally flat\" because it has no ripples in the passband, making it ideal for applications where you want smooth, predictable filtering without distortion in the frequencies you care about.","formula":"In trading, a Butterworth filter can be used to smooth price data while removing high-frequency noise. Type I refers to the standard configuration with passband flatness optimization.\n\nMathematical representation:\nH(s) = 1 / (1 + (s/ωc)^(2n))","parameters":"Where:\n- H(s) = transfer function\n- ωc = cutoff frequency\n- n = filter order (higher order = steeper rolloff)\n\nFor discrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nWhere coefficients a and b are derived from the continuous transfer function using bilinear transform or impulse invariance method.","intuition":"A Butterworth filter is like a gentle bouncer at a club - it lets all the \"good\" frequencies through unchanged, and smoothly turns away the \"bad\" high-frequency noise without creating weird echoes or distortions. Unlike other filters that might have bumps in what they let through, Butterworth keeps everything perfectly smooth in the passband.","rawContent":"A Butterworth filter is a type of signal processing filter designed to have a frequency response that is as flat as possible in the passband (the range of frequencies you want to keep). It's called \"maximally flat\" because it has no ripples in the passband, making it ideal for applications where you want smooth, predictable filtering without distortion in the frequencies you care about.\n\nIn trading, a Butterworth filter can be used to smooth price data while removing high-frequency noise. Type I refers to the standard configuration with passband flatness optimization.\n\nMathematical representation:\nH(s) = 1 / (1 + (s/ωc)^(2n))\n\nWhere:\n- H(s) = transfer function\n- ωc = cutoff frequency\n- n = filter order (higher order = steeper rolloff)\n\nFor discrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nWhere coefficients a and b are derived from the continuous transfer function using bilinear transform or impulse invariance method.\n\nA Butterworth filter is like a gentle bouncer at a club - it lets all the \"good\" frequencies through unchanged, and smoothly turns away the \"bad\" high-frequency noise without creating weird echoes or distortions. Unlike other filters that might have bumps in what they let through, Butterworth keeps everything perfectly smooth in the passband.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Butterworth_Filter_Type_I.txt","hasFullInfo":true},{"id":159,"title":"Butterworth Filter (Type II)","filename":"Butterworth_Filter_Type_II.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Maximally flat passband","overview":"A Butterworth Type II filter (also called an inverse Chebyshev filter) is designed to have a maximally flat passband like Type I, but achieves a steeper rolloff by allowing ripples in the stopband (the frequencies you want to block) instead of the passband. This makes it useful when you need sharper frequency separation while maintaining clean signal preservation in the passband.","formula":"In trading applications, Type II can provide better noise rejection than Type I while keeping the desired price movements smooth and undistorted.\n\nMathematical representation:\nH(s) = εn / (εn + (ωc/s)^(2n))","parameters":"Where:\n- εn = ripple factor in stopband\n- ωc = cutoff frequency  \n- n = filter order\n\nThe key difference from Type I is the inverted frequency term (ωc/s) which creates zeros at finite frequencies, producing the stopband ripples while maintaining passband flatness.\n\nDiscrete implementation follows similar structure to Type I:\ny[i] = a0*x[i] + a1*x[i-1] + ... - b1*y[i-1] - b2*y[i-2] - ...","intuition":"Think of Type II Butterworth as a more aggressive bouncer - it still lets all the good frequencies through perfectly smooth, but it creates a sharper barrier against the unwanted noise. Instead of a gentle slope rejecting bad frequencies, it builds a steeper wall, though that wall might have some small ripples on the \"rejected\" side.","rawContent":"A Butterworth Type II filter (also called an inverse Chebyshev filter) is designed to have a maximally flat passband like Type I, but achieves a steeper rolloff by allowing ripples in the stopband (the frequencies you want to block) instead of the passband. This makes it useful when you need sharper frequency separation while maintaining clean signal preservation in the passband.\n\nIn trading applications, Type II can provide better noise rejection than Type I while keeping the desired price movements smooth and undistorted.\n\nMathematical representation:\nH(s) = εn / (εn + (ωc/s)^(2n))\n\nWhere:\n- εn = ripple factor in stopband\n- ωc = cutoff frequency  \n- n = filter order\n\nThe key difference from Type I is the inverted frequency term (ωc/s) which creates zeros at finite frequencies, producing the stopband ripples while maintaining passband flatness.\n\nDiscrete implementation follows similar structure to Type I:\ny[i] = a0*x[i] + a1*x[i-1] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nThink of Type II Butterworth as a more aggressive bouncer - it still lets all the good frequencies through perfectly smooth, but it creates a sharper barrier against the unwanted noise. Instead of a gentle slope rejecting bad frequencies, it builds a steeper wall, though that wall might have some small ripples on the \"rejected\" side.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Butterworth_Filter_Type_II.txt","hasFullInfo":true},{"id":160,"title":"Chebyshev Filter (Type I)","filename":"Chebyshev_Filter_Type_I.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Equiripple passband/stopband","overview":"A Chebyshev Type I filter is designed to achieve a steeper rolloff (faster transition from passband to stopband) than a Butterworth filter of the same order, but at the cost of allowing equiripple (small, uniform oscillations) in the passband. This makes it suitable when you need aggressive noise filtering and can tolerate slight distortion in the signal you're preserving.","formula":"In trading, Chebyshev Type I can provide sharper separation between trend and noise, though the passband ripples may introduce minor artifacts in the filtered price data.\n\nMathematical representation:\n|H(ω)| = 1 / sqrt(1 + ε²Tn²(ω/ωc))","parameters":"Where:\n- ε = ripple factor (controls passband ripple amplitude)\n- Tn = Chebyshev polynomial of order n\n- ωc = cutoff frequency\n- Ripple amplitude = 1/(1+ε²)\n\nChebyshev polynomials: T0(x)=1, T1(x)=x, Tn(x)=2xTn-1(x)-Tn-2(x)\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nCoefficients are derived from pole locations on an ellipse rather than a circle (as in Butterworth).","intuition":"Chebyshev Type I is like a very strict bouncer with a slightly wavy red carpet - you get a much sharper separation between who's allowed in and who isn't, but the people who do get in might experience small bumps as they walk through. It cuts off noise faster than Butterworth, but adds tiny ripples to what it lets through.","rawContent":"A Chebyshev Type I filter is designed to achieve a steeper rolloff (faster transition from passband to stopband) than a Butterworth filter of the same order, but at the cost of allowing equiripple (small, uniform oscillations) in the passband. This makes it suitable when you need aggressive noise filtering and can tolerate slight distortion in the signal you're preserving.\n\nIn trading, Chebyshev Type I can provide sharper separation between trend and noise, though the passband ripples may introduce minor artifacts in the filtered price data.\n\nMathematical representation:\n|H(ω)| = 1 / sqrt(1 + ε²Tn²(ω/ωc))\n\nWhere:\n- ε = ripple factor (controls passband ripple amplitude)\n- Tn = Chebyshev polynomial of order n\n- ωc = cutoff frequency\n- Ripple amplitude = 1/(1+ε²)\n\nChebyshev polynomials: T0(x)=1, T1(x)=x, Tn(x)=2xTn-1(x)-Tn-2(x)\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nCoefficients are derived from pole locations on an ellipse rather than a circle (as in Butterworth).\n\nChebyshev Type I is like a very strict bouncer with a slightly wavy red carpet - you get a much sharper separation between who's allowed in and who isn't, but the people who do get in might experience small bumps as they walk through. It cuts off noise faster than Butterworth, but adds tiny ripples to what it lets through.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Chebyshev_Filter_Type_I.txt","hasFullInfo":true},{"id":161,"title":"Chebyshev Filter (Type II)","filename":"Chebyshev_Filter_Type_II.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Equiripple passband/stopband","overview":"A Chebyshev Type II filter (also called an Inverse Chebyshev filter) is designed with a flat passband and equiripple in the stopband, providing a compromise between Butterworth's smooth response and Chebyshev Type I's sharp rolloff. It achieves steeper rolloff than Butterworth while avoiding passband distortion, making it ideal when signal fidelity is critical but aggressive noise rejection is still needed.","formula":"In trading applications, Type II preserves price signal integrity while providing superior high-frequency noise rejection compared to Butterworth filters.\n\nMathematical representation:\n|H(ω)| = 1 / sqrt(1 + 1/(ε²Tn²(ωs/ω)))","parameters":"Where:\n- ε = controls stopband ripple amplitude\n- Tn = Chebyshev polynomial of order n\n- ωs = stopband edge frequency\n- Stopband attenuation = ε²\n\nKey characteristics:\n- Monotonic passband (no ripples)\n- Equiripple stopband\n- Zeros at finite frequencies (unlike Type I)\n- Slower rolloff than Type I, faster than Butterworth\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...","intuition":"Think of Chebyshev Type II as the best of both worlds - a perfectly smooth red carpet for those allowed in (flat passband), but a wall with ripples on the outside that still blocks unwanted guests more effectively than Butterworth. You get clean signal preservation with better noise rejection than a basic filter.","rawContent":"A Chebyshev Type II filter (also called an Inverse Chebyshev filter) is designed with a flat passband and equiripple in the stopband, providing a compromise between Butterworth's smooth response and Chebyshev Type I's sharp rolloff. It achieves steeper rolloff than Butterworth while avoiding passband distortion, making it ideal when signal fidelity is critical but aggressive noise rejection is still needed.\n\nIn trading applications, Type II preserves price signal integrity while providing superior high-frequency noise rejection compared to Butterworth filters.\n\nMathematical representation:\n|H(ω)| = 1 / sqrt(1 + 1/(ε²Tn²(ωs/ω)))\n\nWhere:\n- ε = controls stopband ripple amplitude\n- Tn = Chebyshev polynomial of order n\n- ωs = stopband edge frequency\n- Stopband attenuation = ε²\n\nKey characteristics:\n- Monotonic passband (no ripples)\n- Equiripple stopband\n- Zeros at finite frequencies (unlike Type I)\n- Slower rolloff than Type I, faster than Butterworth\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nThink of Chebyshev Type II as the best of both worlds - a perfectly smooth red carpet for those allowed in (flat passband), but a wall with ripples on the outside that still blocks unwanted guests more effectively than Butterworth. You get clean signal preservation with better noise rejection than a basic filter.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Chebyshev_Filter_Type_II.txt","hasFullInfo":true},{"id":162,"title":"Coiflets (coif1-coif5)","filename":"Coiflets.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"Scaling function symmetry","overview":"Coiflets are a family of orthogonal wavelets designed by Daubechies at the request of Ronald Coifman. They have vanishing moments for both the wavelet function AND the scaling function, making them more symmetric than standard Daubechies wavelets and providing better approximation properties with fewer coefficients.","formula":"In trading, Coiflets excel at representing both smooth trends (via scaling function) and sharp changes (via wavelet function) with high fidelity, making them ideal for detecting regime changes and multi-scale price analysis where both smooth and abrupt features matter.\n\nMathematical representation:\n\nBoth scaling and wavelet functions have vanishing moments:\n∫ tᵏφ(t)dt = 0 for k = 1, 2, ..., 2N-1\n∫ tᵏψ(t)dt = 0 for k = 0, 1, ..., 2N-1\n\nStandard relations:\nφ(t) = √2 Σ hₖφ(2t - k)\nψ(t) = √2 Σ gₖφ(2t - k)\n\nProperties by order:\n- coif1: 6 coefficients, 2 vanishing moments (wavelet), 2 (scaling)\n- coif2: 12 coefficients, 4 vanishing moments each\n- coif3: 18 coefficients, 6 vanishing moments each\n- coif4: 24 coefficients, 8 vanishing moments each\n- coif5: 30 coefficients, 10 vanishing moments each\n\nKey advantages:\n- Nearly symmetric (better than Daubechies)\n- Scaling function approximates delta function well\n- Excellent for numerical analysis\n- Good time-frequency localization\n\nFilter length: 6N coefficients for coifN\n\nDecomposition:\nApproximation: Aⱼ[i] = Σ hₖAⱼ₊₁[2i-k]\nDetail: Dⱼ[i] = Σ gₖAⱼ₊₁[2i-k]\n\nCoiflets are like premium Daubechies wavelets - they cost more (more coefficients) but both the \"trend extractor\" (scaling function) and \"detail extractor\" (wavelet function) are high-quality and nearly symmetric. You get excellent representation of both smooth trends and sharp reversals simultaneously.","parameters":"","intuition":"","rawContent":"Coiflets are a family of orthogonal wavelets designed by Daubechies at the request of Ronald Coifman. They have vanishing moments for both the wavelet function AND the scaling function, making them more symmetric than standard Daubechies wavelets and providing better approximation properties with fewer coefficients.\n\nIn trading, Coiflets excel at representing both smooth trends (via scaling function) and sharp changes (via wavelet function) with high fidelity, making them ideal for detecting regime changes and multi-scale price analysis where both smooth and abrupt features matter.\n\nMathematical representation:\n\nBoth scaling and wavelet functions have vanishing moments:\n∫ tᵏφ(t)dt = 0 for k = 1, 2, ..., 2N-1\n∫ tᵏψ(t)dt = 0 for k = 0, 1, ..., 2N-1\n\nStandard relations:\nφ(t) = √2 Σ hₖφ(2t - k)\nψ(t) = √2 Σ gₖφ(2t - k)\n\nProperties by order:\n- coif1: 6 coefficients, 2 vanishing moments (wavelet), 2 (scaling)\n- coif2: 12 coefficients, 4 vanishing moments each\n- coif3: 18 coefficients, 6 vanishing moments each\n- coif4: 24 coefficients, 8 vanishing moments each\n- coif5: 30 coefficients, 10 vanishing moments each\n\nKey advantages:\n- Nearly symmetric (better than Daubechies)\n- Scaling function approximates delta function well\n- Excellent for numerical analysis\n- Good time-frequency localization\n\nFilter length: 6N coefficients for coifN\n\nDecomposition:\nApproximation: Aⱼ[i] = Σ hₖAⱼ₊₁[2i-k]\nDetail: Dⱼ[i] = Σ gₖAⱼ₊₁[2i-k]\n\nCoiflets are like premium Daubechies wavelets - they cost more (more coefficients) but both the \"trend extractor\" (scaling function) and \"detail extractor\" (wavelet function) are high-quality and nearly symmetric. You get excellent representation of both smooth trends and sharp reversals simultaneously.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Coiflets.txt","hasFullInfo":true},{"id":163,"title":"Complex Morlet Wavelet","filename":"Complex_Morlet_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Continuous Wavelets","summary":"Complex Gaussian-windowed sinusoid","overview":"The Complex Morlet wavelet is the complex-valued version of the Morlet wavelet, preserving both amplitude and phase information through its complex structure. This enables extraction of instantaneous amplitude, frequency, and phase from signals, making it the gold standard for time-frequency analysis.","formula":"In trading, the Complex Morlet wavelet provides complete cycle information - not just \"is there a cycle,\" but \"what's its amplitude, exact frequency, and where are we in its phase\" - enabling precise cycle timing for entries/exits and phase-based trading strategies.\n\nMathematical representation:\n\nStandard form:\nψ(t) = π^(-1/4) · e^(iω₀t) · e^(-t²/2)\n\nAdmissibility-corrected form:\nψ(t) = π^(-1/4) · (e^(iω₀t) - e^(-ω₀²/2)) · e^(-t²/2)\n\nWhere ω₀ is central frequency (typically 5-7)\n\nComplex wavelet transform:\nW(a,b) = (1/√a) ∫ x(t) · ψ*((t-b)/a) dt\n\nReturns complex value: W(a,b) = A(a,b)e^(iφ(a,b))\n\nExtracting information:\n- Amplitude: A(a,b) = |W(a,b)| = √(Re² + Im²)\n- Phase: φ(a,b) = arg(W(a,b)) = atan2(Im, Re)\n- Instantaneous frequency: f(a,b) = -d/db[φ(a,b)]/(2π)\n\nScale-to-period relationship:\nPeriod = a · (2π/ω₀)\n\nFor ω₀ = 6:\nPeriod ≈ a (direct correspondence)\n\nProperties:\n- Complex-valued output\n- Phase information preserved\n- Excellent time-frequency localization\n- Non-orthogonal\n- Gaussian envelope (not compact)\n\nApplications:\n1. Cycle amplitude: track cycle strength over time\n2. Phase analysis: where are we in cycle (0°=trough, 180°=peak)\n3. Frequency tracking: monitor cycle period evolution\n4. Phase-based signals: buy at -90°, sell at +90°","parameters":"","intuition":"The Complex Morlet is like having both an amplitude meter and a protractor - you can measure how strong a cycle is (amplitude) and exactly where you are in its rotation (phase). Essential for \"the 20-day cycle has amplitude $5 and we're at 270° (about to trough).\"","rawContent":"The Complex Morlet wavelet is the complex-valued version of the Morlet wavelet, preserving both amplitude and phase information through its complex structure. This enables extraction of instantaneous amplitude, frequency, and phase from signals, making it the gold standard for time-frequency analysis.\n\nIn trading, the Complex Morlet wavelet provides complete cycle information - not just \"is there a cycle,\" but \"what's its amplitude, exact frequency, and where are we in its phase\" - enabling precise cycle timing for entries/exits and phase-based trading strategies.\n\nMathematical representation:\n\nStandard form:\nψ(t) = π^(-1/4) · e^(iω₀t) · e^(-t²/2)\n\nAdmissibility-corrected form:\nψ(t) = π^(-1/4) · (e^(iω₀t) - e^(-ω₀²/2)) · e^(-t²/2)\n\nWhere ω₀ is central frequency (typically 5-7)\n\nComplex wavelet transform:\nW(a,b) = (1/√a) ∫ x(t) · ψ*((t-b)/a) dt\n\nReturns complex value: W(a,b) = A(a,b)e^(iφ(a,b))\n\nExtracting information:\n- Amplitude: A(a,b) = |W(a,b)| = √(Re² + Im²)\n- Phase: φ(a,b) = arg(W(a,b)) = atan2(Im, Re)\n- Instantaneous frequency: f(a,b) = -d/db[φ(a,b)]/(2π)\n\nScale-to-period relationship:\nPeriod = a · (2π/ω₀)\n\nFor ω₀ = 6:\nPeriod ≈ a (direct correspondence)\n\nProperties:\n- Complex-valued output\n- Phase information preserved\n- Excellent time-frequency localization\n- Non-orthogonal\n- Gaussian envelope (not compact)\n\nApplications:\n1. Cycle amplitude: track cycle strength over time\n2. Phase analysis: where are we in cycle (0°=trough, 180°=peak)\n3. Frequency tracking: monitor cycle period evolution\n4. Phase-based signals: buy at -90°, sell at +90°\n\nThe Complex Morlet is like having both an amplitude meter and a protractor - you can measure how strong a cycle is (amplitude) and exactly where you are in its rotation (phase). Essential for \"the 20-day cycle has amplitude $5 and we're at 270° (about to trough).\"","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Complex_Morlet_Wavelet.txt","hasFullInfo":true},{"id":164,"title":"Daubechies Wavelets (db1-db20)","filename":"Daubechies_Wavelets.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"Orthogonal compactly supported","overview":"Daubechies wavelets are a family of orthogonal, compactly supported wavelets discovered by Ingrid Daubechies. They are characterized by maximum number of vanishing moments for a given support width, making them excellent for representing polynomial trends. The family ranges from db1 (Haar wavelet) to db20, with higher numbers providing smoother wavelets and better frequency localization.","formula":"In trading, Daubechies wavelets enable multi-scale decomposition of price data, revealing trend and cycle components at different timeframes simultaneously, essential for multi-resolution market analysis and feature extraction.\n\nMathematical representation:\n\nWavelet function ψ(t) and scaling function φ(t) satisfy:\nφ(t) = √2 Σ hₖφ(2t - k)\nψ(t) = √2 Σ gₖφ(2t - k)\n\nWhere hₖ are low-pass filter coefficients, gₖ are high-pass coefficients:\ngₖ = (-1)ᵏh₁₋ₖ\n\nProperties by order:\n- db1: 2 coefficients, Haar wavelet (square wave)\n- db2: 4 coefficients, 2 vanishing moments\n- db4: 8 coefficients, 4 vanishing moments\n- db10: 20 coefficients, 10 vanishing moments\n- db20: 40 coefficients, 20 vanishing moments\n\nDecomposition:\nApproximation: Aⱼ = Σ hₖAⱼ₊₁[2i-k]\nDetail: Dⱼ = Σ gₖAⱼ₊₁[2i-k]\n\nWhere j is decomposition level (j=0 is original signal)\n\nVanishing moments: N\n- dbN has N vanishing moments\n- Can exactly represent polynomials of degree N-1\n- Higher N = smoother wavelet, better for smooth data\n\nCompact support: 2N-1 coefficients\n\nDaubechies wavelets are like adjustable microscopes for time series - db1 is a basic magnifying glass (crude), db4 is a decent microscope (good detail), and db20 is an electron microscope (extremely fine detail). Higher numbers see smoother features but need more data points.","parameters":"","intuition":"","rawContent":"Daubechies wavelets are a family of orthogonal, compactly supported wavelets discovered by Ingrid Daubechies. They are characterized by maximum number of vanishing moments for a given support width, making them excellent for representing polynomial trends. The family ranges from db1 (Haar wavelet) to db20, with higher numbers providing smoother wavelets and better frequency localization.\n\nIn trading, Daubechies wavelets enable multi-scale decomposition of price data, revealing trend and cycle components at different timeframes simultaneously, essential for multi-resolution market analysis and feature extraction.\n\nMathematical representation:\n\nWavelet function ψ(t) and scaling function φ(t) satisfy:\nφ(t) = √2 Σ hₖφ(2t - k)\nψ(t) = √2 Σ gₖφ(2t - k)\n\nWhere hₖ are low-pass filter coefficients, gₖ are high-pass coefficients:\ngₖ = (-1)ᵏh₁₋ₖ\n\nProperties by order:\n- db1: 2 coefficients, Haar wavelet (square wave)\n- db2: 4 coefficients, 2 vanishing moments\n- db4: 8 coefficients, 4 vanishing moments\n- db10: 20 coefficients, 10 vanishing moments\n- db20: 40 coefficients, 20 vanishing moments\n\nDecomposition:\nApproximation: Aⱼ = Σ hₖAⱼ₊₁[2i-k]\nDetail: Dⱼ = Σ gₖAⱼ₊₁[2i-k]\n\nWhere j is decomposition level (j=0 is original signal)\n\nVanishing moments: N\n- dbN has N vanishing moments\n- Can exactly represent polynomials of degree N-1\n- Higher N = smoother wavelet, better for smooth data\n\nCompact support: 2N-1 coefficients\n\nDaubechies wavelets are like adjustable microscopes for time series - db1 is a basic magnifying glass (crude), db4 is a decent microscope (good detail), and db20 is an electron microscope (extremely fine detail). Higher numbers see smoother features but need more data points.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Daubechies_Wavelets.txt","hasFullInfo":true},{"id":165,"title":"Discrete Meyer Wavelet (dmey)","filename":"Discrete_Meyer_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"FIR approximation","overview":"The Discrete Meyer wavelet is an FIR approximation of the continuous Meyer wavelet, designed to have excellent frequency localization while remaining compactly supported in the frequency domain. It provides smooth, band-limited characteristics with minimal oscillation, making it ideal for spectral analysis.","formula":"In trading, the Discrete Meyer wavelet excels at frequency-domain decomposition, cleanly separating different cycle periods with minimal inter-frequency contamination, useful for multi-timeframe analysis and cycle-based trading systems.\n\nMathematical representation:\n\nFrequency domain definition:\nThe Meyer wavelet is defined in frequency domain with smooth transitions:\n\n⎧ 1                           for |ω| ≤ 2π/3\nΦ̂(ω) = ⎨ cos(π/2 · ν(3|ω|/2π - 1))  for 2π/3 ≤ |ω| ≤ 4π/3\n       ⎩ 0                           for |ω| ≥ 4π/3\n\nΨ̂(ω) = e^(-iω/2) sin(π/2 · ν(3|ω|/2π - 1))  for 2π/3 ≤ |ω| ≤ 4π/3\n\nWhere ν(x) is a smooth function:\nν(x) = x⁴(35 - 84x + 70x² - 20x³)  for x ∈ [0,1]\n\nProperties:\n- Infinite differentiability (C^∞)\n- Compact support in frequency domain\n- Band-limited (perfect frequency separation)\n- FIR implementation with 102 coefficients\n- Orthogonal\n- Symmetric\n\nDecomposition:\nUses standard DWT structure:\nAⱼ[i] = Σ hₖAⱼ₊₁[2i-k]\nDⱼ[i] = Σ gₖAⱼ₊₁[2i-k]\n\nAdvantages:\n- Excellent frequency separation\n- No frequency overlap between scales\n- Smooth in both time and frequency\n- Good for spectral analysis\n\nDisadvantages:\n- Long filter (102 taps)\n- More computation than Daubechies\n- Not ideal for sharp transitions","parameters":"","intuition":"Discrete Meyer is like a professional audio engineer's frequency splitter - it divides the spectrum into perfectly clean bands with no bleeding between them. Each scale gets its own isolated frequency range, making it ideal for analyzing which cycle periods are active without cross-contamination.","rawContent":"The Discrete Meyer wavelet is an FIR approximation of the continuous Meyer wavelet, designed to have excellent frequency localization while remaining compactly supported in the frequency domain. It provides smooth, band-limited characteristics with minimal oscillation, making it ideal for spectral analysis.\n\nIn trading, the Discrete Meyer wavelet excels at frequency-domain decomposition, cleanly separating different cycle periods with minimal inter-frequency contamination, useful for multi-timeframe analysis and cycle-based trading systems.\n\nMathematical representation:\n\nFrequency domain definition:\nThe Meyer wavelet is defined in frequency domain with smooth transitions:\n\n       ⎧ 1                           for |ω| ≤ 2π/3\nΦ̂(ω) = ⎨ cos(π/2 · ν(3|ω|/2π - 1))  for 2π/3 ≤ |ω| ≤ 4π/3\n       ⎩ 0                           for |ω| ≥ 4π/3\n\nΨ̂(ω) = e^(-iω/2) sin(π/2 · ν(3|ω|/2π - 1))  for 2π/3 ≤ |ω| ≤ 4π/3\n\nWhere ν(x) is a smooth function:\nν(x) = x⁴(35 - 84x + 70x² - 20x³)  for x ∈ [0,1]\n\nProperties:\n- Infinite differentiability (C^∞)\n- Compact support in frequency domain\n- Band-limited (perfect frequency separation)\n- FIR implementation with 102 coefficients\n- Orthogonal\n- Symmetric\n\nDecomposition:\nUses standard DWT structure:\nAⱼ[i] = Σ hₖAⱼ₊₁[2i-k]\nDⱼ[i] = Σ gₖAⱼ₊₁[2i-k]\n\nAdvantages:\n- Excellent frequency separation\n- No frequency overlap between scales\n- Smooth in both time and frequency\n- Good for spectral analysis\n\nDisadvantages:\n- Long filter (102 taps)\n- More computation than Daubechies\n- Not ideal for sharp transitions\n\nDiscrete Meyer is like a professional audio engineer's frequency splitter - it divides the spectrum into perfectly clean bands with no bleeding between them. Each scale gets its own isolated frequency range, making it ideal for analyzing which cycle periods are active without cross-contamination.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Discrete_Meyer_Wavelet.txt","hasFullInfo":true},{"id":166,"title":"Dominant Cycle-Tuned Bandpass Filter","filename":"Dominant_Cycle_Tuned_Bandpass_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Passes frequencies within range","overview":"A Dominant Cycle-Tuned Bandpass Filter automatically adjusts its center frequency and bandwidth based on the measured dominant cycle period in the market. This creates an adaptive filter that tracks changing market periodicities, ensuring the filter always isolates the currently active cycle component.","formula":"In trading, cycle-tuned bandpass filters provide automatic adaptation to changing market conditions, extracting the most relevant cyclical component without manual parameter adjustment, essential for building robust cycle-based trading systems.\n\nMathematical representation:\n\nStep 1: Measure dominant cycle period (using autocorrelation, DFT, or Hilbert):\nDominantPeriod[i] = MeasuredPeriod\n\nStep 2: Calculate adaptive bandpass parameters:\nCenterPeriod = DominantPeriod[i]\nBandwidth = 0.3 * CenterPeriod (typically 20-40% of center)\n\nω₀ = 2π/CenterPeriod\nBW = 2π/Bandwidth\nδ = exp(-BW/2)\nβ = 2*δ*cos(ω₀)\n\nStep 3: Apply bandpass filter:\nBP[i] = 0.5*(1-δ)*(x[i] - x[i-2]) + β*BP[i-1] - δ²*BP[i-2]\n\nAlternative form using Q factor:\nQ = CenterPeriod/Bandwidth\nα = (cos(2π/CenterPeriod) + sin(2π/CenterPeriod) - 1) / cos(2π/CenterPeriod)\n\nBP[i] = 0.5*(1-α)*(x[i] - x[i-2]) + (1-α)*BP[i-1] - (1-α)²*BP[i-2]\n\nProperties:\n- Center frequency tracks dominant cycle\n- Bandwidth scales with center period\n- Automatic adaptation to market regime\n- Continuous re-tuning as cycles evolve","parameters":"","intuition":"A cycle-tuned bandpass is like a radio that automatically finds the strongest station - instead of being stuck on one frequency, it constantly scans to find whatever cycle is currently dominating the market (maybe 20-day cycle today, 35-day next week) and tunes itself to extract that component.","rawContent":"A Dominant Cycle-Tuned Bandpass Filter automatically adjusts its center frequency and bandwidth based on the measured dominant cycle period in the market. This creates an adaptive filter that tracks changing market periodicities, ensuring the filter always isolates the currently active cycle component.\n\nIn trading, cycle-tuned bandpass filters provide automatic adaptation to changing market conditions, extracting the most relevant cyclical component without manual parameter adjustment, essential for building robust cycle-based trading systems.\n\nMathematical representation:\n\nStep 1: Measure dominant cycle period (using autocorrelation, DFT, or Hilbert):\nDominantPeriod[i] = MeasuredPeriod\n\nStep 2: Calculate adaptive bandpass parameters:\nCenterPeriod = DominantPeriod[i]\nBandwidth = 0.3 * CenterPeriod (typically 20-40% of center)\n\nω₀ = 2π/CenterPeriod\nBW = 2π/Bandwidth\nδ = exp(-BW/2)\nβ = 2*δ*cos(ω₀)\n\nStep 3: Apply bandpass filter:\nBP[i] = 0.5*(1-δ)*(x[i] - x[i-2]) + β*BP[i-1] - δ²*BP[i-2]\n\nAlternative form using Q factor:\nQ = CenterPeriod/Bandwidth\nα = (cos(2π/CenterPeriod) + sin(2π/CenterPeriod) - 1) / cos(2π/CenterPeriod)\n\nBP[i] = 0.5*(1-α)*(x[i] - x[i-2]) + (1-α)*BP[i-1] - (1-α)²*BP[i-2]\n\nProperties:\n- Center frequency tracks dominant cycle\n- Bandwidth scales with center period\n- Automatic adaptation to market regime\n- Continuous re-tuning as cycles evolve\n\nA cycle-tuned bandpass is like a radio that automatically finds the strongest station - instead of being stuck on one frequency, it constantly scans to find whatever cycle is currently dominating the market (maybe 20-day cycle today, 35-day next week) and tunes itself to extract that component.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 8/Dominant_Cycle_Tuned_Bandpass_Filter.txt","hasFullInfo":true},{"id":167,"title":"Elliptic Filter (Cauer)","filename":"Elliptic_Filter_Cauer.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Steepest roll-off","overview":"An Elliptic filter (also known as a Cauer filter) provides the steepest possible rolloff for a given filter order by allowing equiripple in both the passband AND stopband. This makes it the most efficient filter design when you need maximum frequency separation with minimum filter order, though at the cost of distortion in both passed and rejected frequency ranges.","formula":"In trading, Elliptic filters can achieve aggressive noise filtering with lower computational cost (fewer filter taps) than other designs, useful for real-time applications where processing speed matters.\n\nMathematical representation:\n|H(ω)|² = 1 / (1 + ε²Rn²(ω/ωc))","parameters":"Where:\n- ε = passband ripple factor\n- Rn = Elliptic rational function (ratio of Jacobi elliptic functions)\n- ωc = cutoff frequency\n\nKey parameters:\n- Passband ripple: δp\n- Stopband attenuation: δs\n- Passband edge: ωp\n- Stopband edge: ωs\n\nThe filter achieves minimum order for given specifications:\nN ≈ K(k)K(√(1-k₁²)) / (K(k₁)K(√(1-k²)))\n\nWhere K = complete elliptic integral, k and k₁ are elliptic moduli.\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nElliptic filters are like the most aggressive bouncer possible - they create the sharpest line between who gets in and who doesn't, but both the approved guests experience some bumps (passband ripple) and the rejected ones aren't completely blocked (stopband ripple). You get maximum separation with minimum effort, but at the cost of small distortions everywhere.","intuition":"","rawContent":"An Elliptic filter (also known as a Cauer filter) provides the steepest possible rolloff for a given filter order by allowing equiripple in both the passband AND stopband. This makes it the most efficient filter design when you need maximum frequency separation with minimum filter order, though at the cost of distortion in both passed and rejected frequency ranges.\n\nIn trading, Elliptic filters can achieve aggressive noise filtering with lower computational cost (fewer filter taps) than other designs, useful for real-time applications where processing speed matters.\n\nMathematical representation:\n|H(ω)|² = 1 / (1 + ε²Rn²(ω/ωc))\n\nWhere:\n- ε = passband ripple factor\n- Rn = Elliptic rational function (ratio of Jacobi elliptic functions)\n- ωc = cutoff frequency\n\nKey parameters:\n- Passband ripple: δp\n- Stopband attenuation: δs\n- Passband edge: ωp\n- Stopband edge: ωs\n\nThe filter achieves minimum order for given specifications:\nN ≈ K(k)K(√(1-k₁²)) / (K(k₁)K(√(1-k²)))\n\nWhere K = complete elliptic integral, k and k₁ are elliptic moduli.\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nElliptic filters are like the most aggressive bouncer possible - they create the sharpest line between who gets in and who doesn't, but both the approved guests experience some bumps (passband ripple) and the rejected ones aren't completely blocked (stopband ripple). You get maximum separation with minimum effort, but at the cost of small distortions everywhere.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Elliptic_Filter_Cauer.txt","hasFullInfo":true},{"id":168,"title":"Empirical Mode Decomposition (EMD)","filename":"Empirical_Mode_Decomposition.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Data-driven decomposition","overview":"Empirical Mode Decomposition is a data-adaptive method that decomposes a signal into intrinsic mode functions (IMFs) through an iterative sifting process. Unlike Fourier or wavelet transforms, EMD doesn't use predefined basis functions - it extracts modes directly from the data based on local time-scale characteristics.","formula":"In trading, EMD automatically separates price data into trend and multiple oscillatory components at different timescales without requiring prior knowledge of cycle periods, making it robust for non-stationary markets with evolving dynamics.\n\nMathematical representation:\n\nSifting algorithm:\n1. Identify all local maxima and minima in x(t)\n2. Interpolate maxima → upper envelope e_max(t)\n3. Interpolate minima → lower envelope e_min(t)  \n4. Calculate mean: m(t) = [e_max(t) + e_min(t)]/2\n5. Extract detail: h(t) = x(t) - m(t)\n6. Check IMF criteria:\n   - Number of extrema ≈ number of zero crossings\n   - Mean of envelopes ≈ 0\n7. If not IMF, repeat with h(t) as new x(t)\n8. If IMF, store as IMF₁ and repeat on residual r(t) = x(t) - IMF₁\n\nComplete decomposition:\nx(t) = Σ IMFᵢ(t) + r(t)","parameters":"Where:\n- IMF₁: highest frequency component\n- IMF_n: lowest frequency component\n- r(t): final trend/residual\n\nIMF properties:\n- Mono-component (single oscillatory mode)\n- Symmetric envelopes around zero\n- Locally adaptive frequency\n- Amplitude and frequency modulation allowed\n\nStopping criteria:\n- SD (standard deviation) < threshold (typically 0.2-0.3)\n- Fixed number of sifting iterations\n- Cauchy convergence\n\nApplications in trading:\n1. Trend extraction: sum of low-frequency IMFs\n2. Cycle identification: middle-frequency IMFs\n3. Noise removal: discard high-frequency IMFs\n4. Multi-timeframe analysis: each IMF represents different timescale","intuition":"EMD is like peeling an onion - you iteratively extract the fastest wiggle (highest frequency IMF), then from what's left extract the next fastest, continuing until only smooth trend remains. Completely automatic, adapts to whatever oscillations exist in the data.","rawContent":"Empirical Mode Decomposition is a data-adaptive method that decomposes a signal into intrinsic mode functions (IMFs) through an iterative sifting process. Unlike Fourier or wavelet transforms, EMD doesn't use predefined basis functions - it extracts modes directly from the data based on local time-scale characteristics.\n\nIn trading, EMD automatically separates price data into trend and multiple oscillatory components at different timescales without requiring prior knowledge of cycle periods, making it robust for non-stationary markets with evolving dynamics.\n\nMathematical representation:\n\nSifting algorithm:\n1. Identify all local maxima and minima in x(t)\n2. Interpolate maxima → upper envelope e_max(t)\n3. Interpolate minima → lower envelope e_min(t)  \n4. Calculate mean: m(t) = [e_max(t) + e_min(t)]/2\n5. Extract detail: h(t) = x(t) - m(t)\n6. Check IMF criteria:\n   - Number of extrema ≈ number of zero crossings\n   - Mean of envelopes ≈ 0\n7. If not IMF, repeat with h(t) as new x(t)\n8. If IMF, store as IMF₁ and repeat on residual r(t) = x(t) - IMF₁\n\nComplete decomposition:\nx(t) = Σ IMFᵢ(t) + r(t)\n\nWhere:\n- IMF₁: highest frequency component\n- IMF_n: lowest frequency component\n- r(t): final trend/residual\n\nIMF properties:\n- Mono-component (single oscillatory mode)\n- Symmetric envelopes around zero\n- Locally adaptive frequency\n- Amplitude and frequency modulation allowed\n\nStopping criteria:\n- SD (standard deviation) < threshold (typically 0.2-0.3)\n- Fixed number of sifting iterations\n- Cauchy convergence\n\nApplications in trading:\n1. Trend extraction: sum of low-frequency IMFs\n2. Cycle identification: middle-frequency IMFs\n3. Noise removal: discard high-frequency IMFs\n4. Multi-timeframe analysis: each IMF represents different timescale\n\nEMD is like peeling an onion - you iteratively extract the fastest wiggle (highest frequency IMF), then from what's left extract the next fastest, continuing until only smooth trend remains. Completely automatic, adapts to whatever oscillations exist in the data.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Empirical_Mode_Decomposition.txt","hasFullInfo":true},{"id":169,"title":"Empirical Mode Decomposition Indicator","filename":"Empirical_Mode_Decomposition_Indicator.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Trading-specific EMD","overview":"The Empirical Mode Decomposition Indicator is a trading-specific implementation of EMD that extracts and visualizes the most relevant intrinsic mode functions (IMFs) for decision-making. It typically displays the trend component, primary cycle component, and sometimes a combined oscillator derived from higher-frequency IMFs.","formula":"In trading, the EMD Indicator provides clean trend-cycle separation for simultaneous trend-following and mean-reversion strategies, showing when to trade with trend (using low-frequency IMFs) versus counter-trend (using mid-frequency oscillations).\n\nMathematical representation:\n\nStandard EMD decomposition:\nPrice(t) = Σ IMF_i(t) + Residual(t)\n\nTypical IMF allocation:\n- IMF₁ + IMF₂: noise (discard or short-term oscillator)\n- IMF₃ + IMF₄: primary trading cycle\n- IMF₅ + IMF₆: secondary cycle / swing component  \n- Residual: trend component\n\nIndicator components:\n\n1. Trend Line:\nTrend(t) = Σ_{i=k}^{n} IMF_i(t) + Residual(t)\nWhere k ≈ 5-7 (captures slow movements)\n\n2. Cycle Oscillator:\nCycle(t) = IMF_j(t)  or  Σ_{i=3}^{5} IMF_i(t)\nWhere j is dominant cycle IMF\n\n3. Fast Oscillator:\nFast(t) = IMF₁(t) + IMF₂(t)\nHigh-frequency component\n\nSignal generation:\n\nTrend signals:\n- Buy: Price crosses above Trend\n- Sell: Price crosses below Trend\n\nCycle signals:\n- Buy: Cycle at trough (minimum)\n- Sell: Cycle at peak (maximum)\n\nCombined strategy:\n- Trend filter: only buy if Trend rising, sell if Trend falling\n- Entry timing: Cycle extremes aligned with trend\n\nImplementation parameters:\n- Sifting iterations: 10-50\n- Stopping SD: 0.2-0.3\n- IMF grouping: empirical (chart inspection)","parameters":"","intuition":"The EMD Indicator is like having multiple timeframe analysis built into one tool - the trend line shows where the market is heading long-term, the cycle oscillator shows the swing/mean-reversion component, and combining them creates a comprehensive multi-scale trading framework.","rawContent":"The Empirical Mode Decomposition Indicator is a trading-specific implementation of EMD that extracts and visualizes the most relevant intrinsic mode functions (IMFs) for decision-making. It typically displays the trend component, primary cycle component, and sometimes a combined oscillator derived from higher-frequency IMFs.\n\nIn trading, the EMD Indicator provides clean trend-cycle separation for simultaneous trend-following and mean-reversion strategies, showing when to trade with trend (using low-frequency IMFs) versus counter-trend (using mid-frequency oscillations).\n\nMathematical representation:\n\nStandard EMD decomposition:\nPrice(t) = Σ IMF_i(t) + Residual(t)\n\nTypical IMF allocation:\n- IMF₁ + IMF₂: noise (discard or short-term oscillator)\n- IMF₃ + IMF₄: primary trading cycle\n- IMF₅ + IMF₆: secondary cycle / swing component  \n- Residual: trend component\n\nIndicator components:\n\n1. Trend Line:\nTrend(t) = Σ_{i=k}^{n} IMF_i(t) + Residual(t)\nWhere k ≈ 5-7 (captures slow movements)\n\n2. Cycle Oscillator:\nCycle(t) = IMF_j(t)  or  Σ_{i=3}^{5} IMF_i(t)\nWhere j is dominant cycle IMF\n\n3. Fast Oscillator:\nFast(t) = IMF₁(t) + IMF₂(t)\nHigh-frequency component\n\nSignal generation:\n\nTrend signals:\n- Buy: Price crosses above Trend\n- Sell: Price crosses below Trend\n\nCycle signals:\n- Buy: Cycle at trough (minimum)\n- Sell: Cycle at peak (maximum)\n\nCombined strategy:\n- Trend filter: only buy if Trend rising, sell if Trend falling\n- Entry timing: Cycle extremes aligned with trend\n\nImplementation parameters:\n- Sifting iterations: 10-50\n- Stopping SD: 0.2-0.3\n- IMF grouping: empirical (chart inspection)\n\nThe EMD Indicator is like having multiple timeframe analysis built into one tool - the trend line shows where the market is heading long-term, the cycle oscillator shows the swing/mean-reversion component, and combining them creates a comprehensive multi-scale trading framework.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Empirical_Mode_Decomposition_Indicator.txt","hasFullInfo":true},{"id":170,"title":"Ensemble EMD (EEMD)","filename":"Ensemble_EMD.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Noise-assisted EMD","overview":"Ensemble Empirical Mode Decomposition (EEMD) improves upon standard EMD by addressing mode mixing through noise-assisted decomposition. It adds white noise to the signal, performs EMD multiple times, then averages the results, using the statistical properties of noise to achieve better mode separation and more consistent decomposition.","formula":"In trading, EEMD provides more robust cycle extraction than standard EMD, reducing artifacts from mode mixing (when single IMF contains multiple frequencies), essential for reliable trend-cycle separation and consistent signal generation across different market conditions.\n\nMathematical representation:\n\nAlgorithm:\n1. Initialize ensemble: N trials\n2. For trial i = 1 to N:\n   a. Add white noise: xᵢ(t) = x(t) + εᵢ(t)\n      Where εᵢ ~ N(0, σ²), typically σ = 0.1-0.2 × std(x)\n\nb. Apply EMD to xᵢ(t):\n      xᵢ(t) = Σⱼ IMFᵢⱼ(t) + rᵢ(t)\n\n3. Ensemble average each mode:\n   IMFⱼ(t) = (1/N) Σᵢ₌₁ᴺ IMFᵢⱼ(t)\n\nFinal decomposition:\nx(t) = Σⱼ IMFⱼ(t) + r̄(t)\n\nNoise cancellation property:\nE[εᵢ] = 0 → noise averages out over ensemble\nE[IMFⱼ] → true mode (statistical consistency)\n\nParamete","parameters":"rs:\n- N: ensemble size (typically 100-1000 trials)\n- σ: noise amplitude (0.1-0.3 × signal std)\n- Stopping criteria: same as EMD\n\nAdvantages over EMD:\n- Eliminates mode mixing\n- More consistent decomposition\n- Better separation of similar frequencies\n- Statistical robustness\n- Reproducible results\n\nComputational cost:\nO(N × EMD_cost)\nTrade-off: accuracy vs computation time\n\nVariations:\n- CEEMDAN: Complete EEMD with Adaptive Noise\n- ICEEMDAN: Improved CEEMDAN\n- Both offer better noise cancellation","intuition":"EEMD is like taking 100 slightly noisy photos and averaging them to get one perfect image - each EMD run with added noise gives slightly different modes, but the true signal components consistently emerge while noise and mixing artifacts average away. More reliable than single EMD, especially for complex markets.","rawContent":"Ensemble Empirical Mode Decomposition (EEMD) improves upon standard EMD by addressing mode mixing through noise-assisted decomposition. It adds white noise to the signal, performs EMD multiple times, then averages the results, using the statistical properties of noise to achieve better mode separation and more consistent decomposition.\n\nIn trading, EEMD provides more robust cycle extraction than standard EMD, reducing artifacts from mode mixing (when single IMF contains multiple frequencies), essential for reliable trend-cycle separation and consistent signal generation across different market conditions.\n\nMathematical representation:\n\nAlgorithm:\n1. Initialize ensemble: N trials\n2. For trial i = 1 to N:\n   a. Add white noise: xᵢ(t) = x(t) + εᵢ(t)\n      Where εᵢ ~ N(0, σ²), typically σ = 0.1-0.2 × std(x)\n   \n   b. Apply EMD to xᵢ(t):\n      xᵢ(t) = Σⱼ IMFᵢⱼ(t) + rᵢ(t)\n   \n3. Ensemble average each mode:\n   IMFⱼ(t) = (1/N) Σᵢ₌₁ᴺ IMFᵢⱼ(t)\n\nFinal decomposition:\nx(t) = Σⱼ IMFⱼ(t) + r̄(t)\n\nNoise cancellation property:\nE[εᵢ] = 0 → noise averages out over ensemble\nE[IMFⱼ] → true mode (statistical consistency)\n\nParameters:\n- N: ensemble size (typically 100-1000 trials)\n- σ: noise amplitude (0.1-0.3 × signal std)\n- Stopping criteria: same as EMD\n\nAdvantages over EMD:\n- Eliminates mode mixing\n- More consistent decomposition\n- Better separation of similar frequencies\n- Statistical robustness\n- Reproducible results\n\nComputational cost:\nO(N × EMD_cost)\nTrade-off: accuracy vs computation time\n\nVariations:\n- CEEMDAN: Complete EEMD with Adaptive Noise\n- ICEEMDAN: Improved CEEMDAN\n- Both offer better noise cancellation\n\nEEMD is like taking 100 slightly noisy photos and averaging them to get one perfect image - each EMD run with added noise gives slightly different modes, but the true signal components consistently emerge while noise and mixing artifacts average away. More reliable than single EMD, especially for complex markets.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Ensemble_EMD.txt","hasFullInfo":true},{"id":171,"title":"Equiripple FIR Filter","filename":"Equiripple_FIR_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Uniform ripple in passband/stopband","overview":"An Equiripple FIR filter is characterized by having equal-magnitude ripples in the passband and/or stopband, representing the optimal Chebyshev approximation to a desired frequency response. This design distributes the approximation error uniformly across frequency bands, achieving better performance than window-based FIR designs of the same length.","formula":"In trading, equiripple filters provide superior frequency separation compared to windowed FIR filters while maintaining the stability and linear phase benefits of FIR structures, useful for precise cycle isolation and noise rejection.\n\nMathematical representation:\nThe filter minimizes maximum deviation:\nmin max|E(ω)| where E(ω) = W(ω)[Hd(ω) - H(ω)]\n\nFrequency response:\nH(ω) = Σ(n=0 to N) h[n]cos(ωn)  (for symmetric linear-phase)\n\nAlternation theorem: Optimal filter has at least (N+2)/2 + 1 alternation points where error reaches ±max|E(ω)|.\n\nCharacteristics:\n- Ripple magnitude δp in passband\n- Ripple magnitude δs in stopband  \n- Related by: δp/δs = Wp/Ws (weight ratio)\n\nTypical specifications:\n- Passband: [0, ωp] with ripple ±δp\n- Transition: [ωp, ωs]\n- Stopband: [ωs, π] with ripple ±δs\n\nFilter order estimate:\nN ≈ (-10log₁₀(δpδs) - 13) / (14.6Δω)\nWhere Δω = ωs - ωp (transition width)","parameters":"","intuition":"Equiripple is like a perfectly balanced seesaw - instead of having one big error spike somewhere, it spreads the small unavoidable errors evenly across the entire frequency range. Every ripple is exactly the same size, making it the most efficient use of your filter coefficients.","rawContent":"An Equiripple FIR filter is characterized by having equal-magnitude ripples in the passband and/or stopband, representing the optimal Chebyshev approximation to a desired frequency response. This design distributes the approximation error uniformly across frequency bands, achieving better performance than window-based FIR designs of the same length.\n\nIn trading, equiripple filters provide superior frequency separation compared to windowed FIR filters while maintaining the stability and linear phase benefits of FIR structures, useful for precise cycle isolation and noise rejection.\n\nMathematical representation:\nThe filter minimizes maximum deviation:\nmin max|E(ω)| where E(ω) = W(ω)[Hd(ω) - H(ω)]\n\nFrequency response:\nH(ω) = Σ(n=0 to N) h[n]cos(ωn)  (for symmetric linear-phase)\n\nAlternation theorem: Optimal filter has at least (N+2)/2 + 1 alternation points where error reaches ±max|E(ω)|.\n\nCharacteristics:\n- Ripple magnitude δp in passband\n- Ripple magnitude δs in stopband  \n- Related by: δp/δs = Wp/Ws (weight ratio)\n\nTypical specifications:\n- Passband: [0, ωp] with ripple ±δp\n- Transition: [ωp, ωs]\n- Stopband: [ωs, π] with ripple ±δs\n\nFilter order estimate:\nN ≈ (-10log₁₀(δpδs) - 13) / (14.6Δω)\nWhere Δω = ωs - ωp (transition width)\n\nEquiripple is like a perfectly balanced seesaw - instead of having one big error spike somewhere, it spreads the small unavoidable errors evenly across the entire frequency range. Every ripple is exactly the same size, making it the most efficient use of your filter coefficients.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Equiripple_FIR_Filter.txt","hasFullInfo":true},{"id":172,"title":"Frequency B-Spline Wavelet","filename":"Frequency_B_Spline_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Continuous Wavelets","summary":"Smooth compact support","overview":"The Frequency B-Spline (fbsp) wavelet is designed in the frequency domain using B-spline functions, providing smooth wavelets with adjustable parameters for center frequency and bandwidth. This flexibility makes it adaptable to different analysis requirements while maintaining smoothness and compact frequency support.","formula":"In trading, fbsp wavelets offer customizable frequency analysis, allowing you to tune the center frequency and bandwidth to match specific cycle periods of interest while maintaining smooth, artifact-free decomposition.\n\nMathematical representation:\n\nParameterized form: fbsp(m,fb,fc)\n- m: B-spline order (controls smoothness)\n- fb: bandwidth parameter\n- fc: center frequency parameter\n\nFrequency domain construction:\nΨ̂(ω) = Bₘ((ω - ωc)/fb)\n\nWhere Bₘ is the mth-order B-spline in frequency:\nBₘ(x) = (1/m!) · Σ(-1)ᵏ · (m+1 choose k) · (x+m/2-k)ᵐ₊\n\nCenter frequency:\nωc = 2πfc\n\nBandwidth:\nBW = 2πfb\n\nTime domain:\nψ(t) = ∫ Ψ̂(ω)e^(iωt)dω\n\nProperties:\n- Smooth (C^(m-1) continuous)\n- Compact frequency support\n- Adjustable bandwidth\n- Tunable center frequency\n- Complex-valued\n- Non-orthogonal\n\nParameter selection:\n- m=1: linear (less smooth)\n- m=2: quadratic\n- m=3: cubic (good balance)\n- m≥4: higher smoothness\n\n- fc: target frequency (e.g., 0.2 for 5-bar period)\n- fb: selectivity (smaller = narrower band)\n\nApplications:\n1. Custom cycle extraction: tune fc to target period\n2. Multi-resolution with custom bands\n3. Adaptive to market characteristics","parameters":"","intuition":"The fbsp wavelet is like a customizable radio tuner with adjustable selectivity - you dial in the exact frequency (cycle period) you want and adjust how narrow or wide the reception band should be. More flexible than fixed wavelets, letting you optimize for your specific market.","rawContent":"The Frequency B-Spline (fbsp) wavelet is designed in the frequency domain using B-spline functions, providing smooth wavelets with adjustable parameters for center frequency and bandwidth. This flexibility makes it adaptable to different analysis requirements while maintaining smoothness and compact frequency support.\n\nIn trading, fbsp wavelets offer customizable frequency analysis, allowing you to tune the center frequency and bandwidth to match specific cycle periods of interest while maintaining smooth, artifact-free decomposition.\n\nMathematical representation:\n\nParameterized form: fbsp(m,fb,fc)\n- m: B-spline order (controls smoothness)\n- fb: bandwidth parameter\n- fc: center frequency parameter\n\nFrequency domain construction:\nΨ̂(ω) = Bₘ((ω - ωc)/fb)\n\nWhere Bₘ is the mth-order B-spline in frequency:\nBₘ(x) = (1/m!) · Σ(-1)ᵏ · (m+1 choose k) · (x+m/2-k)ᵐ₊\n\nCenter frequency:\nωc = 2πfc\n\nBandwidth:\nBW = 2πfb\n\nTime domain:\nψ(t) = ∫ Ψ̂(ω)e^(iωt)dω\n\nProperties:\n- Smooth (C^(m-1) continuous)\n- Compact frequency support\n- Adjustable bandwidth\n- Tunable center frequency\n- Complex-valued\n- Non-orthogonal\n\nParameter selection:\n- m=1: linear (less smooth)\n- m=2: quadratic\n- m=3: cubic (good balance)\n- m≥4: higher smoothness\n\n- fc: target frequency (e.g., 0.2 for 5-bar period)\n- fb: selectivity (smaller = narrower band)\n\nApplications:\n1. Custom cycle extraction: tune fc to target period\n2. Multi-resolution with custom bands\n3. Adaptive to market characteristics\n\nThe fbsp wavelet is like a customizable radio tuner with adjustable selectivity - you dial in the exact frequency (cycle period) you want and adjust how narrow or wide the reception band should be. More flexible than fixed wavelets, letting you optimize for your specific market.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Frequency_B_Spline_Wavelet.txt","hasFullInfo":true},{"id":173,"title":"Gaussian Filter (1-4 pole)","filename":"Gaussian_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Smooth frequency cutoff","overview":"A Gaussian Filter uses coefficients derived from the Gaussian (normal) distribution to achieve very smooth frequency response with no ripples and excellent time-domain characteristics. Multi-pole Gaussian filters (cascaded stages) provide increasingly sharp cutoffs while maintaining smooth, predictable behavior.","formula":"In trading, Gaussian filters provide superior smoothing with minimal artifacts, making them ideal for trend extraction, volatility estimation, and creating smooth indicator components where ripple-free response is critical.\n\nMathematical representation:\n\n1-pole Gaussian approximation:\nα = exp(-π/Period)\ny[i] = (1-α)*x[i] + α*y[i-1]\n\n2-pole Gaussian (cascade of two 1-pole):\nβ = exp(-√2 * π/Period)\nStage 1: y1[i] = (1-β)*x[i] + β*y1[i-1]\nStage 2: y[i] = (1-β)*y1[i] + β*y[i-1]\n\n4-pole Gaussian (Ehlers SuperSmoother):\na = exp(-1.414*π/Period)\nb = 2*a*cos(1.414*π/Period)\nc = a²\n\ny[i] = c₀*(x[i] + x[i-1]) + b*y[i-1] - c*y[i-2]\nWhere c₀ = (1 - b + c)/4\n\nFrequency response:\n|H(f)| = exp(-(f/fc)²ⁿ)\n\nWhere n = number of poles, fc = cutoff frequency\n\nProperties by pole count:\n- 1-pole: 6 dB/octave, very smooth\n- 2-pole: 12 dB/octave, smoother than Butterworth\n- 3-pole: 18 dB/octave\n- 4-pole: 24 dB/octave, very sharp cutoff\n\nPhase response: Smooth, monotonic decrease","parameters":"","intuition":"A Gaussian filter is like looking through increasingly thick frosted glass - 1-pole is lightly frosted (gentle blur), 2-pole is more frosted (smoother), and 4-pole is heavily frosted (very smooth). The blur always looks natural with no weird patterns, unlike other filters that might create ripples.","rawContent":"A Gaussian Filter uses coefficients derived from the Gaussian (normal) distribution to achieve very smooth frequency response with no ripples and excellent time-domain characteristics. Multi-pole Gaussian filters (cascaded stages) provide increasingly sharp cutoffs while maintaining smooth, predictable behavior.\n\nIn trading, Gaussian filters provide superior smoothing with minimal artifacts, making them ideal for trend extraction, volatility estimation, and creating smooth indicator components where ripple-free response is critical.\n\nMathematical representation:\n\n1-pole Gaussian approximation:\nα = exp(-π/Period)\ny[i] = (1-α)*x[i] + α*y[i-1]\n\n2-pole Gaussian (cascade of two 1-pole):\nβ = exp(-√2 * π/Period)\nStage 1: y1[i] = (1-β)*x[i] + β*y1[i-1]\nStage 2: y[i] = (1-β)*y1[i] + β*y[i-1]\n\n4-pole Gaussian (Ehlers SuperSmoother):\na = exp(-1.414*π/Period)\nb = 2*a*cos(1.414*π/Period)\nc = a²\n\ny[i] = c₀*(x[i] + x[i-1]) + b*y[i-1] - c*y[i-2]\nWhere c₀ = (1 - b + c)/4\n\nFrequency response:\n|H(f)| = exp(-(f/fc)²ⁿ)\n\nWhere n = number of poles, fc = cutoff frequency\n\nProperties by pole count:\n- 1-pole: 6 dB/octave, very smooth\n- 2-pole: 12 dB/octave, smoother than Butterworth\n- 3-pole: 18 dB/octave\n- 4-pole: 24 dB/octave, very sharp cutoff\n\nPhase response: Smooth, monotonic decrease\n\nA Gaussian filter is like looking through increasingly thick frosted glass - 1-pole is lightly frosted (gentle blur), 2-pole is more frosted (smoother), and 4-pole is heavily frosted (very smooth). The blur always looks natural with no weird patterns, unlike other filters that might create ripples.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Gaussian_Filter.txt","hasFullInfo":true},{"id":174,"title":"Gaussian Wavelets","filename":"Gaussian_Wavelets.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Continuous Wavelets","summary":"Derivatives of Gaussian","overview":"Gaussian wavelets are derivatives of the Gaussian function, forming a family of smooth wavelets (gaus1, gaus2, ..., gaus8) where the order indicates which derivative is used. They provide excellent smoothness and are particularly effective for detecting singularities, edges, and features at different orders of differentiability.","formula":"In trading, Gaussian wavelets detect different types of market features - first derivative finds slopes/trends, second derivative finds inflection points/acceleration changes, higher orders detect more subtle geometric features in price structure.\n\nMathematical representation:\n\nGaussian function:\ng(t) = e^(-t²/2)\n\nnth-order Gaussian wavelet:\nψₙ(t) = (-1)ⁿ · dⁿ/dtⁿ[e^(-t²/2)]\n\nSpecific orders:\n- gaus1 (1st derivative): ψ₁(t) = -t · e^(-t²/2)\n- gaus2 (2nd derivative): ψ₂(t) = (t² - 1) · e^(-t²/2) [Mexican Hat]\n- gaus3 (3rd derivative): ψ₃(t) = (3t - t³) · e^(-t²/2)\n- gaus4 (4th derivative): ψ₄(t) = (t⁴ - 6t² + 3) · e^(-t²/2)\n\nContinuous Wavelet Transform:\nW(a,b) = ∫ x(t) · (1/√a) · ψₙ((t-b)/a) dt\n\nProperties:\n- Real-valued\n- C^∞ (infinitely smooth)\n- Not compactly supported (Gaussian decay)\n- n vanishing moments\n- Even/odd symmetry based on n\n\nFeature detection by order:\n- n=1: Edges, slopes, trend changes\n- n=2: Peaks/valleys, curvature, inflection points\n- n=3: Changes in curvature\n- n=4+: Higher-order geometric features\n\nWavelet coefficients indicate:\n- Zero crossing: feature location\n- Magnitude: feature strength\n- Sign: feature direction\n\nMulti-order analysis:\nCombine multiple orders to characterize features:\n- gaus1 + gaus2: slope + curvature\n- gaus2 + gaus4: curvature hierarchy\n\nGaussian wavelets are like a family of mathematical microscopes, each revealing different features - the first derivative sees where things are sloping, the second sees peaks and valleys, the third sees where curves change direction. Higher orders see ever-more-subtle geometric patterns.","parameters":"","intuition":"","rawContent":"Gaussian wavelets are derivatives of the Gaussian function, forming a family of smooth wavelets (gaus1, gaus2, ..., gaus8) where the order indicates which derivative is used. They provide excellent smoothness and are particularly effective for detecting singularities, edges, and features at different orders of differentiability.\n\nIn trading, Gaussian wavelets detect different types of market features - first derivative finds slopes/trends, second derivative finds inflection points/acceleration changes, higher orders detect more subtle geometric features in price structure.\n\nMathematical representation:\n\nGaussian function:\ng(t) = e^(-t²/2)\n\nnth-order Gaussian wavelet:\nψₙ(t) = (-1)ⁿ · dⁿ/dtⁿ[e^(-t²/2)]\n\nSpecific orders:\n- gaus1 (1st derivative): ψ₁(t) = -t · e^(-t²/2)\n- gaus2 (2nd derivative): ψ₂(t) = (t² - 1) · e^(-t²/2) [Mexican Hat]\n- gaus3 (3rd derivative): ψ₃(t) = (3t - t³) · e^(-t²/2)\n- gaus4 (4th derivative): ψ₄(t) = (t⁴ - 6t² + 3) · e^(-t²/2)\n\nContinuous Wavelet Transform:\nW(a,b) = ∫ x(t) · (1/√a) · ψₙ((t-b)/a) dt\n\nProperties:\n- Real-valued\n- C^∞ (infinitely smooth)\n- Not compactly supported (Gaussian decay)\n- n vanishing moments\n- Even/odd symmetry based on n\n\nFeature detection by order:\n- n=1: Edges, slopes, trend changes\n- n=2: Peaks/valleys, curvature, inflection points\n- n=3: Changes in curvature\n- n=4+: Higher-order geometric features\n\nWavelet coefficients indicate:\n- Zero crossing: feature location\n- Magnitude: feature strength\n- Sign: feature direction\n\nMulti-order analysis:\nCombine multiple orders to characterize features:\n- gaus1 + gaus2: slope + curvature\n- gaus2 + gaus4: curvature hierarchy\n\nGaussian wavelets are like a family of mathematical microscopes, each revealing different features - the first derivative sees where things are sloping, the second sees peaks and valleys, the third sees where curves change direction. Higher orders see ever-more-subtle geometric patterns.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Gaussian_Wavelets.txt","hasFullInfo":true},{"id":175,"title":"Haar Wavelet","filename":"Haar_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"Simplest orthogonal wavelet","overview":"The Haar wavelet is the simplest and oldest wavelet, consisting of a step function that is +1 for the first half and -1 for the second half of its support. It's the only wavelet that is both orthogonal and symmetric with compact support, making it computationally efficient and easy to implement.","formula":"In trading, the Haar wavelet excels at detecting abrupt changes, jumps, and discontinuities in price data, making it valuable for breakout detection, volatility regime changes, and identifying sudden market shifts.\n\nMathematical representation:\n\nWavelet function:\n       ⎧ +1   for 0 ≤ t < 0.5\nψ(t) = ⎨ -1   for 0.5 ≤ t < 1\n       ⎩  0   otherwise\n\nScaling function (box function):\n       ⎧ 1    for 0 ≤ t < 1\nφ(t) = ⎨\n       ⎩ 0    otherwise\n\nFilter coefficients:\nLow-pass (scaling): h = [1/√2, 1/√2]\nHigh-pass (wavelet): g = [1/√2, -1/√2]\n\nDecomposition:\nApproximation: A[i] = (x[2i] + x[2i+1])/√2\nDetail: D[i] = (x[2i] - x[2i+1])/√2\n\nReconstruction:\nx[2i] = (A[i] + D[i])/√2\nx[2i+1] = (A[i] - D[i])/√2\n\nProperties:\n- Orthogonal and symmetric\n- Compact support [0, 1]\n- 1 vanishing moment\n- Discontinuous (step function)\n- Fastest computation\n- Best for edges/jumps\n\nMulti-level decomposition:\nLevel j: signal length = N/2ʲ\nPreserves energy: ||x||² = ||Aⱼ||² + Σ||Dₖ||²","parameters":"","intuition":"The Haar wavelet is like a simple on/off switch detector - it's perfect for finding where things suddenly change (price jumps, breakouts, regime shifts) but doesn't capture smooth curves well. It's the \"first wavelet ever\" and still useful for its simplicity and speed.","rawContent":"The Haar wavelet is the simplest and oldest wavelet, consisting of a step function that is +1 for the first half and -1 for the second half of its support. It's the only wavelet that is both orthogonal and symmetric with compact support, making it computationally efficient and easy to implement.\n\nIn trading, the Haar wavelet excels at detecting abrupt changes, jumps, and discontinuities in price data, making it valuable for breakout detection, volatility regime changes, and identifying sudden market shifts.\n\nMathematical representation:\n\nWavelet function:\n       ⎧ +1   for 0 ≤ t < 0.5\nψ(t) = ⎨ -1   for 0.5 ≤ t < 1\n       ⎩  0   otherwise\n\nScaling function (box function):\n       ⎧ 1    for 0 ≤ t < 1\nφ(t) = ⎨\n       ⎩ 0    otherwise\n\nFilter coefficients:\nLow-pass (scaling): h = [1/√2, 1/√2]\nHigh-pass (wavelet): g = [1/√2, -1/√2]\n\nDecomposition:\nApproximation: A[i] = (x[2i] + x[2i+1])/√2\nDetail: D[i] = (x[2i] - x[2i+1])/√2\n\nReconstruction:\nx[2i] = (A[i] + D[i])/√2\nx[2i+1] = (A[i] - D[i])/√2\n\nProperties:\n- Orthogonal and symmetric\n- Compact support [0, 1]\n- 1 vanishing moment\n- Discontinuous (step function)\n- Fastest computation\n- Best for edges/jumps\n\nMulti-level decomposition:\nLevel j: signal length = N/2ʲ\nPreserves energy: ||x||² = ||Aⱼ||² + Σ||Dₖ||²\n\nThe Haar wavelet is like a simple on/off switch detector - it's perfect for finding where things suddenly change (price jumps, breakouts, regime shifts) but doesn't capture smooth curves well. It's the \"first wavelet ever\" and still useful for its simplicity and speed.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Haar_Wavelet.txt","hasFullInfo":true},{"id":176,"title":"High-pass Filter (1-pole & 2-pole Ehlers)","filename":"High_pass_Filter_Ehlers.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Removes low frequencies","overview":"High-pass Filters remove low-frequency components (trends) while preserving high-frequency components (cycles and oscillations). Ehlers developed specific 1-pole and 2-pole implementations optimized for financial data, where the goal is to detrend price series and isolate cyclic components for analysis.","formula":"In trading, high-pass filters are essential for removing trends to reveal underlying cycles, creating detrended oscillators, and building indicators that focus on mean-reversion rather than trend-following.\n\nMathematical representation:\n\n1-Pole High-Pass:\nα = (cos(2π/Period) + sin(2π/Period) - 1) / cos(2π/Period)\nHP[i] = (1 - α/2)*(x[i] - x[i-1]) + (1 - α)*HP[i-1]\n\nOr simplified:\nHP[i] = 0.5*(1 + α)*(x[i] - x[i-1]) + (1 - α)*HP[i-1]\n\nWhere α controls cutoff frequency (higher α = higher cutoff)\n\n2-Pole High-Pass (SuperSmoother-based):\nFirst, calculate cutoff coefficient:\nα = (cos(2π/Period) + sin(2π/Period) - 1) / cos(2π/Period)\n\nThen two-stage filtering:\nHP1[i] = (1 - α/2)²*(x[i] - 2x[i-1] + x[i-2]) + 2(1-α)*HP1[i-1] - (1-α)²*HP1[i-2]\n\nProperties:\n- 1-pole: 6 dB/octave rolloff, faster but less selective\n- 2-pole: 12 dB/octave rolloff, sharper cutoff\n- Removes components slower than cutoff period\n- Output oscillates around zero\n\nCutoff parameter:\nPeriod = length of slowest cycle to preserve","parameters":"","intuition":"Think of a high-pass filter as removing the \"DC bias\" or trend - if price is trending up at $1/day, the high-pass filter subtracts that trend, leaving just the wiggles around the trend line. The 2-pole version does this more aggressively than 1-pole.","rawContent":"High-pass Filters remove low-frequency components (trends) while preserving high-frequency components (cycles and oscillations). Ehlers developed specific 1-pole and 2-pole implementations optimized for financial data, where the goal is to detrend price series and isolate cyclic components for analysis.\n\nIn trading, high-pass filters are essential for removing trends to reveal underlying cycles, creating detrended oscillators, and building indicators that focus on mean-reversion rather than trend-following.\n\nMathematical representation:\n\n1-Pole High-Pass:\nα = (cos(2π/Period) + sin(2π/Period) - 1) / cos(2π/Period)\nHP[i] = (1 - α/2)*(x[i] - x[i-1]) + (1 - α)*HP[i-1]\n\nOr simplified:\nHP[i] = 0.5*(1 + α)*(x[i] - x[i-1]) + (1 - α)*HP[i-1]\n\nWhere α controls cutoff frequency (higher α = higher cutoff)\n\n2-Pole High-Pass (SuperSmoother-based):\nFirst, calculate cutoff coefficient:\nα = (cos(2π/Period) + sin(2π/Period) - 1) / cos(2π/Period)\n\nThen two-stage filtering:\nHP1[i] = (1 - α/2)²*(x[i] - 2x[i-1] + x[i-2]) + 2(1-α)*HP1[i-1] - (1-α)²*HP1[i-2]\n\nProperties:\n- 1-pole: 6 dB/octave rolloff, faster but less selective\n- 2-pole: 12 dB/octave rolloff, sharper cutoff\n- Removes components slower than cutoff period\n- Output oscillates around zero\n\nCutoff parameter:\nPeriod = length of slowest cycle to preserve\n\nThink of a high-pass filter as removing the \"DC bias\" or trend - if price is trending up at $1/day, the high-pass filter subtracts that trend, leaving just the wiggles around the trend line. The 2-pole version does this more aggressively than 1-pole.","tags":["DSP Filtering","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 8/High_pass_Filter_Ehlers.txt","hasFullInfo":true},{"id":177,"title":"Hilbert-Huang Transform (HHT)","filename":"Hilbert_Huang_Transform.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"EMD + Hilbert spectral analysis","overview":"The Hilbert-Huang Transform combines Empirical Mode Decomposition (EMD) with the Hilbert spectral analysis to provide time-frequency representation of non-stationary signals. It first decomposes data into IMFs, then applies Hilbert transform to each IMF to extract instantaneous frequency and amplitude, creating a complete time-frequency-energy distribution.","formula":"In trading, HHT reveals how cycle frequencies and amplitudes evolve over time, showing regime changes, cycle modulation, and providing instantaneous frequency for adaptive filter tuning and phase-based trading strategies.\n\nMathematical representation:\n\nStep 1: EMD decomposition\nx(t) = Σ IMFᵢ(t) + r(t)\n\nStep 2: Hilbert Transform of each IMF\nFor IMF c(t):\nH[c(t)] = (1/π) · P.V.∫ c(τ)/(t-τ) dτ\n\nWhere P.V. denotes Cauchy principal value\n\nStep 3: Analytic signal\nz(t) = c(t) + i·H[c(t)] = a(t)e^(iθ(t))\n\nStep 4: Extract instantaneous parameters\nAmplitude: a(t) = √[c²(t) + H²[c(t)]]\nPhase: θ(t) = arctan[H[c(t)]/c(t)]\nFrequency: ω(t) = dθ/dt\n\nStep 5: Hilbert spectrum\nH(ω,t) = Re[Σ aᵢ(t)e^(iθᵢ(t))]\n\nMarginal spectrum (time-integrated):\nh(ω) = ∫ H(ω,t) dt\n\nEnergy-frequency-time distribution:\nE(ω,t) = a²(t) for ω = ω(t)\n\nAdvantages over traditional methods:\n- No fixed basis functions\n- Handles non-stationary signals\n- Instantaneous frequency (not windowed)\n- Better time-frequency resolution\n- Amplitude and frequency modulation\n\nApplications in trading:\n1. Instantaneous period tracking\n2. Regime change detection (frequency shifts)\n3. Cycle strength monitoring (amplitude evolution)\n4. Phase-based entries (θ(t) modulo 2π)","parameters":"","intuition":"HHT is like EMD with X-ray vision - after peeling the onion into layers (EMD), you use the Hilbert transform to see inside each layer, revealing its instantaneous frequency, amplitude, and phase at every moment. You get a movie of how cycles evolve, not just a static picture.","rawContent":"The Hilbert-Huang Transform combines Empirical Mode Decomposition (EMD) with the Hilbert spectral analysis to provide time-frequency representation of non-stationary signals. It first decomposes data into IMFs, then applies Hilbert transform to each IMF to extract instantaneous frequency and amplitude, creating a complete time-frequency-energy distribution.\n\nIn trading, HHT reveals how cycle frequencies and amplitudes evolve over time, showing regime changes, cycle modulation, and providing instantaneous frequency for adaptive filter tuning and phase-based trading strategies.\n\nMathematical representation:\n\nStep 1: EMD decomposition\nx(t) = Σ IMFᵢ(t) + r(t)\n\nStep 2: Hilbert Transform of each IMF\nFor IMF c(t):\nH[c(t)] = (1/π) · P.V.∫ c(τ)/(t-τ) dτ\n\nWhere P.V. denotes Cauchy principal value\n\nStep 3: Analytic signal\nz(t) = c(t) + i·H[c(t)] = a(t)e^(iθ(t))\n\nStep 4: Extract instantaneous parameters\nAmplitude: a(t) = √[c²(t) + H²[c(t)]]\nPhase: θ(t) = arctan[H[c(t)]/c(t)]\nFrequency: ω(t) = dθ/dt\n\nStep 5: Hilbert spectrum\nH(ω,t) = Re[Σ aᵢ(t)e^(iθᵢ(t))]\n\nMarginal spectrum (time-integrated):\nh(ω) = ∫ H(ω,t) dt\n\nEnergy-frequency-time distribution:\nE(ω,t) = a²(t) for ω = ω(t)\n\nAdvantages over traditional methods:\n- No fixed basis functions\n- Handles non-stationary signals\n- Instantaneous frequency (not windowed)\n- Better time-frequency resolution\n- Amplitude and frequency modulation\n\nApplications in trading:\n1. Instantaneous period tracking\n2. Regime change detection (frequency shifts)\n3. Cycle strength monitoring (amplitude evolution)\n4. Phase-based entries (θ(t) modulo 2π)\n\nHHT is like EMD with X-ray vision - after peeling the onion into layers (EMD), you use the Hilbert transform to see inside each layer, revealing its instantaneous frequency, amplitude, and phase at every moment. You get a movie of how cycles evolve, not just a static picture.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Hilbert_Huang_Transform.txt","hasFullInfo":true},{"id":178,"title":"Legendre Filter","filename":"Legendre_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Optimized phase and magnitude","overview":"A Legendre filter is designed to optimize both phase and magnitude response simultaneously, providing a balance between the steep rolloff of Butterworth filters and the linear phase response of Bessel filters. It uses Legendre polynomials to achieve this optimization, making it useful when you need both good frequency separation and reasonable phase linearity.","formula":"In trading applications, Legendre filters can provide cleaner noise rejection than Bessel filters while introducing less phase distortion than Butterworth filters, offering a middle-ground solution for trend following and pattern recognition.\n\nMathematical representation:\nThe transfer function uses Legendre polynomials Pn(x):\n|H(ω)|² = 1 / (1 + ε²Pn²((ω/ωc)²))\n\nLegendre polynomials (Rodrigues' formula):\nPn(x) = (1/2ⁿn!) dⁿ/dxⁿ[(x²-1)ⁿ]\n\nFirst few polynomials:\nP0(x) = 1\nP1(x) = x\nP2(x) = (3x²-1)/2\nP3(x) = (5x³-3x)/2\n\nProperties:\n- Better phase linearity than Butterworth\n- Steeper rolloff than Bessel\n- Monotonic passband and stopband\n- ε controls the transition sharpness\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...","parameters":"","intuition":"A Legendre filter is like a diplomat bouncer - it finds the sweet spot between strict rules (sharp frequency cutoff) and preserving relationships (phase linearity). You get better noise rejection than Bessel and better timing preservation than Butterworth, making it a jack-of-all-trades filter.","rawContent":"A Legendre filter is designed to optimize both phase and magnitude response simultaneously, providing a balance between the steep rolloff of Butterworth filters and the linear phase response of Bessel filters. It uses Legendre polynomials to achieve this optimization, making it useful when you need both good frequency separation and reasonable phase linearity.\n\nIn trading applications, Legendre filters can provide cleaner noise rejection than Bessel filters while introducing less phase distortion than Butterworth filters, offering a middle-ground solution for trend following and pattern recognition.\n\nMathematical representation:\nThe transfer function uses Legendre polynomials Pn(x):\n|H(ω)|² = 1 / (1 + ε²Pn²((ω/ωc)²))\n\nLegendre polynomials (Rodrigues' formula):\nPn(x) = (1/2ⁿn!) dⁿ/dxⁿ[(x²-1)ⁿ]\n\nFirst few polynomials:\nP0(x) = 1\nP1(x) = x\nP2(x) = (3x²-1)/2\nP3(x) = (5x³-3x)/2\n\nProperties:\n- Better phase linearity than Butterworth\n- Steeper rolloff than Bessel\n- Monotonic passband and stopband\n- ε controls the transition sharpness\n\nDiscrete implementation:\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] + ... - b1*y[i-1] - b2*y[i-2] - ...\n\nA Legendre filter is like a diplomat bouncer - it finds the sweet spot between strict rules (sharp frequency cutoff) and preserving relationships (phase linearity). You get better noise rejection than Bessel and better timing preservation than Butterworth, making it a jack-of-all-trades filter.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Legendre_Filter.txt","hasFullInfo":true},{"id":179,"title":"Low-pass Filter","filename":"Low_pass_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Removes high frequencies","overview":"A Low-pass Filter allows low-frequency components (trends and slow movements) to pass through while attenuating high-frequency components (noise and rapid oscillations). It's the most common filter type for smoothing signals, reducing noise, and extracting trends from data.","formula":"In trading, low-pass filters form the basis of most smoothing operations, trend extraction, and moving averages. They reduce market noise while preserving the underlying directional movement.\n\nMathematical representation:\n\nSimple 1-pole IIR low-pass:\ny[i] = α*x[i] + (1-α)*y[i-1]\n\nWhere α = 2/(Period + 1) or α = 1 - e^(-2π/Period)\n\n2-pole IIR low-pass (better rolloff):\nFor cutoff period T:\na = exp(-√2 * π/T)\nb = 2*a*cos(√2 * π/T)\nc = a²\n\ny[i] = c₀*x[i] + c₁*x[i-1] + c₂*x[i-2] - b₁*y[i-1] - b₂*y[i-2]\n\nButterworth 2-pole coefficients:\nc₀ = (1-b+c)/4\nc₁ = 2*c₀\nc₂ = c₀  \nb₁ = -b\nb₂ = c\n\nFIR low-pass (simple moving average):\ny[i] = (1/N) * Σ(k=0 to N-1) x[i-k]\n\nProperties:\n- Higher order = sharper cutoff\n- Cutoff frequency/period determines transition\n- Introduces phase lag (except zero-phase variants)\n- Stable for α ∈ (0,1)\n\nFrequency response:\n|H(f)| = high at low f, low at high f\nTransition occurs around fc (cutoff frequency)","parameters":"","intuition":"A low-pass filter is like looking at a mountain range through fog - it blurs out all the tiny details and rough edges (high-frequency noise), leaving you with smooth, gradual curves (the trend). The stronger the filter (lower cutoff), the more blurring you get.","rawContent":"A Low-pass Filter allows low-frequency components (trends and slow movements) to pass through while attenuating high-frequency components (noise and rapid oscillations). It's the most common filter type for smoothing signals, reducing noise, and extracting trends from data.\n\nIn trading, low-pass filters form the basis of most smoothing operations, trend extraction, and moving averages. They reduce market noise while preserving the underlying directional movement.\n\nMathematical representation:\n\nSimple 1-pole IIR low-pass:\ny[i] = α*x[i] + (1-α)*y[i-1]\n\nWhere α = 2/(Period + 1) or α = 1 - e^(-2π/Period)\n\n2-pole IIR low-pass (better rolloff):\nFor cutoff period T:\na = exp(-√2 * π/T)\nb = 2*a*cos(√2 * π/T)\nc = a²\n\ny[i] = c₀*x[i] + c₁*x[i-1] + c₂*x[i-2] - b₁*y[i-1] - b₂*y[i-2]\n\nButterworth 2-pole coefficients:\nc₀ = (1-b+c)/4\nc₁ = 2*c₀\nc₂ = c₀  \nb₁ = -b\nb₂ = c\n\nFIR low-pass (simple moving average):\ny[i] = (1/N) * Σ(k=0 to N-1) x[i-k]\n\nProperties:\n- Higher order = sharper cutoff\n- Cutoff frequency/period determines transition\n- Introduces phase lag (except zero-phase variants)\n- Stable for α ∈ (0,1)\n\nFrequency response:\n|H(f)| = high at low f, low at high f\nTransition occurs around fc (cutoff frequency)\n\nA low-pass filter is like looking at a mountain range through fog - it blurs out all the tiny details and rough edges (high-frequency noise), leaving you with smooth, gradual curves (the trend). The stronger the filter (lower cutoff), the more blurring you get.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Low_pass_Filter.txt","hasFullInfo":true},{"id":180,"title":"Maximal Overlap DWT (MODWT)","filename":"Maximal_Overlap_DWT.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Shift-invariant transform","overview":"The Maximal Overlap Discrete Wavelet Transform (MODWT) is a modified DWT that achieves translation-invariance through circular filtering without downsampling, while rescaling coefficients to preserve variance. It combines the benefits of SWT with improved statistical properties, making it ideal for time series analysis and variance decomposition.","formula":"In trading, MODWT provides robust multi-scale variance analysis, enabling precise attribution of volatility to different timeframes, essential for risk management, regime detection, and understanding which timescales contribute most to price movement.\n\nMathematical representation:\n\nMODWT filtering at level j:\nW̃_j[n] = Σ g̃_{j,k} X[n-k mod N]\nṼ_j[n] = Σ h̃_{j,k} X[n-k mod N]\n\nRescaled filters:\nh̃_{j,k} = h_j[k] / 2^(j/2)\ng̃_{j,k} = g_j[k] / 2^(j/2)\n\nWhere h_j, g_j are upsampled filters from SWT\n\nProperties:\n- Rescaling factor: 1/2^(j/2) at level j\n- Preserves energy/variance\n- Circular boundary conditions\n- Same length at all levels\n- Translation-invariant\n\nVariance decomposition:\nVar(X) = Σ Var(W̃_j) + Var(Ṽ_J)","parameters":"Where:\n- Var(W̃_j) = wavelet variance at scale j\n- Var(Ṽ_J) = scaling variance (trend)\n\nWavelet variance (scale-based):\nν²_X(λ_j) = (1/N) Σ W̃²_j[n]\n\nWhere λ_j = 2^j is the scale\n\nMulti-resolution analysis:\nX[n] = Σ D̃_j[n] + S̃_J[n]\n\nWhere:\n- D̃_j = detail at scale j (from W̃_j)\n- S̃_J = smooth at scale J (from Ṽ_J)\n\nAdvantages:\n- Exact variance decomposition\n- Better statistical properties than DWT\n- Translation-invariant\n- No phase shift\n- Circular filtering (no edge effects)\n\nApplications in trading:\n1. Volatility attribution by timeframe\n2. Cycle strength measurement (Var(W̃_j))\n3. Regime detection (variance changes)\n4. Multi-scale correlation analysis","intuition":"MODWT is like SWT with a built-in accountant - it not only gives translation-invariant decomposition, but carefully tracks variance so you can precisely say \"30% of volatility comes from the 8-16 bar scale, 50% from trend.\" Perfect for understanding where risk actually lives in your data.","rawContent":"The Maximal Overlap Discrete Wavelet Transform (MODWT) is a modified DWT that achieves translation-invariance through circular filtering without downsampling, while rescaling coefficients to preserve variance. It combines the benefits of SWT with improved statistical properties, making it ideal for time series analysis and variance decomposition.\n\nIn trading, MODWT provides robust multi-scale variance analysis, enabling precise attribution of volatility to different timeframes, essential for risk management, regime detection, and understanding which timescales contribute most to price movement.\n\nMathematical representation:\n\nMODWT filtering at level j:\nW̃_j[n] = Σ g̃_{j,k} X[n-k mod N]\nṼ_j[n] = Σ h̃_{j,k} X[n-k mod N]\n\nRescaled filters:\nh̃_{j,k} = h_j[k] / 2^(j/2)\ng̃_{j,k} = g_j[k] / 2^(j/2)\n\nWhere h_j, g_j are upsampled filters from SWT\n\nProperties:\n- Rescaling factor: 1/2^(j/2) at level j\n- Preserves energy/variance\n- Circular boundary conditions\n- Same length at all levels\n- Translation-invariant\n\nVariance decomposition:\nVar(X) = Σ Var(W̃_j) + Var(Ṽ_J)\n\nWhere:\n- Var(W̃_j) = wavelet variance at scale j\n- Var(Ṽ_J) = scaling variance (trend)\n\nWavelet variance (scale-based):\nν²_X(λ_j) = (1/N) Σ W̃²_j[n]\n\nWhere λ_j = 2^j is the scale\n\nMulti-resolution analysis:\nX[n] = Σ D̃_j[n] + S̃_J[n]\n\nWhere:\n- D̃_j = detail at scale j (from W̃_j)\n- S̃_J = smooth at scale J (from Ṽ_J)\n\nAdvantages:\n- Exact variance decomposition\n- Better statistical properties than DWT\n- Translation-invariant\n- No phase shift\n- Circular filtering (no edge effects)\n\nApplications in trading:\n1. Volatility attribution by timeframe\n2. Cycle strength measurement (Var(W̃_j))\n3. Regime detection (variance changes)\n4. Multi-scale correlation analysis\n\nMODWT is like SWT with a built-in accountant - it not only gives translation-invariant decomposition, but carefully tracks variance so you can precisely say \"30% of volatility comes from the 8-16 bar scale, 50% from trend.\" Perfect for understanding where risk actually lives in your data.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Maximal_Overlap_DWT.txt","hasFullInfo":true},{"id":181,"title":"Mexican Hat Wavelet (Ricker)","filename":"Mexican_Hat_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Continuous Wavelets","summary":"Second derivative of Gaussian","overview":"The Mexican Hat wavelet (also called Ricker wavelet) is the negative second derivative of a Gaussian function, creating a shape that resembles a sombrero when plotted. It's particularly effective at detecting peaks, edges, and discontinuities in data, making it valuable for feature detection and edge analysis.","formula":"In trading, the Mexican Hat wavelet excels at identifying price peaks, valleys, and inflection points across multiple scales, useful for detecting reversals, support/resistance levels, and multi-timeframe turning points.\n\nMathematical representation:\n\nWavelet function:\nψ(t) = (1 - t²) · e^(-t²/2)\n\nNormalized form:\nψ(t) = (2/(√3 · π^(1/4))) · (1 - t²) · e^(-t²/2)\n\nSecond derivative of Gaussian:\nψ(t) = -d²/dt²[e^(-t²/2)] = (t² - 1) · e^(-t²/2)\n\nContinuous Wavelet Transform:\nW(a,b) = ∫ x(t) · (1/√a) · ψ((t-b)/a) dt\n\nProperties:\n- Real-valued and symmetric\n- Zero mean: ∫ ψ(t)dt = 0\n- 2 vanishing moments\n- Not compactly supported (Gaussian tail)\n- Excellent for edge detection\n- Scale = characteristic width\n\nFrequency domain:\nΨ̂(ω) = √(2/3) · π^(-1/4) · ω² · e^(-ω²/2)\n\nPeak at: ω = √2 (or f = 1/(π√2))\n\nMulti-scale edge detection:\nZero-crossings of W(a,b) correspond to inflection points\nLocal maxima of |W(a,b)| correspond to edges/peaks\n\nScale-space relationship:\nSmall a: detects fine details (short-term peaks)\nLarge a: detects major features (long-term turning points)","parameters":"","intuition":"The Mexican Hat wavelet is like a multi-scale peak detector - its sombrero shape naturally highlights bumps and valleys in data. Small sombreros find daily peaks, large sombreros find weekly/monthly turning points. It literally looks like it's hunting for peaks due to its shape.","rawContent":"The Mexican Hat wavelet (also called Ricker wavelet) is the negative second derivative of a Gaussian function, creating a shape that resembles a sombrero when plotted. It's particularly effective at detecting peaks, edges, and discontinuities in data, making it valuable for feature detection and edge analysis.\n\nIn trading, the Mexican Hat wavelet excels at identifying price peaks, valleys, and inflection points across multiple scales, useful for detecting reversals, support/resistance levels, and multi-timeframe turning points.\n\nMathematical representation:\n\nWavelet function:\nψ(t) = (1 - t²) · e^(-t²/2)\n\nNormalized form:\nψ(t) = (2/(√3 · π^(1/4))) · (1 - t²) · e^(-t²/2)\n\nSecond derivative of Gaussian:\nψ(t) = -d²/dt²[e^(-t²/2)] = (t² - 1) · e^(-t²/2)\n\nContinuous Wavelet Transform:\nW(a,b) = ∫ x(t) · (1/√a) · ψ((t-b)/a) dt\n\nProperties:\n- Real-valued and symmetric\n- Zero mean: ∫ ψ(t)dt = 0\n- 2 vanishing moments\n- Not compactly supported (Gaussian tail)\n- Excellent for edge detection\n- Scale = characteristic width\n\nFrequency domain:\nΨ̂(ω) = √(2/3) · π^(-1/4) · ω² · e^(-ω²/2)\n\nPeak at: ω = √2 (or f = 1/(π√2))\n\nMulti-scale edge detection:\nZero-crossings of W(a,b) correspond to inflection points\nLocal maxima of |W(a,b)| correspond to edges/peaks\n\nScale-space relationship:\nSmall a: detects fine details (short-term peaks)\nLarge a: detects major features (long-term turning points)\n\nThe Mexican Hat wavelet is like a multi-scale peak detector - its sombrero shape naturally highlights bumps and valleys in data. Small sombreros find daily peaks, large sombreros find weekly/monthly turning points. It literally looks like it's hunting for peaks due to its shape.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Mexican_Hat_Wavelet.txt","hasFullInfo":true},{"id":182,"title":"Meyer Wavelet","filename":"Meyer_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"FIR approximation","overview":"The Meyer wavelet is an infinitely differentiable wavelet with compact support in the frequency domain, designed by Yves Meyer. It achieves optimal smoothness while maintaining perfect frequency localization, making it ideal for applications requiring clean spectral separation.","formula":"In trading, Meyer wavelets provide the cleanest possible frequency decomposition, separating different market cycles with zero overlap, essential for precise multi-timeframe analysis and eliminating inter-frequency contamination in cycle-based systems.\n\nMathematical representation:\n\nFrequency domain definition:\n       ⎧ 1                                    for |ω| ≤ 2π/3\nΦ̂(ω) = ⎨ cos(π/2 · ν(3|ω|/(2π) - 1))        for 2π/3 < |ω| < 4π/3\n       ⎩ 0                                    for |ω| ≥ 4π/3\n\n⎧ e^(-iω/2) sin(π/2 · ν(3|ω|/(2π)-1)) for 2π/3 < |ω| < 4π/3\nΨ̂(ω) = ⎨ e^(-iω/2) cos(π/2 · ν(3|ω|/(4π)-1)) for 4π/3 < |ω| < 8π/3\n       ⎩ 0                                    otherwise\n\nAuxiliary function ν(x) for x ∈ [0,1]:\nν(x) = x⁴(35 - 84x + 70x² - 20x³)\n\nProperties:\n- C^∞ (infinitely differentiable)\n- Compact support in frequency domain\n- Band-limited: Ψ̂(ω) = 0 for |ω| outside [2π/3, 8π/3]\n- Orthogonal\n- Symmetric\n- Perfect frequency localization\n\nTime domain:\nψ(t) = ∫ Ψ̂(ω)e^(iωt)dω\n\nNot compact in time (decays rapidly)\n\nDecomposition bands:\nLevel j: frequency band [π/2^(j+1), π/2^(j-1)]\nNo overlap between bands\nPerfect reconstruction\n\nAdvantages:\n- Smoothest possible wavelet\n- Zero frequency leakage\n- Ideal spectral properties\n\nThe Meyer wavelet is the perfectionist's choice - infinitely smooth everywhere and with razor-sharp frequency boundaries. It's like having a surgeon's scalpel for cutting the frequency spectrum into perfectly clean slices. If you need absolute frequency precision with no contamination, Meyer is your wavelet.","parameters":"","intuition":"","rawContent":"The Meyer wavelet is an infinitely differentiable wavelet with compact support in the frequency domain, designed by Yves Meyer. It achieves optimal smoothness while maintaining perfect frequency localization, making it ideal for applications requiring clean spectral separation.\n\nIn trading, Meyer wavelets provide the cleanest possible frequency decomposition, separating different market cycles with zero overlap, essential for precise multi-timeframe analysis and eliminating inter-frequency contamination in cycle-based systems.\n\nMathematical representation:\n\nFrequency domain definition:\n       ⎧ 1                                    for |ω| ≤ 2π/3\nΦ̂(ω) = ⎨ cos(π/2 · ν(3|ω|/(2π) - 1))        for 2π/3 < |ω| < 4π/3\n       ⎩ 0                                    for |ω| ≥ 4π/3\n\n       ⎧ e^(-iω/2) sin(π/2 · ν(3|ω|/(2π)-1)) for 2π/3 < |ω| < 4π/3\nΨ̂(ω) = ⎨ e^(-iω/2) cos(π/2 · ν(3|ω|/(4π)-1)) for 4π/3 < |ω| < 8π/3\n       ⎩ 0                                    otherwise\n\nAuxiliary function ν(x) for x ∈ [0,1]:\nν(x) = x⁴(35 - 84x + 70x² - 20x³)\n\nProperties:\n- C^∞ (infinitely differentiable)\n- Compact support in frequency domain\n- Band-limited: Ψ̂(ω) = 0 for |ω| outside [2π/3, 8π/3]\n- Orthogonal\n- Symmetric\n- Perfect frequency localization\n\nTime domain:\nψ(t) = ∫ Ψ̂(ω)e^(iωt)dω\n\nNot compact in time (decays rapidly)\n\nDecomposition bands:\nLevel j: frequency band [π/2^(j+1), π/2^(j-1)]\nNo overlap between bands\nPerfect reconstruction\n\nAdvantages:\n- Smoothest possible wavelet\n- Zero frequency leakage\n- Ideal spectral properties\n\nThe Meyer wavelet is the perfectionist's choice - infinitely smooth everywhere and with razor-sharp frequency boundaries. It's like having a surgeon's scalpel for cutting the frequency spectrum into perfectly clean slices. If you need absolute frequency precision with no contamination, Meyer is your wavelet.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Meyer_Wavelet.txt","hasFullInfo":true},{"id":183,"title":"Morlet Wavelet","filename":"Morlet_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Continuous Wavelets","summary":"Complex Gaussian-windowed sinusoid","overview":"The Morlet wavelet is a complex Gaussian-windowed sinusoid, combining a complex exponential (carrier wave) with a Gaussian envelope (window). It's one of the most popular wavelets for time-frequency analysis due to its excellent localization properties and ability to extract both amplitude and phase information.","formula":"In trading, the Morlet wavelet is ideal for cycle detection, phase analysis, and time-frequency decomposition of price data, revealing how different cycle periods evolve over time and providing phase information for timing entries/exits.\n\nMathematical representation:\n\nComplex Morlet wavelet:\nψ(t) = π^(-1/4) · e^(iω₀t) · e^(-t²/2)\n\nWhere ω₀ is the central frequency (typically ω₀ = 6 for good localization)\n\nReal part (for real-valued analysis):\nψᵣ(t) = π^(-1/4) · cos(ω₀t) · e^(-t²/2)\n\nAdmissibility corrected form:\nψ(t) = π^(-1/4) · (e^(iω₀t) - e^(-ω₀²/2)) · e^(-t²/2)\n\nContinuous Wavelet Transform:\nW(a,b) = (1/√a) ∫ x(t)ψ*((t-b)/a)dt","parameters":"Where:\n- a = scale (inversely related to frequency)\n- b = translation (time position)\n- ψ* = complex conjugate\n\nRelationship to frequency:\nf = ω₀/(2πa)\n\nTime-frequency uncertainty:\nΔt·Δf ≥ 1/(4π) (Heisenberg limit)\nMorlet near-optimal: Δt·Δf ≈ 1/(4π)\n\nProperties:\n- Complex-valued (provides phase)\n- Excellent time-frequency localization\n- Non-orthogonal\n- Not compactly supported (Gaussian decays)\n- Scale ~ period relationship","intuition":"The Morlet wavelet is like a tunable microscope that also measures vibration phase - you can zoom in on any timescale and not only see if there's a cycle at that frequency, but also know where you are in that cycle's phase. Perfect for \"is there a 20-day cycle, and are we at a peak or trough?\"","rawContent":"The Morlet wavelet is a complex Gaussian-windowed sinusoid, combining a complex exponential (carrier wave) with a Gaussian envelope (window). It's one of the most popular wavelets for time-frequency analysis due to its excellent localization properties and ability to extract both amplitude and phase information.\n\nIn trading, the Morlet wavelet is ideal for cycle detection, phase analysis, and time-frequency decomposition of price data, revealing how different cycle periods evolve over time and providing phase information for timing entries/exits.\n\nMathematical representation:\n\nComplex Morlet wavelet:\nψ(t) = π^(-1/4) · e^(iω₀t) · e^(-t²/2)\n\nWhere ω₀ is the central frequency (typically ω₀ = 6 for good localization)\n\nReal part (for real-valued analysis):\nψᵣ(t) = π^(-1/4) · cos(ω₀t) · e^(-t²/2)\n\nAdmissibility corrected form:\nψ(t) = π^(-1/4) · (e^(iω₀t) - e^(-ω₀²/2)) · e^(-t²/2)\n\nContinuous Wavelet Transform:\nW(a,b) = (1/√a) ∫ x(t)ψ*((t-b)/a)dt\n\nWhere:\n- a = scale (inversely related to frequency)\n- b = translation (time position)\n- ψ* = complex conjugate\n\nRelationship to frequency:\nf = ω₀/(2πa)\n\nTime-frequency uncertainty:\nΔt·Δf ≥ 1/(4π) (Heisenberg limit)\nMorlet near-optimal: Δt·Δf ≈ 1/(4π)\n\nProperties:\n- Complex-valued (provides phase)\n- Excellent time-frequency localization\n- Non-orthogonal\n- Not compactly supported (Gaussian decays)\n- Scale ~ period relationship\n\nThe Morlet wavelet is like a tunable microscope that also measures vibration phase - you can zoom in on any timescale and not only see if there's a cycle at that frequency, but also know where you are in that cycle's phase. Perfect for \"is there a 20-day cycle, and are we at a peak or trough?\"","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Morlet_Wavelet.txt","hasFullInfo":true},{"id":184,"title":"Parks-McClellan Optimal FIR","filename":"Parks_McClellan_Optimal_FIR.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Minimax optimization","overview":"The Parks-McClellan algorithm (also called the Remez exchange algorithm) designs optimal FIR filters by minimizing the maximum error (minimax criterion) between the desired frequency response and the actual filter response. This produces equiripple filters with the best possible approximation to ideal frequency characteristics for a given filter length.","formula":"In trading, Parks-McClellan filters provide the tightest possible frequency separation with minimal filter order, making them computationally efficient for real-time applications requiring precise frequency discrimination.\n\nMathematical representation:\nMinimize: max|W(f) * [Hd(f) - H(f)]|","parameters":"Where:\n- Hd(f) = desired frequency response\n- H(f) = actual filter frequency response  \n- W(f) = weighting function (emphasizes important bands)\n- Minimization over frequency f\n\nThe algorithm produces equiripple approximation:\n- Equal-magnitude ripples in passband\n- Equal-magnitude ripples in stopband\n- Ripple magnitudes trade off based on weights\n\nDesign parameters:\n- Filter order N\n- Passband edge fp\n- Stopband edge fs  \n- Passband weight Wp\n- Stopband weight Ws\n\nFilter coefficients h[n] satisfy:\nH(ejω) = Σ(n=0 to N) h[n]e^(-jωn)\n\nWith equiripple error:\nE(f) = W(f)[Hd(f) - H(f)] oscillates between ±δ at N+2 extremal frequencies.","intuition":"Parks-McClellan is like hiring a master craftsman who makes the absolute best filter possible within your constraints - if you tell them \"I have 20 coefficients to work with,\" they'll arrange those 20 numbers to give you the tightest, most efficient frequency separation physically achievable. It's mathematically optimal.","rawContent":"The Parks-McClellan algorithm (also called the Remez exchange algorithm) designs optimal FIR filters by minimizing the maximum error (minimax criterion) between the desired frequency response and the actual filter response. This produces equiripple filters with the best possible approximation to ideal frequency characteristics for a given filter length.\n\nIn trading, Parks-McClellan filters provide the tightest possible frequency separation with minimal filter order, making them computationally efficient for real-time applications requiring precise frequency discrimination.\n\nMathematical representation:\nMinimize: max|W(f) * [Hd(f) - H(f)]|\n\nWhere:\n- Hd(f) = desired frequency response\n- H(f) = actual filter frequency response  \n- W(f) = weighting function (emphasizes important bands)\n- Minimization over frequency f\n\nThe algorithm produces equiripple approximation:\n- Equal-magnitude ripples in passband\n- Equal-magnitude ripples in stopband\n- Ripple magnitudes trade off based on weights\n\nDesign parameters:\n- Filter order N\n- Passband edge fp\n- Stopband edge fs  \n- Passband weight Wp\n- Stopband weight Ws\n\nFilter coefficients h[n] satisfy:\nH(ejω) = Σ(n=0 to N) h[n]e^(-jωn)\n\nWith equiripple error:\nE(f) = W(f)[Hd(f) - H(f)] oscillates between ±δ at N+2 extremal frequencies.\n\nParks-McClellan is like hiring a master craftsman who makes the absolute best filter possible within your constraints - if you tell them \"I have 20 coefficients to work with,\" they'll arrange those 20 numbers to give you the tightest, most efficient frequency separation physically achievable. It's mathematically optimal.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Parks_McClellan_Optimal_FIR.txt","hasFullInfo":true},{"id":185,"title":"Roofing Filter (2-Pole High-Pass + SuperSmoother)","filename":"Roofing_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Spectral dilation removal","overview":"The Roofing Filter is John Ehlers' technique that combines a 2-pole high-pass filter with a 2-pole SuperSmoother to remove spectral dilation and create cleaner cycle measurements. It removes both low-frequency trend components and high-frequency noise, leaving a \"roofed\" band of frequencies containing the most relevant market cycles.","formula":"In trading, the Roofing Filter is essential preprocessing for cycle-based indicators, ensuring that cycle measurements (like dominant period) are accurate and not distorted by trend or noise contamination.\n\nMathematical representation:\n\nStep 1: High-Pass Filter (removes trend):\nα = (cos(1.414*π/HighPeriod) + sin(1.414*π/HighPeriod) - 1) / cos(1.414*π/HighPeriod)\n\nHP[i] = (1 - α/2)²*(x[i] - 2*x[i-1] + x[i-2]) + 2*(1-α)*HP[i-1] - (1-α)²*HP[i-2]\n\nStep 2: SuperSmoother (removes noise):\na = exp(-1.414*π/LowPeriod)\nb = 2*a*cos(1.414*π/LowPeriod)\nc₂ = b\nc₃ = -a²\nc₁ = 1 - c₂ - c₃\n\nRoof[i] = c₁*(HP[i] + HP[i-1])/2 + c₂*Roof[i-1] + c₃*Roof[i-2]\n\nTypical parameters:\n- HighPeriod: 48 bars (removes components slower than 48 bars)\n- LowPeriod: 10 bars (removes components faster than 10 bars)\n- Result: band-pass between 10-48 bars\n\nEffect:\n- Removes spectral dilation (distortion from stochastic indicators)\n- Isolates tradeable cycle frequencies\n- Improves cycle measurement accuracy\n- Creates stationary signal for analysis","parameters":"","intuition":"The Roofing Filter is like building a house with a high foundation and a low roof - the high-pass filter lifts everything off the ground (removes trend), and the SuperSmoother puts a ceiling on it (removes noise). You're left with just the middle \"living space\" where cycles live.","rawContent":"The Roofing Filter is John Ehlers' technique that combines a 2-pole high-pass filter with a 2-pole SuperSmoother to remove spectral dilation and create cleaner cycle measurements. It removes both low-frequency trend components and high-frequency noise, leaving a \"roofed\" band of frequencies containing the most relevant market cycles.\n\nIn trading, the Roofing Filter is essential preprocessing for cycle-based indicators, ensuring that cycle measurements (like dominant period) are accurate and not distorted by trend or noise contamination.\n\nMathematical representation:\n\nStep 1: High-Pass Filter (removes trend):\nα = (cos(1.414*π/HighPeriod) + sin(1.414*π/HighPeriod) - 1) / cos(1.414*π/HighPeriod)\n\nHP[i] = (1 - α/2)²*(x[i] - 2*x[i-1] + x[i-2]) + 2*(1-α)*HP[i-1] - (1-α)²*HP[i-2]\n\nStep 2: SuperSmoother (removes noise):\na = exp(-1.414*π/LowPeriod)\nb = 2*a*cos(1.414*π/LowPeriod)\nc₂ = b\nc₃ = -a²\nc₁ = 1 - c₂ - c₃\n\nRoof[i] = c₁*(HP[i] + HP[i-1])/2 + c₂*Roof[i-1] + c₃*Roof[i-2]\n\nTypical parameters:\n- HighPeriod: 48 bars (removes components slower than 48 bars)\n- LowPeriod: 10 bars (removes components faster than 10 bars)\n- Result: band-pass between 10-48 bars\n\nEffect:\n- Removes spectral dilation (distortion from stochastic indicators)\n- Isolates tradeable cycle frequencies\n- Improves cycle measurement accuracy\n- Creates stationary signal for analysis\n\nThe Roofing Filter is like building a house with a high foundation and a low roof - the high-pass filter lifts everything off the ground (removes trend), and the SuperSmoother puts a ceiling on it (removes noise). You're left with just the middle \"living space\" where cycles live.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Roofing_Filter.txt","hasFullInfo":true},{"id":186,"title":"Savitzky-Golay Filter","filename":"Savitzky_Golay_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Polynomial smoothing filter","overview":"A Savitzky-Golay filter is a polynomial smoothing filter that fits successive sub-sets of adjacent data points with a low-degree polynomial using least-squares regression. Unlike simple moving averages, it preserves higher-order moments (peaks, valleys, and shape) while smoothing noise, making it particularly valuable for preserving features in the data.","formula":"In trading, Savitzky-Golay filters can smooth price data while maintaining the exact location and magnitude of turning points, making them superior for identifying reversals and peaks/valleys without the lag-induced distortion of traditional moving averages.\n\nMathematical representation:\nFor window size 2m+1 and polynomial degree n:\ny[i] = Σ(j=-m to m) cj * x[i+j]\n\nWhere cj are convolution coefficients derived from:\ncj = Σ(k=0 to n) bk * jᵏ\n\nAnd bk are least-squares polynomial fit coefficients.\n\nFor degree 2 (quadratic) with 5-point window:\nCoefficients: [-3, 12, 17, 12, -3] / 35\n\nFor degree 2 with 7-point window:  \nCoefficients: [-2, 3, 6, 7, 6, 3, -2] / 21\n\nFor degree 3 (cubic) with 5-point window:\nCoefficients: [-3, 12, 17, 12, -3] / 35 (same as quadratic due to symmetry)","parameters":"Key parameters:\n- Window size (2m+1): larger = more smoothing\n- Polynomial degree (n): higher = better feature preservation\n- n < 2m+1 required","intuition":"Savitzky-Golay is like a smart artist smoothing a line - instead of just blurring everything like a simple average, it understands curves and shapes, so it removes the shakiness while keeping the peaks and valleys in exactly the right places. Your turning points don't shift in time.","rawContent":"A Savitzky-Golay filter is a polynomial smoothing filter that fits successive sub-sets of adjacent data points with a low-degree polynomial using least-squares regression. Unlike simple moving averages, it preserves higher-order moments (peaks, valleys, and shape) while smoothing noise, making it particularly valuable for preserving features in the data.\n\nIn trading, Savitzky-Golay filters can smooth price data while maintaining the exact location and magnitude of turning points, making them superior for identifying reversals and peaks/valleys without the lag-induced distortion of traditional moving averages.\n\nMathematical representation:\nFor window size 2m+1 and polynomial degree n:\ny[i] = Σ(j=-m to m) cj * x[i+j]\n\nWhere cj are convolution coefficients derived from:\ncj = Σ(k=0 to n) bk * jᵏ\n\nAnd bk are least-squares polynomial fit coefficients.\n\nFor degree 2 (quadratic) with 5-point window:\nCoefficients: [-3, 12, 17, 12, -3] / 35\n\nFor degree 2 with 7-point window:  \nCoefficients: [-2, 3, 6, 7, 6, 3, -2] / 21\n\nFor degree 3 (cubic) with 5-point window:\nCoefficients: [-3, 12, 17, 12, -3] / 35 (same as quadratic due to symmetry)\n\nKey parameters:\n- Window size (2m+1): larger = more smoothing\n- Polynomial degree (n): higher = better feature preservation\n- n < 2m+1 required\n\nSavitzky-Golay is like a smart artist smoothing a line - instead of just blurring everything like a simple average, it understands curves and shapes, so it removes the shakiness while keeping the peaks and valleys in exactly the right places. Your turning points don't shift in time.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Savitzky_Golay_Filter.txt","hasFullInfo":true},{"id":187,"title":"Shannon Wavelet","filename":"Shannon_Wavelet.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Continuous Wavelets","summary":"Band-limited wavelet","overview":"The Shannon wavelet is the ideal band-limited wavelet, having perfect rectangular frequency response (brick-wall filter). It's defined by the sinc function in time domain and represents the theoretical optimum for frequency separation, though it has infinite time support making it impractical for finite data.","formula":"In trading, the Shannon wavelet serves as the theoretical benchmark for perfect frequency isolation - while not practical for direct implementation, it guides the design of band-limited filters and helps understand fundamental limits of cycle separation.\n\nMathematical representation:\n\nTime domain:\nψ(t) = sinc(2t) - sinc(t)\n\nWhere sinc(t) = sin(πt)/(πt)\n\nExpanded form:\nψ(t) = [sin(2πt)/(2πt)] - [sin(πt)/(πt)]\n\nFrequency domain (perfect band-pass):\n       ⎧ 1   for π ≤ |ω| ≤ 2π\nΨ̂(ω) = ⎨\n       ⎩ 0   otherwise\n\nProperties:\n- Perfect band-limited (compact in frequency)\n- Infinite support in time domain\n- Orthogonal\n- Ideal frequency localization\n- Poor time localization (sinc oscillates forever)\n- Uncertainty principle limit\n\nContinuous Wavelet Transform:\nW(a,b) = ∫ x(t) · (1/√a) · ψ((t-b)/a) dt\n\nScale-frequency relationship:\nFrequency band: [π/a, 2π/a]\nPerfect separation between scales\n\nLimitations:\n- Infinite time support (slow decay)\n- Gibbs phenomenon (ringing)\n- Not practical for finite data\n- Needs truncation/windowing in practice\n\nPractical approximations:\n- Windowed Shannon (apply window to truncate)\n- Discrete Meyer (FIR approximation)\n- Sinc-windowed filters","parameters":"","intuition":"The Shannon wavelet is like the Platonic ideal of a frequency filter - theoretically perfect rectangular frequency response, but exists in mathematical heaven, not practical reality. It shows us what perfect frequency separation looks like, even if we can only approximate it in actual trading systems.","rawContent":"The Shannon wavelet is the ideal band-limited wavelet, having perfect rectangular frequency response (brick-wall filter). It's defined by the sinc function in time domain and represents the theoretical optimum for frequency separation, though it has infinite time support making it impractical for finite data.\n\nIn trading, the Shannon wavelet serves as the theoretical benchmark for perfect frequency isolation - while not practical for direct implementation, it guides the design of band-limited filters and helps understand fundamental limits of cycle separation.\n\nMathematical representation:\n\nTime domain:\nψ(t) = sinc(2t) - sinc(t)\n\nWhere sinc(t) = sin(πt)/(πt)\n\nExpanded form:\nψ(t) = [sin(2πt)/(2πt)] - [sin(πt)/(πt)]\n\nFrequency domain (perfect band-pass):\n       ⎧ 1   for π ≤ |ω| ≤ 2π\nΨ̂(ω) = ⎨\n       ⎩ 0   otherwise\n\nProperties:\n- Perfect band-limited (compact in frequency)\n- Infinite support in time domain\n- Orthogonal\n- Ideal frequency localization\n- Poor time localization (sinc oscillates forever)\n- Uncertainty principle limit\n\nContinuous Wavelet Transform:\nW(a,b) = ∫ x(t) · (1/√a) · ψ((t-b)/a) dt\n\nScale-frequency relationship:\nFrequency band: [π/a, 2π/a]\nPerfect separation between scales\n\nLimitations:\n- Infinite time support (slow decay)\n- Gibbs phenomenon (ringing)\n- Not practical for finite data\n- Needs truncation/windowing in practice\n\nPractical approximations:\n- Windowed Shannon (apply window to truncate)\n- Discrete Meyer (FIR approximation)\n- Sinc-windowed filters\n\nThe Shannon wavelet is like the Platonic ideal of a frequency filter - theoretically perfect rectangular frequency response, but exists in mathematical heaven, not practical reality. It shows us what perfect frequency separation looks like, even if we can only approximate it in actual trading systems.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Shannon_Wavelet.txt","hasFullInfo":true},{"id":188,"title":"Singular Spectrum Analysis (SSA)","filename":"Singular_Spectrum_Analysis.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Time series decomposition","overview":"Singular Spectrum Analysis is a non-parametric technique for time series decomposition that uses singular value decomposition (SVD) to separate signal into trend, oscillatory components, and noise. Unlike wavelets, SSA is data-adaptive, extracting components based on the signal's own structure rather than predefined basis functions.","formula":"In trading, SSA extracts trends, cycles, and noise directly from price data without assuming specific periodicities, making it robust for markets where cycle lengths vary or overlap, providing clean decomposition for regime identification and signal generation.\n\nMathematical representation:\n\nStep 1: Embedding (create trajectory matrix)\nWindow length L, series length N\nX = [x₁, x₂, ..., x_K]\nWhere K = N - L + 1\n\nTrajectory matrix (L × K):\nX = [X₁, X₂, ..., X_K]\nWhere Xⱼ = [xⱼ, xⱼ₊₁, ..., xⱼ₊L₋₁]ᵀ\n\nStep 2: SVD decomposition\nX = U·Σ·Vᵀ","parameters":"Where:\n- U: L × L left singular vectors (eigenvectors)\n- Σ: L × K diagonal (singular values)\n- V: K × K right singular vectors\n\nStep 3: Grouping\nElementary matrices:\nXᵢ = σᵢ·uᵢ·vᵢᵀ\n\nGroup by eigenvalue contribution:\nTrend: X_trend = Σ Xᵢ (large σᵢ)\nCycles: X_cycles = Σ Xⱼ (paired σⱼ)\nNoise: X_noise = Σ Xₖ (small σₖ)\n\nStep 4: Reconstruction (diagonal averaging)\nHankelization: convert matrices back to series\n\nParameters:\n- L: window length (typically N/4 to N/2)\n- Grouping: which components to combine\n\nSelection criteria:\n- Scree plot: eigenvalue magnitude\n- Paired eigenvalues: oscillatory components\n- w-correlation: component separability","intuition":"SSA is like reverse-engineering a signal - you embed it in high dimensions, find its natural geometric directions (singular vectors), then reconstruct only the components you want (trend, cycles, or noise). Completely data-driven, no assumptions about what cycles exist.","rawContent":"Singular Spectrum Analysis is a non-parametric technique for time series decomposition that uses singular value decomposition (SVD) to separate signal into trend, oscillatory components, and noise. Unlike wavelets, SSA is data-adaptive, extracting components based on the signal's own structure rather than predefined basis functions.\n\nIn trading, SSA extracts trends, cycles, and noise directly from price data without assuming specific periodicities, making it robust for markets where cycle lengths vary or overlap, providing clean decomposition for regime identification and signal generation.\n\nMathematical representation:\n\nStep 1: Embedding (create trajectory matrix)\nWindow length L, series length N\nX = [x₁, x₂, ..., x_K]\nWhere K = N - L + 1\n\nTrajectory matrix (L × K):\nX = [X₁, X₂, ..., X_K]\nWhere Xⱼ = [xⱼ, xⱼ₊₁, ..., xⱼ₊L₋₁]ᵀ\n\nStep 2: SVD decomposition\nX = U·Σ·Vᵀ\n\nWhere:\n- U: L × L left singular vectors (eigenvectors)\n- Σ: L × K diagonal (singular values)\n- V: K × K right singular vectors\n\nStep 3: Grouping\nElementary matrices:\nXᵢ = σᵢ·uᵢ·vᵢᵀ\n\nGroup by eigenvalue contribution:\nTrend: X_trend = Σ Xᵢ (large σᵢ)\nCycles: X_cycles = Σ Xⱼ (paired σⱼ)\nNoise: X_noise = Σ Xₖ (small σₖ)\n\nStep 4: Reconstruction (diagonal averaging)\nHankelization: convert matrices back to series\n\nParameters:\n- L: window length (typically N/4 to N/2)\n- Grouping: which components to combine\n\nSelection criteria:\n- Scree plot: eigenvalue magnitude\n- Paired eigenvalues: oscillatory components\n- w-correlation: component separability\n\nSSA is like reverse-engineering a signal - you embed it in high dimensions, find its natural geometric directions (singular vectors), then reconstruct only the components you want (trend, cycles, or noise). Completely data-driven, no assumptions about what cycles exist.","tags":["Wavelets","Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 8/Singular_Spectrum_Analysis.txt","hasFullInfo":true},{"id":189,"title":"Stationary Wavelet Transform (SWT)","filename":"Stationary_Wavelet_Transform.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Translation-invariant","overview":"The Stationary Wavelet Transform (also called Undecimated Wavelet Transform or Redundant Wavelet Transform) removes the downsampling step from standard DWT, making it translation-invariant. By maintaining the same length at each decomposition level, SWT avoids the shift-variance problem where small signal shifts cause large changes in wavelet coefficients.","formula":"In trading, SWT provides consistent decomposition regardless of where the analysis window starts, essential for reliable signals that don't depend on arbitrary bar indexing or data alignment, making indicators more robust and predictable.\n\nMathematical representation:\n\nStandard DWT (with downsampling):\nA_{j+1}[n] = Σ h[k]A_j[2n-k]  ↓2\nD_{j+1}[n] = Σ g[k]A_j[2n-k]  ↓2\n\nSWT (no downsampling):\nA_{j+1}[n] = Σ h[k]A_j[n-2^j·k]\nD_{j+1}[n] = Σ g[k]A_j[n-2^j·k]\n\nKey difference: filter upsampling instead of signal downsampling\n\nUpsampled filters at level j:\nh_j[k] = h[k] if k is multiple of 2^j, else 0\ng_j[k] = g[k] if k is multiple of 2^j, else 0\n\nProperties:\n- Translation-invariant: shift x[n] → shift coefficients by same amount\n- Same length at all levels: N samples → N coefficients per level\n- Redundant: O(J·N) coefficients for J levels\n- No information loss from downsampling\n\nReconstruction (averaging):\nx[n] = (1/2^J) Σ [reconstruction paths]\n\nAdvantages over DWT:\n- Shift-invariant (critical for trading signals)\n- Better for feature detection\n- Smoother reconstruction\n- No edge effects from downsampling\n\nDisadvantages:\n- Higher computational cost: O(J·N) vs O(N)\n- More memory: stores all levels at full length\n- Redundant representation","parameters":"","intuition":"SWT is like taking a photo with a steady camera versus a shaky one - standard DWT is sensitive to tiny shifts (shake), producing different coefficients if you start analysis one bar earlier/later. SWT stays steady, giving consistent decomposition regardless of alignment. Worth the extra computation for reliable trading signals.","rawContent":"The Stationary Wavelet Transform (also called Undecimated Wavelet Transform or Redundant Wavelet Transform) removes the downsampling step from standard DWT, making it translation-invariant. By maintaining the same length at each decomposition level, SWT avoids the shift-variance problem where small signal shifts cause large changes in wavelet coefficients.\n\nIn trading, SWT provides consistent decomposition regardless of where the analysis window starts, essential for reliable signals that don't depend on arbitrary bar indexing or data alignment, making indicators more robust and predictable.\n\nMathematical representation:\n\nStandard DWT (with downsampling):\nA_{j+1}[n] = Σ h[k]A_j[2n-k]  ↓2\nD_{j+1}[n] = Σ g[k]A_j[2n-k]  ↓2\n\nSWT (no downsampling):\nA_{j+1}[n] = Σ h[k]A_j[n-2^j·k]\nD_{j+1}[n] = Σ g[k]A_j[n-2^j·k]\n\nKey difference: filter upsampling instead of signal downsampling\n\nUpsampled filters at level j:\nh_j[k] = h[k] if k is multiple of 2^j, else 0\ng_j[k] = g[k] if k is multiple of 2^j, else 0\n\nProperties:\n- Translation-invariant: shift x[n] → shift coefficients by same amount\n- Same length at all levels: N samples → N coefficients per level\n- Redundant: O(J·N) coefficients for J levels\n- No information loss from downsampling\n\nReconstruction (averaging):\nx[n] = (1/2^J) Σ [reconstruction paths]\n\nAdvantages over DWT:\n- Shift-invariant (critical for trading signals)\n- Better for feature detection\n- Smoother reconstruction\n- No edge effects from downsampling\n\nDisadvantages:\n- Higher computational cost: O(J·N) vs O(N)\n- More memory: stores all levels at full length\n- Redundant representation\n\nSWT is like taking a photo with a steady camera versus a shaky one - standard DWT is sensitive to tiny shifts (shake), producing different coefficients if you start analysis one bar earlier/later. SWT stays steady, giving consistent decomposition regardless of alignment. Worth the extra computation for reliable trading signals.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Stationary_Wavelet_Transform.txt","hasFullInfo":true},{"id":190,"title":"Super Smoother (2-pole & 3-pole Butterworth)","filename":"Super_Smoother.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Enhanced smoothing","overview":"The Super Smoother is John Ehlers' implementation of a 2-pole or 3-pole Butterworth filter optimized for financial data. It provides excellent smoothing with sharp rolloff while introducing minimal lag, making it one of the most popular filters in technical analysis for creating clean, responsive indicators.","formula":"In trading, the Super Smoother is widely used for smoothing price, volume, and other indicators, providing a superior alternative to simple moving averages with less lag and better noise rejection.\n\nMathematical representation:\n\n2-Pole Super Smoother:\na = exp(-1.414*π/Period)\nb = 2*a*cos(1.414*√2*π/Period)  \nc₂ = b\nc₃ = -a*a\nc₁ = 1 - c₂ - c₃\n\ny[i] = c₁*(x[i] + x[i-1])/2 + c₂*y[i-1] + c₃*y[i-2]\n\nSimplified form:\ncoef = exp(-1.414*π/Period)\ny[i] = (coef²*(x[i] + 2*x[i-1] + x[i-2]))/4 + 2*(1-coef)*y[i-1] - (1-coef)²*y[i-2]\n\n3-Pole Super Smoother (steeper rolloff):\na = exp(-π/Period)\nb = 2*a*cos(1.738*π/Period)\nc = a²\n\nc₁ = (1 - b + c)*(1-a)/2\nc₂ = b + a\nc₃ = -(c + a*b)\nc₄ = c*a\n\ny[i] = c₁*x[i] + c₂*y[i-1] + c₃*y[i-2] + c₄*y[i-3]\n\nProperties:\n- 2-pole: 12 dB/octave rolloff, ~2.5-bar lag\n- 3-pole: 18 dB/octave rolloff, ~3.5-bar lag\n- Maximally flat passband (Butterworth characteristic)\n- No overshoot or ringing\n- Excellent phase response","parameters":"","intuition":"The Super Smoother is like Ehlers' refined version of a moving average - it removes noise aggressively (better than SMA) while staying closer to price (less lag than SMA). The 3-pole version is even more aggressive but slightly slower.","rawContent":"The Super Smoother is John Ehlers' implementation of a 2-pole or 3-pole Butterworth filter optimized for financial data. It provides excellent smoothing with sharp rolloff while introducing minimal lag, making it one of the most popular filters in technical analysis for creating clean, responsive indicators.\n\nIn trading, the Super Smoother is widely used for smoothing price, volume, and other indicators, providing a superior alternative to simple moving averages with less lag and better noise rejection.\n\nMathematical representation:\n\n2-Pole Super Smoother:\na = exp(-1.414*π/Period)\nb = 2*a*cos(1.414*√2*π/Period)  \nc₂ = b\nc₃ = -a*a\nc₁ = 1 - c₂ - c₃\n\ny[i] = c₁*(x[i] + x[i-1])/2 + c₂*y[i-1] + c₃*y[i-2]\n\nSimplified form:\ncoef = exp(-1.414*π/Period)\ny[i] = (coef²*(x[i] + 2*x[i-1] + x[i-2]))/4 + 2*(1-coef)*y[i-1] - (1-coef)²*y[i-2]\n\n3-Pole Super Smoother (steeper rolloff):\na = exp(-π/Period)\nb = 2*a*cos(1.738*π/Period)\nc = a²\n\nc₁ = (1 - b + c)*(1-a)/2\nc₂ = b + a\nc₃ = -(c + a*b)\nc₄ = c*a\n\ny[i] = c₁*x[i] + c₂*y[i-1] + c₃*y[i-2] + c₄*y[i-3]\n\nProperties:\n- 2-pole: 12 dB/octave rolloff, ~2.5-bar lag\n- 3-pole: 18 dB/octave rolloff, ~3.5-bar lag\n- Maximally flat passband (Butterworth characteristic)\n- No overshoot or ringing\n- Excellent phase response\n\nThe Super Smoother is like Ehlers' refined version of a moving average - it removes noise aggressively (better than SMA) while staying closer to price (less lag than SMA). The 3-pole version is even more aggressive but slightly slower.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Super_Smoother.txt","hasFullInfo":true},{"id":191,"title":"Swiss Army Knife (SWAK) Indicator (2nd Order IIR)","filename":"Swiss_Army_Knife_SWAK_Indicator.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"IIR (Infinite Impulse Response)","summary":"Generalized IIR filter","overview":"The Swiss Army Knife indicator is a generalized 2nd-order IIR (Infinite Impulse Response) filter that can be configured to emulate various filter types and responses by adjusting its coefficients. Developed by John Ehlers, it's called \"Swiss Army Knife\" because it's a single filter structure that can adapt to different filtering needs, much like a multi-tool.","formula":"In trading, the SWAK indicator provides flexibility to switch between different filtering characteristics (smoothing, bandpass, high-pass) without changing the underlying code structure, making it efficient for adaptive filtering strategies.\n\nMathematical representation (2nd-order IIR):\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] - b1*y[i-1] - b2*y[i-2]\n\nWhere coefficients can be adjusted for different responses:\n- Low-pass: smoothing/trend following\n- High-pass: detrending/cycle isolation  \n- Band-pass: specific frequency extraction\n- Band-stop: notch filtering\n\nGeneral form:\nH(z) = (a0 + a1*z⁻¹ + a2*z⁻²) / (1 + b1*z⁻¹ + b2*z⁻²)\n\nCoefficient relationships:\n- Cutoff frequency controls b1, b2\n- Damping/Q-factor controls the resonance\n- a0, a1, a2 set the numerator response\n\nThe power is in coefficient flexibility:\nDifferent (a0,a1,a2,b1,b2) combinations produce different filter types while using the same computational structure.","parameters":"","intuition":"Think of the SWAK as a universal remote control for filtering - one tool that can be instantly reconfigured to do smoothing, detrending, cycle extraction, or notch filtering just by changing a few settings. Instead of having separate tools, you have one efficient structure that adapts to different needs.","rawContent":"The Swiss Army Knife indicator is a generalized 2nd-order IIR (Infinite Impulse Response) filter that can be configured to emulate various filter types and responses by adjusting its coefficients. Developed by John Ehlers, it's called \"Swiss Army Knife\" because it's a single filter structure that can adapt to different filtering needs, much like a multi-tool.\n\nIn trading, the SWAK indicator provides flexibility to switch between different filtering characteristics (smoothing, bandpass, high-pass) without changing the underlying code structure, making it efficient for adaptive filtering strategies.\n\nMathematical representation (2nd-order IIR):\ny[i] = a0*x[i] + a1*x[i-1] + a2*x[i-2] - b1*y[i-1] - b2*y[i-2]\n\nWhere coefficients can be adjusted for different responses:\n- Low-pass: smoothing/trend following\n- High-pass: detrending/cycle isolation  \n- Band-pass: specific frequency extraction\n- Band-stop: notch filtering\n\nGeneral form:\nH(z) = (a0 + a1*z⁻¹ + a2*z⁻²) / (1 + b1*z⁻¹ + b2*z⁻²)\n\nCoefficient relationships:\n- Cutoff frequency controls b1, b2\n- Damping/Q-factor controls the resonance\n- a0, a1, a2 set the numerator response\n\nThe power is in coefficient flexibility:\nDifferent (a0,a1,a2,b1,b2) combinations produce different filter types while using the same computational structure.\n\nThink of the SWAK as a universal remote control for filtering - one tool that can be instantly reconfigured to do smoothing, detrending, cycle extraction, or notch filtering just by changing a few settings. Instead of having separate tools, you have one efficient structure that adapts to different needs.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Swiss_Army_Knife_SWAK_Indicator.txt","hasFullInfo":true},{"id":192,"title":"Symlets (sym2-sym20)","filename":"Symlets.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Discrete Wavelets","summary":"Nearly symmetric wavelets","overview":"Symlets are modified Daubechies wavelets designed to be nearly symmetric while maintaining orthogonality and compact support. They were created to address the strong asymmetry of Daubechies wavelets, providing better phase characteristics and more balanced time-frequency localization, though perfect symmetry is impossible for orthogonal wavelets except the Haar.","formula":"In trading, Symlets provide better feature alignment and reduced phase distortion compared to standard Daubechies wavelets, making them preferable for applications where timing accuracy and symmetric feature detection are important.\n\nMathematical representation:\n\nLike Daubechies, defined by scaling and wavelet functions:\nφ(t) = √2 Σ hₖφ(2t - k)\nψ(t) = √2 Σ gₖφ(2t - k)\n\nBut optimized for near-symmetry:\nMinimize: Σ k|hₖ - h₋ₖ|²\nSubject to: orthogonality and vanishing moment constraints\n\nProperties:\n- sym2 ≈ db2 (minimal symmetry improvement)\n- sym4-sym20: progressively better symmetry\n- Same vanishing moments as corresponding dbN\n- Same support length (2N-1 coefficients)\n- Better phase response than Daubechies\n\nComparison to Daubechies:\n- db: Maximally asymmetric (all energy to one side)\n- sym: Minimally asymmetric (energy balanced)\n- Same smoothness properties\n- Same approximation power\n\nDecomposition (identical to Daubechies):\nApproximation: Aⱼ[i] = Σ hₖAⱼ₊₁[2i-k]\nDetail: Dⱼ[i] = Σ gₖAⱼ₊₁[2i-k]\n\nAdvantages:\n- Linear phase approximation (nearly symmetric)\n- Better feature centering\n- Reduced temporal distortion\n- Same computational cost as Daubechies\n\nSymlets are like balanced Daubechies - if db wavelets look at features with one eye, symlets use both eyes for centered vision. Features appear more balanced in time, making it easier to pinpoint when something happened in price data without the lopsided view of standard Daubechies.","parameters":"","intuition":"","rawContent":"Symlets are modified Daubechies wavelets designed to be nearly symmetric while maintaining orthogonality and compact support. They were created to address the strong asymmetry of Daubechies wavelets, providing better phase characteristics and more balanced time-frequency localization, though perfect symmetry is impossible for orthogonal wavelets except the Haar.\n\nIn trading, Symlets provide better feature alignment and reduced phase distortion compared to standard Daubechies wavelets, making them preferable for applications where timing accuracy and symmetric feature detection are important.\n\nMathematical representation:\n\nLike Daubechies, defined by scaling and wavelet functions:\nφ(t) = √2 Σ hₖφ(2t - k)\nψ(t) = √2 Σ gₖφ(2t - k)\n\nBut optimized for near-symmetry:\nMinimize: Σ k|hₖ - h₋ₖ|²\nSubject to: orthogonality and vanishing moment constraints\n\nProperties:\n- sym2 ≈ db2 (minimal symmetry improvement)\n- sym4-sym20: progressively better symmetry\n- Same vanishing moments as corresponding dbN\n- Same support length (2N-1 coefficients)\n- Better phase response than Daubechies\n\nComparison to Daubechies:\n- db: Maximally asymmetric (all energy to one side)\n- sym: Minimally asymmetric (energy balanced)\n- Same smoothness properties\n- Same approximation power\n\nDecomposition (identical to Daubechies):\nApproximation: Aⱼ[i] = Σ hₖAⱼ₊₁[2i-k]\nDetail: Dⱼ[i] = Σ gₖAⱼ₊₁[2i-k]\n\nAdvantages:\n- Linear phase approximation (nearly symmetric)\n- Better feature centering\n- Reduced temporal distortion\n- Same computational cost as Daubechies\n\nSymlets are like balanced Daubechies - if db wavelets look at features with one eye, symlets use both eyes for centered vision. Features appear more balanced in time, making it easier to pinpoint when something happened in price data without the lopsided view of standard Daubechies.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Symlets.txt","hasFullInfo":true},{"id":193,"title":"Wavelet Packet Decomposition","filename":"Wavelet_Packet_Decomposition.txt","group":"group 8","groupNum":8,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Complete frequency decomposition","overview":"Wavelet Packet Decomposition extends standard wavelet decomposition by decomposing both approximation AND detail coefficients at each level, creating a complete binary tree of frequency bands. This provides finer frequency resolution than standard DWT, allowing precise isolation of specific frequency ranges.","formula":"In trading, wavelet packets enable detailed frequency analysis by subdividing the spectrum into many narrow bands, revealing which specific cycle periods are active and allowing targeted extraction or removal of particular frequency components.\n\nMathematical representation:\n\nStandard DWT (only approximation decomposed):\nLevel 1: A₁, D₁\nLevel 2: A₂, D₂, D₁  \nLevel 3: A₃, D₃, D₂, D₁\n\nWavelet Packet (both branches decomposed):\nLevel 1: A₁, D₁\nLevel 2: AA₂, DA₂, AD₂, DD₂\nLevel 3: AAA₃, DAA₃, ADA₃, DDA₃, AAD₃, DAD₃, ADD₃, DDD₃\n\nBinary tree structure:\nW⁰₀ = signal\nW^(j+1)_(2n) = Σ hₖW^j_n[k]     (low-pass)\nW^(j+1)_(2n+1) = Σ gₖW^j_n[k]   (high-pass)","parameters":"Where:\n- j = decomposition level\n- n = node index at level j\n- h, g = wavelet filter coefficients\n\nNumber of nodes:\nLevel j: 2ʲ frequency bands\nTotal nodes: 2^(j+1) - 1\n\nFrequency bands at level J:\nBand k: [k·fs/2^(J+1), (k+1)·fs/2^(J+1)]\nWhere fs = sampling frequency\n\nBest basis selection:\nChoose optimal tree by minimizing cost function:\nCost(tree) = Σ M(node)\nWhere M = information cost (entropy, energy, etc.)\n\nCommon cost functions:\n- Shannon entropy: -Σ p²ᵢ log(p²ᵢ)\n- Energy: Σ |coefficient|²\n- Threshold: number above threshold\n\nWavelet packets are like a frequency microscope with variable zoom - standard DWT divides frequency like [0-25Hz] → [0-12.5Hz, 12.5-25Hz], but packets can create [0-6.25, 6.25-12.5, 12.5-18.75, 18.75-25] giving you 4× finer frequency resolution. Perfect for finding that specific 17-bar cycle.","intuition":"","rawContent":"Wavelet Packet Decomposition extends standard wavelet decomposition by decomposing both approximation AND detail coefficients at each level, creating a complete binary tree of frequency bands. This provides finer frequency resolution than standard DWT, allowing precise isolation of specific frequency ranges.\n\nIn trading, wavelet packets enable detailed frequency analysis by subdividing the spectrum into many narrow bands, revealing which specific cycle periods are active and allowing targeted extraction or removal of particular frequency components.\n\nMathematical representation:\n\nStandard DWT (only approximation decomposed):\nLevel 1: A₁, D₁\nLevel 2: A₂, D₂, D₁  \nLevel 3: A₃, D₃, D₂, D₁\n\nWavelet Packet (both branches decomposed):\nLevel 1: A₁, D₁\nLevel 2: AA₂, DA₂, AD₂, DD₂\nLevel 3: AAA₃, DAA₃, ADA₃, DDA₃, AAD₃, DAD₃, ADD₃, DDD₃\n\nBinary tree structure:\nW⁰₀ = signal\nW^(j+1)_(2n) = Σ hₖW^j_n[k]     (low-pass)\nW^(j+1)_(2n+1) = Σ gₖW^j_n[k]   (high-pass)\n\nWhere:\n- j = decomposition level\n- n = node index at level j\n- h, g = wavelet filter coefficients\n\nNumber of nodes:\nLevel j: 2ʲ frequency bands\nTotal nodes: 2^(j+1) - 1\n\nFrequency bands at level J:\nBand k: [k·fs/2^(J+1), (k+1)·fs/2^(J+1)]\nWhere fs = sampling frequency\n\nBest basis selection:\nChoose optimal tree by minimizing cost function:\nCost(tree) = Σ M(node)\nWhere M = information cost (entropy, energy, etc.)\n\nCommon cost functions:\n- Shannon entropy: -Σ p²ᵢ log(p²ᵢ)\n- Energy: Σ |coefficient|²\n- Threshold: number above threshold\n\nWavelet packets are like a frequency microscope with variable zoom - standard DWT divides frequency like [0-25Hz] → [0-12.5Hz, 12.5-25Hz], but packets can create [0-6.25, 6.25-12.5, 12.5-18.75, 18.75-25] giving you 4× finer frequency resolution. Perfect for finding that specific 17-bar cycle.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 8/Wavelet_Packet_Decomposition.txt","hasFullInfo":true},{"id":194,"title":"Windowed Sinc Filter","filename":"Windowed_Sinc_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Ideal frequency response approximation","overview":"A Windowed Sinc filter approximates the ideal \"brick-wall\" frequency response by using a truncated and windowed sinc function (sin(x)/x) as its impulse response. The sinc function theoretically provides perfect frequency separation, but requires infinite length, so windowing makes it practical by limiting the filter length while minimizing artifacts from truncation.","formula":"In trading, Windowed Sinc filters can provide very sharp frequency cutoffs with minimal passband distortion, useful for precisely isolating specific cycle periods or removing high-frequency noise while preserving low-frequency trends.\n\nMathematical representation:\nIdeal low-pass sinc function:\nh[n] = sin(2πfc*n) / (π*n)  for -∞ < n < ∞\n\nWhere fc = cutoff frequency (normalized, 0 to 0.5)\n\nWindowed version:\nh[n] = w[n] * sin(2πfc*n) / (π*n)  for -M ≤ n ≤ M\n\nCommon windows:\n- Hamming: w[n] = 0.54 - 0.46*cos(2πn/N)\n- Hanning: w[n] = 0.5 - 0.5*cos(2πn/N)  \n- Blackman: w[n] = 0.42 - 0.5*cos(2πn/N) + 0.08*cos(4πn/N)\n- Kaiser: w[n] = I0(β*√(1-(n/M)²)) / I0(β)\n\nFilter output:\ny[i] = Σ(n=-M to M) h[n] * x[i-n]","parameters":"Parameters:\n- M: filter half-length (longer = sharper cutoff, more computation)\n- fc: cutoff frequency\n- Window type: controls sidelobe suppression vs main lobe width","intuition":"A Windowed Sinc filter is like trying to build a perfect wall - the sinc function is the ideal wall blueprint, but you can only build a finite section of it. The window is how you gracefully taper the edges so your finite wall doesn't create ugly echoes (ringing). You get very close to perfect frequency separation in practical use.","rawContent":"A Windowed Sinc filter approximates the ideal \"brick-wall\" frequency response by using a truncated and windowed sinc function (sin(x)/x) as its impulse response. The sinc function theoretically provides perfect frequency separation, but requires infinite length, so windowing makes it practical by limiting the filter length while minimizing artifacts from truncation.\n\nIn trading, Windowed Sinc filters can provide very sharp frequency cutoffs with minimal passband distortion, useful for precisely isolating specific cycle periods or removing high-frequency noise while preserving low-frequency trends.\n\nMathematical representation:\nIdeal low-pass sinc function:\nh[n] = sin(2πfc*n) / (π*n)  for -∞ < n < ∞\n\nWhere fc = cutoff frequency (normalized, 0 to 0.5)\n\nWindowed version:\nh[n] = w[n] * sin(2πfc*n) / (π*n)  for -M ≤ n ≤ M\n\nCommon windows:\n- Hamming: w[n] = 0.54 - 0.46*cos(2πn/N)\n- Hanning: w[n] = 0.5 - 0.5*cos(2πn/N)  \n- Blackman: w[n] = 0.42 - 0.5*cos(2πn/N) + 0.08*cos(4πn/N)\n- Kaiser: w[n] = I0(β*√(1-(n/M)²)) / I0(β)\n\nFilter output:\ny[i] = Σ(n=-M to M) h[n] * x[i-n]\n\nParameters:\n- M: filter half-length (longer = sharper cutoff, more computation)\n- fc: cutoff frequency\n- Window type: controls sidelobe suppression vs main lobe width\n\nA Windowed Sinc filter is like trying to build a perfect wall - the sinc function is the ideal wall blueprint, but you can only build a finite section of it. The window is how you gracefully taper the edges so your finite wall doesn't create ugly echoes (ringing). You get very close to perfect frequency separation in practical use.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Windowed_Sinc_Filter.txt","hasFullInfo":true},{"id":195,"title":"Zero-Phase FIR Filter","filename":"Zero_Phase_FIR_Filter.txt","group":"group 8","groupNum":8,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"FIR (Finite Impulse Response)","summary":"Forward-backward filtering","overview":"A Zero-Phase FIR filter achieves zero phase distortion by applying the filter in both forward and reverse directions (forward-backward filtering), effectively eliminating the phase delay that normally occurs with causal filters. This technique doubles the filter order and makes it non-causal (can only be used on pre-recorded data), but produces perfect phase response.","formula":"In trading, zero-phase filters are valuable for historical analysis, backtesting, and indicator development where you want absolutely no time shift in signals, ensuring that turning points and features appear at their exact true locations.\n\nMathematical representation:\nStandard FIR (with phase delay):\ny[i] = Σ(n=0 to N) h[n] * x[i-n]\n\nZero-phase (forward-backward):\n1. Forward pass: y1[i] = Σ(n=0 to N) h[n] * x[i-n]\n2. Reverse pass: y2[i] = Σ(n=0 to N) h[n] * y1[L-i-n]  \n3. Reverse result: y[i] = y2[L-i]\n\nFrequency response:\n- Magnitude: |H(ω)|² (squared magnitude of original filter)\n- Phase: 0 for all frequencies\n\nEffective filter order: 2N (double the original)\n\nKey properties:\n- Perfect phase linearity (φ(ω) = 0)\n- No time delay/shift\n- Magnitude response is square of single-pass\n- Non-causal (requires future data)\n- Cannot be used in real-time","parameters":"","intuition":"A zero-phase filter is like time-traveling to smooth data - you process it forward in time, then backward in time, and the two passes cancel out all the time-shifting effects. The result is a smoothed signal where peaks, valleys, and trends occur at their exact original timestamps. Perfect for backtesting, impossible for live trading.","rawContent":"A Zero-Phase FIR filter achieves zero phase distortion by applying the filter in both forward and reverse directions (forward-backward filtering), effectively eliminating the phase delay that normally occurs with causal filters. This technique doubles the filter order and makes it non-causal (can only be used on pre-recorded data), but produces perfect phase response.\n\nIn trading, zero-phase filters are valuable for historical analysis, backtesting, and indicator development where you want absolutely no time shift in signals, ensuring that turning points and features appear at their exact true locations.\n\nMathematical representation:\nStandard FIR (with phase delay):\ny[i] = Σ(n=0 to N) h[n] * x[i-n]\n\nZero-phase (forward-backward):\n1. Forward pass: y1[i] = Σ(n=0 to N) h[n] * x[i-n]\n2. Reverse pass: y2[i] = Σ(n=0 to N) h[n] * y1[L-i-n]  \n3. Reverse result: y[i] = y2[L-i]\n\nFrequency response:\n- Magnitude: |H(ω)|² (squared magnitude of original filter)\n- Phase: 0 for all frequencies\n\nEffective filter order: 2N (double the original)\n\nKey properties:\n- Perfect phase linearity (φ(ω) = 0)\n- No time delay/shift\n- Magnitude response is square of single-pass\n- Non-causal (requires future data)\n- Cannot be used in real-time\n\nA zero-phase filter is like time-traveling to smooth data - you process it forward in time, then backward in time, and the two passes cancel out all the time-shifting effects. The result is a smoothed signal where peaks, valleys, and trends occur at their exact original timestamps. Perfect for backtesting, impossible for live trading.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 8/Zero_Phase_FIR_Filter.txt","hasFullInfo":true},{"id":196,"title":"Adaptive Deadband with Hysteresis","filename":"Adaptive_Deadband_with_Hysteresis.txt","group":"group 9","groupNum":9,"categoryId":19,"categoryTitle":"19. HYSTERESIS & THRESHOLD FILTERS","subcategory":"General","summary":"State-dependent threshold","overview":"Adaptive Deadband with Hysteresis creates a zone where small price movements are ignored (deadband) and uses different thresholds for entering vs. exiting states (hysteresis). The deadband width adapts based on market conditions like volatility. This prevents whipsaw signals during choppy markets while remaining responsive during trending periods.","formula":"Implementation concept:\n- Upper threshold = price + α*ATR\n- Lower threshold = price - α*ATR\n- State changes only when crossing thresholds\n- Deadband width (α) adapts to volatility\n\nOnce triggered, requires crossing opposite threshold to reverse - not just returning to neutral zone.","parameters":"","intuition":"Think of a thermostat with a smart buffer zone. If you set it to 70°F, it doesn't flip on/off constantly at 70° - it waits until 68° to turn on, then 72° to turn off. Adaptive deadband does this for trading signals, with the buffer zone getting wider when the market is choppy (so you don't get fake signals) and narrower when it's trending smoothly.","rawContent":"Adaptive Deadband with Hysteresis creates a zone where small price movements are ignored (deadband) and uses different thresholds for entering vs. exiting states (hysteresis). The deadband width adapts based on market conditions like volatility. This prevents whipsaw signals during choppy markets while remaining responsive during trending periods.\n\nImplementation concept:\n- Upper threshold = price + α*ATR\n- Lower threshold = price - α*ATR\n- State changes only when crossing thresholds\n- Deadband width (α) adapts to volatility\n\nOnce triggered, requires crossing opposite threshold to reverse - not just returning to neutral zone.\n\nThink of a thermostat with a smart buffer zone. If you set it to 70°F, it doesn't flip on/off constantly at 70° - it waits until 68° to turn on, then 72° to turn off. Adaptive deadband does this for trading signals, with the buffer zone getting wider when the market is choppy (so you don't get fake signals) and narrower when it's trending smoothly.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 9/Adaptive_Deadband_with_Hysteresis.txt","hasFullInfo":true},{"id":197,"title":"Band-Limited Hysteresis","filename":"Band-Limited_Hysteresis.txt","group":"group 9","groupNum":9,"categoryId":19,"categoryTitle":"19. HYSTERESIS & THRESHOLD FILTERS","subcategory":"General","summary":"Frequency-selective hysteresis","overview":"Band-Limited Hysteresis combines frequency-selective filtering with hysteresis behavior. It applies hysteresis only to specific frequency components of the signal, allowing high-frequency noise to be ignored while preserving responsiveness to significant mid-frequency trends. This is achieved by first bandpass filtering the signal, then applying hysteresis to the filtered output.","formula":"Process flow:\n1. Bandpass filter input signal (isolate frequency range)\n2. Apply hysteresis thresholds to filtered signal\n3. Generate state transitions based on filtered + hysteresis logic\n\nFrequency range typically targets cyclical components while excluding noise and very long trends.\n\nImagine noise-canceling headphones that only block certain annoying sounds (high-pitched buzzes) but let through important sounds (alarms). Band-Limited Hysteresis does the same for trading signals - it ignores rapid price jitter at specific frequencies that cause false signals, while still responding to meaningful moves in the frequency range that matters.","parameters":"","intuition":"","rawContent":"Band-Limited Hysteresis combines frequency-selective filtering with hysteresis behavior. It applies hysteresis only to specific frequency components of the signal, allowing high-frequency noise to be ignored while preserving responsiveness to significant mid-frequency trends. This is achieved by first bandpass filtering the signal, then applying hysteresis to the filtered output.\n\nProcess flow:\n1. Bandpass filter input signal (isolate frequency range)\n2. Apply hysteresis thresholds to filtered signal\n3. Generate state transitions based on filtered + hysteresis logic\n\nFrequency range typically targets cyclical components while excluding noise and very long trends.\n\nImagine noise-canceling headphones that only block certain annoying sounds (high-pitched buzzes) but let through important sounds (alarms). Band-Limited Hysteresis does the same for trading signals - it ignores rapid price jitter at specific frequencies that cause false signals, while still responding to meaningful moves in the frequency range that matters.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 9/Band-Limited_Hysteresis.txt","hasFullInfo":true},{"id":198,"title":"Bayesian Structural Time Series (BSTS)","filename":"Bayesian_Structural_Time_Series.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Bayesian forecasting","overview":"Bayesian Structural Time Series is a statistical framework for modeling time series data that combines state-space models with Bayesian inference. It decomposes a time series into structural components (trend, seasonality, regression effects) and estimates them probabilistically. BSTS is particularly useful for forecasting and causal inference, allowing for automatic feature selection and uncertainty quantification.","formula":"Key components:\n- Local level/trend component: μ(t+1) = μ(t) + δ(t) + ε(t)\n- Seasonal component with periodic patterns\n- Regression component for external predictors\n- Spike-and-slab priors for automatic variable selection","parameters":"","intuition":"BSTS is like having multiple theories about why prices move (trends, cycles, news events) and letting the data tell you which theories matter most. It doesn't just give you one prediction - it gives you a range of likely outcomes with probabilities, like a weather forecast that says \"70% chance of rain\" instead of just \"it will rain.\"","rawContent":"Bayesian Structural Time Series is a statistical framework for modeling time series data that combines state-space models with Bayesian inference. It decomposes a time series into structural components (trend, seasonality, regression effects) and estimates them probabilistically. BSTS is particularly useful for forecasting and causal inference, allowing for automatic feature selection and uncertainty quantification.\n\nKey components:\n- Local level/trend component: μ(t+1) = μ(t) + δ(t) + ε(t)\n- Seasonal component with periodic patterns\n- Regression component for external predictors\n- Spike-and-slab priors for automatic variable selection\n\nBSTS is like having multiple theories about why prices move (trends, cycles, news events) and letting the data tell you which theories matter most. It doesn't just give you one prediction - it gives you a range of likely outcomes with probabilities, like a weather forecast that says \"70% chance of rain\" instead of just \"it will rain.\"","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 9/Bayesian_Structural_Time_Series.txt","hasFullInfo":true},{"id":199,"title":"Dynamic Linear Model (DLM)","filename":"Dynamic_Linear_Model.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Time-varying coefficients","overview":"Dynamic Linear Model is a state-space framework where the model parameters (coefficients) can change over time rather than being fixed. This allows the relationship between variables to evolve, making DLMs suitable for non-stationary time series where market regimes shift. DLMs use Bayesian updating to recursively estimate time-varying coefficients.","formula":"Standard form:\n- Observation: y(t) = F(t)'*θ(t) + v(t)  [v ~ N(0, V(t))]\n- State evolution: θ(t) = G(t)*θ(t-1) + w(t)  [w ~ N(0, W(t))]\n\nWhere θ(t) are time-varying parameters updated recursively.","parameters":"","intuition":"Think of DLM as adjusting your trading rules on the fly. If a stock normally follows the market but suddenly starts moving independently, a DLM notices this shift and updates its \"rules\" automatically. It's like having a playbook that rewrites itself as the game changes.","rawContent":"Dynamic Linear Model is a state-space framework where the model parameters (coefficients) can change over time rather than being fixed. This allows the relationship between variables to evolve, making DLMs suitable for non-stationary time series where market regimes shift. DLMs use Bayesian updating to recursively estimate time-varying coefficients.\n\nStandard form:\n- Observation: y(t) = F(t)'*θ(t) + v(t)  [v ~ N(0, V(t))]\n- State evolution: θ(t) = G(t)*θ(t-1) + w(t)  [w ~ N(0, W(t))]\n\nWhere θ(t) are time-varying parameters updated recursively.\n\nThink of DLM as adjusting your trading rules on the fly. If a stock normally follows the market but suddenly starts moving independently, a DLM notices this shift and updates its \"rules\" automatically. It's like having a playbook that rewrites itself as the game changes.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 9/Dynamic_Linear_Model.txt","hasFullInfo":true},{"id":200,"title":"Hidden Markov Model (HMM) Filter","filename":"Hidden_Markov_Model_Filter.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Discrete state filtering","overview":"Hidden Markov Model Filter is used to infer hidden states from observable data when the system follows a Markov process with discrete hidden states. Unlike direct observation, you only see outputs that depend probabilistically on these hidden states. The HMM filter (forward algorithm) computes the probability distribution over hidden states given all observations up to the current time.","formula":"Key algorithms:\n- Forward algorithm: P(S(t) | y(1:t)) - filtering\n- Viterbi algorithm: Most likely state sequence\n- Baum-Welch: Parameter learning\n\nTransition: P(S(t+1) | S(t))\nEmission: P(y(t) | S(t))","parameters":"","intuition":"HMM is like watching a traffic light through fog - you can't see the light directly, but you can see cars stopping and going. From their behavior, you infer whether the light is red or green. Similarly, HMM looks at price movements to figure out hidden market states you can't directly observe.","rawContent":"Hidden Markov Model Filter is used to infer hidden states from observable data when the system follows a Markov process with discrete hidden states. Unlike direct observation, you only see outputs that depend probabilistically on these hidden states. The HMM filter (forward algorithm) computes the probability distribution over hidden states given all observations up to the current time.\n\nKey algorithms:\n- Forward algorithm: P(S(t) | y(1:t)) - filtering\n- Viterbi algorithm: Most likely state sequence\n- Baum-Welch: Parameter learning\n\nTransition: P(S(t+1) | S(t))\nEmission: P(y(t) | S(t))\n\nHMM is like watching a traffic light through fog - you can't see the light directly, but you can see cars stopping and going. From their behavior, you infer whether the light is red or green. Similarly, HMM looks at price movements to figure out hidden market states you can't directly observe.","tags":["DSP Filtering","State Space","Regime Switching"],"relPath":"public/concept-list/list-concepts/group 9/Hidden_Markov_Model_Filter.txt","hasFullInfo":true},{"id":201,"title":"Markov Switching Model Filter","filename":"Markov_Switching_Model_Filter.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Regime-dependent filtering","overview":"Markov Switching Model Filter allows parameters of a model to switch between different regimes (states) according to an unobserved Markov chain. The market can be in different states (e.g., bull, bear, high volatility, low volatility), and the model probabilistically determines which state is currently active. This captures regime changes where market behavior fundamentally shifts.","formula":"Basic structure:\ny(t) = μ(S(t)) + σ(S(t))*ε(t)\n\nWhere S(t) is the regime at time t, following a Markov chain:\nP(S(t)=j | S(t-1)=i) = p(ij)\n\nThe filter estimates both current regime probabilities and model parameters for each regime.\n\nImagine the market has multiple personalities - calm and steady, or wild and volatile. A Markov Switching Model figures out which \"personality\" the market has right now and predicts when it might switch moods. It's like recognizing whether you're in fair weather or a storm, so you can adjust your strategy accordingly.","parameters":"","intuition":"","rawContent":"Markov Switching Model Filter allows parameters of a model to switch between different regimes (states) according to an unobserved Markov chain. The market can be in different states (e.g., bull, bear, high volatility, low volatility), and the model probabilistically determines which state is currently active. This captures regime changes where market behavior fundamentally shifts.\n\nBasic structure:\ny(t) = μ(S(t)) + σ(S(t))*ε(t)\n\nWhere S(t) is the regime at time t, following a Markov chain:\nP(S(t)=j | S(t-1)=i) = p(ij)\n\nThe filter estimates both current regime probabilities and model parameters for each regime.\n\nImagine the market has multiple personalities - calm and steady, or wild and volatile. A Markov Switching Model figures out which \"personality\" the market has right now and predicts when it might switch moods. It's like recognizing whether you're in fair weather or a storm, so you can adjust your strategy accordingly.","tags":["DSP Filtering","State Space","Regime Switching"],"relPath":"public/concept-list/list-concepts/group 9/Markov_Switching_Model_Filter.txt","hasFullInfo":true},{"id":202,"title":"Particle MCMC","filename":"Particle_MCMC.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Particle-based Bayesian inference","overview":"Particle MCMC combines particle filtering (Sequential Monte Carlo) with Markov Chain Monte Carlo methods to perform Bayesian inference in complex state-space models. While standard particle filters estimate hidden states, Particle MCMC also estimates unknown model parameters by embedding particle filters within MCMC samplers. This is particularly useful for nonlinear/non-Gaussian models where analytical solutions don't exist.","formula":"Common variants:\n- Particle Marginal Metropolis-Hastings (PMMH)\n- Particle Gibbs sampler\n- SMC² (Sequential Monte Carlo squared)\n\nThe method alternates between:\n1. Particle filter: Estimate states given parameters\n2. MCMC: Update parameters given states","parameters":"","intuition":"Particle MCMC is like running thousands of simulations of possible market scenarios, keeping the ones that match reality best, then using those winners to improve your model. It's a \"trial and error on steroids\" approach that works even when the math is too complicated for traditional methods.","rawContent":"Particle MCMC combines particle filtering (Sequential Monte Carlo) with Markov Chain Monte Carlo methods to perform Bayesian inference in complex state-space models. While standard particle filters estimate hidden states, Particle MCMC also estimates unknown model parameters by embedding particle filters within MCMC samplers. This is particularly useful for nonlinear/non-Gaussian models where analytical solutions don't exist.\n\nCommon variants:\n- Particle Marginal Metropolis-Hastings (PMMH)\n- Particle Gibbs sampler\n- SMC² (Sequential Monte Carlo squared)\n\nThe method alternates between:\n1. Particle filter: Estimate states given parameters\n2. MCMC: Update parameters given states\n\nParticle MCMC is like running thousands of simulations of possible market scenarios, keeping the ones that match reality best, then using those winners to improve your model. It's a \"trial and error on steroids\" approach that works even when the math is too complicated for traditional methods.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 9/Particle_MCMC.txt","hasFullInfo":true},{"id":203,"title":"Schmitt Trigger Filter","filename":"Schmitt_Trigger_Filter.txt","group":"group 9","groupNum":9,"categoryId":19,"categoryTitle":"19. HYSTERESIS & THRESHOLD FILTERS","subcategory":"General","summary":"Dual threshold switching","overview":"Schmitt Trigger Filter is a comparator with hysteresis that switches states at two different threshold levels. It transitions to \"high\" state when input exceeds the upper threshold, and transitions to \"low\" state only when input falls below the lower threshold. This eliminates false triggers from noise around a single threshold level, making it ideal for detecting clean regime changes.","formula":"Logic structure:\n- If signal > upper_threshold: state = HIGH\n- If signal < lower_threshold: state = LOW\n- Otherwise: state = PREVIOUS_STATE (maintain current state)\n\nThe gap between thresholds creates hysteresis that filters noise.","parameters":"","intuition":"A Schmitt Trigger is like a bouncer at a club with strict rules: you need to be THIS tall to get in, but once you're inside, you can stay even if you shrink a bit - you only get kicked out if you're THIS short. In trading, it means you need strong momentum to trigger a signal, but small pullbacks won't immediately cancel it.","rawContent":"Schmitt Trigger Filter is a comparator with hysteresis that switches states at two different threshold levels. It transitions to \"high\" state when input exceeds the upper threshold, and transitions to \"low\" state only when input falls below the lower threshold. This eliminates false triggers from noise around a single threshold level, making it ideal for detecting clean regime changes.\n\nLogic structure:\n- If signal > upper_threshold: state = HIGH\n- If signal < lower_threshold: state = LOW\n- Otherwise: state = PREVIOUS_STATE (maintain current state)\n\nThe gap between thresholds creates hysteresis that filters noise.\n\nA Schmitt Trigger is like a bouncer at a club with strict rules: you need to be THIS tall to get in, but once you're inside, you can stay even if you shrink a bit - you only get kicked out if you're THIS short. In trading, it means you need strong momentum to trigger a signal, but small pullbacks won't immediately cancel it.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 9/Schmitt_Trigger_Filter.txt","hasFullInfo":true},{"id":204,"title":"Signal-to-Noise Ratio Filter","filename":"Signal-to-Noise_Ratio_Filter.txt","group":"group 9","groupNum":9,"categoryId":19,"categoryTitle":"19. HYSTERESIS & THRESHOLD FILTERS","subcategory":"General","summary":"SNR-based filtering","overview":"Signal-to-Noise Ratio (SNR) Filter evaluates the ratio of signal power to noise power and filters data based on this ratio. Components with high SNR are preserved while low SNR components are attenuated or removed. This adaptive approach focuses on parts of the data where genuine signal dominates over noise, improving overall quality of analysis.","formula":"SNR calculation:\nSNR = 10 * log10(P_signal / P_noise)  [in decibels]\n\nOr in linear terms:\nSNR = (mean_signal² / variance_noise)\n\nFiltering rule: Accept components where SNR > threshold\n\nHigher SNR values indicate cleaner, more reliable signal components.","parameters":"","intuition":"SNR filtering is like listening to someone talk in a noisy room - you focus on the words that come through clearly and ignore the parts drowned out by background noise. In trading, it means trusting price patterns that stand out strongly from random fluctuations while ignoring weak patterns that might just be noise.","rawContent":"Signal-to-Noise Ratio (SNR) Filter evaluates the ratio of signal power to noise power and filters data based on this ratio. Components with high SNR are preserved while low SNR components are attenuated or removed. This adaptive approach focuses on parts of the data where genuine signal dominates over noise, improving overall quality of analysis.\n\nSNR calculation:\nSNR = 10 * log10(P_signal / P_noise)  [in decibels]\n\nOr in linear terms:\nSNR = (mean_signal² / variance_noise)\n\nFiltering rule: Accept components where SNR > threshold\n\nHigher SNR values indicate cleaner, more reliable signal components.\n\nSNR filtering is like listening to someone talk in a noisy room - you focus on the words that come through clearly and ignore the parts drowned out by background noise. In trading, it means trusting price patterns that stand out strongly from random fluctuations while ignoring weak patterns that might just be noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 9/Signal-to-Noise_Ratio_Filter.txt","hasFullInfo":true},{"id":205,"title":"State-Space Model Extraction","filename":"State-Space_Model_Extraction.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Hidden state estimation","overview":"State-Space Model Extraction is a framework for estimating hidden (unobserved) states of a system from noisy observations. It represents a time series as two equations: a state equation describing how the hidden state evolves over time, and an observation equation linking the hidden state to what we actually observe. This approach is fundamental to many filtering techniques like the Kalman filter.","formula":"The model consists of:\n- State equation: x(t+1) = F*x(t) + w(t)  [where w is process noise]\n- Observation equation: y(t) = H*x(t) + v(t)  [where v is measurement noise]\n\nState-space models let you figure out what's really happening \"behind the scenes\" in price movements. Imagine trying to track a plane's true position when your radar readings are fuzzy - you need to guess where it really is based on noisy data. State-space models do the same for market trends hidden beneath price noise.","parameters":"","intuition":"","rawContent":"State-Space Model Extraction is a framework for estimating hidden (unobserved) states of a system from noisy observations. It represents a time series as two equations: a state equation describing how the hidden state evolves over time, and an observation equation linking the hidden state to what we actually observe. This approach is fundamental to many filtering techniques like the Kalman filter.\n\nThe model consists of:\n- State equation: x(t+1) = F*x(t) + w(t)  [where w is process noise]\n- Observation equation: y(t) = H*x(t) + v(t)  [where v is measurement noise]\n\nState-space models let you figure out what's really happening \"behind the scenes\" in price movements. Imagine trying to track a plane's true position when your radar readings are fuzzy - you need to guess where it really is based on noisy data. State-space models do the same for market trends hidden beneath price noise.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 9/State-Space_Model_Extraction.txt","hasFullInfo":true},{"id":206,"title":"Threshold-Based Noise Reduction","filename":"Threshold-Based_Noise_Reduction.txt","group":"group 9","groupNum":9,"categoryId":19,"categoryTitle":"19. HYSTERESIS & THRESHOLD FILTERS","subcategory":"General","summary":"Hard thresholding","overview":"Threshold-Based Noise Reduction applies hard or soft thresholding to filter out small-amplitude components assumed to be noise. Values below the threshold are either set to zero (hard thresholding) or shrunk toward zero (soft thresholding). This is commonly used in wavelet denoising and signal processing to preserve significant features while eliminating noise.","formula":"Hard thresholding:\n- If |x| > threshold: keep x\n- If |x| ≤ threshold: set to 0\n\nSoft thresholding:\n- If |x| > threshold: x - threshold*sign(x)\n- If |x| ≤ threshold: set to 0\n\nThreshold often set using noise statistics (e.g., universal threshold = σ*sqrt(2*log(n)))","parameters":"","intuition":"Think of it as a volume knob for your microphone with a cutoff - sounds quieter than a certain level get completely muted (hard threshold) or turned way down (soft threshold). In trading, small price wiggles below your threshold get ignored as noise, while real moves above it get through clearly.","rawContent":"Threshold-Based Noise Reduction applies hard or soft thresholding to filter out small-amplitude components assumed to be noise. Values below the threshold are either set to zero (hard thresholding) or shrunk toward zero (soft thresholding). This is commonly used in wavelet denoising and signal processing to preserve significant features while eliminating noise.\n\nHard thresholding:\n- If |x| > threshold: keep x\n- If |x| ≤ threshold: set to 0\n\nSoft thresholding:\n- If |x| > threshold: x - threshold*sign(x)\n- If |x| ≤ threshold: set to 0\n\nThreshold often set using noise statistics (e.g., universal threshold = σ*sqrt(2*log(n)))\n\nThink of it as a volume knob for your microphone with a cutoff - sounds quieter than a certain level get completely muted (hard threshold) or turned way down (soft threshold). In trading, small price wiggles below your threshold get ignored as noise, while real moves above it get through clearly.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 9/Threshold-Based_Noise_Reduction.txt","hasFullInfo":true},{"id":207,"title":"Unobserved Components Model (UCM)","filename":"Unobserved_Components_Model.txt","group":"group 9","groupNum":9,"categoryId":18,"categoryTitle":"18. STATE-SPACE & BAYESIAN FILTERS","subcategory":"General","summary":"Structural decomposition","overview":"Unobserved Components Model decomposes a time series into unobservable structural components such as trend, cycle, seasonal, and irregular elements. Each component follows its own stochastic process and cannot be directly observed - only their sum (the observed price) is visible. UCM uses state-space methods to extract these hidden components and is widely used in econometrics for decomposition and forecasting.","formula":"Decomposition structure:\ny(t) = μ(t) + γ(t) + ψ(t) + ε(t)","parameters":"Where:\n- μ(t) = trend component\n- γ(t) = seasonal component  \n- ψ(t) = cycle component\n- ε(t) = irregular component","intuition":"UCM is like separating a music track into individual instruments - you hear the final mix, but UCM tries to isolate the drums (trend), bass (cycle), and melody (seasonal patterns). This helps you understand which \"instruments\" are driving price movements at any given time.","rawContent":"Unobserved Components Model decomposes a time series into unobservable structural components such as trend, cycle, seasonal, and irregular elements. Each component follows its own stochastic process and cannot be directly observed - only their sum (the observed price) is visible. UCM uses state-space methods to extract these hidden components and is widely used in econometrics for decomposition and forecasting.\n\nDecomposition structure:\ny(t) = μ(t) + γ(t) + ψ(t) + ε(t)\n\nWhere:\n- μ(t) = trend component\n- γ(t) = seasonal component  \n- ψ(t) = cycle component\n- ε(t) = irregular component\n\nUCM is like separating a music track into individual instruments - you hear the final mix, but UCM tries to isolate the drums (trend), bass (cycle), and melody (seasonal patterns). This helps you understand which \"instruments\" are driving price movements at any given time.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 9/Unobserved_Components_Model.txt","hasFullInfo":true},{"id":208,"title":"Sylvain Vervoort - Average True Range Trailing Stops","filename":"16_01_Vervoort_ATR_Trailing_Stops.txt","group":"group 10","groupNum":10,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"Average True Range Trailing Stops - ATR-based stops","overview":"A volatility-adaptive trailing stop method that uses the Average True Range (ATR) indicator to dynamically adjust stop-loss levels based on market volatility. Originally published in Stocks & Commodities magazine (June 2009), this method improves upon fixed percentage trailing stops by accounting for the changing volatility characteristics of individual securities and overall market conditions.","formula":"The system calculates a trailing stop distance by multiplying the ATR value by a user-defined factor (commonly 3.5). For long positions, the stop trails below price at a distance of (ATR × multiplier), only moving upward as price rises and volatility changes. For short positions, the stop trails above price. The modified version introduced by Vervoort limits extreme single-bar price changes to prevent overreaction to anomalous volatility spikes - specifically capping high-low range at 1.5× ATR and considering only half the size of gaps between bars.\n\nStop_Distance = ATR(period) × multiplier\nLong_Stop = Highest(Close - Stop_Distance)\nShort_Stop = Lowest(Close + Stop_Distance)\n\nModified_TR = min((High - Low), 1.5 × ATR_avg)\nModified_Gap_Influence = Gap_Size × 0.5","parameters":"","intuition":"A trailing stop is like a safety net that follows your trade upward (for buys) or downward (for sells), protecting profits while giving the price room to breathe. Vervoort's ATR method makes this net smarter - in calm markets it pulls tighter, locking in profits quickly; in wild, volatile markets it gives more space so you don't get shaken out by normal price swings. Think of it as adjusting your stop based on whether you're driving on a smooth highway (tight stop) or a bumpy road (wider stop).","rawContent":"A volatility-adaptive trailing stop method that uses the Average True Range (ATR) indicator to dynamically adjust stop-loss levels based on market volatility. Originally published in Stocks & Commodities magazine (June 2009), this method improves upon fixed percentage trailing stops by accounting for the changing volatility characteristics of individual securities and overall market conditions.\n\nThe system calculates a trailing stop distance by multiplying the ATR value by a user-defined factor (commonly 3.5). For long positions, the stop trails below price at a distance of (ATR × multiplier), only moving upward as price rises and volatility changes. For short positions, the stop trails above price. The modified version introduced by Vervoort limits extreme single-bar price changes to prevent overreaction to anomalous volatility spikes - specifically capping high-low range at 1.5× ATR and considering only half the size of gaps between bars.\n\nStop_Distance = ATR(period) × multiplier\nLong_Stop = Highest(Close - Stop_Distance)\nShort_Stop = Lowest(Close + Stop_Distance)\n\nModified_TR = min((High - Low), 1.5 × ATR_avg)\nModified_Gap_Influence = Gap_Size × 0.5\n\nA trailing stop is like a safety net that follows your trade upward (for buys) or downward (for sells), protecting profits while giving the price room to breathe. Vervoort's ATR method makes this net smarter - in calm markets it pulls tighter, locking in profits quickly; in wild, volatile markets it gives more space so you don't get shaken out by normal price swings. Think of it as adjusting your stop based on whether you're driving on a smooth highway (tight stop) or a bumpy road (wider stop).","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 10/16_01_Vervoort_ATR_Trailing_Stops.txt","hasFullInfo":true},{"id":209,"title":"Kase Dev Stop","filename":"16_02_Kase_Dev_Stop.txt","group":"group 10","groupNum":10,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"Developmental stop","overview":"A statistically-calibrated developmental stop-loss system created by Cynthia Kase that accounts for volatility, variance in volatility, and volatility skew to determine optimal stop placement. The method finds the statistical balance between letting profits run while cutting losses by setting stops at points where the probability of a trend reversal becomes statistically significant based on the log-normal shape of the range curve.","formula":"The system provides multiple stop levels (typically Warning, Dev1, Dev2, Dev3) representing different standard deviation multiples. It uses a two-bar true range (TRD) calculation and accounts for: (1) variance/standard deviation of range, (2) skew (the amount range can spike opposite to the trend), and (3) data reformation to minimize uncertainty. Dev levels are calculated by adding/subtracting reversal amounts (Rev1, Rev2, Rev3) from recent highs/lows, where reversal amounts equal TRD average plus standard deviation multiples (1.0σ, 2.0σ, 3.6σ).\n\nTRD = max(H, H[1], C[2]) - min(L, L[1], C[2])\nTRD_avg = Average(TRD, period)\nTRD_stddev = StdDev(TRD, period)\nRev1 = TRD_avg + (1.0 × TRD_stddev)\nRev2 = TRD_avg + (2.0 × TRD_stddev)\nRev3 = TRD_avg + (3.6 × TRD_stddev)\nLong_Stop_Dev3 = Highest_High - Rev3","parameters":"","intuition":"Imagine volatility as ocean waves - sometimes they're small ripples, sometimes they're big swells, and occasionally a rogue wave appears. Kase Dev Stop doesn't just measure the average wave height (volatility) - it also measures how much the wave heights vary day-to-day (variance) and how often freak waves show up (skew). This gives you three safety lines: close to shore (Dev1 - aggressive, gets you out quick), mid-water (Dev2 - moderate), and far out (Dev3 - conservative, only exits on major reversals). Most traders use Dev2 as their main stop, keeping Dev3 as the absolute \"trend is dead\" line.","rawContent":"A statistically-calibrated developmental stop-loss system created by Cynthia Kase that accounts for volatility, variance in volatility, and volatility skew to determine optimal stop placement. The method finds the statistical balance between letting profits run while cutting losses by setting stops at points where the probability of a trend reversal becomes statistically significant based on the log-normal shape of the range curve.\n\nThe system provides multiple stop levels (typically Warning, Dev1, Dev2, Dev3) representing different standard deviation multiples. It uses a two-bar true range (TRD) calculation and accounts for: (1) variance/standard deviation of range, (2) skew (the amount range can spike opposite to the trend), and (3) data reformation to minimize uncertainty. Dev levels are calculated by adding/subtracting reversal amounts (Rev1, Rev2, Rev3) from recent highs/lows, where reversal amounts equal TRD average plus standard deviation multiples (1.0σ, 2.0σ, 3.6σ).\n\nTRD = max(H, H[1], C[2]) - min(L, L[1], C[2])\nTRD_avg = Average(TRD, period)\nTRD_stddev = StdDev(TRD, period)\nRev1 = TRD_avg + (1.0 × TRD_stddev)\nRev2 = TRD_avg + (2.0 × TRD_stddev)\nRev3 = TRD_avg + (3.6 × TRD_stddev)\nLong_Stop_Dev3 = Highest_High - Rev3\n\nImagine volatility as ocean waves - sometimes they're small ripples, sometimes they're big swells, and occasionally a rogue wave appears. Kase Dev Stop doesn't just measure the average wave height (volatility) - it also measures how much the wave heights vary day-to-day (variance) and how often freak waves show up (skew). This gives you three safety lines: close to shore (Dev1 - aggressive, gets you out quick), mid-water (Dev2 - moderate), and far out (Dev3 - conservative, only exits on major reversals). Most traders use Dev2 as their main stop, keeping Dev3 as the absolute \"trend is dead\" line.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 10/16_02_Kase_Dev_Stop.txt","hasFullInfo":true},{"id":210,"title":"Chandelier Exit","filename":"16_03_Chandelier_Exit.txt","group":"group 10","groupNum":10,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"ATR-based chandelier","overview":"A volatility-based trailing stop-loss indicator developed by Charles Le Beau and popularized by Alexander Elder in \"Come Into My Trading Room\" (2002). Named for its resemblance to a chandelier hanging from a ceiling, the indicator hangs from either the highest high (for longs) or lowest low (for shorts) over a specified period, maintaining a distance equal to a multiple of the Average True Range (ATR). It is designed to keep traders in a trend and prevent premature exits while the trend extends.","formula":"The indicator uses three components: a period high/low (typically 22 periods for monthly cycles), the Average True Range, and a multiplier (typically 3.0). The 22-period default reflects 22 trading days per month, providing a short-term lookback that accounts for recent price action. The multiplier can be adjusted based on volatility characteristics - higher multiples (4-5) for volatile securities to reduce whipsaws, lower multiples (2-2.5) for less volatile securities to increase sensitivity. The indicator reverses position (from below price to above price, or vice versa) only when price crosses the opposite exit line.\n\nChandelier_Exit_Long = Highest_High(period) - (ATR(period) × multiplier)\nChandelier_Exit_Short = Lowest_Low(period) + (ATR(period) × multiplier)\n\nDefault: period = 22, multiplier = 3.0\nExit_Long_Position: when Close < Chandelier_Exit_Long\nExit_Short_Position: when Close > Chandelier_Exit_Short","parameters":"","intuition":"Imagine you're flying a kite on a windy day - the chandelier exit is like the string connecting you to the kite. In calm winds (low volatility), you keep the string shorter so the kite stays close and you can bring it down quickly if needed. In gusty winds (high volatility), you let out more string so the kite has room to dance around without you yanking it down during normal gusts. The chandelier \"hangs\" from the highest point your kite has reached, giving it room to dip and sway without hitting the ground (your stop), but pulling you out if it falls too far below that high point.","rawContent":"A volatility-based trailing stop-loss indicator developed by Charles Le Beau and popularized by Alexander Elder in \"Come Into My Trading Room\" (2002). Named for its resemblance to a chandelier hanging from a ceiling, the indicator hangs from either the highest high (for longs) or lowest low (for shorts) over a specified period, maintaining a distance equal to a multiple of the Average True Range (ATR). It is designed to keep traders in a trend and prevent premature exits while the trend extends.\n\nThe indicator uses three components: a period high/low (typically 22 periods for monthly cycles), the Average True Range, and a multiplier (typically 3.0). The 22-period default reflects 22 trading days per month, providing a short-term lookback that accounts for recent price action. The multiplier can be adjusted based on volatility characteristics - higher multiples (4-5) for volatile securities to reduce whipsaws, lower multiples (2-2.5) for less volatile securities to increase sensitivity. The indicator reverses position (from below price to above price, or vice versa) only when price crosses the opposite exit line.\n\nChandelier_Exit_Long = Highest_High(period) - (ATR(period) × multiplier)\nChandelier_Exit_Short = Lowest_Low(period) + (ATR(period) × multiplier)\n\nDefault: period = 22, multiplier = 3.0\nExit_Long_Position: when Close < Chandelier_Exit_Long\nExit_Short_Position: when Close > Chandelier_Exit_Short\n\nImagine you're flying a kite on a windy day - the chandelier exit is like the string connecting you to the kite. In calm winds (low volatility), you keep the string shorter so the kite stays close and you can bring it down quickly if needed. In gusty winds (high volatility), you let out more string so the kite has room to dance around without you yanking it down during normal gusts. The chandelier \"hangs\" from the highest point your kite has reached, giving it room to dip and sway without hitting the ground (your stop), but pulling you out if it falls too far below that high point.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 10/16_03_Chandelier_Exit.txt","hasFullInfo":true},{"id":211,"title":"Adaptive Channel System","filename":"16_04_Adaptive_Channel_System.txt","group":"group 10","groupNum":10,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"Dynamic channels","overview":"A dynamic channel-based trading system that automatically adjusts channel width and position based on market volatility and price behavior. Unlike fixed-period channel systems, adaptive channels modify their parameters in real-time to account for changing market conditions, combining elements of Donchian Channels, volatility measurements (typically ATR), and moving averages to create channels that expand during volatile periods and contract during consolidation.","formula":"The system typically constructs upper and lower bands around a central reference (often an EMA or linear regression line) by adding/subtracting a volatility multiple. Entry signals occur on breakouts beyond the channel boundaries, while the opposite band serves as a stop-loss or take-profit reference. The \"adaptive\" nature comes from: (1) dynamic channel width adjustment based on ATR or standard deviation, (2) automatic channel recreation when price exceeds a percentage threshold of channel width, (3) variable lookback periods that adjust to detected market cycles or volatility regimes.\n\nUpper_Band = Reference_Line + (Volatility_Measure × Multiplier)\nLower_Band = Reference_Line - (Volatility_Measure × Multiplier)\n\nCommon implementations:\n- EMA + ATR: Upper = EMA(period) + ATR(period) × multiplier\n- Linear Regression: Upper = LR_Line + StdDev(period) × multiplier\n- Donchian + ATR: Upper = Highest(N) - ATR × factor (adaptive exit)\n\nChannel_Reset_Trigger = Price moves beyond (Channel_Width × threshold_pct)","parameters":"","intuition":"Think of an adaptive channel like a highway with flexible lane markers. On smooth, predictable roads (low volatility), the lanes stay tight and close together, keeping drivers (price) in a narrow path. When the road gets bumpy or traffic becomes chaotic (high volatility), the lanes automatically widen to give everyone more room without constant accidents (whipsaws). The system doesn't just paint lines - it watches how wild the driving is getting and adjusts the boundaries in real-time. If someone goes way off-road beyond the flexible boundary, the whole lane system resets around the new route everyone's taking.","rawContent":"A dynamic channel-based trading system that automatically adjusts channel width and position based on market volatility and price behavior. Unlike fixed-period channel systems, adaptive channels modify their parameters in real-time to account for changing market conditions, combining elements of Donchian Channels, volatility measurements (typically ATR), and moving averages to create channels that expand during volatile periods and contract during consolidation.\n\nThe system typically constructs upper and lower bands around a central reference (often an EMA or linear regression line) by adding/subtracting a volatility multiple. Entry signals occur on breakouts beyond the channel boundaries, while the opposite band serves as a stop-loss or take-profit reference. The \"adaptive\" nature comes from: (1) dynamic channel width adjustment based on ATR or standard deviation, (2) automatic channel recreation when price exceeds a percentage threshold of channel width, (3) variable lookback periods that adjust to detected market cycles or volatility regimes.\n\nUpper_Band = Reference_Line + (Volatility_Measure × Multiplier)\nLower_Band = Reference_Line - (Volatility_Measure × Multiplier)\n\nCommon implementations:\n- EMA + ATR: Upper = EMA(period) + ATR(period) × multiplier\n- Linear Regression: Upper = LR_Line + StdDev(period) × multiplier\n- Donchian + ATR: Upper = Highest(N) - ATR × factor (adaptive exit)\n\nChannel_Reset_Trigger = Price moves beyond (Channel_Width × threshold_pct)\n\nThink of an adaptive channel like a highway with flexible lane markers. On smooth, predictable roads (low volatility), the lanes stay tight and close together, keeping drivers (price) in a narrow path. When the road gets bumpy or traffic becomes chaotic (high volatility), the lanes automatically widen to give everyone more room without constant accidents (whipsaws). The system doesn't just paint lines - it watches how wild the driving is getting and adjusts the boundaries in real-time. If someone goes way off-road beyond the flexible boundary, the whole lane system resets around the new route everyone's taking.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 10/16_04_Adaptive_Channel_System.txt","hasFullInfo":true},{"id":212,"title":"SuperTrend Filter","filename":"16_05_SuperTrend_Filter.txt","group":"group 10","groupNum":10,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"ATR-based trend","overview":"A trend-following indicator developed by Olivier Seban that plots a single dynamic line on the price chart, changing color to signal trend direction. The indicator uses Average True Range (ATR) to measure volatility and creates adaptive upper and lower bands that trail price at a distance determined by the ATR multiplier. The line appears green (below price) during uptrends and red (above price) during downtrends, providing visual clarity for trend identification and acting as a dynamic trailing stop-loss mechanism.","formula":"The calculation uses the midpoint of high and low (HL2) adjusted by ATR multiplied by a factor. Initial bands are calculated, then filtered through logic that prevents the bands from moving against the trend - the upper band can only move down or stay flat in downtrends, and the lower band can only move up or stay flat in uptrends. Trend direction switches only when price closes beyond the opposite band. Common default settings are ATR period of 10 and multiplier of 3, though these can be adjusted for sensitivity - lower values (ATR=7, multiplier=2) for aggressive/intraday trading, higher values (ATR=14, multiplier=4) for conservative/swing trading.\n\nBasic_Upper_Band = ((High + Low) / 2) + (Multiplier × ATR)\nBasic_Lower_Band = ((High + Low) / 2) - (Multiplier × ATR)\n\nFinal_Upper_Band = Basic_Upper_Band < Previous_Upper_Band OR Previous_Close > Previous_Upper_Band ? Basic_Upper_Band : Previous_Upper_Band\nFinal_Lower_Band = Basic_Lower_Band > Previous_Lower_Band OR Previous_Close < Previous_Lower_Band ? Basic_Lower_Band : Previous_Lower_Band\n\nUptrend Signal: Close > Final_Lower_Band (line turns green)\nDowntrend Signal: Close < Final_Upper_Band (line turns red)\n\nImagine you're walking your dog with a retractable leash. When your dog (price) is running ahead happily (uptrend), the leash (green line) trails behind at a safe distance - it only gets shorter if the dog slows down, never longer. If your dog suddenly turns around and runs back past you (trend reversal), the leash switches to the other side and turns red, now trailing above. The leash automatically adjusts its length based on how energetic (volatile) your dog is being - more energy means more leash room (higher ATR), keeping you from yanking the dog back during normal playful movements but pulling them in if they truly change direction.","parameters":"","intuition":"","rawContent":"A trend-following indicator developed by Olivier Seban that plots a single dynamic line on the price chart, changing color to signal trend direction. The indicator uses Average True Range (ATR) to measure volatility and creates adaptive upper and lower bands that trail price at a distance determined by the ATR multiplier. The line appears green (below price) during uptrends and red (above price) during downtrends, providing visual clarity for trend identification and acting as a dynamic trailing stop-loss mechanism.\n\nThe calculation uses the midpoint of high and low (HL2) adjusted by ATR multiplied by a factor. Initial bands are calculated, then filtered through logic that prevents the bands from moving against the trend - the upper band can only move down or stay flat in downtrends, and the lower band can only move up or stay flat in uptrends. Trend direction switches only when price closes beyond the opposite band. Common default settings are ATR period of 10 and multiplier of 3, though these can be adjusted for sensitivity - lower values (ATR=7, multiplier=2) for aggressive/intraday trading, higher values (ATR=14, multiplier=4) for conservative/swing trading.\n\nBasic_Upper_Band = ((High + Low) / 2) + (Multiplier × ATR)\nBasic_Lower_Band = ((High + Low) / 2) - (Multiplier × ATR)\n\nFinal_Upper_Band = Basic_Upper_Band < Previous_Upper_Band OR Previous_Close > Previous_Upper_Band ? Basic_Upper_Band : Previous_Upper_Band\nFinal_Lower_Band = Basic_Lower_Band > Previous_Lower_Band OR Previous_Close < Previous_Lower_Band ? Basic_Lower_Band : Previous_Lower_Band\n\nUptrend Signal: Close > Final_Lower_Band (line turns green)\nDowntrend Signal: Close < Final_Upper_Band (line turns red)\n\nImagine you're walking your dog with a retractable leash. When your dog (price) is running ahead happily (uptrend), the leash (green line) trails behind at a safe distance - it only gets shorter if the dog slows down, never longer. If your dog suddenly turns around and runs back past you (trend reversal), the leash switches to the other side and turns red, now trailing above. The leash automatically adjusts its length based on how energetic (volatile) your dog is being - more energy means more leash room (higher ATR), keeping you from yanking the dog back during normal playful movements but pulling them in if they truly change direction.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 10/16_05_SuperTrend_Filter.txt","hasFullInfo":true},{"id":213,"title":"Parabolic SAR Filter","filename":"16_06_Parabolic_SAR_Filter.txt","group":"group 10","groupNum":10,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"Acceleration-based stop","overview":"A time-and-price-based technical indicator developed by J. Welles Wilder (1978) that provides a trailing stop-loss mechanism designed to identify trend direction and potential reversal points. \"SAR\" stands for \"Stop And Reverse\" - when price crosses the indicator, positions reverse from long to short or vice versa. The indicator appears as a series of dots (parabola) positioned below price during uptrends and above price during downtrends, with the dots accelerating closer to price as the trend extends over time.","formula":"The calculation uses an Acceleration Factor (AF) that starts at 0.02 and increases by 0.02 (increment) each time a new Extreme Point (highest high in uptrend, lowest low in downtrend) is reached, capped at a maximum (typically 0.20). This acceleration mechanism means older, well-established trends see the SAR converge faster toward price, tightening the trailing stop. Two special rules apply: (1) SAR cannot be set beyond the prior period's or current period's price range, and (2) when trend reverses (price crosses SAR), the SAR value jumps to the prior trend's extreme point and AF resets to 0.02.\n\nUptrend: SAR[t] = SAR[t-1] + AF × (EP - SAR[t-1])\nDowntrend: SAR[t] = SAR[t-1] - AF × (SAR[t-1] - EP)","parameters":"Where:\nAF = starts at 0.02, increases by 0.02 when new EP recorded, max 0.20\nEP = Extreme Point (highest high in uptrend, lowest low in downtrend)\n\nBuy Signal: Price crosses above SAR dots (dots below price)\nSell Signal: Price crosses below SAR dots (dots above price)\n\nCommon Settings: Start=0.02, Increment=0.02, Maximum=0.20\nCommodities/Forex: Start=0.02 (more sensitive)\nStocks: Start=0.01 (less sensitive to local fluctuations)","intuition":"Think of Parabolic SAR like a snowball rolling down a hill behind a skier (in uptrend). At first, the snowball rolls slowly, staying far behind. But as the skier goes farther downhill (trend continues), the snowball picks up speed and rolls faster, getting closer and closer - that's the acceleration factor at work. If the skier suddenly turns around and heads back uphill (reversal), the snowball instantly teleports to where the skier started their downhill run and begins rolling slowly again from the top. The snowball never stops - it's always either chasing from below or chasing from above, hence \"Stop And Reverse.\"","rawContent":"A time-and-price-based technical indicator developed by J. Welles Wilder (1978) that provides a trailing stop-loss mechanism designed to identify trend direction and potential reversal points. \"SAR\" stands for \"Stop And Reverse\" - when price crosses the indicator, positions reverse from long to short or vice versa. The indicator appears as a series of dots (parabola) positioned below price during uptrends and above price during downtrends, with the dots accelerating closer to price as the trend extends over time.\n\nThe calculation uses an Acceleration Factor (AF) that starts at 0.02 and increases by 0.02 (increment) each time a new Extreme Point (highest high in uptrend, lowest low in downtrend) is reached, capped at a maximum (typically 0.20). This acceleration mechanism means older, well-established trends see the SAR converge faster toward price, tightening the trailing stop. Two special rules apply: (1) SAR cannot be set beyond the prior period's or current period's price range, and (2) when trend reverses (price crosses SAR), the SAR value jumps to the prior trend's extreme point and AF resets to 0.02.\n\nUptrend: SAR[t] = SAR[t-1] + AF × (EP - SAR[t-1])\nDowntrend: SAR[t] = SAR[t-1] - AF × (SAR[t-1] - EP)\n\nWhere:\nAF = starts at 0.02, increases by 0.02 when new EP recorded, max 0.20\nEP = Extreme Point (highest high in uptrend, lowest low in downtrend)\n\nBuy Signal: Price crosses above SAR dots (dots below price)\nSell Signal: Price crosses below SAR dots (dots above price)\n\nCommon Settings: Start=0.02, Increment=0.02, Maximum=0.20\nCommodities/Forex: Start=0.02 (more sensitive)\nStocks: Start=0.01 (less sensitive to local fluctuations)\n\nThink of Parabolic SAR like a snowball rolling down a hill behind a skier (in uptrend). At first, the snowball rolls slowly, staying far behind. But as the skier goes farther downhill (trend continues), the snowball picks up speed and rolls faster, getting closer and closer - that's the acceleration factor at work. If the skier suddenly turns around and heads back uphill (reversal), the snowball instantly teleports to where the skier started their downhill run and begins rolling slowly again from the top. The snowball never stops - it's always either chasing from below or chasing from above, hence \"Stop And Reverse.\"","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 10/16_06_Parabolic_SAR_Filter.txt","hasFullInfo":true},{"id":214,"title":"Fast Fourier Transform (FFT) Filter","filename":"17_01_Fast_Fourier_Transform_Filter.txt","group":"group 10","groupNum":10,"categoryId":17,"categoryTitle":"17. FREQUENCY DOMAIN FILTERS","subcategory":"General","summary":"Efficient DFT","overview":"An efficient algorithm that transforms time-domain price data into the frequency domain to identify and isolate cyclical components, filter noise, and detect dominant market periodicities. The FFT decomposes a time series into constituent sine and cosine waves of different frequencies, revealing which cycles are most prominent in the data. Traders use FFT to reconstruct filtered price series by removing high-frequency noise components or isolating specific cyclical patterns, enabling cleaner trend identification and cycle-based trading strategies.","formula":"The process involves: (1) applying FFT to convert price series into frequency spectrum showing power at each frequency, (2) analyzing the power spectral density to identify dominant cycles (peaks in the spectrum), (3) filtering by zeroing out unwanted frequency components (typically high-frequency noise or irrelevant low-frequency drift), and (4) applying inverse FFT (IFFT) to reconstruct the filtered time series. The complexity is O(n log n) rather than O(n²) for direct DFT computation, making it computationally feasible for real-time trading applications.\n\nTime_Domain_Data: x[n] = price series\nFFT: X[k] = Σ(x[n] × e^(-i2πkn/N)) for k = 0 to N-1\nPower_Spectrum: P[k] = |X[k]|² = magnitude of frequency component k\nDominant_Cycles: periods where P[k] is maximum\nFilter: X_filtered[k] = X[k] × H[k] (H[k] = 0 to remove, 1 to keep frequency k)\nIFFT: x_filtered[n] = (1/N) × Σ(X_filtered[k] × e^(i2πkn/N))","parameters":"","intuition":"Imagine you're listening to a symphony orchestra (price series). Your ears hear all the instruments mixed together - violins, cellos, trumpets, drums all at once. FFT is like having super-hearing that can separate out each instrument section and tell you exactly how loud each one is playing. Once you know this, you can decide \"the cymbals (high-frequency noise) are too loud and distracting, let me turn them down,\" or \"I only want to hear the cellos (specific cycle), let me mute everything else.\" After making these adjustments, you play it back (IFFT) and now hear a cleaner version of the symphony focused on what matters to you.","rawContent":"An efficient algorithm that transforms time-domain price data into the frequency domain to identify and isolate cyclical components, filter noise, and detect dominant market periodicities. The FFT decomposes a time series into constituent sine and cosine waves of different frequencies, revealing which cycles are most prominent in the data. Traders use FFT to reconstruct filtered price series by removing high-frequency noise components or isolating specific cyclical patterns, enabling cleaner trend identification and cycle-based trading strategies.\n\nThe process involves: (1) applying FFT to convert price series into frequency spectrum showing power at each frequency, (2) analyzing the power spectral density to identify dominant cycles (peaks in the spectrum), (3) filtering by zeroing out unwanted frequency components (typically high-frequency noise or irrelevant low-frequency drift), and (4) applying inverse FFT (IFFT) to reconstruct the filtered time series. The complexity is O(n log n) rather than O(n²) for direct DFT computation, making it computationally feasible for real-time trading applications.\n\nTime_Domain_Data: x[n] = price series\nFFT: X[k] = Σ(x[n] × e^(-i2πkn/N)) for k = 0 to N-1\nPower_Spectrum: P[k] = |X[k]|² = magnitude of frequency component k\nDominant_Cycles: periods where P[k] is maximum\nFilter: X_filtered[k] = X[k] × H[k] (H[k] = 0 to remove, 1 to keep frequency k)\nIFFT: x_filtered[n] = (1/N) × Σ(X_filtered[k] × e^(i2πkn/N))\n\nImagine you're listening to a symphony orchestra (price series). Your ears hear all the instruments mixed together - violins, cellos, trumpets, drums all at once. FFT is like having super-hearing that can separate out each instrument section and tell you exactly how loud each one is playing. Once you know this, you can decide \"the cymbals (high-frequency noise) are too loud and distracting, let me turn them down,\" or \"I only want to hear the cellos (specific cycle), let me mute everything else.\" After making these adjustments, you play it back (IFFT) and now hear a cleaner version of the symphony focused on what matters to you.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 10/17_01_Fast_Fourier_Transform_Filter.txt","hasFullInfo":true},{"id":215,"title":"Adaptive Strategy Selection Filter","filename":"Adaptive_Strategy_Selection_Filter.txt","group":"group 11","groupNum":11,"categoryId":28,"categoryTitle":"28. ADAPTIVE STRATEGY SELECTION","subcategory":"General","summary":"Multi-strategy allocation","overview":"A dynamic allocation system that distributes capital across multiple trading strategies based on real-time performance metrics, market conditions, and confidence levels. The system continuously evaluates which strategies are working and automatically shifts capital to the best performers.","formula":"Core Components:\n\n1. Strategy Performance Tracking:\n   - Win rate (recent N trades)\n   - Profit factor (gross profit / gross loss)\n   - Sharpe ratio (returns / volatility)\n   - Maximum drawdown\n   - Consistency score\n\n2. Market Condition Matching:\n   - Each strategy has optimal conditions\n   - Match current conditions to strategy strengths\n   - Trend strategy → high ADX, high R²\n   - Mean reversion → low ADX, oscillating\n   - Breakout → high volatility expansion\n\n3. Adaptive Weighting Formula:\n   Weight_i = (Performance_Score_i × Condition_Match_i) / Sum(All_Scores)\n\nWhere:\n   - Performance_Score = weighted average of metrics\n   - Condition_Match = 0 to 1 based on regime fit\n   - Weights normalized to sum to 100%\n\n4. Position Allocation:\n   Capital_per_Strategy = Total_Capital × Strategy_Weight × Risk_Adjustment\n\nImplementation Example:\nStrategies = [Trend_Following, Mean_Reversion, Breakout]\nWeights = calculate_adaptive_weights(Strategies)\n// Weights might be: [0.50, 0.30, 0.20]\n\nFOR each strategy:\n    IF weight > minimum_threshold THEN\n        allocate_capital(strategy, weight)\n        enable_trading(strategy)\n    ELSE\n        disable_trading(strategy)\n\nRebalancing:\n- Update weights every N bars (daily, weekly)\n- Minimum weight threshold (e.g., 10%) to trade\n- Maximum weight cap (e.g., 50%) for diversification\n- Emergency shutoff if total drawdown exceeds limit","parameters":"","intuition":"Adaptive strategy selection is like having a team of specialist traders, each good at different market conditions. The filter acts as the manager, giving more money to whoever's hot right now and pulling money from whoever's struggling. If the trend trader has been crushing it while the mean-reversion guy keeps losing, you automatically shift capital toward trend following. It's portfolio management applied to strategy selection.","rawContent":"A dynamic allocation system that distributes capital across multiple trading strategies based on real-time performance metrics, market conditions, and confidence levels. The system continuously evaluates which strategies are working and automatically shifts capital to the best performers.\n\nCore Components:\n\n1. Strategy Performance Tracking:\n   - Win rate (recent N trades)\n   - Profit factor (gross profit / gross loss)\n   - Sharpe ratio (returns / volatility)\n   - Maximum drawdown\n   - Consistency score\n\n2. Market Condition Matching:\n   - Each strategy has optimal conditions\n   - Match current conditions to strategy strengths\n   - Trend strategy → high ADX, high R²\n   - Mean reversion → low ADX, oscillating\n   - Breakout → high volatility expansion\n\n3. Adaptive Weighting Formula:\n   Weight_i = (Performance_Score_i × Condition_Match_i) / Sum(All_Scores)\n\n   Where:\n   - Performance_Score = weighted average of metrics\n   - Condition_Match = 0 to 1 based on regime fit\n   - Weights normalized to sum to 100%\n\n4. Position Allocation:\n   Capital_per_Strategy = Total_Capital × Strategy_Weight × Risk_Adjustment\n\nImplementation Example:\nStrategies = [Trend_Following, Mean_Reversion, Breakout]\nWeights = calculate_adaptive_weights(Strategies)\n// Weights might be: [0.50, 0.30, 0.20]\n\nFOR each strategy:\n    IF weight > minimum_threshold THEN\n        allocate_capital(strategy, weight)\n        enable_trading(strategy)\n    ELSE\n        disable_trading(strategy)\n\nRebalancing:\n- Update weights every N bars (daily, weekly)\n- Minimum weight threshold (e.g., 10%) to trade\n- Maximum weight cap (e.g., 50%) for diversification\n- Emergency shutoff if total drawdown exceeds limit\n\nAdaptive strategy selection is like having a team of specialist traders, each good at different market conditions. The filter acts as the manager, giving more money to whoever's hot right now and pulling money from whoever's struggling. If the trend trader has been crushing it while the mean-reversion guy keeps losing, you automatically shift capital toward trend following. It's portfolio management applied to strategy selection.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 11/Adaptive_Strategy_Selection_Filter.txt","hasFullInfo":true},{"id":216,"title":"ATR-Based Position Scaling","filename":"ATR_Based_Position_Scaling.txt","group":"group 11","groupNum":11,"categoryId":27,"categoryTitle":"27. POSITION SIZING & MONEY MANAGEMENT","subcategory":"General","summary":"Volatility-scaled positions","overview":"A specific implementation of volatility-based sizing that uses Average True Range (ATR) as the primary volatility metric to determine position size, ensuring each trade risks approximately the same dollar amount regardless of the instrument's volatility.","formula":"Standard ATR Position Formula:\nShares = (Risk_Amount) / (ATR_Multiplier × ATR)","parameters":"Where:\n- Risk_Amount = account × risk_percentage (e.g., $100k × 0.01 = $1000)\n- ATR_Multiplier = stop distance in ATR units (typically 1.5 to 3.0)\n- ATR = 14-period Average True Range\n\nStop Loss Placement:\n- Long: Entry - (ATR_Multiplier × ATR)\n- Short: Entry + (ATR_Multiplier × ATR)\n- Common multipliers: 1.5, 2.0, 2.5, 3.0\n\nExample Calculation:\n- Account: $100,000\n- Risk per trade: 1% = $1,000\n- Stock price: $50\n- ATR: $1.50\n- ATR multiplier: 2.0\n- Stop distance: 2.0 × $1.50 = $3.00\n- Position size: $1,000 / $3.00 = 333 shares\n- Position value: 333 × $50 = $16,650\n\nCross-Market Normalization:\n- For different instruments, use ATR %: (ATR / Price) × 100\n- Allows comparison across stocks, forex, futures\n- Equalizes risk across portfolio","intuition":"ATR-based position scaling is like using a flexible ruler that automatically adjusts for each stock's personality. A calm, stable stock might move $1 per day (low ATR), while a volatile tech stock might swing $5 per day (high ATR). With ATR scaling, you buy more shares of the calm stock and fewer of the volatile one, so that a \"normal\" move against you costs the same dollar amount in either case. Your stop is always N × ATR away, but the position size compensates.","rawContent":"A specific implementation of volatility-based sizing that uses Average True Range (ATR) as the primary volatility metric to determine position size, ensuring each trade risks approximately the same dollar amount regardless of the instrument's volatility.\n\nStandard ATR Position Formula:\nShares = (Risk_Amount) / (ATR_Multiplier × ATR)\n\nWhere:\n- Risk_Amount = account × risk_percentage (e.g., $100k × 0.01 = $1000)\n- ATR_Multiplier = stop distance in ATR units (typically 1.5 to 3.0)\n- ATR = 14-period Average True Range\n\nStop Loss Placement:\n- Long: Entry - (ATR_Multiplier × ATR)\n- Short: Entry + (ATR_Multiplier × ATR)\n- Common multipliers: 1.5, 2.0, 2.5, 3.0\n\nExample Calculation:\n- Account: $100,000\n- Risk per trade: 1% = $1,000\n- Stock price: $50\n- ATR: $1.50\n- ATR multiplier: 2.0\n- Stop distance: 2.0 × $1.50 = $3.00\n- Position size: $1,000 / $3.00 = 333 shares\n- Position value: 333 × $50 = $16,650\n\nCross-Market Normalization:\n- For different instruments, use ATR %: (ATR / Price) × 100\n- Allows comparison across stocks, forex, futures\n- Equalizes risk across portfolio\n\nATR-based position scaling is like using a flexible ruler that automatically adjusts for each stock's personality. A calm, stable stock might move $1 per day (low ATR), while a volatile tech stock might swing $5 per day (high ATR). With ATR scaling, you buy more shares of the calm stock and fewer of the volatile one, so that a \"normal\" move against you costs the same dollar amount in either case. Your stop is always N × ATR away, but the position size compensates.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 11/ATR_Based_Position_Scaling.txt","hasFullInfo":true},{"id":217,"title":"Channel Breakout with R-Squared Filter","filename":"Channel_Breakout_R_Squared_Filter.txt","group":"group 11","groupNum":11,"categoryId":26,"categoryTitle":"26. ENTRY/EXIT SIGNAL FILTERS","subcategory":"General","summary":"Trend-filtered breakouts","overview":"An enhanced breakout system that combines traditional channel breakouts with R-Squared filtering to ensure trades are only taken in strong trending conditions. The R-Squared value measures how well price fits a linear trend, filtering out choppy or sideways markets where breakouts typically fail.","formula":"System Components:\n- Channel = Donchian Channel or linear regression bands\n- R-Squared = correlation coefficient squared of price vs linear regression\n- Breakout = price exceeds channel boundary\n- Filter = R-Squared > threshold (typically 0.65 to 0.85)\n\nEntry Rules:\n1. Calculate R-Squared over lookback period\n2. If R-Squared > threshold, trending mode active\n3. Enter long when price breaks above upper channel\n4. Enter short when price breaks below lower channel\n5. Skip breakouts when R-Squared < threshold\n\nR-Squared Interpretation:\n- R² > 0.80 = Strong trend, high breakout reliability\n- R² 0.50-0.80 = Moderate trend, selective breakouts\n- R² < 0.50 = No trend, avoid breakouts","parameters":"","intuition":"This is like having a quality checker before you follow a breakout. The channel shows you when price breaks out, but the R-Squared filter asks \"is this market actually trending smoothly, or just bouncing around randomly?\" If the trend is clean and strong (high R-Squared), the breakout is trustworthy. If price has been zigzagging (low R-Squared), the breakout is probably a fake-out.","rawContent":"An enhanced breakout system that combines traditional channel breakouts with R-Squared filtering to ensure trades are only taken in strong trending conditions. The R-Squared value measures how well price fits a linear trend, filtering out choppy or sideways markets where breakouts typically fail.\n\nSystem Components:\n- Channel = Donchian Channel or linear regression bands\n- R-Squared = correlation coefficient squared of price vs linear regression\n- Breakout = price exceeds channel boundary\n- Filter = R-Squared > threshold (typically 0.65 to 0.85)\n\nEntry Rules:\n1. Calculate R-Squared over lookback period\n2. If R-Squared > threshold, trending mode active\n3. Enter long when price breaks above upper channel\n4. Enter short when price breaks below lower channel\n5. Skip breakouts when R-Squared < threshold\n\nR-Squared Interpretation:\n- R² > 0.80 = Strong trend, high breakout reliability\n- R² 0.50-0.80 = Moderate trend, selective breakouts\n- R² < 0.50 = No trend, avoid breakouts\n\nThis is like having a quality checker before you follow a breakout. The channel shows you when price breaks out, but the R-Squared filter asks \"is this market actually trending smoothly, or just bouncing around randomly?\" If the trend is clean and strong (high R-Squared), the breakout is trustworthy. If price has been zigzagging (low R-Squared), the breakout is probably a fake-out.","tags":["DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Channel_Breakout_R_Squared_Filter.txt","hasFullInfo":true},{"id":218,"title":"Consecutive Bar Pattern Filter","filename":"Consecutive_Bar_Pattern_Filter.txt","group":"group 11","groupNum":11,"categoryId":26,"categoryTitle":"26. ENTRY/EXIT SIGNAL FILTERS","subcategory":"General","summary":"Sequential pattern detection","overview":"A pattern recognition system that identifies sequential price bar formations to detect momentum or exhaustion patterns. This filter counts consecutive bars with specific characteristics (higher highs, lower lows, same-direction closes) to signal potential trade entries or exits.","formula":"Pattern Detection:\n- Bullish: N consecutive bars with close[i] > close[i-1]\n- Bearish: N consecutive bars with close[i] < close[i-1]\n- Exhaustion: Extended runs (5+ bars) suggest reversal potential\n- Momentum: Moderate runs (2-3 bars) suggest continuation","parameters":"Where:\n- N = number of consecutive bars required (typically 2-5)\n- Higher N = stronger signal but less frequent\n- Can combine with volume or range filters\n\nConsecutive bar patterns are like watching someone climb stairs - if they take 3 steps up in a row without pausing, they're probably going higher. If they've climbed 7 steps without rest, they might be getting tired and ready to turn around. This filter just counts those \"steps\" in price movement to spot when momentum is building or running out of steam.","intuition":"","rawContent":"A pattern recognition system that identifies sequential price bar formations to detect momentum or exhaustion patterns. This filter counts consecutive bars with specific characteristics (higher highs, lower lows, same-direction closes) to signal potential trade entries or exits.\n\nPattern Detection:\n- Bullish: N consecutive bars with close[i] > close[i-1]\n- Bearish: N consecutive bars with close[i] < close[i-1]\n- Exhaustion: Extended runs (5+ bars) suggest reversal potential\n- Momentum: Moderate runs (2-3 bars) suggest continuation\n\nWhere:\n- N = number of consecutive bars required (typically 2-5)\n- Higher N = stronger signal but less frequent\n- Can combine with volume or range filters\n\nConsecutive bar patterns are like watching someone climb stairs - if they take 3 steps up in a row without pausing, they're probably going higher. If they've climbed 7 steps without rest, they might be getting tired and ready to turn around. This filter just counts those \"steps\" in price movement to spot when momentum is building or running out of steam.","tags":["DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Consecutive_Bar_Pattern_Filter.txt","hasFullInfo":true},{"id":219,"title":"Cycle-to-Trend Ratio","filename":"Cycle_to_Trend_Ratio.txt","group":"group 11","groupNum":11,"categoryId":28,"categoryTitle":"28. ADAPTIVE STRATEGY SELECTION","subcategory":"General","summary":"Mode strength measure","overview":"A quantitative measure that compares the strength of cyclical (mean-reverting) components versus trending components in price data. This ratio helps determine whether the market is better suited for oscillator-based or trend-following strategies.","formula":"Calculation Methods:\n\n1. Ehlers Method (Trend vs Cycle):\n   Ratio = Cycle_Component / Trend_Component\n   - Trend_Component from high-pass filter\n   - Cycle_Component from band-pass filter\n   - Ratio > 1.0: Cycling dominant\n   - Ratio < 1.0: Trending dominant\n\n2. Variance Decomposition:\n   Ratio = Variance(Detrended_Price) / Variance(Trend)\n   - Higher ratio = more cyclical behavior\n   - Lower ratio = smoother trend\n\n3. Spectral Power Distribution:\n   Ratio = Power(Cycle_Frequencies) / Power(Trend_Frequencies)\n   - Uses FFT or DFT analysis\n   - Separates frequency bands\n\nInterpretation:\n- Ratio > 2.0: Strong cycling, use mean reversion\n- Ratio 1.0-2.0: Moderate cycling, mixed strategies\n- Ratio 0.5-1.0: Weak trend, cautious trending\n- Ratio < 0.5: Strong trend, use trend following\n\nTrading Application:\nIF Cycle_to_Trend_Ratio > 1.5 THEN\n    weight_mean_reversion = 70%\n    weight_trend_following = 30%\nELSE IF Cycle_to_Trend_Ratio < 0.7 THEN\n    weight_mean_reversion = 30%\n    weight_trend_following = 70%\nELSE\n    weight_mean_reversion = 50%\n    weight_trend_following = 50%","parameters":"","intuition":"The cycle-to-trend ratio is like measuring whether a road is mostly straight highway or mostly winding curves. If the ratio is high, the price is bouncing around a lot (curvy road), so you want strategies that profit from reversals. If the ratio is low, price is moving in one direction (straight highway), so you want strategies that ride the trend. It's a numerical way to answer \"is this market choppy or directional?\"","rawContent":"A quantitative measure that compares the strength of cyclical (mean-reverting) components versus trending components in price data. This ratio helps determine whether the market is better suited for oscillator-based or trend-following strategies.\n\nCalculation Methods:\n\n1. Ehlers Method (Trend vs Cycle):\n   Ratio = Cycle_Component / Trend_Component\n   - Trend_Component from high-pass filter\n   - Cycle_Component from band-pass filter\n   - Ratio > 1.0: Cycling dominant\n   - Ratio < 1.0: Trending dominant\n\n2. Variance Decomposition:\n   Ratio = Variance(Detrended_Price) / Variance(Trend)\n   - Higher ratio = more cyclical behavior\n   - Lower ratio = smoother trend\n\n3. Spectral Power Distribution:\n   Ratio = Power(Cycle_Frequencies) / Power(Trend_Frequencies)\n   - Uses FFT or DFT analysis\n   - Separates frequency bands\n\nInterpretation:\n- Ratio > 2.0: Strong cycling, use mean reversion\n- Ratio 1.0-2.0: Moderate cycling, mixed strategies\n- Ratio 0.5-1.0: Weak trend, cautious trending\n- Ratio < 0.5: Strong trend, use trend following\n\nTrading Application:\nIF Cycle_to_Trend_Ratio > 1.5 THEN\n    weight_mean_reversion = 70%\n    weight_trend_following = 30%\nELSE IF Cycle_to_Trend_Ratio < 0.7 THEN\n    weight_mean_reversion = 30%\n    weight_trend_following = 70%\nELSE\n    weight_mean_reversion = 50%\n    weight_trend_following = 50%\n\nThe cycle-to-trend ratio is like measuring whether a road is mostly straight highway or mostly winding curves. If the ratio is high, the price is bouncing around a lot (curvy road), so you want strategies that profit from reversals. If the ratio is low, price is moving in one direction (straight highway), so you want strategies that ride the trend. It's a numerical way to answer \"is this market choppy or directional?\"","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 11/Cycle_to_Trend_Ratio.txt","hasFullInfo":true},{"id":220,"title":"Cycle vs Trend Mode Detection","filename":"Cycle_vs_Trend_Mode_Detection.txt","group":"group 11","groupNum":11,"categoryId":28,"categoryTitle":"28. ADAPTIVE STRATEGY SELECTION","subcategory":"General","summary":"Binary classification","overview":"A binary classification system that determines whether the market is currently in a trending regime (directional movement) or a cycling regime (oscillating/mean-reverting behavior). This fundamental classification drives all downstream strategy selection decisions.","formula":"Detection Methods:\n\n1. ADX (Average Directional Index):\n   - Trend: ADX > 25-30\n   - Cycle: ADX < 20-25\n   - Neutral: ADX between thresholds\n   - Rising ADX confirms trend strength\n\n2. Autocorrelation Analysis:\n   - Positive autocorrelation → trending\n   - Negative autocorrelation → mean-reverting\n   - Near-zero autocorrelation → random/mixed\n   - Calculate at lag-1 and lag-2\n\n3. Hurst Exponent:\n   - H > 0.55: Trending (persistent)\n   - H < 0.45: Mean-reverting (anti-persistent)\n   - H ≈ 0.50: Random walk\n   - Requires 100+ bars for reliability\n\n4. Fractal Dimension:\n   - Low dimension (1.1-1.3): Smooth trend\n   - High dimension (1.6-1.9): Choppy cycle\n   - Used in FRAMA calculation\n\n5. Vertical Horizontal Filter (VHF):\n   - High VHF: Trending\n   - Low VHF: Cycling\n   - VHF = |Highest - Lowest| / Sum(|Close[i] - Close[i-1]|)\n\nCombined Classification:\ntrend_score = 0\nIF ADX > 25 THEN trend_score += 2\nIF autocorr > 0.3 THEN trend_score += 1\nIF hurst > 0.55 THEN trend_score += 1\nIF VHF > threshold THEN trend_score += 1\n\nIF trend_score >= 3 THEN\n    mode = \"TRENDING\"\nELSE IF trend_score <= 1 THEN\n    mode = \"CYCLING\"\nELSE\n    mode = \"MIXED\"\n\nVisual Confirmation:\n- Trending: Price rides MA, few crosses, directional\n- Cycling: Price crosses MA frequently, oscillates around level\n- Check multiple timeframes for agreement","parameters":"","intuition":"Cycle vs Trend detection is like asking \"is this person going somewhere or just pacing around?\" Someone walking straight down the street is trending. Someone walking in circles in a parking lot is cycling. The indicators measure different aspects of this behavior - ADX looks at how consistently they're moving in one direction, autocorrelation checks if their next step is likely in the same direction as their last step, and Hurst asks whether they tend to keep going the same direction (trending) or reverse course (mean-reverting).","rawContent":"A binary classification system that determines whether the market is currently in a trending regime (directional movement) or a cycling regime (oscillating/mean-reverting behavior). This fundamental classification drives all downstream strategy selection decisions.\n\nDetection Methods:\n\n1. ADX (Average Directional Index):\n   - Trend: ADX > 25-30\n   - Cycle: ADX < 20-25\n   - Neutral: ADX between thresholds\n   - Rising ADX confirms trend strength\n\n2. Autocorrelation Analysis:\n   - Positive autocorrelation → trending\n   - Negative autocorrelation → mean-reverting\n   - Near-zero autocorrelation → random/mixed\n   - Calculate at lag-1 and lag-2\n\n3. Hurst Exponent:\n   - H > 0.55: Trending (persistent)\n   - H < 0.45: Mean-reverting (anti-persistent)\n   - H ≈ 0.50: Random walk\n   - Requires 100+ bars for reliability\n\n4. Fractal Dimension:\n   - Low dimension (1.1-1.3): Smooth trend\n   - High dimension (1.6-1.9): Choppy cycle\n   - Used in FRAMA calculation\n\n5. Vertical Horizontal Filter (VHF):\n   - High VHF: Trending\n   - Low VHF: Cycling\n   - VHF = |Highest - Lowest| / Sum(|Close[i] - Close[i-1]|)\n\nCombined Classification:\ntrend_score = 0\nIF ADX > 25 THEN trend_score += 2\nIF autocorr > 0.3 THEN trend_score += 1\nIF hurst > 0.55 THEN trend_score += 1\nIF VHF > threshold THEN trend_score += 1\n\nIF trend_score >= 3 THEN\n    mode = \"TRENDING\"\nELSE IF trend_score <= 1 THEN\n    mode = \"CYCLING\"\nELSE\n    mode = \"MIXED\"\n\nVisual Confirmation:\n- Trending: Price rides MA, few crosses, directional\n- Cycling: Price crosses MA frequently, oscillates around level\n- Check multiple timeframes for agreement\n\nCycle vs Trend detection is like asking \"is this person going somewhere or just pacing around?\" Someone walking straight down the street is trending. Someone walking in circles in a parking lot is cycling. The indicators measure different aspects of this behavior - ADX looks at how consistently they're moving in one direction, autocorrelation checks if their next step is likely in the same direction as their last step, and Hurst asks whether they tend to keep going the same direction (trending) or reverse course (mean-reverting).","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 11/Cycle_vs_Trend_Mode_Detection.txt","hasFullInfo":true},{"id":221,"title":"Divergence Detection Algorithm (Price vs Oscillator)","filename":"Divergence_Detection_Algorithm.txt","group":"group 11","groupNum":11,"categoryId":26,"categoryTitle":"26. ENTRY/EXIT SIGNAL FILTERS","subcategory":"General","summary":"Classical divergence","overview":"A classical technical analysis method that identifies discrepancies between price action and momentum oscillators (RSI, MACD, Stochastic) to signal potential reversals. Divergence occurs when price makes new highs/lows but the oscillator fails to confirm, suggesting weakening momentum.","formula":"Types of Divergence:\n- Regular Bullish: Price makes lower low, oscillator makes higher low (reversal up)\n- Regular Bearish: Price makes higher high, oscillator makes lower high (reversal down)\n- Hidden Bullish: Price makes higher low, oscillator makes lower low (continuation up)\n- Hidden Bearish: Price makes lower high, oscillator makes higher high (continuation down)\n\nDetection Method:\n1. Identify swing highs/lows in price\n2. Compare corresponding oscillator values\n3. Confirm divergence pattern over N bars\n4. Generate signal on pattern completion","parameters":"","intuition":"Divergence is like watching a runner sprint uphill - if they keep climbing higher but their speed is slowing down (shown by the oscillator), they're probably about to stop or turn around. The price chart shows where they're going, but the momentum indicator shows whether they have the energy to keep going. When these two disagree, something's about to change.","rawContent":"A classical technical analysis method that identifies discrepancies between price action and momentum oscillators (RSI, MACD, Stochastic) to signal potential reversals. Divergence occurs when price makes new highs/lows but the oscillator fails to confirm, suggesting weakening momentum.\n\nTypes of Divergence:\n- Regular Bullish: Price makes lower low, oscillator makes higher low (reversal up)\n- Regular Bearish: Price makes higher high, oscillator makes lower high (reversal down)\n- Hidden Bullish: Price makes higher low, oscillator makes lower low (continuation up)\n- Hidden Bearish: Price makes lower high, oscillator makes higher high (continuation down)\n\nDetection Method:\n1. Identify swing highs/lows in price\n2. Compare corresponding oscillator values\n3. Confirm divergence pattern over N bars\n4. Generate signal on pattern completion\n\nDivergence is like watching a runner sprint uphill - if they keep climbing higher but their speed is slowing down (shown by the oscillator), they're probably about to stop or turn around. The price chart shows where they're going, but the momentum indicator shows whether they have the energy to keep going. When these two disagree, something's about to change.","tags":["DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Divergence_Detection_Algorithm.txt","hasFullInfo":true},{"id":222,"title":"Dynamic Risk Adjustment","filename":"Dynamic_Risk_Adjustment.txt","group":"group 11","groupNum":11,"categoryId":16,"categoryTitle":"16. RANGE & TRAILING STOP FILTERS","subcategory":"General","summary":"Adaptive risk management","overview":"An adaptive risk management system that continuously modifies position sizes and risk parameters based on current market conditions, account performance, and drawdown levels. Risk is increased during favorable conditions and reduced during adverse periods.","formula":"Core Components:\n\n1. Market Condition Adjustment:\n   - Risk_multiplier = f(volatility, trend_strength, correlation)\n   - Reduce risk in choppy/high-vol environments\n   - Increase risk in clear trends with low volatility\n\n2. Performance-Based Scaling:\n   - Scale up after winning streaks (with limits)\n   - Scale down after losing streaks\n   - Typical adjustment: ±20% per threshold hit\n\n3. Drawdown Protection:\n   - Maximum_Risk = Base_Risk × (1 - Drawdown_Percentage)\n   - At 10% drawdown: reduce risk by 10-20%\n   - At 20% drawdown: reduce risk by 30-50%\n   - Circuit breaker: stop trading at severe drawdown\n\n4. Volatility Regime Adjustment:\n   - Low vol regime: risk up to 150% of base\n   - Normal vol: 100% base risk\n   - High vol regime: risk down to 50% of base\n\nImplementation Formula:\nPosition_Risk = Base_Risk × Market_Factor × Performance_Factor × Drawdown_Factor\n\nWhere factors range from 0.5 to 1.5, and final risk is capped at maximum thresholds.","parameters":"","intuition":"Dynamic risk adjustment is like a thermostat for your trading account. When things are going well and conditions are favorable (warm), you can turn up the heat (increase position sizes). When you're losing money or markets get crazy (cold), you automatically dial it back. Instead of always risking the same 1%, you might risk 1.5% when everything's aligned and 0.5% when you're in a hole or markets are chaotic.","rawContent":"An adaptive risk management system that continuously modifies position sizes and risk parameters based on current market conditions, account performance, and drawdown levels. Risk is increased during favorable conditions and reduced during adverse periods.\n\nCore Components:\n\n1. Market Condition Adjustment:\n   - Risk_multiplier = f(volatility, trend_strength, correlation)\n   - Reduce risk in choppy/high-vol environments\n   - Increase risk in clear trends with low volatility\n\n2. Performance-Based Scaling:\n   - Scale up after winning streaks (with limits)\n   - Scale down after losing streaks\n   - Typical adjustment: ±20% per threshold hit\n\n3. Drawdown Protection:\n   - Maximum_Risk = Base_Risk × (1 - Drawdown_Percentage)\n   - At 10% drawdown: reduce risk by 10-20%\n   - At 20% drawdown: reduce risk by 30-50%\n   - Circuit breaker: stop trading at severe drawdown\n\n4. Volatility Regime Adjustment:\n   - Low vol regime: risk up to 150% of base\n   - Normal vol: 100% base risk\n   - High vol regime: risk down to 50% of base\n\nImplementation Formula:\nPosition_Risk = Base_Risk × Market_Factor × Performance_Factor × Drawdown_Factor\n\nWhere factors range from 0.5 to 1.5, and final risk is capped at maximum thresholds.\n\nDynamic risk adjustment is like a thermostat for your trading account. When things are going well and conditions are favorable (warm), you can turn up the heat (increase position sizes). When you're losing money or markets get crazy (cold), you automatically dial it back. Instead of always risking the same 1%, you might risk 1.5% when everything's aligned and 0.5% when you're in a hole or markets are chaotic.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Dynamic_Risk_Adjustment.txt","hasFullInfo":true},{"id":223,"title":"Kelly Criterion Implementation","filename":"Kelly_Criterion_Implementation.txt","group":"group 11","groupNum":11,"categoryId":27,"categoryTitle":"27. POSITION SIZING & MONEY MANAGEMENT","subcategory":"General","summary":"Optimal position sizing","overview":"A mathematical formula for optimal position sizing that maximizes long-term capital growth by balancing expected return against risk of ruin. The Kelly Criterion calculates the ideal fraction of capital to risk on each trade based on win probability and win/loss ratio.","formula":"Kelly Formula:\nf* = (bp - q) / b","parameters":"Where:\n- f* = optimal fraction of capital to bet\n- b = ratio of win amount to loss amount (reward/risk)\n- p = probability of winning\n- q = probability of losing (1 - p)\n\nExample:\n- Win rate = 55% (p = 0.55)\n- Win/loss ratio = 2:1 (b = 2)\n- Kelly % = (2 × 0.55 - 0.45) / 2 = 0.325 = 32.5%\n\nPractical Adjustments:\n- Full Kelly often too aggressive\n- Half Kelly (f*/2) recommended for real trading\n- Quarter Kelly (f*/4) for conservative approach\n- Never use negative Kelly (indicates negative edge)","intuition":"The Kelly Criterion is like a smart poker player's bankroll strategy. If you know your odds of winning and your typical payoff, Kelly tells you exactly how much to bet to grow your money fastest without going broke. Bet too much and you risk ruin; bet too little and you grow slowly. Kelly finds the sweet spot - though most traders use \"half Kelly\" because the full amount feels uncomfortably aggressive.","rawContent":"A mathematical formula for optimal position sizing that maximizes long-term capital growth by balancing expected return against risk of ruin. The Kelly Criterion calculates the ideal fraction of capital to risk on each trade based on win probability and win/loss ratio.\n\nKelly Formula:\nf* = (bp - q) / b\n\nWhere:\n- f* = optimal fraction of capital to bet\n- b = ratio of win amount to loss amount (reward/risk)\n- p = probability of winning\n- q = probability of losing (1 - p)\n\nExample:\n- Win rate = 55% (p = 0.55)\n- Win/loss ratio = 2:1 (b = 2)\n- Kelly % = (2 × 0.55 - 0.45) / 2 = 0.325 = 32.5%\n\nPractical Adjustments:\n- Full Kelly often too aggressive\n- Half Kelly (f*/2) recommended for real trading\n- Quarter Kelly (f*/4) for conservative approach\n- Never use negative Kelly (indicates negative edge)\n\nThe Kelly Criterion is like a smart poker player's bankroll strategy. If you know your odds of winning and your typical payoff, Kelly tells you exactly how much to bet to grow your money fastest without going broke. Bet too much and you risk ruin; bet too little and you grow slowly. Kelly finds the sweet spot - though most traders use \"half Kelly\" because the full amount feels uncomfortably aggressive.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 11/Kelly_Criterion_Implementation.txt","hasFullInfo":true},{"id":224,"title":"Market Mode Switch (Automatic Strategy Selection)","filename":"Market_Mode_Switch.txt","group":"group 11","groupNum":11,"categoryId":28,"categoryTitle":"28. ADAPTIVE STRATEGY SELECTION","subcategory":"General","summary":"Trend/cycle switching","overview":"An intelligent system that automatically switches between different trading strategies based on detected market regime (trending vs cycling/ranging). The system identifies which mode the market is in and activates the appropriate strategy for that condition.","formula":"Mode Detection Methods:\n\n1. ADX-Based:\n   - ADX > 25: Trending mode → use trend-following strategy\n   - ADX < 20: Ranging mode → use mean-reversion strategy\n   - ADX 20-25: Transition/uncertain → reduce position size\n\n2. Efficiency Ratio:\n   - ER = |Net_Change| / Sum_of_Absolute_Changes\n   - ER > 0.5: Trending mode\n   - ER < 0.3: Choppy mode\n\n3. R-Squared Method:\n   - R² > 0.65: Strong trend\n   - R² < 0.40: No trend/range\n\nStrategy Assignment:\n- Trend Mode: Breakout systems, moving average crossovers, momentum\n- Range Mode: Bollinger Band mean reversion, RSI extremes, support/resistance\n- Mixed Mode: Reduced size on both or neutral\n\nImplementation Logic:\nIF market_mode == \"trending\" THEN\n    use_strategy = trend_following\n    increase_position_size()\nELSE IF market_mode == \"ranging\" THEN\n    use_strategy = mean_reversion\n    normal_position_size()\nELSE\n    use_strategy = neutral\n    reduce_position_size()","parameters":"","intuition":"Market mode switching is like having different shoes for different weather. You don't wear flip-flops in snow or snow boots at the beach. Similarly, trend-following strategies get destroyed in choppy markets, and mean-reversion strategies lose money in strong trends. This system automatically detects the \"weather\" (market condition) and puts on the right \"shoes\" (trading strategy) without you having to guess.","rawContent":"An intelligent system that automatically switches between different trading strategies based on detected market regime (trending vs cycling/ranging). The system identifies which mode the market is in and activates the appropriate strategy for that condition.\n\nMode Detection Methods:\n\n1. ADX-Based:\n   - ADX > 25: Trending mode → use trend-following strategy\n   - ADX < 20: Ranging mode → use mean-reversion strategy\n   - ADX 20-25: Transition/uncertain → reduce position size\n\n2. Efficiency Ratio:\n   - ER = |Net_Change| / Sum_of_Absolute_Changes\n   - ER > 0.5: Trending mode\n   - ER < 0.3: Choppy mode\n\n3. R-Squared Method:\n   - R² > 0.65: Strong trend\n   - R² < 0.40: No trend/range\n\nStrategy Assignment:\n- Trend Mode: Breakout systems, moving average crossovers, momentum\n- Range Mode: Bollinger Band mean reversion, RSI extremes, support/resistance\n- Mixed Mode: Reduced size on both or neutral\n\nImplementation Logic:\nIF market_mode == \"trending\" THEN\n    use_strategy = trend_following\n    increase_position_size()\nELSE IF market_mode == \"ranging\" THEN\n    use_strategy = mean_reversion\n    normal_position_size()\nELSE\n    use_strategy = neutral\n    reduce_position_size()\n\nMarket mode switching is like having different shoes for different weather. You don't wear flip-flops in snow or snow boots at the beach. Similarly, trend-following strategies get destroyed in choppy markets, and mean-reversion strategies lose money in strong trends. This system automatically detects the \"weather\" (market condition) and puts on the right \"shoes\" (trading strategy) without you having to guess.","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 11/Market_Mode_Switch.txt","hasFullInfo":true},{"id":225,"title":"Mode Confirmation Indicator","filename":"Mode_Confirmation_Indicator.txt","group":"group 11","groupNum":11,"categoryId":28,"categoryTitle":"28. ADAPTIVE STRATEGY SELECTION","subcategory":"General","summary":"Regime confirmation","overview":"A multi-factor confirmation system that validates market regime detection before strategy switches occur. This prevents whipsaw from premature strategy changes by requiring multiple independent indicators to agree on the current market mode.","formula":"Confirmation Requirements:\n\n1. Primary Mode Detectors (Need 2 of 3):\n   - ADX level (>25 trend, <20 range)\n   - R-Squared (>0.65 trend, <0.40 range)\n   - Efficiency Ratio (>0.5 trend, <0.3 range)\n\n2. Secondary Confirmations (Need 1 of 2):\n   - Linear regression slope consistency\n   - Volatility regime (expanding vs contracting)\n\n3. Time Filter:\n   - Mode must persist for N bars (typically 3-5)\n   - Prevents single-bar false signals\n   - Hysteresis: different thresholds for entry/exit\n\nConfirmation Logic:\ntrending_signals = 0\nIF ADX > 25 THEN trending_signals += 1\nIF R_squared > 0.65 THEN trending_signals += 1\nIF efficiency_ratio > 0.5 THEN trending_signals += 1\n\nIF trending_signals >= 2 AND bars_in_mode >= 3 THEN\n    confirmed_mode = \"TREND\"\nELSE IF ranging_signals >= 2 AND bars_in_mode >= 3 THEN\n    confirmed_mode = \"RANGE\"\nELSE\n    confirmed_mode = \"UNCERTAIN\"\n\nHysteresis Implementation:\n- Enter trend mode: ADX > 27\n- Exit trend mode: ADX < 23\n- Gap prevents oscillation at threshold\n\nConfidence Levels:\n- All 3 agree = High confidence (100% allocation)\n- 2 of 3 agree = Medium confidence (70% allocation)\n- Split decision = Low confidence (40% allocation)\n- No agreement = No confidence (0% allocation, stay in cash)","parameters":"","intuition":"Mode confirmation is like checking multiple weather forecasts before planning a picnic. One meteorologist might be wrong, but if three different sources all say it's going to rain, you're probably safe canceling. Similarly, if ADX, R-Squared, and Efficiency Ratio all scream \"strong trend,\" you can confidently switch to trend-following strategies. If they disagree, you stay cautious and wait for clarity.","rawContent":"A multi-factor confirmation system that validates market regime detection before strategy switches occur. This prevents whipsaw from premature strategy changes by requiring multiple independent indicators to agree on the current market mode.\n\nConfirmation Requirements:\n\n1. Primary Mode Detectors (Need 2 of 3):\n   - ADX level (>25 trend, <20 range)\n   - R-Squared (>0.65 trend, <0.40 range)\n   - Efficiency Ratio (>0.5 trend, <0.3 range)\n\n2. Secondary Confirmations (Need 1 of 2):\n   - Linear regression slope consistency\n   - Volatility regime (expanding vs contracting)\n\n3. Time Filter:\n   - Mode must persist for N bars (typically 3-5)\n   - Prevents single-bar false signals\n   - Hysteresis: different thresholds for entry/exit\n\nConfirmation Logic:\ntrending_signals = 0\nIF ADX > 25 THEN trending_signals += 1\nIF R_squared > 0.65 THEN trending_signals += 1\nIF efficiency_ratio > 0.5 THEN trending_signals += 1\n\nIF trending_signals >= 2 AND bars_in_mode >= 3 THEN\n    confirmed_mode = \"TREND\"\nELSE IF ranging_signals >= 2 AND bars_in_mode >= 3 THEN\n    confirmed_mode = \"RANGE\"\nELSE\n    confirmed_mode = \"UNCERTAIN\"\n\nHysteresis Implementation:\n- Enter trend mode: ADX > 27\n- Exit trend mode: ADX < 23\n- Gap prevents oscillation at threshold\n\nConfidence Levels:\n- All 3 agree = High confidence (100% allocation)\n- 2 of 3 agree = Medium confidence (70% allocation)\n- Split decision = Low confidence (40% allocation)\n- No agreement = No confidence (0% allocation, stay in cash)\n\nMode confirmation is like checking multiple weather forecasts before planning a picnic. One meteorologist might be wrong, but if three different sources all say it's going to rain, you're probably safe canceling. Similarly, if ADX, R-Squared, and Efficiency Ratio all scream \"strong trend,\" you can confidently switch to trend-following strategies. If they disagree, you stay cautious and wait for clarity.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 11/Mode_Confirmation_Indicator.txt","hasFullInfo":true},{"id":226,"title":"Optimal F Position Sizing","filename":"Optimal_F_Position_Sizing.txt","group":"group 11","groupNum":11,"categoryId":27,"categoryTitle":"27. POSITION SIZING & MONEY MANAGEMENT","subcategory":"General","summary":"Fixed fractional method","overview":"A fixed fractional position sizing method developed by Ralph Vince that determines the optimal fraction of capital to risk per trade by analyzing historical trade results. Unlike Kelly, Optimal F is calculated from actual trading performance rather than theoretical probabilities.","formula":"Optimal F Calculation:\n1. Convert all trade P&L to units of largest loss\n2. For each possible f (0.01 to 1.00):\n   - Calculate Terminal Wealth Relative (TWR)\n   - TWR = product of (1 + f × normalized_return) for all trades\n3. Optimal f = value that maximizes TWR\n\nPosition Size = (Account_Size × f) / Largest_Historical_Loss","parameters":"Where:\n- f = optimal fraction (typically 0.15 to 0.35)\n- Largest_Historical_Loss = maximum losing trade amount\n- Result = number of units/contracts to trade\n\nKey Characteristics:\n- Based on actual trade history, not estimates\n- Assumes worst loss will repeat\n- Very aggressive at full value\n- Recommend using 0.5f to 0.75f in practice\n- Requires 30+ trades for reliable calculation","intuition":"Optimal F is like looking at your worst trading day ever and using that to size every future trade. If your biggest loss was $1000 and Optimal F says to risk 25% of your account per worst-case scenario, you'd size positions so that if you hit another worst-case loss, it would only cost you $250 per $1000 in your account. It's more conservative than it sounds because you're planning for your worst disaster to happen again.","rawContent":"A fixed fractional position sizing method developed by Ralph Vince that determines the optimal fraction of capital to risk per trade by analyzing historical trade results. Unlike Kelly, Optimal F is calculated from actual trading performance rather than theoretical probabilities.\n\nOptimal F Calculation:\n1. Convert all trade P&L to units of largest loss\n2. For each possible f (0.01 to 1.00):\n   - Calculate Terminal Wealth Relative (TWR)\n   - TWR = product of (1 + f × normalized_return) for all trades\n3. Optimal f = value that maximizes TWR\n\nPosition Size = (Account_Size × f) / Largest_Historical_Loss\n\nWhere:\n- f = optimal fraction (typically 0.15 to 0.35)\n- Largest_Historical_Loss = maximum losing trade amount\n- Result = number of units/contracts to trade\n\nKey Characteristics:\n- Based on actual trade history, not estimates\n- Assumes worst loss will repeat\n- Very aggressive at full value\n- Recommend using 0.5f to 0.75f in practice\n- Requires 30+ trades for reliable calculation\n\nOptimal F is like looking at your worst trading day ever and using that to size every future trade. If your biggest loss was $1000 and Optimal F says to risk 25% of your account per worst-case scenario, you'd size positions so that if you hit another worst-case loss, it would only cost you $250 per $1000 in your account. It's more conservative than it sounds because you're planning for your worst disaster to happen again.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 11/Optimal_F_Position_Sizing.txt","hasFullInfo":true},{"id":227,"title":"Rainbow-Smoothed Entry Signals","filename":"Rainbow_Smoothed_Entry_Signals.txt","group":"group 11","groupNum":11,"categoryId":26,"categoryTitle":"26. ENTRY/EXIT SIGNAL FILTERS","subcategory":"General","summary":"Multi-MA confirmation","overview":"A multi-timeframe confirmation system that uses cascading moving averages (rainbow effect) to generate entry signals only when multiple smoothing periods align. This reduces false signals by requiring agreement across different timeframes before triggering trades.","formula":"Entry Condition = (MA_fast > MA_medium > MA_slow) AND (price > MA_fast)\nExit Condition = (MA_fast < MA_medium < MA_slow) OR (price < MA_fast)","parameters":"Where:\n- MA_fast, MA_medium, MA_slow = nested moving averages of increasing periods\n- Rainbow alignment = all MAs ordered in same direction\n- Typical periods: 5, 10, 20, 50, etc.\n\nRainbow-smoothed entries work like getting multiple opinions before making a decision. Instead of trusting one moving average, you wait until short-term, medium-term, and long-term trends all agree on the direction. When they stack up like a rainbow (all pointing the same way), you know the trend is strong enough to trade.","intuition":"","rawContent":"A multi-timeframe confirmation system that uses cascading moving averages (rainbow effect) to generate entry signals only when multiple smoothing periods align. This reduces false signals by requiring agreement across different timeframes before triggering trades.\n\nEntry Condition = (MA_fast > MA_medium > MA_slow) AND (price > MA_fast)\nExit Condition = (MA_fast < MA_medium < MA_slow) OR (price < MA_fast)\n\nWhere:\n- MA_fast, MA_medium, MA_slow = nested moving averages of increasing periods\n- Rainbow alignment = all MAs ordered in same direction\n- Typical periods: 5, 10, 20, 50, etc.\n\nRainbow-smoothed entries work like getting multiple opinions before making a decision. Instead of trusting one moving average, you wait until short-term, medium-term, and long-term trends all agree on the direction. When they stack up like a rainbow (all pointing the same way), you know the trend is strong enough to trade.","tags":["DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Rainbow_Smoothed_Entry_Signals.txt","hasFullInfo":true},{"id":228,"title":"Swing Trading with ATR Breakouts","filename":"Swing_Trading_ATR_Breakouts.txt","group":"group 11","groupNum":11,"categoryId":26,"categoryTitle":"26. ENTRY/EXIT SIGNAL FILTERS","subcategory":"General","summary":"Volatility-based entries","overview":"A volatility-based entry system that uses Average True Range (ATR) to identify breakout opportunities. This method enters trades when price moves beyond a dynamic threshold calculated from recent volatility, capturing momentum moves while filtering out noise.","formula":"Entry Signal = price > (high[lookback] + (ATR_multiplier * ATR))\nExit Signal = price < (low[lookback] - (ATR_multiplier * ATR))","parameters":"Where:\n- ATR = Average True Range over specified period\n- ATR_multiplier = sensitivity factor (typically 1.5 to 3.0)\n- lookback = period for identifying swing highs/lows","intuition":"Swing trading with ATR breakouts is like setting a \"noise filter\" on price movements. Instead of reacting to every small wiggle, you only take action when price moves far enough beyond recent ranges to suggest a real trend is starting. The ATR acts as a ruler that automatically adjusts to how wild or calm the market is.","rawContent":"A volatility-based entry system that uses Average True Range (ATR) to identify breakout opportunities. This method enters trades when price moves beyond a dynamic threshold calculated from recent volatility, capturing momentum moves while filtering out noise.\n\nEntry Signal = price > (high[lookback] + (ATR_multiplier * ATR))\nExit Signal = price < (low[lookback] - (ATR_multiplier * ATR))\n\nWhere:\n- ATR = Average True Range over specified period\n- ATR_multiplier = sensitivity factor (typically 1.5 to 3.0)\n- lookback = period for identifying swing highs/lows\n\nSwing trading with ATR breakouts is like setting a \"noise filter\" on price movements. Instead of reacting to every small wiggle, you only take action when price moves far enough beyond recent ranges to suggest a real trend is starting. The ATR acts as a ruler that automatically adjusts to how wild or calm the market is.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Swing_Trading_ATR_Breakouts.txt","hasFullInfo":true},{"id":229,"title":"Volatility-Based Position Sizing","filename":"Volatility_Based_Position_Sizing.txt","group":"group 11","groupNum":11,"categoryId":27,"categoryTitle":"27. POSITION SIZING & MONEY MANAGEMENT","subcategory":"General","summary":"Risk-adjusted sizing","overview":"A risk-adjusted position sizing method that scales position size inversely with market volatility, maintaining consistent risk exposure across varying market conditions. Higher volatility = smaller positions; lower volatility = larger positions.","formula":"Basic Formula:\nPosition_Size = (Account_Risk_Amount) / (ATR × Point_Value)","parameters":"Where:\n- Account_Risk_Amount = account_size × risk_percentage (e.g., 1-2%)\n- ATR = Average True Range over N periods (typically 14-20)\n- Point_Value = dollar value per point of movement\n\nExample:\n- Account = $100,000\n- Risk per trade = 1% = $1,000\n- ATR = 2.50 points\n- Point value = $10 per point\n- Position = $1,000 / (2.50 × $10) = 40 units\n\nVolatility Adjustments:\n- Use ATR percentage: ATR / Close × 100\n- Normalize across markets: (ATR / Price) × Position\n- Dynamic scaling: reduce size when ATR spikes\n- Multiple timeframe ATR for context\n\nAlternative Measures:\n- Standard deviation instead of ATR\n- Historical volatility (annualized)\n- Implied volatility (for options)\n- Realized variance","intuition":"Volatility-based sizing is like adjusting your driving speed for road conditions. On a smooth highway (low volatility), you can drive faster (larger positions). On an icy road (high volatility), you slow down (smaller positions). This way, your risk of crashing (hitting stop loss) stays constant regardless of conditions. You're always risking the same dollar amount, but the position size changes to match how wild the market is.","rawContent":"A risk-adjusted position sizing method that scales position size inversely with market volatility, maintaining consistent risk exposure across varying market conditions. Higher volatility = smaller positions; lower volatility = larger positions.\n\nBasic Formula:\nPosition_Size = (Account_Risk_Amount) / (ATR × Point_Value)\n\nWhere:\n- Account_Risk_Amount = account_size × risk_percentage (e.g., 1-2%)\n- ATR = Average True Range over N periods (typically 14-20)\n- Point_Value = dollar value per point of movement\n\nExample:\n- Account = $100,000\n- Risk per trade = 1% = $1,000\n- ATR = 2.50 points\n- Point value = $10 per point\n- Position = $1,000 / (2.50 × $10) = 40 units\n\nVolatility Adjustments:\n- Use ATR percentage: ATR / Close × 100\n- Normalize across markets: (ATR / Price) × Position\n- Dynamic scaling: reduce size when ATR spikes\n- Multiple timeframe ATR for context\n\nAlternative Measures:\n- Standard deviation instead of ATR\n- Historical volatility (annualized)\n- Implied volatility (for options)\n- Realized variance\n\nVolatility-based sizing is like adjusting your driving speed for road conditions. On a smooth highway (low volatility), you can drive faster (larger positions). On an icy road (high volatility), you slow down (smaller positions). This way, your risk of crashing (hitting stop loss) stays constant regardless of conditions. You're always risking the same dollar amount, but the position size changes to match how wild the market is.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 11/Volatility_Based_Position_Sizing.txt","hasFullInfo":true},{"id":230,"title":"Volatility Breakout Entry System","filename":"Volatility_Breakout_Entry_System.txt","group":"group 11","groupNum":11,"categoryId":26,"categoryTitle":"26. ENTRY/EXIT SIGNAL FILTERS","subcategory":"General","summary":"Channel breakouts","overview":"A dynamic entry method that adapts to changing market volatility by setting breakout levels based on historical volatility measures. Entries occur when price exceeds volatility-adjusted thresholds, capturing expansion moves while avoiding false breakouts during low-volatility periods.","formula":"Entry Calculation:\n- Long Entry = close > (reference_price + volatility_threshold)\n- Short Entry = close < (reference_price - volatility_threshold)","parameters":"Where:\n- reference_price = recent high/low or moving average\n- volatility_threshold = ATR * multiplier OR StdDev * multiplier\n- multiplier = sensitivity adjustment (1.0 to 3.0)\n\nCommon Variations:\n- Bollinger Band breakouts (2 x StdDev)\n- Keltner Channel breakouts (2 x ATR)\n- Donchian Channel breakouts (N-period high/low)\n- ATR-based expansion bands\n\nVolatility breakout systems are like having a smart doorbell that only rings when someone knocks hard enough. In a quiet neighborhood (low volatility), even a medium knock triggers it. In a noisy area (high volatility), it ignores small bumps and only alerts on strong knocks. This prevents you from opening the door (entering a trade) for every little disturbance.","intuition":"","rawContent":"A dynamic entry method that adapts to changing market volatility by setting breakout levels based on historical volatility measures. Entries occur when price exceeds volatility-adjusted thresholds, capturing expansion moves while avoiding false breakouts during low-volatility periods.\n\nEntry Calculation:\n- Long Entry = close > (reference_price + volatility_threshold)\n- Short Entry = close < (reference_price - volatility_threshold)\n\nWhere:\n- reference_price = recent high/low or moving average\n- volatility_threshold = ATR * multiplier OR StdDev * multiplier\n- multiplier = sensitivity adjustment (1.0 to 3.0)\n\nCommon Variations:\n- Bollinger Band breakouts (2 x StdDev)\n- Keltner Channel breakouts (2 x ATR)\n- Donchian Channel breakouts (N-period high/low)\n- ATR-based expansion bands\n\nVolatility breakout systems are like having a smart doorbell that only rings when someone knocks hard enough. In a quiet neighborhood (low volatility), even a medium knock triggers it. In a noisy area (high volatility), it ignores small bumps and only alerts on strong knocks. This prevents you from opening the door (entering a trade) for every little disturbance.","tags":["Volatility","DSP Filtering","Stops & Risk"],"relPath":"public/concept-list/list-concepts/group 11/Volatility_Breakout_Entry_System.txt","hasFullInfo":true},{"id":231,"title":"Advance Issues Momentum (AIM)","filename":"Advance_Issues_Momentum.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Breadth momentum","overview":"A market breadth momentum indicator that measures the rate of change in the number of advancing issues relative to total issues traded, providing insight into the underlying strength or weakness of market movements beyond simple price action by tracking participation breadth acceleration.","formula":"AIM calculates the momentum (rate of change) of advancing issues as a percentage of total issues, revealing whether market rallies or declines are broadening (increasing participation) or narrowing (decreasing participation). Divergences between price and AIM often signal impending reversals as breadth momentum leads price momentum.\n\nCalculation:\n1. Calculate advance percentage:\n   - Advance_Pct = (Advancing_Issues / Total_Issues) * 100\n   - Total_Issues = Advancing + Declining + Unchanged\n\n2. Calculate momentum:\n   - AIM = (Advance_Pct - Advance_Pct[n]) / n\n   - Alternatively: AIM = ROC(Advance_Pct, n)\n   - Where n = lookback period (typically 10-20)\n\n3. Optional smoothing:\n   - AIM_Smoothed = EMA(AIM, 5)\n\nInterpretation:\n- Rising AIM: Breadth momentum increasing (healthy move)\n- Falling AIM: Breadth momentum decreasing (weakening move)\n- Positive AIM with rising price: Strong confirmed uptrend\n- Negative AIM with rising price: Weak rally (divergence warning)\n- Extreme AIM readings: Potential exhaustion\n\nNote: Requires market breadth data (advancing/declining/total issues)","parameters":"","intuition":"Think of AIM as measuring how quickly a party is growing or shrinking. If 60% of guests have arrived and tomorrow 70% will be there, the party's participation rate is accelerating (positive AIM). If yesterday 70% were there but today only 60%, participation is declining even if people are still arriving (negative AIM). Price might still be going up (people arriving) but if AIM is falling, the party is losing momentum and might end soon.","rawContent":"A market breadth momentum indicator that measures the rate of change in the number of advancing issues relative to total issues traded, providing insight into the underlying strength or weakness of market movements beyond simple price action by tracking participation breadth acceleration.\n\nAIM calculates the momentum (rate of change) of advancing issues as a percentage of total issues, revealing whether market rallies or declines are broadening (increasing participation) or narrowing (decreasing participation). Divergences between price and AIM often signal impending reversals as breadth momentum leads price momentum.\n\nCalculation:\n1. Calculate advance percentage:\n   - Advance_Pct = (Advancing_Issues / Total_Issues) * 100\n   - Total_Issues = Advancing + Declining + Unchanged\n   \n2. Calculate momentum:\n   - AIM = (Advance_Pct - Advance_Pct[n]) / n\n   - Alternatively: AIM = ROC(Advance_Pct, n)\n   - Where n = lookback period (typically 10-20)\n   \n3. Optional smoothing:\n   - AIM_Smoothed = EMA(AIM, 5)\n   \nInterpretation:\n- Rising AIM: Breadth momentum increasing (healthy move)\n- Falling AIM: Breadth momentum decreasing (weakening move)\n- Positive AIM with rising price: Strong confirmed uptrend\n- Negative AIM with rising price: Weak rally (divergence warning)\n- Extreme AIM readings: Potential exhaustion\n\nNote: Requires market breadth data (advancing/declining/total issues)\n\nThink of AIM as measuring how quickly a party is growing or shrinking. If 60% of guests have arrived and tomorrow 70% will be there, the party's participation rate is accelerating (positive AIM). If yesterday 70% were there but today only 60%, participation is declining even if people are still arriving (negative AIM). Price might still be going up (people arriving) but if AIM is falling, the party is losing momentum and might end soon.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Advance_Issues_Momentum.txt","hasFullInfo":true},{"id":232,"title":"Aroon Indicator & Aroon Oscillator","filename":"Aroon_Indicator_Aroon_Oscillator.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Time since high/low","overview":"A technical indicator developed by Tushar Chande that measures the time elapsed since the most recent high and low within a lookback period, identifying trend strength and potential reversals by tracking how recently new highs or lows occurred, with the oscillator showing the difference between the two components.","formula":"\"Aroon\" means \"dawn's early light\" in Sanskrit, reflecting the indicator's purpose of detecting the early emergence of new trends. The Aroon-Up measures time since the highest high, while Aroon-Down measures time since the lowest low. When Aroon-Up is high, recent highs suggest an uptrend. When Aroon-Down is high, recent lows suggest a downtrend.\n\nCalculation:\n1. Aroon-Up:\n   - Periods_Since_High = Number of periods since highest high in last n periods\n   - Aroon_Up = ((n - Periods_Since_High) / n) * 100\n\n2. Aroon-Down:\n   - Periods_Since_Low = Number of periods since lowest low in last n periods\n   - Aroon_Down = ((n - Periods_Since_Low) / n) * 100\n\n3. Aroon Oscillator:\n   - Aroon_Osc = Aroon_Up - Aroon_Down\n   - Ranges from -100 to +100\n\nInterpretation:\n- Aroon_Up near 100: New high just occurred (strong uptrend)\n- Aroon_Down near 100: New low just occurred (strong downtrend)\n- Both near 100: High volatility, consolidation\n- Both near 0: No clear trend\n- Aroon_Osc > +50: Strong uptrend\n- Aroon_Osc < -50: Strong downtrend","parameters":"","intuition":"Think of Aroon as asking \"How recently did we see a new record high or low?\" If you just set a personal record at the gym yesterday, you're probably in great shape (high Aroon-Up = strong uptrend). If your last record was 20 workouts ago, you're probably declining (low Aroon-Up = weakening trend). The oscillator shows whether your highs or lows are more recent.","rawContent":"A technical indicator developed by Tushar Chande that measures the time elapsed since the most recent high and low within a lookback period, identifying trend strength and potential reversals by tracking how recently new highs or lows occurred, with the oscillator showing the difference between the two components.\n\n\"Aroon\" means \"dawn's early light\" in Sanskrit, reflecting the indicator's purpose of detecting the early emergence of new trends. The Aroon-Up measures time since the highest high, while Aroon-Down measures time since the lowest low. When Aroon-Up is high, recent highs suggest an uptrend. When Aroon-Down is high, recent lows suggest a downtrend.\n\nCalculation:\n1. Aroon-Up:\n   - Periods_Since_High = Number of periods since highest high in last n periods\n   - Aroon_Up = ((n - Periods_Since_High) / n) * 100\n   \n2. Aroon-Down:\n   - Periods_Since_Low = Number of periods since lowest low in last n periods\n   - Aroon_Down = ((n - Periods_Since_Low) / n) * 100\n   \n3. Aroon Oscillator:\n   - Aroon_Osc = Aroon_Up - Aroon_Down\n   - Ranges from -100 to +100\n   \nInterpretation:\n- Aroon_Up near 100: New high just occurred (strong uptrend)\n- Aroon_Down near 100: New low just occurred (strong downtrend)\n- Both near 100: High volatility, consolidation\n- Both near 0: No clear trend\n- Aroon_Osc > +50: Strong uptrend\n- Aroon_Osc < -50: Strong downtrend\n\nThink of Aroon as asking \"How recently did we see a new record high or low?\" If you just set a personal record at the gym yesterday, you're probably in great shape (high Aroon-Up = strong uptrend). If your last record was 20 workouts ago, you're probably declining (low Aroon-Up = weakening trend). The oscillator shows whether your highs or lows are more recent.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Aroon_Indicator_Aroon_Oscillator.txt","hasFullInfo":true},{"id":233,"title":"Asymmetrical RSI (ARSI)","filename":"Asymmetrical_RSI.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"Separate up/down periods","overview":"A variation of the traditional RSI that uses different calculation periods for measuring gains versus losses, acknowledging the asymmetric nature of market movements where rallies and declines often occur at different rates and timeframes, providing more nuanced momentum readings.","formula":"The standard RSI assumes equal weighting for up and down movements over the same period. ARSI recognizes that bull markets often climb slowly and steadily while bear markets can fall sharply and quickly (or vice versa depending on the asset). By using separate periods for gains and losses (e.g., 5 for gains, 14 for losses), ARSI better captures the actual dynamics of asymmetric market behavior.\n\nCalculation:\n1. Separate gain and loss periods:\n   - Up_Period = period for averaging gains (e.g., 5, 10)\n   - Down_Period = period for averaging losses (e.g., 14, 20)\n\n2. Calculate gains and losses:\n   - If close > close[1]: Gain = close - close[1], Loss = 0\n   - If close < close[1]: Loss = close[1] - close, Gain = 0\n\n3. Separate EMAs:\n   - Avg_Gain = EMA(Gain, Up_Period)\n   - Avg_Loss = EMA(Loss, Down_Period)\n\n4. Calculate ARSI:\n   - RS = Avg_Gain / Avg_Loss\n   - ARSI = 100 - (100 / (1 + RS))\n\nTypical configurations:\n- Fast up/Slow down: captures quick rallies in slow declines\n- Slow up/Fast down: captures slow grinding up with sharp drops\n\nImagine measuring human reaction times separately for good news versus bad news. People often react slowly to good news (gradual acceptance) but quickly to bad news (immediate fear). ARSI does the same for markets - it measures buying pressure over one timeframe and selling pressure over a different timeframe, recognizing that markets process gains and losses at fundamentally different speeds.","parameters":"","intuition":"","rawContent":"A variation of the traditional RSI that uses different calculation periods for measuring gains versus losses, acknowledging the asymmetric nature of market movements where rallies and declines often occur at different rates and timeframes, providing more nuanced momentum readings.\n\nThe standard RSI assumes equal weighting for up and down movements over the same period. ARSI recognizes that bull markets often climb slowly and steadily while bear markets can fall sharply and quickly (or vice versa depending on the asset). By using separate periods for gains and losses (e.g., 5 for gains, 14 for losses), ARSI better captures the actual dynamics of asymmetric market behavior.\n\nCalculation:\n1. Separate gain and loss periods:\n   - Up_Period = period for averaging gains (e.g., 5, 10)\n   - Down_Period = period for averaging losses (e.g., 14, 20)\n   \n2. Calculate gains and losses:\n   - If close > close[1]: Gain = close - close[1], Loss = 0\n   - If close < close[1]: Loss = close[1] - close, Gain = 0\n   \n3. Separate EMAs:\n   - Avg_Gain = EMA(Gain, Up_Period)\n   - Avg_Loss = EMA(Loss, Down_Period)\n   \n4. Calculate ARSI:\n   - RS = Avg_Gain / Avg_Loss\n   - ARSI = 100 - (100 / (1 + RS))\n   \nTypical configurations:\n- Fast up/Slow down: captures quick rallies in slow declines\n- Slow up/Fast down: captures slow grinding up with sharp drops\n\nImagine measuring human reaction times separately for good news versus bad news. People often react slowly to good news (gradual acceptance) but quickly to bad news (immediate fear). ARSI does the same for markets - it measures buying pressure over one timeframe and selling pressure over a different timeframe, recognizing that markets process gains and losses at fundamentally different speeds.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Asymmetrical_RSI.txt","hasFullInfo":true},{"id":234,"title":"Balance of Market Power (BMP)","filename":"Balance_of_Market_Power.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Supply/demand balance","overview":"An oscillator that measures the relative strength between buyers and sellers by analyzing where closing prices fall within the day's trading range, weighted by volume, to assess whether bulls or bears are in control and the likely continuation or reversal of current price movements.","formula":"BMP evaluates each bar's position within its range (close relative to open, high, and low) and weights this by volume to determine buying versus selling pressure. Positive values indicate buyers closing prices near highs with strong volume (bullish control). Negative values indicate sellers pushing closes near lows (bearish control). The magnitude indicates the strength of control.\n\nCalculation:\n1. Calculate intrabar position:\n   - If close > open:\n     - Bull_Power = (close - open) / (high - low) * volume\n     - Bear_Power = 0\n   - If close < open:\n     - Bear_Power = (open - close) / (high - low) * volume\n     - Bull_Power = 0\n   - If close = open:\n     - Position = (close - low) / (high - low)\n     - Bull_Power = Position * volume\n     - Bear_Power = (1 - Position) * volume\n\n2. Cumulative calculation:\n   - Net_Power = Bull_Power - Bear_Power\n   - BMP = Sum(Net_Power) over n periods\n\n3. Normalized version:\n   - BMP_Normalized = BMP / Sum(Volume) over n periods\n   - Oscillates around zero\n\nImagine two teams in a tug-of-war where each person's pull strength varies (volume). BMP measures not just who won each round, but by how much and with what effort. If the bulls win by pulling the rope 80% of the way to their side with huge effort (high volume), that's strong bull power. If they barely win with little effort, that's weak. BMP tracks this battle of power over time.","parameters":"","intuition":"","rawContent":"An oscillator that measures the relative strength between buyers and sellers by analyzing where closing prices fall within the day's trading range, weighted by volume, to assess whether bulls or bears are in control and the likely continuation or reversal of current price movements.\n\nBMP evaluates each bar's position within its range (close relative to open, high, and low) and weights this by volume to determine buying versus selling pressure. Positive values indicate buyers closing prices near highs with strong volume (bullish control). Negative values indicate sellers pushing closes near lows (bearish control). The magnitude indicates the strength of control.\n\nCalculation:\n1. Calculate intrabar position:\n   - If close > open:\n     - Bull_Power = (close - open) / (high - low) * volume\n     - Bear_Power = 0\n   - If close < open:\n     - Bear_Power = (open - close) / (high - low) * volume\n     - Bull_Power = 0\n   - If close = open:\n     - Position = (close - low) / (high - low)\n     - Bull_Power = Position * volume\n     - Bear_Power = (1 - Position) * volume\n   \n2. Cumulative calculation:\n   - Net_Power = Bull_Power - Bear_Power\n   - BMP = Sum(Net_Power) over n periods\n   \n3. Normalized version:\n   - BMP_Normalized = BMP / Sum(Volume) over n periods\n   - Oscillates around zero\n\nImagine two teams in a tug-of-war where each person's pull strength varies (volume). BMP measures not just who won each round, but by how much and with what effort. If the bulls win by pulling the rope 80% of the way to their side with huge effort (high volume), that's strong bull power. If they barely win with little effort, that's weak. BMP tracks this battle of power over time.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Balance_of_Market_Power.txt","hasFullInfo":true},{"id":235,"title":"Butterworth + Savitzky-Golay Cascade","filename":"Butterworth_Savitzky-Golay_Cascade.txt","group":"group 12","groupNum":12,"categoryId":20,"categoryTitle":"20. HYBRID & MULTI-METHOD FILTERS","subcategory":"General","summary":"IIR + FIR combination","overview":"A cascaded filtering system that combines the Butterworth IIR (Infinite Impulse Response) filter's smooth frequency response with the Savitzky-Golay FIR (Finite Impulse Response) filter's edge-preserving polynomial smoothing, creating a two-stage filter that removes noise while maintaining signal features.","formula":"The Butterworth filter provides maximally flat passband response with no ripples, effectively removing high-frequency noise while introducing some lag. The Savitzky-Golay filter fits local polynomials to preserve edges and peaks while smoothing. In cascade, the Butterworth pre-filters high-frequency noise, then Savitzky-Golay refines the signal while preserving important features like turning points and trends.\n\nCalculation:\n1. Butterworth Filter Stage (2nd order):\n   - Transfer function: H(s) = 1 / (1 + (s/ωc)^(2n))\n   - Digital implementation: y[t] = a0*x[t] + a1*x[t-1] + a2*x[t-2] - b1*y[t-1] - b2*y[t-2]\n   - Where coefficients a,b derived from cutoff frequency ωc\n\n2. Savitzky-Golay Filter Stage:\n   - Fit polynomial: p(x) = a0 + a1*x + a2*x² + ... + ak*x^k\n   - Window size: 2m+1 points\n   - Apply convolution with pre-computed coefficients\n   - Output: smoothed_y[t] = Σ(c_i * butterworth_y[t+i]) for i=-m to m\n\n3. Combined: Final_output = SG(Butterworth(raw_price))","parameters":"","intuition":"Think of this as a two-step photo editing process. First, you use a blur tool (Butterworth) to remove grainy noise from the image. Then you use an edge-enhancing filter (Savitzky-Golay) to bring back the important details and sharp features. The result is a clean image that still shows all the important structures, not just a blurry mess.","rawContent":"A cascaded filtering system that combines the Butterworth IIR (Infinite Impulse Response) filter's smooth frequency response with the Savitzky-Golay FIR (Finite Impulse Response) filter's edge-preserving polynomial smoothing, creating a two-stage filter that removes noise while maintaining signal features.\n\nThe Butterworth filter provides maximally flat passband response with no ripples, effectively removing high-frequency noise while introducing some lag. The Savitzky-Golay filter fits local polynomials to preserve edges and peaks while smoothing. In cascade, the Butterworth pre-filters high-frequency noise, then Savitzky-Golay refines the signal while preserving important features like turning points and trends.\n\nCalculation:\n1. Butterworth Filter Stage (2nd order):\n   - Transfer function: H(s) = 1 / (1 + (s/ωc)^(2n))\n   - Digital implementation: y[t] = a0*x[t] + a1*x[t-1] + a2*x[t-2] - b1*y[t-1] - b2*y[t-2]\n   - Where coefficients a,b derived from cutoff frequency ωc\n   \n2. Savitzky-Golay Filter Stage:\n   - Fit polynomial: p(x) = a0 + a1*x + a2*x² + ... + ak*x^k\n   - Window size: 2m+1 points\n   - Apply convolution with pre-computed coefficients\n   - Output: smoothed_y[t] = Σ(c_i * butterworth_y[t+i]) for i=-m to m\n   \n3. Combined: Final_output = SG(Butterworth(raw_price))\n\nThink of this as a two-step photo editing process. First, you use a blur tool (Butterworth) to remove grainy noise from the image. Then you use an edge-enhancing filter (Savitzky-Golay) to bring back the important details and sharp features. The result is a clean image that still shows all the important structures, not just a blurry mess.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 12/Butterworth_Savitzky-Golay_Cascade.txt","hasFullInfo":true},{"id":236,"title":"Chande Momentum Oscillator (CMO)","filename":"Chande_Momentum_Oscillator.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"Momentum difference ratio","overview":"A momentum indicator developed by Tushar Chande that measures the difference between the sum of recent gains and losses, normalized to oscillate between -100 and +100. Unlike RSI, CMO uses raw momentum differences rather than ratios, providing a more direct measure of directional strength.","formula":"The CMO calculates upward and downward price changes over a specified period, then computes the difference between total up moves and total down moves as a percentage of total price movement. Values near +100 indicate strong upward momentum, values near -100 indicate strong downward momentum, and values near zero suggest lack of directional bias.\n\nCalculation:\nCMO = 100 * (Su - Sd) / (Su + Sd)","parameters":"Where:\n- Su = Sum of up closes over n periods\n- Sd = Sum of down closes over n periods (absolute values)\n- Up close: max(0, close[t] - close[t-1])\n- Down close: max(0, close[t-1] - close[t])\n- n = lookback period (typically 9, 14, or 20)\n\nAlternative form:\nCMO = 100 * (Net momentum) / (Total movement)\n    = 100 * ((ΣUps - ΣDowns) / (ΣUps + ΣDowns))\n\nImagine you're tracking a tug-of-war match. CMO measures who's winning by looking at the difference between how much rope the winning side has pulled versus the losing side, compared to the total rope moved. If it's +80, the bulls pulled 80% more rope than the bears. If it's -60, bears are dominating. Zero means it's perfectly balanced - nobody's winning.","intuition":"","rawContent":"A momentum indicator developed by Tushar Chande that measures the difference between the sum of recent gains and losses, normalized to oscillate between -100 and +100. Unlike RSI, CMO uses raw momentum differences rather than ratios, providing a more direct measure of directional strength.\n\nThe CMO calculates upward and downward price changes over a specified period, then computes the difference between total up moves and total down moves as a percentage of total price movement. Values near +100 indicate strong upward momentum, values near -100 indicate strong downward momentum, and values near zero suggest lack of directional bias.\n\nCalculation:\nCMO = 100 * (Su - Sd) / (Su + Sd)\n\nWhere:\n- Su = Sum of up closes over n periods\n- Sd = Sum of down closes over n periods (absolute values)\n- Up close: max(0, close[t] - close[t-1])\n- Down close: max(0, close[t-1] - close[t])\n- n = lookback period (typically 9, 14, or 20)\n\nAlternative form:\nCMO = 100 * (Net momentum) / (Total movement)\n    = 100 * ((ΣUps - ΣDowns) / (ΣUps + ΣDowns))\n\nImagine you're tracking a tug-of-war match. CMO measures who's winning by looking at the difference between how much rope the winning side has pulled versus the losing side, compared to the total rope moved. If it's +80, the bulls pulled 80% more rope than the bears. If it's -60, bears are dominating. Zero means it's perfectly balanced - nobody's winning.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Chande_Momentum_Oscillator.txt","hasFullInfo":true},{"id":237,"title":"Composite Momentum Index","filename":"Composite_Momentum_Index.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Multi-component momentum","overview":"A multi-component momentum indicator that combines several different momentum measurements (price rate of change, volume-weighted momentum, breadth momentum) into a single unified index, providing a more robust and comprehensive view of market momentum than any single indicator alone.","formula":"The Composite Momentum Index synthesizes multiple momentum perspectives by calculating separate momentum components for price, volume, and optionally breadth or volatility, then combining them with weighted averaging or scoring methodology. This diversified approach reduces false signals from any single component and provides higher-confidence momentum readings.\n\nCalculation (example methodology):\n1. Price Momentum Component:\n   - PM = ROC(close, n) or RSI or other price momentum\n   - Normalized to 0-100 scale\n\n2. Volume-Weighted Momentum:\n   - VM = Correlation(price_change, volume) over n periods\n   - Or: VM = ROC(volume-weighted price, n)\n   - Normalized to 0-100 scale\n\n3. Optional Breadth Component:\n   - BM = McClellan Oscillator or A/D momentum\n   - Normalized to 0-100 scale\n\n4. Composite Calculation:\n   - CMI = (w1*PM + w2*VM + w3*BM) / (w1+w2+w3)\n   - Where w1, w2, w3 = weights (often equal)\n   - Or use scoring: CMI = Count(components > threshold)\n\nInterpretation:\n- High CMI (>60-70): Strong multi-dimensional momentum\n- Low CMI (<30-40): Weak momentum across all components\n- Divergences: More reliable than single-indicator divergences","parameters":"","intuition":"Think of CMI as getting multiple doctor opinions before surgery. One doctor (price momentum) might say you're healthy, but if two other doctors (volume and breadth) say there's a problem, you should be concerned. CMI listens to all the doctors and gives you a consensus opinion that's more reliable than any single diagnosis. All agreeing = high confidence signal.","rawContent":"A multi-component momentum indicator that combines several different momentum measurements (price rate of change, volume-weighted momentum, breadth momentum) into a single unified index, providing a more robust and comprehensive view of market momentum than any single indicator alone.\n\nThe Composite Momentum Index synthesizes multiple momentum perspectives by calculating separate momentum components for price, volume, and optionally breadth or volatility, then combining them with weighted averaging or scoring methodology. This diversified approach reduces false signals from any single component and provides higher-confidence momentum readings.\n\nCalculation (example methodology):\n1. Price Momentum Component:\n   - PM = ROC(close, n) or RSI or other price momentum\n   - Normalized to 0-100 scale\n   \n2. Volume-Weighted Momentum:\n   - VM = Correlation(price_change, volume) over n periods\n   - Or: VM = ROC(volume-weighted price, n)\n   - Normalized to 0-100 scale\n   \n3. Optional Breadth Component:\n   - BM = McClellan Oscillator or A/D momentum\n   - Normalized to 0-100 scale\n   \n4. Composite Calculation:\n   - CMI = (w1*PM + w2*VM + w3*BM) / (w1+w2+w3)\n   - Where w1, w2, w3 = weights (often equal)\n   - Or use scoring: CMI = Count(components > threshold)\n   \nInterpretation:\n- High CMI (>60-70): Strong multi-dimensional momentum\n- Low CMI (<30-40): Weak momentum across all components\n- Divergences: More reliable than single-indicator divergences\n\nThink of CMI as getting multiple doctor opinions before surgery. One doctor (price momentum) might say you're healthy, but if two other doctors (volume and breadth) say there's a problem, you should be concerned. CMI listens to all the doctors and gives you a consensus opinion that's more reliable than any single diagnosis. All agreeing = high confidence signal.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Composite_Momentum_Index.txt","hasFullInfo":true},{"id":238,"title":"Dynamic Momentum Index (DMI)","filename":"Dynamic_Momentum_Index.txt","group":"group 12","groupNum":12,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Market-Adaptive","summary":"Chande - Volatility-adjusted RSI period","overview":"A volatility-adjusted momentum oscillator developed by Tushar Chande and Stanley Kroll that varies the RSI calculation period based on current market volatility, using shorter periods during high volatility and longer periods during low volatility to maintain consistent sensitivity across different market conditions.","formula":"The DMI addresses the limitation of fixed-period RSI, which can give misleading signals when volatility changes. By calculating the \"dominant cycle\" or recent volatility level and adjusting the RSI lookback period accordingly, DMI provides more reliable overbought/oversold signals that adapt to current market dynamics without manual period adjustments.\n\nCalculation:\n1. Calculate volatility measure (Standard Deviation):\n   - StdDev = √(Σ(close - avg_close)² / n) over recent period\n   - Typical volatility lookback: 5 periods\n\n2. Calculate adaptive period:\n   - Volatility_Ratio = Current_StdDev / Average_StdDev\n   - Adaptive_Period = Base_Period / Volatility_Ratio\n   - Base_Period typically 14\n   - Constrain between Min (5) and Max (30)\n\n3. Calculate RSI with adaptive period:\n   - Avg_Gain = EMA(gains, Adaptive_Period)\n   - Avg_Loss = EMA(losses, Adaptive_Period)\n   - RS = Avg_Gain / Avg_Loss\n   - DMI = 100 - (100 / (1 + RS))\n\nInterpretation:\n- DMI > 70: Overbought (adaptive to volatility)\n- DMI < 30: Oversold (adaptive to volatility)","parameters":"","intuition":"Think of DMI as a temperature sensor that automatically adjusts its scale based on the weather. In summer (high volatility), it uses a more sensitive scale to catch quick changes. In winter (low volatility), it uses a less sensitive scale to avoid false alarms. This way, \"hot\" and \"cold\" readings mean the same thing year-round, unlike a fixed thermometer that might be too sensitive in winter or not sensitive enough in summer.","rawContent":"A volatility-adjusted momentum oscillator developed by Tushar Chande and Stanley Kroll that varies the RSI calculation period based on current market volatility, using shorter periods during high volatility and longer periods during low volatility to maintain consistent sensitivity across different market conditions.\n\nThe DMI addresses the limitation of fixed-period RSI, which can give misleading signals when volatility changes. By calculating the \"dominant cycle\" or recent volatility level and adjusting the RSI lookback period accordingly, DMI provides more reliable overbought/oversold signals that adapt to current market dynamics without manual period adjustments.\n\nCalculation:\n1. Calculate volatility measure (Standard Deviation):\n   - StdDev = √(Σ(close - avg_close)² / n) over recent period\n   - Typical volatility lookback: 5 periods\n   \n2. Calculate adaptive period:\n   - Volatility_Ratio = Current_StdDev / Average_StdDev\n   - Adaptive_Period = Base_Period / Volatility_Ratio\n   - Base_Period typically 14\n   - Constrain between Min (5) and Max (30)\n   \n3. Calculate RSI with adaptive period:\n   - Avg_Gain = EMA(gains, Adaptive_Period)\n   - Avg_Loss = EMA(losses, Adaptive_Period)\n   - RS = Avg_Gain / Avg_Loss\n   - DMI = 100 - (100 / (1 + RS))\n   \nInterpretation:\n- DMI > 70: Overbought (adaptive to volatility)\n- DMI < 30: Oversold (adaptive to volatility)\n\nThink of DMI as a temperature sensor that automatically adjusts its scale based on the weather. In summer (high volatility), it uses a more sensitive scale to catch quick changes. In winter (low volatility), it uses a less sensitive scale to avoid false alarms. This way, \"hot\" and \"cold\" readings mean the same thing year-round, unlike a fixed thermometer that might be too sensitive in winter or not sensitive enough in summer.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 12/Dynamic_Momentum_Index.txt","hasFullInfo":true},{"id":239,"title":"EMD + Wavelet Hybrid","filename":"EMD_Wavelet_Hybrid.txt","group":"group 12","groupNum":12,"categoryId":20,"categoryTitle":"20. HYBRID & MULTI-METHOD FILTERS","subcategory":"General","summary":"Multi-scale decomposition","overview":"A multi-scale decomposition method that combines Empirical Mode Decomposition (EMD) with Wavelet analysis to provide adaptive, data-driven time-frequency analysis superior to either method alone, particularly effective for non-stationary financial time series with multiple embedded frequencies.","formula":"EMD is a fully data-driven method that decomposes signals into Intrinsic Mode Functions (IMFs) representing different frequency scales without predefined basis functions. Wavelet transforms provide multi-resolution analysis with localized time-frequency representation. The hybrid approach uses EMD to extract adaptive IMFs, then applies wavelet transforms to each IMF for refined time-frequency localization, noise reduction, and feature extraction.\n\nCalculation:\n1. EMD Stage:\n   - Identify local extrema in price series\n   - Create upper/lower envelopes via cubic spline\n   - Calculate mean: m = (upper + lower)/2\n   - Extract IMF: h = price - m\n   - Iterate until IMF criteria met\n   - Repeat for residual to get multiple IMFs\n\n2. Wavelet Stage:\n   - For each IMF_k: W(a,b) = ∫ IMF_k(t) * ψ*((t-b)/a) dt\n   - Where ψ = mother wavelet, a = scale, b = translation\n   - Apply wavelet denoising/filtering to each IMF\n\n3. Reconstruct: price_filtered = Σ(filtered_IMF_k) + residual","parameters":"","intuition":"Think of this as first breaking down a complex musical piece (price data) into individual instrument tracks (EMD gives you the drums, bass, melody separately), then using advanced audio processing (wavelets) to clean up and enhance each track individually. You end up with a much cleaner, more useful signal than trying to process everything at once.","rawContent":"A multi-scale decomposition method that combines Empirical Mode Decomposition (EMD) with Wavelet analysis to provide adaptive, data-driven time-frequency analysis superior to either method alone, particularly effective for non-stationary financial time series with multiple embedded frequencies.\n\nEMD is a fully data-driven method that decomposes signals into Intrinsic Mode Functions (IMFs) representing different frequency scales without predefined basis functions. Wavelet transforms provide multi-resolution analysis with localized time-frequency representation. The hybrid approach uses EMD to extract adaptive IMFs, then applies wavelet transforms to each IMF for refined time-frequency localization, noise reduction, and feature extraction.\n\nCalculation:\n1. EMD Stage:\n   - Identify local extrema in price series\n   - Create upper/lower envelopes via cubic spline\n   - Calculate mean: m = (upper + lower)/2\n   - Extract IMF: h = price - m\n   - Iterate until IMF criteria met\n   - Repeat for residual to get multiple IMFs\n   \n2. Wavelet Stage:\n   - For each IMF_k: W(a,b) = ∫ IMF_k(t) * ψ*((t-b)/a) dt\n   - Where ψ = mother wavelet, a = scale, b = translation\n   - Apply wavelet denoising/filtering to each IMF\n   \n3. Reconstruct: price_filtered = Σ(filtered_IMF_k) + residual\n\nThink of this as first breaking down a complex musical piece (price data) into individual instrument tracks (EMD gives you the drums, bass, melody separately), then using advanced audio processing (wavelets) to clean up and enhance each track individually. You end up with a much cleaner, more useful signal than trying to process everything at once.","tags":["DSP Filtering","Wavelets"],"relPath":"public/concept-list/list-concepts/group 12/EMD_Wavelet_Hybrid.txt","hasFullInfo":true},{"id":240,"title":"GARCH + Particle Filter Combination","filename":"GARCH_Particle_Filter_Combination.txt","group":"group 12","groupNum":12,"categoryId":20,"categoryTitle":"20. HYBRID & MULTI-METHOD FILTERS","subcategory":"General","summary":"Volatility + nonlinear filtering","overview":"A powerful hybrid approach that merges GARCH (Generalized Autoregressive Conditional Heteroskedasticity) volatility modeling with particle filtering to handle nonlinear dynamics and non-Gaussian distributions in financial markets, particularly useful for tracking time-varying volatility with heavy-tailed returns.","formula":"GARCH models capture volatility clustering (periods of high volatility tend to cluster together) using past returns and past volatility. Particle filters use Monte Carlo methods to approximate the posterior distribution of states in nonlinear/non-Gaussian systems. The combination allows GARCH parameters to evolve over time via particle filtering, adapting to regime changes and structural breaks that fixed-parameter GARCH models miss.\n\nCalculation:\n1. GARCH(1,1) Component:\n   - σ_t² = ω + α*r²_t-1 + β*σ²_t-1\n   - Where σ_t² = conditional variance, r_t = return, ω,α,β = parameters\n\n2. Particle Filter Component:\n   - Generate N particles: {θ^i_t, w^i_t} for i=1...N\n   - θ = GARCH parameters (ω, α, β)\n   - Update particle weights based on likelihood\n   - Resample particles to avoid degeneracy\n\n3. Combined: E[σ_t²] = Σ(w^i_t * σ_t²(θ^i_t))\n\nImagine GARCH as a volatility forecaster that learns from recent market behavior, but it's stuck with one set of rules. The particle filter creates hundreds of \"parallel universes\" where each universe has slightly different GARCH rules. As market conditions change, the filter automatically gives more weight to the universes (particles) that are predicting volatility best, making the system adapt to changing markets without manual intervention.","parameters":"","intuition":"","rawContent":"A powerful hybrid approach that merges GARCH (Generalized Autoregressive Conditional Heteroskedasticity) volatility modeling with particle filtering to handle nonlinear dynamics and non-Gaussian distributions in financial markets, particularly useful for tracking time-varying volatility with heavy-tailed returns.\n\nGARCH models capture volatility clustering (periods of high volatility tend to cluster together) using past returns and past volatility. Particle filters use Monte Carlo methods to approximate the posterior distribution of states in nonlinear/non-Gaussian systems. The combination allows GARCH parameters to evolve over time via particle filtering, adapting to regime changes and structural breaks that fixed-parameter GARCH models miss.\n\nCalculation:\n1. GARCH(1,1) Component:\n   - σ_t² = ω + α*r²_t-1 + β*σ²_t-1\n   - Where σ_t² = conditional variance, r_t = return, ω,α,β = parameters\n   \n2. Particle Filter Component:\n   - Generate N particles: {θ^i_t, w^i_t} for i=1...N\n   - θ = GARCH parameters (ω, α, β)\n   - Update particle weights based on likelihood\n   - Resample particles to avoid degeneracy\n   \n3. Combined: E[σ_t²] = Σ(w^i_t * σ_t²(θ^i_t))\n\nImagine GARCH as a volatility forecaster that learns from recent market behavior, but it's stuck with one set of rules. The particle filter creates hundreds of \"parallel universes\" where each universe has slightly different GARCH rules. As market conditions change, the filter automatically gives more weight to the universes (particles) that are predicting volatility best, making the system adapt to changing markets without manual intervention.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 12/GARCH_Particle_Filter_Combination.txt","hasFullInfo":true},{"id":241,"title":"Hodrick-Prescott + Kalman Hybrid","filename":"Hodrick-Prescott_Kalman_Hybrid.txt","group":"group 12","groupNum":12,"categoryId":20,"categoryTitle":"20. HYBRID & MULTI-METHOD FILTERS","subcategory":"General","summary":"Combined econometric/Kalman","overview":"A hybrid filtering approach that combines the Hodrick-Prescott (HP) filter's trend-cycle decomposition capabilities with the Kalman filter's optimal state estimation to create a more robust and adaptive filtering system for financial time series analysis.","formula":"The HP filter separates a time series into trend and cyclical components by minimizing the variance of the cyclical component subject to a penalty on the second difference of the trend. The Kalman filter provides optimal recursive estimation of the state of a dynamic system. When combined, the HP filter first decomposes the price series, then the Kalman filter adaptively tracks and refines both components, reducing the HP filter's end-point problem and improving real-time estimation accuracy.\n\nCalculation:\n1. HP Filter Stage:\n   - Minimize: Σ(y_t - τ_t)² + λΣ[(τ_t+1 - τ_t) - (τ_t - τ_t-1)]²\n   - Where y_t = observed price, τ_t = trend, λ = smoothing parameter\n\n2. Kalman Filter Stage:\n   - State equation: x_t = F*x_t-1 + w_t\n   - Observation: y_t = H*x_t + v_t\n   - Recursively update trend and cycle estimates\n\n3. Combined output uses Kalman-refined HP trend","parameters":"","intuition":"This hybrid method gives you a smoother, more reliable trend line than either filter alone. Think of it as using one filter to find the general direction (HP), then using a second filter (Kalman) to fine-tune and adapt that direction in real-time, removing the \"wobbly ending\" problem that standalone HP filters have.","rawContent":"A hybrid filtering approach that combines the Hodrick-Prescott (HP) filter's trend-cycle decomposition capabilities with the Kalman filter's optimal state estimation to create a more robust and adaptive filtering system for financial time series analysis.\n\nThe HP filter separates a time series into trend and cyclical components by minimizing the variance of the cyclical component subject to a penalty on the second difference of the trend. The Kalman filter provides optimal recursive estimation of the state of a dynamic system. When combined, the HP filter first decomposes the price series, then the Kalman filter adaptively tracks and refines both components, reducing the HP filter's end-point problem and improving real-time estimation accuracy.\n\nCalculation:\n1. HP Filter Stage:\n   - Minimize: Σ(y_t - τ_t)² + λΣ[(τ_t+1 - τ_t) - (τ_t - τ_t-1)]²\n   - Where y_t = observed price, τ_t = trend, λ = smoothing parameter\n   \n2. Kalman Filter Stage:\n   - State equation: x_t = F*x_t-1 + w_t\n   - Observation: y_t = H*x_t + v_t\n   - Recursively update trend and cycle estimates\n   \n3. Combined output uses Kalman-refined HP trend\n\nThis hybrid method gives you a smoother, more reliable trend line than either filter alone. Think of it as using one filter to find the general direction (HP), then using a second filter (Kalman) to fine-tune and adapt that direction in real-time, removing the \"wobbly ending\" problem that standalone HP filters have.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 12/Hodrick-Prescott_Kalman_Hybrid.txt","hasFullInfo":true},{"id":242,"title":"Inertia Indicator","filename":"Inertia_Indicator.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"RVI of linear regression","overview":"A trend-following indicator developed by Donald Dorsey that applies the Relative Volatility Index (RVI) to a linear regression line rather than to price directly, measuring the volatility of the trend itself to identify when trends are accelerating or decelerating, providing early signals of trend changes.","formula":"The Inertia Indicator first calculates a linear regression line through prices, then computes the RVI of this regression line. The concept is that trend \"inertia\" (momentum of the trend direction) can be measured by how volatile the regression line itself is. Rising inertia suggests the trend is gaining strength, while falling inertia suggests the trend is losing momentum.\n\nCalculation:\n1. Calculate Linear Regression (LinReg):\n   - LinReg[t] = a + b*t\n   - Where b = slope, a = intercept\n   - Typically over 20 periods\n\n2. Calculate RVI of LinReg:\n   - StdDev_Up = StdDev of (LinReg[t] when LinReg[t] > LinReg[t-1])\n   - StdDev_Down = StdDev of (LinReg[t] when LinReg[t] < LinReg[t-1])\n   - RVI = 100 * EMA(StdDev_Up, n) / (EMA(StdDev_Up, n) + EMA(StdDev_Down, n))\n\n3. Inertia = RVI(LinReg)\n   - Values > 50: Upward trend has inertia\n   - Values < 50: Downward trend has inertia","parameters":"","intuition":"Imagine you're measuring not just if a car is moving uphill or downhill, but how smoothly and consistently it's doing so. Inertia doesn't just tell you the trend direction - it tells you if that trend is accelerating smoothly (high inertia) or sputtering and inconsistent (low inertia). A strong uptrend with high inertia is like a car smoothly accelerating uphill; low inertia means it's struggling and might stall.","rawContent":"A trend-following indicator developed by Donald Dorsey that applies the Relative Volatility Index (RVI) to a linear regression line rather than to price directly, measuring the volatility of the trend itself to identify when trends are accelerating or decelerating, providing early signals of trend changes.\n\nThe Inertia Indicator first calculates a linear regression line through prices, then computes the RVI of this regression line. The concept is that trend \"inertia\" (momentum of the trend direction) can be measured by how volatile the regression line itself is. Rising inertia suggests the trend is gaining strength, while falling inertia suggests the trend is losing momentum.\n\nCalculation:\n1. Calculate Linear Regression (LinReg):\n   - LinReg[t] = a + b*t\n   - Where b = slope, a = intercept\n   - Typically over 20 periods\n   \n2. Calculate RVI of LinReg:\n   - StdDev_Up = StdDev of (LinReg[t] when LinReg[t] > LinReg[t-1])\n   - StdDev_Down = StdDev of (LinReg[t] when LinReg[t] < LinReg[t-1])\n   - RVI = 100 * EMA(StdDev_Up, n) / (EMA(StdDev_Up, n) + EMA(StdDev_Down, n))\n   \n3. Inertia = RVI(LinReg)\n   - Values > 50: Upward trend has inertia\n   - Values < 50: Downward trend has inertia\n\nImagine you're measuring not just if a car is moving uphill or downhill, but how smoothly and consistently it's doing so. Inertia doesn't just tell you the trend direction - it tells you if that trend is accelerating smoothly (high inertia) or sputtering and inconsistent (low inertia). A strong uptrend with high inertia is like a car smoothly accelerating uphill; low inertia means it's struggling and might stall.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Inertia_Indicator.txt","hasFullInfo":true},{"id":243,"title":"Market Thrust Indicator","filename":"Market_Thrust_Indicator.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Breadth momentum","overview":"A breadth momentum indicator that measures the velocity and strength of market-wide movements by analyzing the rate of change in advancing versus declining issues, designed to identify powerful thrust moves that often signal the beginning of new trends or major market shifts.","formula":"Market Thrust calculates a ratio of advancing to total issues, then measures the momentum of this ratio over time. When a large percentage of stocks suddenly surge together (thrust), it indicates strong institutional buying and market conviction. Thrust readings above certain thresholds historically precede sustained rallies, while negative thrusts warn of broad-based selling pressure.\n\nCalculation:\n1. Calculate Advance-Decline Ratio:\n   - AD_Ratio = Advancing_Issues / (Advancing_Issues + Declining_Issues)\n   - This gives percentage of advancing stocks\n\n2. Smooth the ratio:\n   - Smoothed_Ratio = EMA(AD_Ratio, 10)\n\n3. Calculate momentum/thrust:\n   - Thrust = (Smoothed_Ratio - Smoothed_Ratio[n]) / n * 100\n   - Where n = lookback period (typically 10-20)\n   - Alternatively: Thrust = ROC(Smoothed_Ratio, n)\n\n4. Interpretation:\n   - Thrust > +X (e.g., 60-65%): Strong bullish thrust\n   - Thrust < -X (e.g., -40%): Strong bearish thrust\n   - Sustained thrust often precedes trend continuation\n\nNote: Requires market breadth data (advancing/declining issues)","parameters":"","intuition":"Think of Market Thrust as measuring how many runners in a marathon suddenly start sprinting together. If 70% of runners simultaneously accelerate (high thrust), something big is happening - maybe they spotted the finish line or there's a threat behind them. This coordinated movement is much more significant than just a few runners changing pace, suggesting a real shift in market \"race\" dynamics.","rawContent":"A breadth momentum indicator that measures the velocity and strength of market-wide movements by analyzing the rate of change in advancing versus declining issues, designed to identify powerful thrust moves that often signal the beginning of new trends or major market shifts.\n\nMarket Thrust calculates a ratio of advancing to total issues, then measures the momentum of this ratio over time. When a large percentage of stocks suddenly surge together (thrust), it indicates strong institutional buying and market conviction. Thrust readings above certain thresholds historically precede sustained rallies, while negative thrusts warn of broad-based selling pressure.\n\nCalculation:\n1. Calculate Advance-Decline Ratio:\n   - AD_Ratio = Advancing_Issues / (Advancing_Issues + Declining_Issues)\n   - This gives percentage of advancing stocks\n   \n2. Smooth the ratio:\n   - Smoothed_Ratio = EMA(AD_Ratio, 10)\n   \n3. Calculate momentum/thrust:\n   - Thrust = (Smoothed_Ratio - Smoothed_Ratio[n]) / n * 100\n   - Where n = lookback period (typically 10-20)\n   - Alternatively: Thrust = ROC(Smoothed_Ratio, n)\n   \n4. Interpretation:\n   - Thrust > +X (e.g., 60-65%): Strong bullish thrust\n   - Thrust < -X (e.g., -40%): Strong bearish thrust\n   - Sustained thrust often precedes trend continuation\n\nNote: Requires market breadth data (advancing/declining issues)\n\nThink of Market Thrust as measuring how many runners in a marathon suddenly start sprinting together. If 70% of runners simultaneously accelerate (high thrust), something big is happening - maybe they spotted the finish line or there's a threat behind them. This coordinated movement is much more significant than just a few runners changing pace, suggesting a real shift in market \"race\" dynamics.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Market_Thrust_Indicator.txt","hasFullInfo":true},{"id":244,"title":"Polarized Fractal Efficiency (PFE)","filename":"Polarized_Fractal_Efficiency.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"Efficiency measure","overview":"An oscillator developed by Hans Hannula that measures the efficiency of price movement by comparing the linear distance between two points to the actual path traveled, incorporating direction (polarity) and fractal geometry concepts to identify trending versus ranging markets and overbought/oversold conditions.","formula":"PFE calculates the straight-line distance from price n periods ago to current price, divides by the cumulative zigzag path price actually traveled, then applies the sign of the net price change. Values near +100 indicate efficient upward trends, values near -100 indicate efficient downward trends, and values near zero indicate choppy, inefficient movement.\n\nCalculation:\n1. Calculate Euclidean distance (straight line):\n   - Distance = √((close - close_n)² + n²)\n   - Where n = lookback period\n\n2. Calculate path length (actual traveled):\n   - Path = Σ√((close[i] - close[i-1])² + 1²) for i=1 to n\n\n3. Calculate efficiency:\n   - Efficiency = (Distance / Path) * 100\n\n4. Apply polarity (sign):\n   - If close > close_n: PFE = +Efficiency\n   - If close < close_n: PFE = -Efficiency\n\n5. Smooth with EMA:\n   - PFE_smoothed = EMA(PFE, smoothing_period)\n   - Typical: n=10, smoothing=5","parameters":"","intuition":"Think of hiking from point A to point B on a mountain. The straight-line distance might be 1 mile, but you actually hiked 3 miles worth of winding trails. Your efficiency is 1/3 = 33%. If you also gained elevation (price went up), it's +33%. If you lost elevation, it's -33%. PFE near +100 means you're basically walking a straight line uphill (strong uptrend). Near zero means you're wandering all over the place going nowhere (ranging market).","rawContent":"An oscillator developed by Hans Hannula that measures the efficiency of price movement by comparing the linear distance between two points to the actual path traveled, incorporating direction (polarity) and fractal geometry concepts to identify trending versus ranging markets and overbought/oversold conditions.\n\nPFE calculates the straight-line distance from price n periods ago to current price, divides by the cumulative zigzag path price actually traveled, then applies the sign of the net price change. Values near +100 indicate efficient upward trends, values near -100 indicate efficient downward trends, and values near zero indicate choppy, inefficient movement.\n\nCalculation:\n1. Calculate Euclidean distance (straight line):\n   - Distance = √((close - close_n)² + n²)\n   - Where n = lookback period\n   \n2. Calculate path length (actual traveled):\n   - Path = Σ√((close[i] - close[i-1])² + 1²) for i=1 to n\n   \n3. Calculate efficiency:\n   - Efficiency = (Distance / Path) * 100\n   \n4. Apply polarity (sign):\n   - If close > close_n: PFE = +Efficiency\n   - If close < close_n: PFE = -Efficiency\n   \n5. Smooth with EMA:\n   - PFE_smoothed = EMA(PFE, smoothing_period)\n   - Typical: n=10, smoothing=5\n\nThink of hiking from point A to point B on a mountain. The straight-line distance might be 1 mile, but you actually hiked 3 miles worth of winding trails. Your efficiency is 1/3 = 33%. If you also gained elevation (price went up), it's +33%. If you lost elevation, it's -33%. PFE near +100 means you're basically walking a straight line uphill (strong uptrend). Near zero means you're wandering all over the place going nowhere (ranging market).","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 12/Polarized_Fractal_Efficiency.txt","hasFullInfo":true},{"id":245,"title":"Qstick Indicator","filename":"Qstick_Indicator.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"Open-close momentum","overview":"A momentum indicator developed by Tushar Chande that measures the difference between opening and closing prices over a period, providing insight into directional bias and the tendency for prices to close higher or lower than they opened, useful for identifying buying or selling pressure trends.","formula":"The Qstick calculates the moving average of the open-close differences. Positive values indicate a tendency for closes to be higher than opens (bullish), while negative values suggest closes below opens (bearish). The magnitude indicates the strength of the tendency. Unlike typical momentum oscillators, Qstick specifically captures intrabar directional movement rather than bar-to-bar changes.\n\nCalculation:\nQstick = MA(Close - Open, n)","parameters":"Where:\n- Close - Open = the difference for each bar\n- MA = Moving Average (typically SMA or EMA)\n- n = lookback period (commonly 8, 14, or 20)\n\nDetailed:\n1. For each bar: diff[t] = close[t] - open[t]\n2. Qstick[t] = (1/n) * Σ(diff[t-i]) for i=0 to n-1\n3. Positive Qstick → Bullish pressure (closes > opens)\n4. Negative Qstick → Bearish pressure (closes < opens)\n5. Magnitude indicates strength","intuition":"Think of each trading day as a race between buyers and sellers. The Qstick tells you who's been winning these daily races on average. If closes are consistently higher than opens, buyers are winning most days and Qstick is positive. If opens are higher than closes most days, sellers are dominating and Qstick is negative. The bigger the number, the more lopsided the victories.","rawContent":"A momentum indicator developed by Tushar Chande that measures the difference between opening and closing prices over a period, providing insight into directional bias and the tendency for prices to close higher or lower than they opened, useful for identifying buying or selling pressure trends.\n\nThe Qstick calculates the moving average of the open-close differences. Positive values indicate a tendency for closes to be higher than opens (bullish), while negative values suggest closes below opens (bearish). The magnitude indicates the strength of the tendency. Unlike typical momentum oscillators, Qstick specifically captures intrabar directional movement rather than bar-to-bar changes.\n\nCalculation:\nQstick = MA(Close - Open, n)\n\nWhere:\n- Close - Open = the difference for each bar\n- MA = Moving Average (typically SMA or EMA)\n- n = lookback period (commonly 8, 14, or 20)\n\nDetailed:\n1. For each bar: diff[t] = close[t] - open[t]\n2. Qstick[t] = (1/n) * Σ(diff[t-i]) for i=0 to n-1\n3. Positive Qstick → Bullish pressure (closes > opens)\n4. Negative Qstick → Bearish pressure (closes < opens)\n5. Magnitude indicates strength\n\nThink of each trading day as a race between buyers and sellers. The Qstick tells you who's been winning these daily races on average. If closes are consistently higher than opens, buyers are winning most days and Qstick is positive. If opens are higher than closes most days, sellers are dominating and Qstick is negative. The bigger the number, the more lopsided the victories.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Qstick_Indicator.txt","hasFullInfo":true},{"id":246,"title":"Regression Oscillator","filename":"Regression_Oscillator.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Detrended price oscillator","overview":"A detrended oscillator that measures the deviation of price from its linear regression trend line, indicating overbought conditions when price is significantly above the trend and oversold conditions when price is significantly below trend, useful for mean-reversion trading within established trends.","formula":"The Regression Oscillator calculates a least-squares linear regression line through recent prices, then measures how far actual price deviates from this statistical trend. Unlike raw price oscillators, this approach removes the underlying trend direction, isolating cyclical deviations suitable for entry timing within the larger trend context.\n\nCalculation:\n1. Calculate Linear Regression (trend line):\n   - For n periods, fit line: y = a + b*x\n   - Where b = slope = (n*Σ(x*y) - Σx*Σy) / (n*Σx² - (Σx)²)\n   - a = intercept = (Σy - b*Σx) / n\n   - LinReg[t] = a + b*t\n\n2. Calculate deviation from regression:\n   - Deviation = close - LinReg\n\n3. Normalize (optional):\n   - StdDev = standard deviation of deviations over n periods\n   - Normalized = Deviation / StdDev\n   - Or percentage: (Deviation / LinReg) * 100\n\n4. Oscillator output:\n   - Reg_Osc = Normalized Deviation\n   - Positive: Price above trend line\n   - Negative: Price below trend line\n   - Magnitude indicates extremity\n\nInterpretation:\n- Values > +2σ: Overbought relative to trend\n- Values < -2σ: Oversold relative to trend\n- Zero crossings: Return to trend\n\nImagine driving on a winding mountain road where the general direction is uphill (trend), but the road curves left and right. The Regression Oscillator doesn't care that you're going uphill - it only measures how far you've deviated from the center line. When you've curved too far right (+2), you'll likely curve back left. Too far left (-2), you'll curve back right. It's a mean-reversion indicator that works within the trend.","parameters":"","intuition":"","rawContent":"A detrended oscillator that measures the deviation of price from its linear regression trend line, indicating overbought conditions when price is significantly above the trend and oversold conditions when price is significantly below trend, useful for mean-reversion trading within established trends.\n\nThe Regression Oscillator calculates a least-squares linear regression line through recent prices, then measures how far actual price deviates from this statistical trend. Unlike raw price oscillators, this approach removes the underlying trend direction, isolating cyclical deviations suitable for entry timing within the larger trend context.\n\nCalculation:\n1. Calculate Linear Regression (trend line):\n   - For n periods, fit line: y = a + b*x\n   - Where b = slope = (n*Σ(x*y) - Σx*Σy) / (n*Σx² - (Σx)²)\n   - a = intercept = (Σy - b*Σx) / n\n   - LinReg[t] = a + b*t\n   \n2. Calculate deviation from regression:\n   - Deviation = close - LinReg\n   \n3. Normalize (optional):\n   - StdDev = standard deviation of deviations over n periods\n   - Normalized = Deviation / StdDev\n   - Or percentage: (Deviation / LinReg) * 100\n   \n4. Oscillator output:\n   - Reg_Osc = Normalized Deviation\n   - Positive: Price above trend line\n   - Negative: Price below trend line\n   - Magnitude indicates extremity\n\nInterpretation:\n- Values > +2σ: Overbought relative to trend\n- Values < -2σ: Oversold relative to trend\n- Zero crossings: Return to trend\n\nImagine driving on a winding mountain road where the general direction is uphill (trend), but the road curves left and right. The Regression Oscillator doesn't care that you're going uphill - it only measures how far you've deviated from the center line. When you've curved too far right (+2), you'll likely curve back left. Too far left (-2), you'll curve back right. It's a mean-reversion indicator that works within the trend.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Regression_Oscillator.txt","hasFullInfo":true},{"id":247,"title":"SSA + ARIMA Combination","filename":"SSA_ARIMA_Combination.txt","group":"group 12","groupNum":12,"categoryId":20,"categoryTitle":"20. HYBRID & MULTI-METHOD FILTERS","subcategory":"General","summary":"Structural + ARIMA","overview":"A sophisticated forecasting framework that merges Singular Spectrum Analysis (SSA) decomposition with ARIMA (AutoRegressive Integrated Moving Average) modeling to separate and model different components of a time series, providing more accurate forecasts than either method independently.","formula":"SSA decomposes a time series into interpretable components (trend, oscillatory, noise) using singular value decomposition without assuming stationarity or parametric models. ARIMA models linear dependencies in stationary series. The hybrid approach uses SSA to decompose the price series into components, then fits separate ARIMA models to each significant component (trend, cycles), allowing specialized modeling of each component's unique dynamics.\n\nCalculation:\n1. SSA Decomposition Stage:\n   - Create trajectory matrix X from time series with lag L\n   - Compute SVD: X = U*Σ*V^T\n   - Group eigenvalues/eigenvectors into components\n   - Reconstruct: Trend, Oscillatory, Noise components\n\n2. ARIMA Modeling Stage:\n   - For each component C_i: ARIMA(p,d,q)\n   - AR part: φ(B)C_t = constant\n   - I part: (1-B)^d for differencing\n   - MA part: θ(B)ε_t\n   - Estimate (p,d,q) and fit each component\n\n3. Combined Forecast: F_t = Σ(ARIMA_forecast_i) for all components","parameters":"","intuition":"Imagine you're trying to predict ocean tides. SSA is like separating the water movement into different patterns (moon-driven tides, wind-driven waves, random splashes). Then ARIMA creates a specific prediction model for each pattern type. When you combine all these specialized predictions, you get much more accurate forecasts than trying to predict the chaotic overall water level directly.","rawContent":"A sophisticated forecasting framework that merges Singular Spectrum Analysis (SSA) decomposition with ARIMA (AutoRegressive Integrated Moving Average) modeling to separate and model different components of a time series, providing more accurate forecasts than either method independently.\n\nSSA decomposes a time series into interpretable components (trend, oscillatory, noise) using singular value decomposition without assuming stationarity or parametric models. ARIMA models linear dependencies in stationary series. The hybrid approach uses SSA to decompose the price series into components, then fits separate ARIMA models to each significant component (trend, cycles), allowing specialized modeling of each component's unique dynamics.\n\nCalculation:\n1. SSA Decomposition Stage:\n   - Create trajectory matrix X from time series with lag L\n   - Compute SVD: X = U*Σ*V^T\n   - Group eigenvalues/eigenvectors into components\n   - Reconstruct: Trend, Oscillatory, Noise components\n   \n2. ARIMA Modeling Stage:\n   - For each component C_i: ARIMA(p,d,q)\n   - AR part: φ(B)C_t = constant\n   - I part: (1-B)^d for differencing\n   - MA part: θ(B)ε_t\n   - Estimate (p,d,q) and fit each component\n   \n3. Combined Forecast: F_t = Σ(ARIMA_forecast_i) for all components\n\nImagine you're trying to predict ocean tides. SSA is like separating the water movement into different patterns (moon-driven tides, wind-driven waves, random splashes). Then ARIMA creates a specific prediction model for each pattern type. When you combine all these specialized predictions, you get much more accurate forecasts than trying to predict the chaotic overall water level directly.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 12/SSA_ARIMA_Combination.txt","hasFullInfo":true},{"id":248,"title":"Stochastic Momentum Index (SMI)","filename":"Stochastic_Momentum_Index.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Double-smoothed stochastic","overview":"A refined version of the traditional Stochastic Oscillator that measures where the close is relative to the midpoint of the high-low range rather than the absolute high-low range, with additional smoothing to reduce noise and provide clearer momentum signals with fewer false crossovers.","formula":"SMI addresses limitations of the classic Stochastic by centering the calculation around the range midpoint and applying double smoothing to both the numerator and denominator. This produces a smoother, more responsive momentum indicator that oscillates around zero rather than 0-100, making divergences and overbought/oversold conditions easier to identify.\n\nCalculation:\n1. Calculate distance from midpoint:\n   - HighLow_Range = high - low (over lookback period)\n   - Midpoint = (high + low) / 2\n   - Distance = close - Midpoint\n\n2. First smoothing (typically EMA):\n   - Smoothed_Distance = EMA(Distance, smooth1)\n   - Smoothed_Range = EMA(HighLow_Range, smooth1)\n\n3. Second smoothing:\n   - DoubleSmoothed_Distance = EMA(Smoothed_Distance, smooth2)\n   - DoubleSmoothed_Range = EMA(Smoothed_Range, smooth2)\n\n4. Calculate SMI:\n   - SMI = (DoubleSmoothed_Distance / (0.5 * DoubleSmoothed_Range)) * 100\n   - Ranges approximately from -100 to +100\n\n5. Signal line:\n   - Signal = EMA(SMI, signal_period)\n\nTypical parameters: lookback=10, smooth1=3, smooth2=3, signal=3\n\nInterpretation:\n- SMI > +40: Overbought\n- SMI < -40: Oversold\n- SMI crossing above Signal: Bullish\n- SMI crossing below Signal: Bearish","parameters":"","intuition":"Think of the traditional Stochastic as measuring if you're near the ceiling (100) or floor (0) of a room. SMI measures if you're above or below the middle of the room, then smooths that measurement twice to remove jitters. Being +40 means you're consistently floating 40% above the room's center (strong upward momentum), while -40 means you're 40% below center (strong downward momentum). The double smoothing prevents you from reacting to every little bump.","rawContent":"A refined version of the traditional Stochastic Oscillator that measures where the close is relative to the midpoint of the high-low range rather than the absolute high-low range, with additional smoothing to reduce noise and provide clearer momentum signals with fewer false crossovers.\n\nSMI addresses limitations of the classic Stochastic by centering the calculation around the range midpoint and applying double smoothing to both the numerator and denominator. This produces a smoother, more responsive momentum indicator that oscillates around zero rather than 0-100, making divergences and overbought/oversold conditions easier to identify.\n\nCalculation:\n1. Calculate distance from midpoint:\n   - HighLow_Range = high - low (over lookback period)\n   - Midpoint = (high + low) / 2\n   - Distance = close - Midpoint\n   \n2. First smoothing (typically EMA):\n   - Smoothed_Distance = EMA(Distance, smooth1)\n   - Smoothed_Range = EMA(HighLow_Range, smooth1)\n   \n3. Second smoothing:\n   - DoubleSmoothed_Distance = EMA(Smoothed_Distance, smooth2)\n   - DoubleSmoothed_Range = EMA(Smoothed_Range, smooth2)\n   \n4. Calculate SMI:\n   - SMI = (DoubleSmoothed_Distance / (0.5 * DoubleSmoothed_Range)) * 100\n   - Ranges approximately from -100 to +100\n   \n5. Signal line:\n   - Signal = EMA(SMI, signal_period)\n   \nTypical parameters: lookback=10, smooth1=3, smooth2=3, signal=3\n\nInterpretation:\n- SMI > +40: Overbought\n- SMI < -40: Oversold\n- SMI crossing above Signal: Bullish\n- SMI crossing below Signal: Bearish\n\nThink of the traditional Stochastic as measuring if you're near the ceiling (100) or floor (0) of a room. SMI measures if you're above or below the middle of the room, then smooths that measurement twice to remove jitters. Being +40 means you're consistently floating 40% above the room's center (strong upward momentum), while -40 means you're 40% below center (strong downward momentum). The double smoothing prevents you from reacting to every little bump.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Stochastic_Momentum_Index.txt","hasFullInfo":true},{"id":249,"title":"Time-Segmented Volume (TSV)","filename":"Time-Segmented_Volume.txt","group":"group 12","groupNum":12,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Intraday volume analysis","overview":"A volume-based momentum indicator that accumulates volume based on the relationship between closing price and the previous close, providing a cumulative measure of buying and selling pressure over time by assigning volume to the bulls or bears depending on price direction.","formula":"TSV tracks whether volume is flowing into (accumulation) or out of (distribution) a security by monitoring how prices close relative to previous closes. Unlike simple volume, TSV creates a running total that rises when closes are higher and falls when closes are lower, weighted by the actual volume transacted. This reveals underlying accumulation/distribution trends invisible in price alone.\n\nCalculation:\n1. Determine price direction and assign volume:\n   - If close > close[1]:\n     - TSV_Direction = +volume\n   - If close < close[1]:\n     - TSV_Direction = -volume\n   - If close = close[1]:\n     - TSV_Direction = 0\n\n2. Accumulate directional volume:\n   - TSV = Cumulative_Sum(TSV_Direction)\n   - TSV = TSV[prev] + TSV_Direction[current]\n\n3. Optional smoothing:\n   - TSV_Smoothed = EMA(TSV, 18) commonly used\n\nInterpretation:\n- Rising TSV: Accumulation, buying pressure dominates\n- Falling TSV: Distribution, selling pressure dominates\n- TSV divergence from price: Potential reversal signal\n- TSV confirms trends when moving with price\n\nImagine a water tank where each trade adds or removes water based on price direction. When price goes up, you add water equal to the volume. When price drops, you remove water equal to volume. Over time, you can see if the tank is filling up (accumulation by smart money) or draining (distribution). Even if price goes sideways, the TSV tank level tells you the real story of what big players are doing.","parameters":"","intuition":"","rawContent":"A volume-based momentum indicator that accumulates volume based on the relationship between closing price and the previous close, providing a cumulative measure of buying and selling pressure over time by assigning volume to the bulls or bears depending on price direction.\n\nTSV tracks whether volume is flowing into (accumulation) or out of (distribution) a security by monitoring how prices close relative to previous closes. Unlike simple volume, TSV creates a running total that rises when closes are higher and falls when closes are lower, weighted by the actual volume transacted. This reveals underlying accumulation/distribution trends invisible in price alone.\n\nCalculation:\n1. Determine price direction and assign volume:\n   - If close > close[1]:\n     - TSV_Direction = +volume\n   - If close < close[1]:\n     - TSV_Direction = -volume\n   - If close = close[1]:\n     - TSV_Direction = 0\n   \n2. Accumulate directional volume:\n   - TSV = Cumulative_Sum(TSV_Direction)\n   - TSV = TSV[prev] + TSV_Direction[current]\n   \n3. Optional smoothing:\n   - TSV_Smoothed = EMA(TSV, 18) commonly used\n   \nInterpretation:\n- Rising TSV: Accumulation, buying pressure dominates\n- Falling TSV: Distribution, selling pressure dominates\n- TSV divergence from price: Potential reversal signal\n- TSV confirms trends when moving with price\n\nImagine a water tank where each trade adds or removes water based on price direction. When price goes up, you add water equal to the volume. When price drops, you remove water equal to volume. Over time, you can see if the tank is filling up (accumulation by smart money) or draining (distribution). Even if price goes sideways, the TSV tank level tells you the real story of what big players are doing.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Time-Segmented_Volume.txt","hasFullInfo":true},{"id":250,"title":"Trend Detection Index (TDI)","filename":"Trend_Detection_Index.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"Directional movement index variant","overview":"A trend strength indicator developed by M.H. Pee that identifies the presence and strength of trends by measuring the correlation between price direction and directional movement, derived from concepts similar to the Directional Movement Index but with enhanced sensitivity to trend development and deterioration.","formula":"TDI calculates both the absolute direction of price movement and the strength of directional moves, then combines them to produce a single value that rises during trends and falls during consolidations. Unlike basic DMI, TDI incorporates smoothing and normalization to provide clearer trend/no-trend signals with fewer whipsaws.\n\nCalculation:\n1. Calculate directional moves:\n   - Plus_DM = max(high - high[1], 0) if high - high[1] > low[1] - low, else 0\n   - Minus_DM = max(low[1] - low, 0) if low[1] - low > high - high[1], else 0\n\n2. Calculate True Range:\n   - TR = max(high - low, |high - close[1]|, |low - close[1]|)\n\n3. Smooth the values (typically 20-period):\n   - Plus_DI = 100 * EMA(Plus_DM, n) / EMA(TR, n)\n   - Minus_DI = 100 * EMA(Minus_DM, n) / EMA(TR, n)\n\n4. Calculate TDI:\n   - Direction_Sum = Plus_DI + Minus_DI\n   - Direction_Diff = |Plus_DI - Minus_DI|\n   - TDI = Direction_Diff - (Direction_Sum - Direction_Diff)\n   - High TDI: Strong trend present\n   - Low TDI: Weak/no trend, ranging\n\nImagine tracking a river's flow. TDI measures both how fast the water is moving (total directional movement) AND how consistently it flows in one direction versus swirling around. A strong downstream flow with minimal eddies gives high TDI (trending). Lots of swirling, turbulent water with no clear flow direction gives low TDI (ranging). The stronger and more consistent the flow, the higher the TDI reading.","parameters":"","intuition":"","rawContent":"A trend strength indicator developed by M.H. Pee that identifies the presence and strength of trends by measuring the correlation between price direction and directional movement, derived from concepts similar to the Directional Movement Index but with enhanced sensitivity to trend development and deterioration.\n\nTDI calculates both the absolute direction of price movement and the strength of directional moves, then combines them to produce a single value that rises during trends and falls during consolidations. Unlike basic DMI, TDI incorporates smoothing and normalization to provide clearer trend/no-trend signals with fewer whipsaws.\n\nCalculation:\n1. Calculate directional moves:\n   - Plus_DM = max(high - high[1], 0) if high - high[1] > low[1] - low, else 0\n   - Minus_DM = max(low[1] - low, 0) if low[1] - low > high - high[1], else 0\n   \n2. Calculate True Range:\n   - TR = max(high - low, |high - close[1]|, |low - close[1]|)\n   \n3. Smooth the values (typically 20-period):\n   - Plus_DI = 100 * EMA(Plus_DM, n) / EMA(TR, n)\n   - Minus_DI = 100 * EMA(Minus_DM, n) / EMA(TR, n)\n   \n4. Calculate TDI:\n   - Direction_Sum = Plus_DI + Minus_DI\n   - Direction_Diff = |Plus_DI - Minus_DI|\n   - TDI = Direction_Diff - (Direction_Sum - Direction_Diff)\n   - High TDI: Strong trend present\n   - Low TDI: Weak/no trend, ranging\n\nImagine tracking a river's flow. TDI measures both how fast the water is moving (total directional movement) AND how consistently it flows in one direction versus swirling around. A strong downstream flow with minimal eddies gives high TDI (trending). Lots of swirling, turbulent water with no clear flow direction gives low TDI (ranging). The stronger and more consistent the flow, the higher the TDI reading.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 12/Trend_Detection_Index.txt","hasFullInfo":true},{"id":251,"title":"Vertical Horizontal Filter (VHF)","filename":"Vertical_Horizontal_Filter.txt","group":"group 12","groupNum":12,"categoryId":21,"categoryTitle":"21. CHANDE INDICATORS & OSCILLATORS","subcategory":"General","summary":"Trend strength measure","overview":"A trend strength indicator developed by Adam White that determines whether prices are trending or ranging by comparing the absolute price range to the sum of individual bar movements, helping traders select between trend-following and mean-reversion strategies based on market conditions.","formula":"VHF measures the \"efficiency\" of price movement by dividing the net vertical distance traveled (highest high minus lowest low) by the total path length (sum of all bar-to-bar movements). High VHF values indicate trending markets where price moves efficiently in one direction. Low VHF values indicate choppy, ranging markets where price moves inefficiently with many reversals.\n\nCalculation:\nVHF = (Highest High - Lowest Low) / Σ|Close[i] - Close[i-1]|\n\nDetailed:\n1. Numerator (Vertical Distance):\n   - HH = Highest high over n periods\n   - LL = Lowest low over n periods\n   - Vertical = HH - LL\n\n2. Denominator (Horizontal Distance):\n   - For each period: movement = |close[t] - close[t-1]|\n   - Horizontal = Σ(movement) over n periods\n\n3. VHF = Vertical / Horizontal\n   - High VHF (>0.4): Strong trend, use trend indicators\n   - Low VHF (<0.25): Ranging market, use oscillators\n   - Typical period n = 28\n\nImagine driving from city A to city B. VHF compares the straight-line distance (how far apart the cities are) to the actual miles you drove (including all the turns and curves). If you drove 100 miles but the cities are only 80 miles apart in a straight line, you took an inefficient, winding route (low VHF = ranging market). If you drove 100 miles and the cities are 95 miles apart, you drove pretty straight (high VHF = trending market).","parameters":"","intuition":"","rawContent":"A trend strength indicator developed by Adam White that determines whether prices are trending or ranging by comparing the absolute price range to the sum of individual bar movements, helping traders select between trend-following and mean-reversion strategies based on market conditions.\n\nVHF measures the \"efficiency\" of price movement by dividing the net vertical distance traveled (highest high minus lowest low) by the total path length (sum of all bar-to-bar movements). High VHF values indicate trending markets where price moves efficiently in one direction. Low VHF values indicate choppy, ranging markets where price moves inefficiently with many reversals.\n\nCalculation:\nVHF = (Highest High - Lowest Low) / Σ|Close[i] - Close[i-1]|\n\nDetailed:\n1. Numerator (Vertical Distance):\n   - HH = Highest high over n periods\n   - LL = Lowest low over n periods\n   - Vertical = HH - LL\n   \n2. Denominator (Horizontal Distance):\n   - For each period: movement = |close[t] - close[t-1]|\n   - Horizontal = Σ(movement) over n periods\n   \n3. VHF = Vertical / Horizontal\n   - High VHF (>0.4): Strong trend, use trend indicators\n   - Low VHF (<0.25): Ranging market, use oscillators\n   - Typical period n = 28\n\nImagine driving from city A to city B. VHF compares the straight-line distance (how far apart the cities are) to the actual miles you drove (including all the turns and curves). If you drove 100 miles but the cities are only 80 miles apart in a straight line, you took an inefficient, winding route (low VHF = ranging market). If you drove 100 miles and the cities are 95 miles apart, you drove pretty straight (high VHF = trending market).","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 12/Vertical_Horizontal_Filter.txt","hasFullInfo":true},{"id":252,"title":"Advance-Decline Stochastic","filename":"Advance_Decline_Stochastic.txt","group":"group 13","groupNum":13,"categoryId":25,"categoryTitle":"25. MARKET BREADTH & SENTIMENT","subcategory":"General","summary":"A/D ratio stochastic","overview":"The Advance-Decline Stochastic applies the stochastic oscillator formula to advance-decline data rather than price, measuring the relative position of the current advance-decline ratio within its recent range. It oscillates between 0 and 100, showing whether market breadth is at the upper or lower extreme of its recent values. When the A-D Stochastic is above 80, it indicates strong broad market participation (many stocks advancing); below 20 suggests weak participation (many stocks declining). This breadth indicator provides early warning signals of market strength or weakness before they become apparent in major indexes.","formula":"A-D Stochastic = 100 × [(Current A-D - Lowest A-D) / (Highest A-D - Lowest A-D)]\nWhere A-D = Advancing Stocks - Declining Stocks\nCalculated over n-period lookback (typically 14 or 21)","parameters":"","intuition":"The Advance-Decline Stochastic is like taking the market's temperature, but instead of measuring just the big-name stocks, you're checking how the entire population of stocks is feeling. If 80% of all stocks are advancing, the market is \"hot\" even if the index only moved a little. If only 20% are advancing, the market is \"cold\" even if a few giant stocks push the index higher. It spots when the rally is healthy (broad participation) versus when it's fake (just a handful of stocks doing all the work).","rawContent":"The Advance-Decline Stochastic applies the stochastic oscillator formula to advance-decline data rather than price, measuring the relative position of the current advance-decline ratio within its recent range. It oscillates between 0 and 100, showing whether market breadth is at the upper or lower extreme of its recent values. When the A-D Stochastic is above 80, it indicates strong broad market participation (many stocks advancing); below 20 suggests weak participation (many stocks declining). This breadth indicator provides early warning signals of market strength or weakness before they become apparent in major indexes.\n\nA-D Stochastic = 100 × [(Current A-D - Lowest A-D) / (Highest A-D - Lowest A-D)]\nWhere A-D = Advancing Stocks - Declining Stocks\nCalculated over n-period lookback (typically 14 or 21)\n\nThe Advance-Decline Stochastic is like taking the market's temperature, but instead of measuring just the big-name stocks, you're checking how the entire population of stocks is feeling. If 80% of all stocks are advancing, the market is \"hot\" even if the index only moved a little. If only 20% are advancing, the market is \"cold\" even if a few giant stocks push the index higher. It spots when the rally is healthy (broad participation) versus when it's fake (just a handful of stocks doing all the work).","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/Advance_Decline_Stochastic.txt","hasFullInfo":true},{"id":253,"title":"Average True Range Bands","filename":"Average_True_Range_Bands.txt","group":"group 13","groupNum":13,"categoryId":24,"categoryTitle":"24. VOLATILITY BANDS & CHANNELS","subcategory":"General","summary":"ATR envelope","overview":"Average True Range Bands are volatility-based envelopes plotted above and below price (or a moving average) at a distance determined by a multiple of the ATR value. The bands expand during periods of high volatility and contract during low volatility periods, adapting dynamically to changing market conditions. Typically constructed using 1x, 2x, or 3x ATR multiples, these bands help identify breakouts, trend strength, and potential reversal zones. When price touches or penetrates the upper band, it suggests strong upward momentum; touching the lower band indicates strong downward pressure.","formula":"Upper Band = Price (or MA) + (ATR × Multiplier)\nLower Band = Price (or MA) - (ATR × Multiplier)\nCommonly: Multiplier = 1.5 to 3.0, ATR Period = 14\n\nATR Bands work like flexible guardrails that automatically widen when the market gets wild and narrow when things calm down. Unlike Bollinger Bands which use standard deviation, ATR Bands use actual price ranges, so they show you \"this is how far prices have been swinging lately.\" When price breaks outside the bands, it's moving more aggressively than normal - either a strong trend forming or an overextension about to snap back.","parameters":"","intuition":"","rawContent":"Average True Range Bands are volatility-based envelopes plotted above and below price (or a moving average) at a distance determined by a multiple of the ATR value. The bands expand during periods of high volatility and contract during low volatility periods, adapting dynamically to changing market conditions. Typically constructed using 1x, 2x, or 3x ATR multiples, these bands help identify breakouts, trend strength, and potential reversal zones. When price touches or penetrates the upper band, it suggests strong upward momentum; touching the lower band indicates strong downward pressure.\n\nUpper Band = Price (or MA) + (ATR × Multiplier)\nLower Band = Price (or MA) - (ATR × Multiplier)\nCommonly: Multiplier = 1.5 to 3.0, ATR Period = 14\n\nATR Bands work like flexible guardrails that automatically widen when the market gets wild and narrow when things calm down. Unlike Bollinger Bands which use standard deviation, ATR Bands use actual price ranges, so they show you \"this is how far prices have been swinging lately.\" When price breaks outside the bands, it's moving more aggressively than normal - either a strong trend forming or an overextension about to snap back.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 13/Average_True_Range_Bands.txt","hasFullInfo":true},{"id":254,"title":"Breadth Thrust Indicator","filename":"Breadth_Thrust_Indicator.txt","group":"group 13","groupNum":13,"categoryId":25,"categoryTitle":"25. MARKET BREADTH & SENTIMENT","subcategory":"General","summary":"Momentum surge detection","overview":"The Breadth Thrust Indicator identifies powerful momentum surges in market breadth by measuring rapid improvements in the advance-decline ratio over a short period. Developed by Martin Zweig, it calculates a 10-day exponential moving average of (Advances / (Advances + Declines)) and signals a thrust when this ratio moves from below 40% to above 61.5% within a 10-day window. This rare signal indicates explosive market strength and historically has marked the beginning of significant bull market moves. The indicator captures moments when market participation shifts dramatically from weak to strong in a compressed timeframe.","formula":"Breadth Thrust Ratio = EMA(10) of [Advances / (Advances + Declines)]\nSignal: Ratio crosses from <0.40 to >0.615 within 10 days\nHistorically occurs only during major bull market initiations","parameters":"","intuition":"Think of Breadth Thrust like measuring how fast a crowd's mood changes. Imagine a stadium where 60% of people are booing (bearish), then within just a week and a half, suddenly 62% are cheering (bullish). That rapid flip in collective sentiment is huge - it doesn't happen often, maybe once every few years. When it does trigger, it's like the entire market just went from depressed to euphoric almost overnight, and that kind of momentum surge historically kickstarts major rallies because fear is rapidly transforming into greed across the whole market.","rawContent":"The Breadth Thrust Indicator identifies powerful momentum surges in market breadth by measuring rapid improvements in the advance-decline ratio over a short period. Developed by Martin Zweig, it calculates a 10-day exponential moving average of (Advances / (Advances + Declines)) and signals a thrust when this ratio moves from below 40% to above 61.5% within a 10-day window. This rare signal indicates explosive market strength and historically has marked the beginning of significant bull market moves. The indicator captures moments when market participation shifts dramatically from weak to strong in a compressed timeframe.\n\nBreadth Thrust Ratio = EMA(10) of [Advances / (Advances + Declines)]\nSignal: Ratio crosses from <0.40 to >0.615 within 10 days\nHistorically occurs only during major bull market initiations\n\nThink of Breadth Thrust like measuring how fast a crowd's mood changes. Imagine a stadium where 60% of people are booing (bearish), then within just a week and a half, suddenly 62% are cheering (bullish). That rapid flip in collective sentiment is huge - it doesn't happen often, maybe once every few years. When it does trigger, it's like the entire market just went from depressed to euphoric almost overnight, and that kind of momentum surge historically kickstarts major rallies because fear is rapidly transforming into greed across the whole market.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/Breadth_Thrust_Indicator.txt","hasFullInfo":true},{"id":255,"title":"Cumulative A-D Line Momentum","filename":"Cumulative_AD_Line_Momentum.txt","group":"group 13","groupNum":13,"categoryId":25,"categoryTitle":"25. MARKET BREADTH & SENTIMENT","subcategory":"General","summary":"Breadth trend","overview":"The Cumulative Advance-Decline Line Momentum measures the rate of change in the cumulative A-D line, showing whether market breadth is expanding or contracting. While the cumulative A-D line itself simply adds each day's net advances to a running total, its momentum derivative captures acceleration or deceleration in breadth trends. This is typically calculated as the difference between the current A-D line value and its value N periods ago, or as a moving average of daily A-D line changes. Rising momentum indicates strengthening participation; falling momentum warns of deteriorating market health even if the A-D line itself remains positive.","formula":"A-D Line = Cumulative sum of (Advancing Stocks - Declining Stocks)\nA-D Momentum = A-D Line - A-D Line[n periods ago]\nOr: Rate of Change of A-D Line over n periods","parameters":"","intuition":"The Cumulative A-D Line Momentum is like tracking not just your total bank account balance but how fast it's growing or shrinking. Your balance might be increasing (cumulative A-D going up), but if it was growing by $1000/month and now it's only growing by $100/month, momentum is declining - you're still getting richer but much more slowly. The momentum reading catches this slowdown before it shows up as an actual drop in your balance, giving you early warning that the good times might be ending.","rawContent":"The Cumulative Advance-Decline Line Momentum measures the rate of change in the cumulative A-D line, showing whether market breadth is expanding or contracting. While the cumulative A-D line itself simply adds each day's net advances to a running total, its momentum derivative captures acceleration or deceleration in breadth trends. This is typically calculated as the difference between the current A-D line value and its value N periods ago, or as a moving average of daily A-D line changes. Rising momentum indicates strengthening participation; falling momentum warns of deteriorating market health even if the A-D line itself remains positive.\n\nA-D Line = Cumulative sum of (Advancing Stocks - Declining Stocks)\nA-D Momentum = A-D Line - A-D Line[n periods ago]\nOr: Rate of Change of A-D Line over n periods\n\nThe Cumulative A-D Line Momentum is like tracking not just your total bank account balance but how fast it's growing or shrinking. Your balance might be increasing (cumulative A-D going up), but if it was growing by $1000/month and now it's only growing by $100/month, momentum is declining - you're still getting richer but much more slowly. The momentum reading catches this slowdown before it shows up as an actual drop in your balance, giving you early warning that the good times might be ending.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/Cumulative_AD_Line_Momentum.txt","hasFullInfo":true},{"id":256,"title":"Dynamic Bollinger Bands (Volatility-Adjusted)","filename":"Dynamic_Bollinger_Bands.txt","group":"group 13","groupNum":13,"categoryId":24,"categoryTitle":"24. VOLATILITY BANDS & CHANNELS","subcategory":"General","summary":"Adaptive width","overview":"Dynamic Bollinger Bands represent an adaptive version of traditional Bollinger Bands where the standard deviation multiplier or the lookback period automatically adjusts based on current market volatility conditions. During high volatility regimes, the bands may widen further (larger multiplier) or use longer periods to avoid false signals from noise. During low volatility, parameters tighten to capture smaller price movements. This adaptive approach helps maintain consistent statistical containment of price action across different market conditions and prevents the over-sensitivity or under-sensitivity that can occur with fixed parameters.","formula":"Upper Band = MA(n_adaptive) + (k_adaptive × SD(n_adaptive))\nLower Band = MA(n_adaptive) - (k_adaptive × SD(n_adaptive))\nWhere n_adaptive and k_adaptive change based on volatility regime\n\nRegular Bollinger Bands are like wearing the same jacket year-round, while Dynamic Bollinger Bands automatically adjust like having a wardrobe that picks clothes based on the weather. When the market gets choppy (high volatility), these bands might automatically space themselves wider apart to avoid getting \"faked out\" by the big swings. When things calm down, they tighten up to catch smaller but meaningful moves. It's the difference between a one-size-fits-all approach and a smart system that reads the room and adjusts accordingly.","parameters":"","intuition":"","rawContent":"Dynamic Bollinger Bands represent an adaptive version of traditional Bollinger Bands where the standard deviation multiplier or the lookback period automatically adjusts based on current market volatility conditions. During high volatility regimes, the bands may widen further (larger multiplier) or use longer periods to avoid false signals from noise. During low volatility, parameters tighten to capture smaller price movements. This adaptive approach helps maintain consistent statistical containment of price action across different market conditions and prevents the over-sensitivity or under-sensitivity that can occur with fixed parameters.\n\nUpper Band = MA(n_adaptive) + (k_adaptive × SD(n_adaptive))\nLower Band = MA(n_adaptive) - (k_adaptive × SD(n_adaptive))\nWhere n_adaptive and k_adaptive change based on volatility regime\n\nRegular Bollinger Bands are like wearing the same jacket year-round, while Dynamic Bollinger Bands automatically adjust like having a wardrobe that picks clothes based on the weather. When the market gets choppy (high volatility), these bands might automatically space themselves wider apart to avoid getting \"faked out\" by the big swings. When things calm down, they tighten up to catch smaller but meaningful moves. It's the difference between a one-size-fits-all approach and a smart system that reads the room and adjusts accordingly.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 13/Dynamic_Bollinger_Bands.txt","hasFullInfo":true},{"id":257,"title":"Elastic ATR Channels","filename":"Elastic_ATR_Channels.txt","group":"group 13","groupNum":13,"categoryId":24,"categoryTitle":"24. VOLATILITY BANDS & CHANNELS","subcategory":"General","summary":"Flexible ATR bands","overview":"Elastic ATR Channels are adaptive price envelopes that use the Average True Range to create dynamic support and resistance bands around price or a moving average. The \"elastic\" nature refers to the bands' ability to expand and contract smoothly in response to volatility changes, stretching wider during volatile periods and compressing during consolidation. These channels provide traders with volatility-normalized levels that can serve as trailing stops, profit targets, or breakout thresholds. The flexibility of ATR-based channels makes them particularly useful for cross-market comparison since ATR automatically scales to each instrument's price level.","formula":"Upper Channel = Central Line + (ATR × Multiplier)\nLower Channel = Central Line - (ATR × Multiplier)\nCentral Line typically = SMA, EMA, or current price\nCommon Multiplier = 2.0 to 3.0\n\nElastic ATR Channels work like suspension on a car - they automatically adjust to the road conditions. On a smooth highway (low volatility), the suspension is tight and responsive to small bumps. On a rough dirt road (high volatility), it expands to absorb the big bounces without bottoming out. The channels literally stretch and compress based on how bumpy the price action is, giving you boundaries that make sense for current conditions rather than being rigidly fixed in place.","parameters":"","intuition":"","rawContent":"Elastic ATR Channels are adaptive price envelopes that use the Average True Range to create dynamic support and resistance bands around price or a moving average. The \"elastic\" nature refers to the bands' ability to expand and contract smoothly in response to volatility changes, stretching wider during volatile periods and compressing during consolidation. These channels provide traders with volatility-normalized levels that can serve as trailing stops, profit targets, or breakout thresholds. The flexibility of ATR-based channels makes them particularly useful for cross-market comparison since ATR automatically scales to each instrument's price level.\n\nUpper Channel = Central Line + (ATR × Multiplier)\nLower Channel = Central Line - (ATR × Multiplier)\nCentral Line typically = SMA, EMA, or current price\nCommon Multiplier = 2.0 to 3.0\n\nElastic ATR Channels work like suspension on a car - they automatically adjust to the road conditions. On a smooth highway (low volatility), the suspension is tight and responsive to small bumps. On a rough dirt road (high volatility), it expands to absorb the big bounces without bottoming out. The channels literally stretch and compress based on how bumpy the price action is, giving you boundaries that make sense for current conditions rather than being rigidly fixed in place.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 13/Elastic_ATR_Channels.txt","hasFullInfo":true},{"id":258,"title":"Integral of Linear Regression Slope (ILRS)","filename":"Integral_Linear_Regression_Slope.txt","group":"group 13","groupNum":13,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Integrated slope","overview":"The Integral of Linear Regression Slope is a moving average calculated by integrating (accumulating) the slope values of linear regression lines fitted to price data. Since the derivative of ILRS is the linear regression slope, ILRS represents the accumulated trend momentum over time. Unlike LSMA which uses the endpoint of the regression line, ILRS integrates the slope values producing a smoother line that is better suited for determining overall market trend rather than following every price fluctuation. It tracks trend direction with less noise than more reactive regression-based indicators.","formula":"ILRS = ∫(Linear Regression Slope) dt\nCalculated by accumulating slope values from regression lines over N periods\nMore formally: ILRS[i] = (N×Sum1 - Sum×Sumy)/(Sum×Sum - N×Sum2) + SMA(i,N)","parameters":"","intuition":"Think of ILRS as adding up all the \"speed readings\" from the trend over time. If Linear Regression Slope tells you how fast prices are moving right now, ILRS tells you the total accumulated momentum by summing up all those speed readings. It's smoother than other regression indicators because instead of reacting to every twist and turn, it's tracking the bigger picture of where all that momentum has been taking you over the entire period.","rawContent":"The Integral of Linear Regression Slope is a moving average calculated by integrating (accumulating) the slope values of linear regression lines fitted to price data. Since the derivative of ILRS is the linear regression slope, ILRS represents the accumulated trend momentum over time. Unlike LSMA which uses the endpoint of the regression line, ILRS integrates the slope values producing a smoother line that is better suited for determining overall market trend rather than following every price fluctuation. It tracks trend direction with less noise than more reactive regression-based indicators.\n\nILRS = ∫(Linear Regression Slope) dt\nCalculated by accumulating slope values from regression lines over N periods\nMore formally: ILRS[i] = (N×Sum1 - Sum×Sumy)/(Sum×Sum - N×Sum2) + SMA(i,N)\n\nThink of ILRS as adding up all the \"speed readings\" from the trend over time. If Linear Regression Slope tells you how fast prices are moving right now, ILRS tells you the total accumulated momentum by summing up all those speed readings. It's smoother than other regression indicators because instead of reacting to every twist and turn, it's tracking the bigger picture of where all that momentum has been taking you over the entire period.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 13/Integral_Linear_Regression_Slope.txt","hasFullInfo":true},{"id":259,"title":"Least Squares Moving Average (LSMA)","filename":"Least_Squares_Moving_Average.txt","group":"group 13","groupNum":13,"categoryId":23,"categoryTitle":"23. REGRESSION & STATISTICAL INDICATORS","subcategory":"General","summary":"Linear regression line","overview":"The Least Squares Moving Average is a moving average that uses linear regression to calculate the endpoint of a best-fit line through recent price data. Unlike traditional moving averages that simply average prices, LSMA fits a regression line through the last N periods using the least squares method, which minimizes the sum of squared differences between actual prices and the fitted line. The final value of this regression line becomes the LSMA value for that period. This approach provides faster trend detection and reduced lag compared to Simple or Exponential Moving Averages.","formula":"LSMA = endpoint of linear regression line fitted to last N price points\nWhere the regression line y = a + bx minimizes Σ(y_actual - y_predicted)²","parameters":"","intuition":"The Least Squares Moving Average is like drawing the \"best straight line\" through recent price movements and using where that line points right now as your trend indicator. Instead of just averaging prices like most indicators, it finds the line that fits the data most closely (with the smallest errors) and uses that to show you where the trend is really heading, making it quicker to spot changes than regular moving averages.","rawContent":"The Least Squares Moving Average is a moving average that uses linear regression to calculate the endpoint of a best-fit line through recent price data. Unlike traditional moving averages that simply average prices, LSMA fits a regression line through the last N periods using the least squares method, which minimizes the sum of squared differences between actual prices and the fitted line. The final value of this regression line becomes the LSMA value for that period. This approach provides faster trend detection and reduced lag compared to Simple or Exponential Moving Averages.\n\nLSMA = endpoint of linear regression line fitted to last N price points\nWhere the regression line y = a + bx minimizes Σ(y_actual - y_predicted)²\n\nThe Least Squares Moving Average is like drawing the \"best straight line\" through recent price movements and using where that line points right now as your trend indicator. Instead of just averaging prices like most indicators, it finds the line that fits the data most closely (with the smallest errors) and uses that to show you where the trend is really heading, making it quicker to spot changes than regular moving averages.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 13/Least_Squares_Moving_Average.txt","hasFullInfo":true},{"id":260,"title":"Linear Regression Slope (LRS)","filename":"Linear_Regression_Slope.txt","group":"group 13","groupNum":13,"categoryId":15,"categoryTitle":"15. ADVANCED MOVING AVERAGES","subcategory":"General","summary":"Integrated slope","overview":"The Linear Regression Slope indicator measures the rate of change (steepness) of a linear regression line fitted to price data over a specified period. It quantifies both the direction and strength of a trend by calculating how much the best-fit line is rising or falling per bar. The slope is derived from the linear regression equation y = a + bx, where the slope coefficient 'b' represents the change in price per time period. Positive values indicate uptrends, negative values indicate downtrends, and values near zero suggest sideways markets. Steeper slopes indicate stronger trends.","formula":"Slope = (N × Σ(xy) - Σx × Σy) / (N × Σ(x²) - (Σx)²)\nWhere x = time periods, y = closing prices, N = number of periods\nResult represents change in price per bar along regression line","parameters":"","intuition":"The Linear Regression Slope tells you not just whether prices are going up or down, but how fast they're moving in that direction. Think of it like measuring how steep a hill is - a slope of +2 means prices are climbing $2 per bar on average, while -0.5 means they're sliding down by 50 cents per bar. When the slope crosses above zero, the trend just turned up; when it crosses below zero, the trend turned down. The bigger the number (positive or negative), the stronger the trend.","rawContent":"The Linear Regression Slope indicator measures the rate of change (steepness) of a linear regression line fitted to price data over a specified period. It quantifies both the direction and strength of a trend by calculating how much the best-fit line is rising or falling per bar. The slope is derived from the linear regression equation y = a + bx, where the slope coefficient 'b' represents the change in price per time period. Positive values indicate uptrends, negative values indicate downtrends, and values near zero suggest sideways markets. Steeper slopes indicate stronger trends.\n\nSlope = (N × Σ(xy) - Σx × Σy) / (N × Σ(x²) - (Σx)²)\nWhere x = time periods, y = closing prices, N = number of periods\nResult represents change in price per bar along regression line\n\nThe Linear Regression Slope tells you not just whether prices are going up or down, but how fast they're moving in that direction. Think of it like measuring how steep a hill is - a slope of +2 means prices are climbing $2 per bar on average, while -0.5 means they're sliding down by 50 cents per bar. When the slope crosses above zero, the trend just turned up; when it crosses below zero, the trend turned down. The bigger the number (positive or negative), the stronger the trend.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 13/Linear_Regression_Slope.txt","hasFullInfo":true},{"id":261,"title":"Market Breadth Momentum","filename":"Market_Breadth_Momentum.txt","group":"group 13","groupNum":13,"categoryId":25,"categoryTitle":"25. MARKET BREADTH & SENTIMENT","subcategory":"General","summary":"Market-wide momentum","overview":"Market Breadth Momentum quantifies the rate of change in overall market participation by measuring the acceleration or deceleration of breadth indicators such as advance-decline data, new highs-new lows, or percentage of stocks above moving averages. Rather than just knowing how many stocks are advancing, breadth momentum shows whether that participation is increasing (healthy) or decreasing (warning sign). This is typically calculated as the rate of change or momentum oscillator applied to breadth metrics. Divergences between price momentum and breadth momentum often provide early warnings of trend exhaustion or reversal.","formula":"Breadth Momentum = ROC(Breadth Metric, n)\nExample: ROC(% Stocks above 50-day MA, 10 periods)\nOr: Change in Net Advances over n periods\n\nMarket Breadth Momentum answers the question \"Is this party getting better or worse?\" The index might still be rising (positive breadth), but if fewer and fewer stocks are participating each day (declining breadth momentum), it's like a party where people are slowly trickling toward the exits - things look fine now, but momentum is fading. Conversely, if breadth momentum is accelerating, it means more stocks are joining the move each day - the party is picking up steam and likely to continue.","parameters":"","intuition":"","rawContent":"Market Breadth Momentum quantifies the rate of change in overall market participation by measuring the acceleration or deceleration of breadth indicators such as advance-decline data, new highs-new lows, or percentage of stocks above moving averages. Rather than just knowing how many stocks are advancing, breadth momentum shows whether that participation is increasing (healthy) or decreasing (warning sign). This is typically calculated as the rate of change or momentum oscillator applied to breadth metrics. Divergences between price momentum and breadth momentum often provide early warnings of trend exhaustion or reversal.\n\nBreadth Momentum = ROC(Breadth Metric, n)\nExample: ROC(% Stocks above 50-day MA, 10 periods)\nOr: Change in Net Advances over n periods\n\nMarket Breadth Momentum answers the question \"Is this party getting better or worse?\" The index might still be rising (positive breadth), but if fewer and fewer stocks are participating each day (declining breadth momentum), it's like a party where people are slowly trickling toward the exits - things look fine now, but momentum is fading. Conversely, if breadth momentum is accelerating, it means more stocks are joining the move each day - the party is picking up steam and likely to continue.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/Market_Breadth_Momentum.txt","hasFullInfo":true},{"id":262,"title":"McClellan Oscillator Variants","filename":"McClellan_Oscillator_Variants.txt","group":"group 13","groupNum":13,"categoryId":25,"categoryTitle":"25. MARKET BREADTH & SENTIMENT","subcategory":"General","summary":"Breadth momentum","overview":"McClellan Oscillator Variants are breadth momentum indicators derived from the difference between two exponential moving averages of net advances (advancing stocks minus declining stocks). The classic McClellan Oscillator uses 19-day and 39-day EMAs of net advances, creating an oscillator that fluctuates around zero. Variants include the McClellan Summation Index (cumulative sum of oscillator values for longer-term trends), the Ratio-Adjusted McClellan Oscillator (using ratios instead of differences), and volume-weighted versions. These tools measure the acceleration and deceleration of market breadth, with divergences between the oscillator and price often signaling trend changes.","formula":"McClellan Oscillator = EMA(19) of Net Advances - EMA(39) of Net Advances\nNet Advances = Advancing Stocks - Declining Stocks\nSummation Index = Cumulative sum of McClellan Oscillator values","parameters":"","intuition":"The McClellan Oscillator is like measuring not just how many people are running versus walking, but how much that ratio is accelerating or decelerating. If net advances go from +100 to +200 to +300, the oscillator captures that upward momentum. If they go from +300 to +200 to +100, the oscillator shows deceleration even though advances are still positive. The Summation Index then adds up all those daily momentum readings to show the big-picture trend - whether breadth momentum has been persistently positive or negative over weeks and months.","rawContent":"McClellan Oscillator Variants are breadth momentum indicators derived from the difference between two exponential moving averages of net advances (advancing stocks minus declining stocks). The classic McClellan Oscillator uses 19-day and 39-day EMAs of net advances, creating an oscillator that fluctuates around zero. Variants include the McClellan Summation Index (cumulative sum of oscillator values for longer-term trends), the Ratio-Adjusted McClellan Oscillator (using ratios instead of differences), and volume-weighted versions. These tools measure the acceleration and deceleration of market breadth, with divergences between the oscillator and price often signaling trend changes.\n\nMcClellan Oscillator = EMA(19) of Net Advances - EMA(39) of Net Advances\nNet Advances = Advancing Stocks - Declining Stocks\nSummation Index = Cumulative sum of McClellan Oscillator values\n\nThe McClellan Oscillator is like measuring not just how many people are running versus walking, but how much that ratio is accelerating or decelerating. If net advances go from +100 to +200 to +300, the oscillator captures that upward momentum. If they go from +300 to +200 to +100, the oscillator shows deceleration even though advances are still positive. The Summation Index then adds up all those daily momentum readings to show the big-picture trend - whether breadth momentum has been persistently positive or negative over weeks and months.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/McClellan_Oscillator_Variants.txt","hasFullInfo":true},{"id":263,"title":"Normalized ATR Bands","filename":"Normalized_ATR_Bands.txt","group":"group 13","groupNum":13,"categoryId":24,"categoryTitle":"24. VOLATILITY BANDS & CHANNELS","subcategory":"General","summary":"Cross-market comparable bands","overview":"Normalized ATR Bands are volatility channels where the ATR value is expressed as a percentage of price rather than absolute points, enabling meaningful comparison across different securities and price levels. By dividing ATR by current price (ATR/Price × 100), the normalized value represents volatility as a percentage, making it possible to compare a $10 stock's volatility to a $1000 stock's volatility on equal footing. Bands constructed from normalized ATR provide consistent statistical properties across instruments, timeframes, and price regimes, which is particularly valuable for multi-instrument trading systems and portfolio analysis.","formula":"Normalized ATR = (ATR / Price) × 100\nUpper Band = Price + (Price × Normalized_ATR × Multiplier / 100)\nLower Band = Price - (Price × Normalized_ATR × Multiplier / 100)\n\nNormalized ATR Bands solve the \"apples to oranges\" problem. Without normalization, a $500 stock with 5-point daily moves and a $50 stock with 5-point daily moves look identical (both moving $5), but the $50 stock is actually 10 times more volatile percentage-wise. Normalization converts everything to percentages, so you can instantly see that one stock is moving 1% per day while another is moving 10% per day. This makes the bands comparable whether you're trading penny stocks or blue chips, Bitcoin or bonds.","parameters":"","intuition":"","rawContent":"Normalized ATR Bands are volatility channels where the ATR value is expressed as a percentage of price rather than absolute points, enabling meaningful comparison across different securities and price levels. By dividing ATR by current price (ATR/Price × 100), the normalized value represents volatility as a percentage, making it possible to compare a $10 stock's volatility to a $1000 stock's volatility on equal footing. Bands constructed from normalized ATR provide consistent statistical properties across instruments, timeframes, and price regimes, which is particularly valuable for multi-instrument trading systems and portfolio analysis.\n\nNormalized ATR = (ATR / Price) × 100\nUpper Band = Price + (Price × Normalized_ATR × Multiplier / 100)\nLower Band = Price - (Price × Normalized_ATR × Multiplier / 100)\n\nNormalized ATR Bands solve the \"apples to oranges\" problem. Without normalization, a $500 stock with 5-point daily moves and a $50 stock with 5-point daily moves look identical (both moving $5), but the $50 stock is actually 10 times more volatile percentage-wise. Normalization converts everything to percentages, so you can instantly see that one stock is moving 1% per day while another is moving 10% per day. This makes the bands comparable whether you're trading penny stocks or blue chips, Bitcoin or bonds.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 13/Normalized_ATR_Bands.txt","hasFullInfo":true},{"id":264,"title":"Regression Oscillator","filename":"Regression_Oscillator.txt","group":"group 13","groupNum":13,"categoryId":22,"categoryTitle":"22. ADVANCED OSCILLATORS & MOMENTUM","subcategory":"General","summary":"Detrended price oscillator","overview":"The Regression Oscillator is a detrended price indicator that measures the difference between current price and its linear regression line value. It oscillates around a zero line, showing how far price has deviated from the statistically expected trend. When price is above the regression line, the oscillator is positive; when below, it's negative. This indicator effectively removes the dominant trend to highlight cyclical price movements and shorter-term deviations from the long-term path, making mean-reversion opportunities more visible.","formula":"Regression Oscillator = Current Price - Linear Regression Line Value\nWhere the regression line is fitted using least squares method over N periods","parameters":"","intuition":"Think of the Regression Oscillator like a rubber band stretched away from a straight stick (the regression line). When prices move above the line, the oscillator goes positive showing prices are \"stretched up\" from where they statistically should be. When prices drop below the line, it goes negative showing they're \"stretched down.\" The further from zero, the more stretched things are, and eventually that rubber band wants to snap back to the middle - that's your mean-reversion signal.","rawContent":"The Regression Oscillator is a detrended price indicator that measures the difference between current price and its linear regression line value. It oscillates around a zero line, showing how far price has deviated from the statistically expected trend. When price is above the regression line, the oscillator is positive; when below, it's negative. This indicator effectively removes the dominant trend to highlight cyclical price movements and shorter-term deviations from the long-term path, making mean-reversion opportunities more visible.\n\nRegression Oscillator = Current Price - Linear Regression Line Value\nWhere the regression line is fitted using least squares method over N periods\n\nThink of the Regression Oscillator like a rubber band stretched away from a straight stick (the regression line). When prices move above the line, the oscillator goes positive showing prices are \"stretched up\" from where they statistically should be. When prices drop below the line, it goes negative showing they're \"stretched down.\" The further from zero, the more stretched things are, and eventually that rubber band wants to snap back to the middle - that's your mean-reversion signal.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/Regression_Oscillator.txt","hasFullInfo":true},{"id":265,"title":"R-Squared Indicator (Linear Regression Goodness of Fit)","filename":"R_Squared_Indicator.txt","group":"group 13","groupNum":13,"categoryId":23,"categoryTitle":"23. REGRESSION & STATISTICAL INDICATORS","subcategory":"General","summary":"Trend strength","overview":"The R-Squared indicator measures how closely price data fits to a linear regression line over a specified period. It calculates the proportion of price variance that can be explained by the linear trend versus random noise. R² values range from 0 to 1.0 (or 0% to 100%), where higher values indicate stronger trends and better correlation between price and the regression line. For example, an R² of 0.60 means 60% of price movement follows the linear trend while 40% is random fluctuation. This indicator is particularly useful for determining trend strength and statistical significance.","formula":"R² = 1 - (SSR / SST)\nWhere SSR = Sum of Squared Residuals (actual price - predicted price)²\nSST = Total Sum of Squares (actual price - mean price)²\nAlso equals the square of Pearson correlation coefficient\n\nR-Squared tells you how \"straight\" a trend is - whether prices are really moving in a consistent direction or just bouncing around randomly. A reading close to 100% means prices are following a very clear, predictable path (strong trend), while readings near 0% mean there's no real pattern and prices are just moving chaotically. It's like measuring whether someone is walking in a straight line (high R²) or stumbling around randomly (low R²).","parameters":"","intuition":"","rawContent":"The R-Squared indicator measures how closely price data fits to a linear regression line over a specified period. It calculates the proportion of price variance that can be explained by the linear trend versus random noise. R² values range from 0 to 1.0 (or 0% to 100%), where higher values indicate stronger trends and better correlation between price and the regression line. For example, an R² of 0.60 means 60% of price movement follows the linear trend while 40% is random fluctuation. This indicator is particularly useful for determining trend strength and statistical significance.\n\nR² = 1 - (SSR / SST)\nWhere SSR = Sum of Squared Residuals (actual price - predicted price)²\nSST = Total Sum of Squares (actual price - mean price)²\nAlso equals the square of Pearson correlation coefficient\n\nR-Squared tells you how \"straight\" a trend is - whether prices are really moving in a consistent direction or just bouncing around randomly. A reading close to 100% means prices are following a very clear, predictable path (strong trend), while readings near 0% mean there's no real pattern and prices are just moving chaotically. It's like measuring whether someone is walking in a straight line (high R²) or stumbling around randomly (low R²).","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/R_Squared_Indicator.txt","hasFullInfo":true},{"id":266,"title":"Sector Rotation Momentum","filename":"Sector_Rotation_Momentum.txt","group":"group 13","groupNum":13,"categoryId":25,"categoryTitle":"25. MARKET BREADTH & SENTIMENT","subcategory":"General","summary":"Inter-sector strength","overview":"Sector Rotation Momentum measures the relative strength and directional changes among different market sectors (e.g., Technology, Healthcare, Energy) to identify capital flows and leadership shifts. This is calculated by comparing each sector's rate of change or momentum against the broad market or against other sectors, typically using price ratios, relative strength indicators, or normalized returns. Rising sector momentum indicates accumulation and leadership potential; declining momentum signals distribution and underperformance. Tracking sector rotation helps identify which parts of the market are attracting investment and which are being abandoned, providing insights into the economic cycle and risk appetite.","formula":"Sector Momentum = ROC(Sector Index, n) - ROC(Market Index, n)\nOr: Relative Strength Ratio momentum between sectors\nTypically tracking 10-12 major sectors simultaneously","parameters":"","intuition":"Sector Rotation Momentum is like watching which restaurants in a food court are getting crowded versus empty. Early in the day, maybe the coffee shop is packed (defensive sectors leading). By lunch, fast food gets slammed (cyclical sectors taking over). By dinner, fancy restaurants fill up (growth sectors in demand). The momentum indicator shows you which \"restaurants\" (sectors) are seeing increasing foot traffic versus declining interest, telling you where the money is flowing right now and helping you understand the market's current appetite for risk.","rawContent":"Sector Rotation Momentum measures the relative strength and directional changes among different market sectors (e.g., Technology, Healthcare, Energy) to identify capital flows and leadership shifts. This is calculated by comparing each sector's rate of change or momentum against the broad market or against other sectors, typically using price ratios, relative strength indicators, or normalized returns. Rising sector momentum indicates accumulation and leadership potential; declining momentum signals distribution and underperformance. Tracking sector rotation helps identify which parts of the market are attracting investment and which are being abandoned, providing insights into the economic cycle and risk appetite.\n\nSector Momentum = ROC(Sector Index, n) - ROC(Market Index, n)\nOr: Relative Strength Ratio momentum between sectors\nTypically tracking 10-12 major sectors simultaneously\n\nSector Rotation Momentum is like watching which restaurants in a food court are getting crowded versus empty. Early in the day, maybe the coffee shop is packed (defensive sectors leading). By lunch, fast food gets slammed (cyclical sectors taking over). By dinner, fancy restaurants fill up (growth sectors in demand). The momentum indicator shows you which \"restaurants\" (sectors) are seeing increasing foot traffic versus declining interest, telling you where the money is flowing right now and helping you understand the market's current appetite for risk.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 13/Sector_Rotation_Momentum.txt","hasFullInfo":true},{"id":267,"title":"Standard Deviation Bands (Bollinger-Style)","filename":"Standard_Deviation_Bands.txt","group":"group 13","groupNum":13,"categoryId":24,"categoryTitle":"24. VOLATILITY BANDS & CHANNELS","subcategory":"General","summary":"Statistical bands","overview":"Standard Deviation Bands, most commonly known as Bollinger Bands, are volatility-based envelopes plotted at a specified number of standard deviations above and below a moving average (typically a 20-period SMA). The bands dynamically expand during high volatility periods and contract during low volatility, providing a relative definition of high and low prices. The default configuration uses 2 standard deviations, which statistically should contain approximately 95% of price action (though in practice closer to 90%). These bands help identify overbought/oversold conditions, volatility changes, and potential breakout or mean-reversion opportunities.","formula":"Upper Band = SMA(n) + (k × Standard Deviation(n))\nMiddle Band = SMA(n)\nLower Band = SMA(n) - (k × Standard Deviation(n))\nDefault: n = 20 periods, k = 2 standard deviations\n\nStandard Deviation Bands are like elastic boundaries that stretch and shrink based on how wild the market is acting. When prices are calm and predictable, the bands squeeze together tightly. When prices start jumping around a lot, the bands spread apart to give them room. Price touching the upper band doesn't automatically mean \"sell\" - it just means prices are at the high end of their recent range. The real magic is watching the width of the bands - narrow bands (the \"squeeze\") often come before big price moves.","parameters":"","intuition":"","rawContent":"Standard Deviation Bands, most commonly known as Bollinger Bands, are volatility-based envelopes plotted at a specified number of standard deviations above and below a moving average (typically a 20-period SMA). The bands dynamically expand during high volatility periods and contract during low volatility, providing a relative definition of high and low prices. The default configuration uses 2 standard deviations, which statistically should contain approximately 95% of price action (though in practice closer to 90%). These bands help identify overbought/oversold conditions, volatility changes, and potential breakout or mean-reversion opportunities.\n\nUpper Band = SMA(n) + (k × Standard Deviation(n))\nMiddle Band = SMA(n)\nLower Band = SMA(n) - (k × Standard Deviation(n))\nDefault: n = 20 periods, k = 2 standard deviations\n\nStandard Deviation Bands are like elastic boundaries that stretch and shrink based on how wild the market is acting. When prices are calm and predictable, the bands squeeze together tightly. When prices start jumping around a lot, the bands spread apart to give them room. Price touching the upper band doesn't automatically mean \"sell\" - it just means prices are at the high end of their recent range. The real magic is watching the width of the bands - narrow bands (the \"squeeze\") often come before big price moves.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 13/Standard_Deviation_Bands.txt","hasFullInfo":true},{"id":268,"title":"Volatility-Based Breakout System","filename":"Volatility_Based_Breakout_System.txt","group":"group 13","groupNum":13,"categoryId":24,"categoryTitle":"24. VOLATILITY BANDS & CHANNELS","subcategory":"General","summary":"Volatility thresholds","overview":"A Volatility-Based Breakout System identifies potential trend initiation points by detecting when price movement exceeds normal volatility thresholds. The system typically uses volatility measures like ATR or standard deviation to establish dynamic breakout levels that adapt to changing market conditions. Entry signals occur when price closes beyond these volatility-adjusted thresholds, indicating momentum strong enough to overcome typical price fluctuations. This approach filters out noise by requiring price movement greater than the asset's recent volatility range before triggering trades.","formula":"Breakout Level = Price ± (Volatility Measure × Multiplier)\nExample: Entry Long when Close > High + (ATR × 1.5)\nEntry Short when Close < Low - (ATR × 1.5)","parameters":"","intuition":"Think of it like setting a burglar alarm - but instead of a fixed distance, the alarm adjusts based on how much the house normally shakes. If your house usually vibrates a little from nearby traffic (low volatility), the alarm is sensitive. If there's construction next door (high volatility), the alarm needs bigger movements to trigger. A volatility breakout system only alerts you when something moves MORE than the recent chaos level, meaning it's actually significant movement, not just normal market noise.","rawContent":"A Volatility-Based Breakout System identifies potential trend initiation points by detecting when price movement exceeds normal volatility thresholds. The system typically uses volatility measures like ATR or standard deviation to establish dynamic breakout levels that adapt to changing market conditions. Entry signals occur when price closes beyond these volatility-adjusted thresholds, indicating momentum strong enough to overcome typical price fluctuations. This approach filters out noise by requiring price movement greater than the asset's recent volatility range before triggering trades.\n\nBreakout Level = Price ± (Volatility Measure × Multiplier)\nExample: Entry Long when Close > High + (ATR × 1.5)\nEntry Short when Close < Low - (ATR × 1.5)\n\nThink of it like setting a burglar alarm - but instead of a fixed distance, the alarm adjusts based on how much the house normally shakes. If your house usually vibrates a little from nearby traffic (low volatility), the alarm is sensitive. If there's construction next door (high volatility), the alarm needs bigger movements to trigger. A volatility breakout system only alerts you when something moves MORE than the recent chaos level, meaning it's actually significant movement, not just normal market noise.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 13/Volatility_Based_Breakout_System.txt","hasFullInfo":true},{"id":269,"title":"Adjustment Speed Coefficients","filename":"Adjustment_Speed_Coefficients.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Return-to-equilibrium speed","overview":"Adjustment Speed Coefficients (α coefficients in VECM) measure how quickly each variable responds to deviations from equilibrium. They quantify the rate of mean reversion and determine which variables do the \"adjusting\" when the system is out of equilibrium. In pairs trading, these coefficients indicate whether both securities adjust or if one leads and the other follows.","formula":"Mathematical representation in VECM:\nΔy_1,t = α_1*ECT_{t-1} + [short-run terms] + ε_1,t\nΔy_2,t = α_2*ECT_{t-1} + [short-run terms] + ε_2,t","parameters":"where:\n- α_1, α_2 = adjustment speed coefficients\n- ECT_{t-1} = error correction term (deviation from equilibrium)\n- Expected sign: negative (moves to close the gap)\n\nInterpretation:\n\nMagnitude of α:\n- |α| = 0: variable doesn't adjust (weakly exogenous)\n- |α| = 0.1: slow adjustment (10% of gap closed per period)\n- |α| = 0.5: moderate adjustment (50% of gap closed per period)\n- |α| = 1.0: full adjustment in one period\n\nHalf-life calculation:\nHalf-life = -ln(2) / ln(1 + α)\nTime for half of deviation to be eliminated\n\nExample scenarios:\n\nSymmetric adjustment:\nα_1 = -0.3, α_2 = -0.3\n→ Both variables adjust equally, genuine mean reversion\n\nAsymmetric adjustment:\nα_1 = -0.5, α_2 = -0.1\n→ y_1 does most adjusting, y_2 is relatively more exogenous\n\nOne-way adjustment:\nα_1 = -0.4, α_2 ≈ 0\n→ Only y_1 adjusts, y_2 leads (price discovery in y_2)\n\nTrading implications:\n\nFast adjustment (|α| > 0.3):\n- Quick mean reversion expected\n- Shorter holding periods optimal\n- Higher trading frequency\n- Tighter stops acceptable\n\nSlow adjustment (|α| < 0.1):\n- Slow mean reversion\n- Longer holding periods needed\n- Lower trading frequency\n- Wider stops required\n\nAsymmetric α values:\n- Trade primarily the adjusting security\n- Use leading security for timing\n- Adjust position sizes based on relative α\n\nAdjustment Speed Coefficients tell you how \"springy\" the rubber band is between two stocks. If α = -0.5, then each day the gap closes by 50%, so deviations disappear quickly (springy). If α = -0.05, only 5% of the gap closes per day, so it takes weeks to revert (loose rubber band). Faster adjustment means quicker profits but requires faster trading.","intuition":"","rawContent":"Adjustment Speed Coefficients (α coefficients in VECM) measure how quickly each variable responds to deviations from equilibrium. They quantify the rate of mean reversion and determine which variables do the \"adjusting\" when the system is out of equilibrium. In pairs trading, these coefficients indicate whether both securities adjust or if one leads and the other follows.\n\nMathematical representation in VECM:\nΔy_1,t = α_1*ECT_{t-1} + [short-run terms] + ε_1,t\nΔy_2,t = α_2*ECT_{t-1} + [short-run terms] + ε_2,t\n\nwhere:\n- α_1, α_2 = adjustment speed coefficients\n- ECT_{t-1} = error correction term (deviation from equilibrium)\n- Expected sign: negative (moves to close the gap)\n\nInterpretation:\n\nMagnitude of α:\n- |α| = 0: variable doesn't adjust (weakly exogenous)\n- |α| = 0.1: slow adjustment (10% of gap closed per period)\n- |α| = 0.5: moderate adjustment (50% of gap closed per period)\n- |α| = 1.0: full adjustment in one period\n\nHalf-life calculation:\nHalf-life = -ln(2) / ln(1 + α)\nTime for half of deviation to be eliminated\n\nExample scenarios:\n\nSymmetric adjustment:\nα_1 = -0.3, α_2 = -0.3\n→ Both variables adjust equally, genuine mean reversion\n\nAsymmetric adjustment:\nα_1 = -0.5, α_2 = -0.1\n→ y_1 does most adjusting, y_2 is relatively more exogenous\n\nOne-way adjustment:\nα_1 = -0.4, α_2 ≈ 0\n→ Only y_1 adjusts, y_2 leads (price discovery in y_2)\n\nTrading implications:\n\nFast adjustment (|α| > 0.3):\n- Quick mean reversion expected\n- Shorter holding periods optimal\n- Higher trading frequency\n- Tighter stops acceptable\n\nSlow adjustment (|α| < 0.1):\n- Slow mean reversion\n- Longer holding periods needed\n- Lower trading frequency\n- Wider stops required\n\nAsymmetric α values:\n- Trade primarily the adjusting security\n- Use leading security for timing\n- Adjust position sizes based on relative α\n\nAdjustment Speed Coefficients tell you how \"springy\" the rubber band is between two stocks. If α = -0.5, then each day the gap closes by 50%, so deviations disappear quickly (springy). If α = -0.05, only 5% of the gap closes per day, so it takes weeks to revert (loose rubber band). Faster adjustment means quicker profits but requires faster trading.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Adjustment_Speed_Coefficients.txt","hasFullInfo":true},{"id":270,"title":"Anchored VWAP Channel","filename":"Anchored_VWAP_Channel.txt","group":"group 14","groupNum":14,"categoryId":30,"categoryTitle":"30. SPECIAL PURPOSE FILTERS","subcategory":"General","summary":"Event-anchored VWAP","overview":"Anchored VWAP (Volume-Weighted Average Price) Channel is a dynamic trading channel that calculates VWAP from a specific starting point (anchor) rather than the session open. The anchor can be a significant event (earnings, breakout, major high/low), and standard deviation bands are added to create a channel. This tool helps identify value areas and deviation extremes relative to important reference points.","formula":"Calculation from anchor point (bar A):\n1. Select anchor bar A (manual selection or algorithmic trigger)\n2. For each bar t > A, calculate cumulative VWAP:\n   VWAP[t] = Σ(Price[i] * Volume[i]) / Σ(Volume[i]) for i = A to t\n   where Price = (High + Low + Close) / 3\n3. Calculate cumulative standard deviation:\n   StdDev[t] = sqrt(Σ(Volume[i] * (Price[i] - VWAP[t])^2) / Σ(Volume[i]))\n4. Create bands:\n   Upper_Band = VWAP + (multiplier * StdDev)\n   Lower_Band = VWAP - (multiplier * StdDev)\n\nCommon multipliers: 1.0, 1.5, 2.0, 2.5 standard deviations","parameters":"","intuition":"Trading interpretation:\n- VWAP = fair value from anchor event\n- Price above VWAP = buyers in control since anchor\n- Price below VWAP = sellers in control since anchor\n- Band touches = potential reversal or continuation points\n\nAnchored VWAP Channel is like tracking the \"average price that everyone paid\" since some important moment. If a stock reports earnings, you anchor there and watch the average price weighted by how many shares traded. If price drifts far from this average (hitting the outer bands), it suggests the move might be overdone - either a bargain or an extreme.","rawContent":"Anchored VWAP (Volume-Weighted Average Price) Channel is a dynamic trading channel that calculates VWAP from a specific starting point (anchor) rather than the session open. The anchor can be a significant event (earnings, breakout, major high/low), and standard deviation bands are added to create a channel. This tool helps identify value areas and deviation extremes relative to important reference points.\n\nCalculation from anchor point (bar A):\n1. Select anchor bar A (manual selection or algorithmic trigger)\n2. For each bar t > A, calculate cumulative VWAP:\n   VWAP[t] = Σ(Price[i] * Volume[i]) / Σ(Volume[i]) for i = A to t\n   where Price = (High + Low + Close) / 3\n3. Calculate cumulative standard deviation:\n   StdDev[t] = sqrt(Σ(Volume[i] * (Price[i] - VWAP[t])^2) / Σ(Volume[i]))\n4. Create bands:\n   Upper_Band = VWAP + (multiplier * StdDev)\n   Lower_Band = VWAP - (multiplier * StdDev)\n\nCommon multipliers: 1.0, 1.5, 2.0, 2.5 standard deviations\n\nTrading interpretation:\n- VWAP = fair value from anchor event\n- Price above VWAP = buyers in control since anchor\n- Price below VWAP = sellers in control since anchor\n- Band touches = potential reversal or continuation points\n\nAnchored VWAP Channel is like tracking the \"average price that everyone paid\" since some important moment. If a stock reports earnings, you anchor there and watch the average price weighted by how many shares traded. If price drifts far from this average (hitting the outer bands), it suggests the move might be overdone - either a bargain or an extreme.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 14/Anchored_VWAP_Channel.txt","hasFullInfo":true},{"id":271,"title":"Channelized Receiver Display","filename":"Channelized_Receiver_Display.txt","group":"group 14","groupNum":14,"categoryId":29,"categoryTitle":"29. SPECTRUM VISUALIZATION & ANALYSIS","subcategory":"General","summary":"Multi-channel spectrum","overview":"A channelized receiver display is a spectrum analysis visualization that uses multiple parallel bandpass filters (typically 42 in Ehlers' implementation) to simultaneously measure the power at different frequency channels. Each \"channel\" is a narrow frequency band, and the display shows the instantaneous power in each channel, creating a real-time frequency spectrum view of market cycles.","formula":"The system works by:\n1. Create array of parallel IIR bandpass filters covering frequency range\n2. Each filter targets specific center frequency with narrow bandwidth\n3. Feed price data through all filters simultaneously\n4. Measure output power of each filter: Power[i] = (filtered_output[i])^2\n5. Display as bar chart or line plot with frequency on x-axis\n\nFor N channels covering period range [P_min, P_max]:\n- Channel i frequency: f_i = 1/P_i where P_i = P_min + (i * (P_max - P_min)/N)\n- Bandpass filter centered at f_i with bandwidth Δf\n- Power output: P_i = Σ(BPF_i(price)^2) over measurement window","parameters":"","intuition":"A channelized receiver is like having 42 radio receivers all tuned to slightly different stations, listening to the market simultaneously. Each receiver picks up a specific \"rhythm frequency\" - one listens for 10-bar cycles, another for 15-bar cycles, etc. The louder the signal from each receiver, the stronger that particular cycle is in the current market.","rawContent":"A channelized receiver display is a spectrum analysis visualization that uses multiple parallel bandpass filters (typically 42 in Ehlers' implementation) to simultaneously measure the power at different frequency channels. Each \"channel\" is a narrow frequency band, and the display shows the instantaneous power in each channel, creating a real-time frequency spectrum view of market cycles.\n\nThe system works by:\n1. Create array of parallel IIR bandpass filters covering frequency range\n2. Each filter targets specific center frequency with narrow bandwidth\n3. Feed price data through all filters simultaneously\n4. Measure output power of each filter: Power[i] = (filtered_output[i])^2\n5. Display as bar chart or line plot with frequency on x-axis\n\nFor N channels covering period range [P_min, P_max]:\n- Channel i frequency: f_i = 1/P_i where P_i = P_min + (i * (P_max - P_min)/N)\n- Bandpass filter centered at f_i with bandwidth Δf\n- Power output: P_i = Σ(BPF_i(price)^2) over measurement window\n\nA channelized receiver is like having 42 radio receivers all tuned to slightly different stations, listening to the market simultaneously. Each receiver picks up a specific \"rhythm frequency\" - one listens for 10-bar cycles, another for 15-bar cycles, etc. The louder the signal from each receiver, the stronger that particular cycle is in the current market.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 14/Channelized_Receiver_Display.txt","hasFullInfo":true},{"id":272,"title":"Cointegration Rank Determination","filename":"Cointegration_Rank_Determination.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Number of relationships","overview":"Cointegration Rank Determination is the process of identifying how many independent long-run equilibrium relationships exist among a set of non-stationary variables. The rank (r) tells us how many cointegrating vectors exist, which is crucial for proper VECM specification and understanding the structure of equilibrium relationships in a multi-asset system.","formula":"Mathematical framework:\nIn VECM: ΔY_t = Π*Y_{t-1} + Γ*ΔY_{t-1} + ε_t\nwhere Π = α*β' (r × k cointegration space)\n\nPossible ranks for k variables:\n- r = 0: No cointegration (standard VAR in differences)\n- r = 1: One equilibrium relationship\n- r = 2, ..., k-1: Multiple equilibria\n- r = k: All variables stationary (VAR in levels)\n\nTesting procedure (Johansen):\n\nSequential testing from r = 0 upward:\n1. H_0: r = 0 vs H_1: r > 0 (test for any cointegration)\n2. If rejected: H_0: r = 1 vs H_1: r > 1 (test for second relationship)\n3. Continue until fail to reject H_0\n4. Cointegration rank = highest r that was rejected\n\nTest statistics:\nTrace test: λ_trace(r) = -T*Σ ln(1-λ_i) for i = r+1 to k\nMax eigenvalue: λ_max(r) = -T*ln(1-λ_{r+1})\n\nDecision rule:\n- Test statistic > critical value → reject H_0 → higher rank\n- Test statistic < critical value → accept H_0 → stop\n\nInterpretation by rank:\n\nr = 1 (one cointegrating relationship):\n- Single equilibrium binding all variables\n- Simplest structure for trading\n- All variables tied to one common stochastic trend\n\nr = 2 (two relationships):\n- Two independent equilibria\n- More complex structure\n- Variables may group into subsets\n- Multiple trading strategies possible\n\nr = k-1 (full rank minus one):\n- Maximum cointegration\n- All variables tied together by k-1 relationships\n- System is \"tightly bound\"\n- Very constrained dynamics\n\nTrading implications:\n\nLow rank (r = 1 or 2):\n- Clear equilibrium relationships\n- Straightforward trading strategies\n- Each relationship = one pairs/basket trade\n\nHigh rank (r > k/2):\n- Complex interdependencies\n- Difficult to isolate tradeable relationships\n- May require dimensionality reduction\n- Consider subset analysis\n\nRank stability:\n- Test rank on rolling windows\n- Rank changes suggest structural breaks\n- Trading strategies need re-specification if rank changes\n\nCointegration Rank is the number of independent \"rubber bands\" connecting your stocks. With 4 stocks, you might find rank = 2, meaning there are 2 different equilibrium relationships. Maybe stocks A-B move together (relationship 1) and stocks C-D move together (relationship 2). The rank tells you how many distinct mean-reverting portfolios you can create from these stocks.","parameters":"","intuition":"","rawContent":"Cointegration Rank Determination is the process of identifying how many independent long-run equilibrium relationships exist among a set of non-stationary variables. The rank (r) tells us how many cointegrating vectors exist, which is crucial for proper VECM specification and understanding the structure of equilibrium relationships in a multi-asset system.\n\nMathematical framework:\nIn VECM: ΔY_t = Π*Y_{t-1} + Γ*ΔY_{t-1} + ε_t\nwhere Π = α*β' (r × k cointegration space)\n\nPossible ranks for k variables:\n- r = 0: No cointegration (standard VAR in differences)\n- r = 1: One equilibrium relationship\n- r = 2, ..., k-1: Multiple equilibria\n- r = k: All variables stationary (VAR in levels)\n\nTesting procedure (Johansen):\n\nSequential testing from r = 0 upward:\n1. H_0: r = 0 vs H_1: r > 0 (test for any cointegration)\n2. If rejected: H_0: r = 1 vs H_1: r > 1 (test for second relationship)\n3. Continue until fail to reject H_0\n4. Cointegration rank = highest r that was rejected\n\nTest statistics:\nTrace test: λ_trace(r) = -T*Σ ln(1-λ_i) for i = r+1 to k\nMax eigenvalue: λ_max(r) = -T*ln(1-λ_{r+1})\n\nDecision rule:\n- Test statistic > critical value → reject H_0 → higher rank\n- Test statistic < critical value → accept H_0 → stop\n\nInterpretation by rank:\n\nr = 1 (one cointegrating relationship):\n- Single equilibrium binding all variables\n- Simplest structure for trading\n- All variables tied to one common stochastic trend\n\nr = 2 (two relationships):\n- Two independent equilibria\n- More complex structure\n- Variables may group into subsets\n- Multiple trading strategies possible\n\nr = k-1 (full rank minus one):\n- Maximum cointegration\n- All variables tied together by k-1 relationships\n- System is \"tightly bound\"\n- Very constrained dynamics\n\nTrading implications:\n\nLow rank (r = 1 or 2):\n- Clear equilibrium relationships\n- Straightforward trading strategies\n- Each relationship = one pairs/basket trade\n\nHigh rank (r > k/2):\n- Complex interdependencies\n- Difficult to isolate tradeable relationships\n- May require dimensionality reduction\n- Consider subset analysis\n\nRank stability:\n- Test rank on rolling windows\n- Rank changes suggest structural breaks\n- Trading strategies need re-specification if rank changes\n\nCointegration Rank is the number of independent \"rubber bands\" connecting your stocks. With 4 stocks, you might find rank = 2, meaning there are 2 different equilibrium relationships. Maybe stocks A-B move together (relationship 1) and stocks C-D move together (relationship 2). The rank tells you how many distinct mean-reverting portfolios you can create from these stocks.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Cointegration_Rank_Determination.txt","hasFullInfo":true},{"id":273,"title":"Common Trends Representation","filename":"Common_Trends_Representation.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Shared stochastic trends","overview":"Common Trends Representation is an alternative way to express cointegrated systems by decomposing variables into permanent (common trends) and transitory (mean-reverting) components. Instead of focusing on equilibrium relationships, it identifies the shared stochastic trends that drive the system, showing which random shocks have lasting effects versus temporary ones.","formula":"Mathematical representation:\nFor k variables with r cointegrating relationships:\nNumber of common trends = k - r\n\nDecomposition:\nY_t = τ_t + Z_t","parameters":"where:\n- τ_t = common trend component (permanent, I(1))\n- Z_t = transitory component (stationary, I(0))\n\nCommon trend structure:\nτ_t = τ_{t-1} + ξ_t\nwhere ξ_t are permanent innovations\n\nFull representation:\nY_t = C*Σ ξ_i + stationary component\nwhere C is the common trends matrix\n\nRelationship to cointegration:\nIf β is orthogonal to C (β'*C = 0), then:\n- β'*Y_t eliminates common trends\n- β'*Y_t is stationary (cointegrated)\n- Each cointegrating vector is orthogonal to all common trends\n\nExample with 3 variables, r = 1:\n\nTwo common trends (k - r = 3 - 1 = 2):\ny_1,t = a_11*τ_1,t + a_12*τ_2,t + z_1,t\ny_2,t = a_21*τ_1,t + a_22*τ_2,t + z_2,t\ny_3,t = a_31*τ_1,t + a_32*τ_2,t + z_3,t\n\nOne cointegrating relationship:\nβ_1*y_1 + β_2*y_2 + β_3*y_3 = stationary\n\nThis works because β is chosen such that trends cancel:\nβ_1*a_11 + β_2*a_21 + β_3*a_31 = 0\nβ_1*a_12 + β_2*a_22 + β_3*a_32 = 0","intuition":"Trading interpretation:\n\nCommon trends = non-diversifiable risks:\n- Trend 1 might be \"market factor\"\n- Trend 2 might be \"sector factor\"\n- Cannot eliminate through linear combinations\n- Represent systematic risk\n\nTransitory components = diversifiable:\n- Mean-reverting deviations\n- Can be traded (pairs/baskets)\n- Represent temporary mispricings\n\nStrategy construction:\n1. Identify common trends (VAR permanent component)\n2. Construct portfolios orthogonal to trends\n3. Trade deviations in these portfolios\n4. Hedge exposure to permanent shocks\n\nPractical estimation:\n- Extract trends using Beveridge-Nelson decomposition\n- Or use permanent-transitory decomposition\n- Or derive from VECM using Granger representation theorem\n\nCommon Trends Representation shows that stocks are pushed around by a few \"big forces\" that never go away, plus temporary jiggles that do disappear. With 3 stocks and rank = 1, there are 2 permanent forces (like \"the market\" and \"the sector\"). Your cointegration relationship is a portfolio that cancels out both permanent forces, leaving only the temporary wiggles that you can trade.","rawContent":"Common Trends Representation is an alternative way to express cointegrated systems by decomposing variables into permanent (common trends) and transitory (mean-reverting) components. Instead of focusing on equilibrium relationships, it identifies the shared stochastic trends that drive the system, showing which random shocks have lasting effects versus temporary ones.\n\nMathematical representation:\nFor k variables with r cointegrating relationships:\nNumber of common trends = k - r\n\nDecomposition:\nY_t = τ_t + Z_t\n\nwhere:\n- τ_t = common trend component (permanent, I(1))\n- Z_t = transitory component (stationary, I(0))\n\nCommon trend structure:\nτ_t = τ_{t-1} + ξ_t\nwhere ξ_t are permanent innovations\n\nFull representation:\nY_t = C*Σ ξ_i + stationary component\nwhere C is the common trends matrix\n\nRelationship to cointegration:\nIf β is orthogonal to C (β'*C = 0), then:\n- β'*Y_t eliminates common trends\n- β'*Y_t is stationary (cointegrated)\n- Each cointegrating vector is orthogonal to all common trends\n\nExample with 3 variables, r = 1:\n\nTwo common trends (k - r = 3 - 1 = 2):\ny_1,t = a_11*τ_1,t + a_12*τ_2,t + z_1,t\ny_2,t = a_21*τ_1,t + a_22*τ_2,t + z_2,t\ny_3,t = a_31*τ_1,t + a_32*τ_2,t + z_3,t\n\nOne cointegrating relationship:\nβ_1*y_1 + β_2*y_2 + β_3*y_3 = stationary\n\nThis works because β is chosen such that trends cancel:\nβ_1*a_11 + β_2*a_21 + β_3*a_31 = 0\nβ_1*a_12 + β_2*a_22 + β_3*a_32 = 0\n\nTrading interpretation:\n\nCommon trends = non-diversifiable risks:\n- Trend 1 might be \"market factor\"\n- Trend 2 might be \"sector factor\"\n- Cannot eliminate through linear combinations\n- Represent systematic risk\n\nTransitory components = diversifiable:\n- Mean-reverting deviations\n- Can be traded (pairs/baskets)\n- Represent temporary mispricings\n\nStrategy construction:\n1. Identify common trends (VAR permanent component)\n2. Construct portfolios orthogonal to trends\n3. Trade deviations in these portfolios\n4. Hedge exposure to permanent shocks\n\nPractical estimation:\n- Extract trends using Beveridge-Nelson decomposition\n- Or use permanent-transitory decomposition\n- Or derive from VECM using Granger representation theorem\n\nCommon Trends Representation shows that stocks are pushed around by a few \"big forces\" that never go away, plus temporary jiggles that do disappear. With 3 stocks and rank = 1, there are 2 permanent forces (like \"the market\" and \"the sector\"). Your cointegration relationship is a portfolio that cancels out both permanent forces, leaving only the temporary wiggles that you can trade.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Common_Trends_Representation.txt","hasFullInfo":true},{"id":274,"title":"Cycle Valley/Peak Visualization","filename":"Cycle_Valley_Peak_Visualization.txt","group":"group 14","groupNum":14,"categoryId":29,"categoryTitle":"29. SPECTRUM VISUALIZATION & ANALYSIS","subcategory":"General","summary":"Extrema identification","overview":"Cycle valley/peak visualization is a graphical method for displaying the local maxima (peaks) and minima (valleys) of detected market cycles, making it easy to identify cycle timing, amplitude, and regularity. This visualization overlays markers or lines on the price chart at identified turning points, helping traders anticipate the next cycle extreme.","formula":"Implementation approach:\n1. Isolate the cyclic component using bandpass filter or detrending\n2. Apply peak detection algorithm (local maximum where derivative changes from + to -)\n3. Apply valley detection algorithm (local minimum where derivative changes from - to +)\n4. Mark peaks with upward markers (▲) or dots\n5. Mark valleys with downward markers (▼) or dots\n6. Optionally connect peaks to peaks and valleys to valleys to show cycle envelope\n\nDetection criteria:\nPeak at bar t if: Cycle[t-1] < Cycle[t] > Cycle[t+1] AND Cycle[t] > threshold\nValley at bar t if: Cycle[t-1] > Cycle[t] < Cycle[t+1] AND Cycle[t] < -threshold\n\nEnhanced features:\n- Color-code by amplitude (strong vs weak extremes)\n- Project forward based on average cycle period\n- Calculate average peak-to-peak and valley-to-valley distances\n- Display cycle \"regularity score\" based on consistency","parameters":"","intuition":"Cycle valley/peak visualization is like marking the crests and troughs of ocean waves on a beach. By seeing where past waves topped out and bottomed out, you can estimate when and where the next wave will peak. If the waves are regular (consistent spacing), your predictions are more reliable. If they're chaotic, you know the \"cycle\" isn't trustworthy.","rawContent":"Cycle valley/peak visualization is a graphical method for displaying the local maxima (peaks) and minima (valleys) of detected market cycles, making it easy to identify cycle timing, amplitude, and regularity. This visualization overlays markers or lines on the price chart at identified turning points, helping traders anticipate the next cycle extreme.\n\nImplementation approach:\n1. Isolate the cyclic component using bandpass filter or detrending\n2. Apply peak detection algorithm (local maximum where derivative changes from + to -)\n3. Apply valley detection algorithm (local minimum where derivative changes from - to +)\n4. Mark peaks with upward markers (▲) or dots\n5. Mark valleys with downward markers (▼) or dots\n6. Optionally connect peaks to peaks and valleys to valleys to show cycle envelope\n\nDetection criteria:\nPeak at bar t if: Cycle[t-1] < Cycle[t] > Cycle[t+1] AND Cycle[t] > threshold\nValley at bar t if: Cycle[t-1] > Cycle[t] < Cycle[t+1] AND Cycle[t] < -threshold\n\nEnhanced features:\n- Color-code by amplitude (strong vs weak extremes)\n- Project forward based on average cycle period\n- Calculate average peak-to-peak and valley-to-valley distances\n- Display cycle \"regularity score\" based on consistency\n\nCycle valley/peak visualization is like marking the crests and troughs of ocean waves on a beach. By seeing where past waves topped out and bottomed out, you can estimate when and where the next wave will peak. If the waves are regular (consistent spacing), your predictions are more reliable. If they're chaotic, you know the \"cycle\" isn't trustworthy.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 14/Cycle_Valley_Peak_Visualization.txt","hasFullInfo":true},{"id":275,"title":"Engle-Granger 2-Step Cointegration","filename":"Engle_Granger_Cointegration.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Two-stage estimation","overview":"The Engle-Granger 2-Step method is a procedure for testing and estimating cointegration between two or more non-stationary time series. It determines whether variables that individually have unit roots (are non-stationary) share a long-run equilibrium relationship. This is fundamental for pairs trading and statistical arbitrage strategies.","formula":"Step 1: Estimate the cointegrating relationship\nRun OLS regression of y on x:\ny_t = α + β*x_t + u_t\n\nSave the residuals (equilibrium errors):\nû_t = y_t - (α̂ + β̂*x_t)\n\nStep 2: Test residuals for stationarity\nApply Augmented Dickey-Fuller (ADF) test to û_t:\nΔû_t = ρ*û_{t-1} + Σ(γ_i*Δû_{t-i}) + ε_t\n\nHypotheses:\n- H_0: ρ = 0 (residuals have unit root → NO cointegration)\n- H_1: ρ < 0 (residuals are stationary → COINTEGRATION exists)\n\nCritical values:\n- More negative than Engle-Granger critical values → reject H_0 → cointegrated\n- Use special critical values (not standard ADF), as distribution differs","parameters":"","intuition":"Trading interpretation:\n- β̂ = hedge ratio (how many units of x per unit of y)\n- û_t = spread or mispricing\n- If cointegrated: spread is mean-reverting (tradeable)\n- If not cointegrated: spread is random walk (not tradeable)\n\nLimitations:\n- Only detects one cointegrating relationship\n- Asymmetric (result depends on which variable is on left side)\n- Less powerful than Johansen test for multiple variables\n- Assumes single equation (no simultaneity)\n\nEngle-Granger is a two-step test to see if two stocks move together in the long run. First, you find the best-fit relationship between them (like \"Stock A = 2.3 × Stock B\"). Then you check if the errors from this relationship (the spread) bounce around a constant average or wander off forever. If they bounce around, the stocks are \"bound together\" and profitable pairs trading is possible.","rawContent":"The Engle-Granger 2-Step method is a procedure for testing and estimating cointegration between two or more non-stationary time series. It determines whether variables that individually have unit roots (are non-stationary) share a long-run equilibrium relationship. This is fundamental for pairs trading and statistical arbitrage strategies.\n\nStep 1: Estimate the cointegrating relationship\nRun OLS regression of y on x:\ny_t = α + β*x_t + u_t\n\nSave the residuals (equilibrium errors):\nû_t = y_t - (α̂ + β̂*x_t)\n\nStep 2: Test residuals for stationarity\nApply Augmented Dickey-Fuller (ADF) test to û_t:\nΔû_t = ρ*û_{t-1} + Σ(γ_i*Δû_{t-i}) + ε_t\n\nHypotheses:\n- H_0: ρ = 0 (residuals have unit root → NO cointegration)\n- H_1: ρ < 0 (residuals are stationary → COINTEGRATION exists)\n\nCritical values:\n- More negative than Engle-Granger critical values → reject H_0 → cointegrated\n- Use special critical values (not standard ADF), as distribution differs\n\nTrading interpretation:\n- β̂ = hedge ratio (how many units of x per unit of y)\n- û_t = spread or mispricing\n- If cointegrated: spread is mean-reverting (tradeable)\n- If not cointegrated: spread is random walk (not tradeable)\n\nLimitations:\n- Only detects one cointegrating relationship\n- Asymmetric (result depends on which variable is on left side)\n- Less powerful than Johansen test for multiple variables\n- Assumes single equation (no simultaneity)\n\nEngle-Granger is a two-step test to see if two stocks move together in the long run. First, you find the best-fit relationship between them (like \"Stock A = 2.3 × Stock B\"). Then you check if the errors from this relationship (the spread) bounce around a constant average or wander off forever. If they bounce around, the stocks are \"bound together\" and profitable pairs trading is possible.","tags":["Volatility","Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Engle_Granger_Cointegration.txt","hasFullInfo":true},{"id":276,"title":"Error Correction Term (ECT)","filename":"Error_Correction_Term.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Equilibrium deviation","overview":"The Error Correction Term (ECT) is the deviation from long-run equilibrium in a cointegrated system. It measures how far the current values of variables are from their equilibrium relationship, and it appears in VECM models to drive mean reversion. In trading, the ECT is the signal that indicates when to enter and exit positions.","formula":"Mathematical definition:\nFor cointegrating relationship β'*Y_t = 0 at equilibrium,\nECT_t = β'*Y_t = deviation from equilibrium\n\nFor two-variable case (y and x cointegrated):\nECT_t = y_t - β*x_t - α\nwhere β is the cointegrating coefficient (hedge ratio)\n\nIn VECM equation:\nΔy_t = γ*ECT_{t-1} + [short-run terms] + ε_t","parameters":"where:\n- γ < 0 for mean reversion (negative ECT causes positive change)\n- |γ| = speed of adjustment (how fast returns to equilibrium)\n- Half-life = ln(0.5)/ln(1+γ)\n\nTrading signals using ECT:\n\nEntry signals:\n- ECT > +threshold: y is overvalued relative to x\n  → Sell y, Buy x\n- ECT < -threshold: y is undervalued relative to x\n  → Buy y, Sell x\n\nExit signals:\n- ECT crosses zero (equilibrium restored)\n- ECT reaches opposite threshold (reversal)\n- Time-based stop (maximum holding period)\n\nThreshold selection:\n- Statistical: ±1, ±2 standard deviations of historical ECT\n- Percentile-based: ±90th percentile\n- Adaptive: Based on recent ECT volatility\n- Z-score: (ECT - μ)/σ with threshold at ±2 or ±2.5\n\nProperties for trading:\n- Larger |ECT| = stronger signal but potentially slower reversion\n- Volatile ECT = less reliable mean reversion\n- Persistent ECT (slow decay) = weak cointegration\n- Normal ECT distribution = better-behaved pairs\n\nError Correction Term is the \"distance from normal\" for a pair of stocks. If Stock A and Stock B usually trade at a 2:1 ratio, and today they're at 2.5:1, the ECT captures that 0.5 deviation. It's your trading signal: big positive ECT means the pair is stretched in one direction, negative means stretched the other way. You trade expecting it to snap back to zero.","intuition":"","rawContent":"The Error Correction Term (ECT) is the deviation from long-run equilibrium in a cointegrated system. It measures how far the current values of variables are from their equilibrium relationship, and it appears in VECM models to drive mean reversion. In trading, the ECT is the signal that indicates when to enter and exit positions.\n\nMathematical definition:\nFor cointegrating relationship β'*Y_t = 0 at equilibrium,\nECT_t = β'*Y_t = deviation from equilibrium\n\nFor two-variable case (y and x cointegrated):\nECT_t = y_t - β*x_t - α\nwhere β is the cointegrating coefficient (hedge ratio)\n\nIn VECM equation:\nΔy_t = γ*ECT_{t-1} + [short-run terms] + ε_t\n\nwhere:\n- γ < 0 for mean reversion (negative ECT causes positive change)\n- |γ| = speed of adjustment (how fast returns to equilibrium)\n- Half-life = ln(0.5)/ln(1+γ)\n\nTrading signals using ECT:\n\nEntry signals:\n- ECT > +threshold: y is overvalued relative to x\n  → Sell y, Buy x\n- ECT < -threshold: y is undervalued relative to x\n  → Buy y, Sell x\n\nExit signals:\n- ECT crosses zero (equilibrium restored)\n- ECT reaches opposite threshold (reversal)\n- Time-based stop (maximum holding period)\n\nThreshold selection:\n- Statistical: ±1, ±2 standard deviations of historical ECT\n- Percentile-based: ±90th percentile\n- Adaptive: Based on recent ECT volatility\n- Z-score: (ECT - μ)/σ with threshold at ±2 or ±2.5\n\nProperties for trading:\n- Larger |ECT| = stronger signal but potentially slower reversion\n- Volatile ECT = less reliable mean reversion\n- Persistent ECT (slow decay) = weak cointegration\n- Normal ECT distribution = better-behaved pairs\n\nError Correction Term is the \"distance from normal\" for a pair of stocks. If Stock A and Stock B usually trade at a 2:1 ratio, and today they're at 2.5:1, the ECT captures that 0.5 deviation. It's your trading signal: big positive ECT means the pair is stretched in one direction, negative means stretched the other way. You trade expecting it to snap back to zero.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Error_Correction_Term.txt","hasFullInfo":true},{"id":277,"title":"Forecast Error Variance Decomposition (FEVD)","filename":"Forecast_Error_Variance_Decomposition.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Contribution analysis","overview":"Forecast Error Variance Decomposition (FEVD) decomposes the forecast error variance of each variable into proportions attributable to shocks from each variable in the system. It answers \"what percentage of the unpredictability in Stock A is due to surprises in Stock A itself versus surprises in Stock B?\" This reveals the relative importance of different shock sources.","formula":"Definition:\nFor h-step ahead forecast error:\ne_{t+h|t} = Y_{t+h} - E[Y_{t+h}|I_t]\n\nVariance decomposition:\nMSE(h) = E[e_{t+h|t}*e_{t+h|t}']\n       = Σ Ψ_i*Σ_ε*Ψ_i' for i = 0 to h-1\n\nFor orthogonalized shocks:\nContribution of shock j to variable i's h-step forecast variance:\nθ_{ij}(h) = Σ(Ψ_k*P*e_j)_i^2 / MSE_ii(h)","parameters":"where:\n- Ψ_k = impulse response at lag k\n- P = Cholesky factor (orthogonalization)\n- e_j = j-th unit vector\n- Σ θ_{ij}(h) = 1 (all contributions sum to 100%)\n\nInterpretation:\n\nOwn-shock dominance:\nIf θ_{11}(h) = 90% → Variable 1's forecast error is 90% due to its own shocks\n→ Variable 1 is relatively autonomous/exogenous\n\nCross-shock dominance:\nIf θ_{12}(h) = 70% → Variable 1's forecast error is 70% due to Variable 2's shocks\n→ Variable 2 drives Variable 1 (Variable 1 is endogenous)\n\nTime evolution:\n- Short horizon (h=1): Often own-shock dominated\n- Medium horizon (h=5-10): Cross-effects emerge\n- Long horizon (h=20+): Converges to steady state","intuition":"Trading applications:\n\nPrice discovery:\nHigh θ_{ji} (shock j explains variance of i) → j discovers price, i follows\nExample: θ_{futures,stock}(h) = 60%\n→ Futures lead stock, futures market has price discovery\n\nPortfolio construction:\n- Group stocks with similar FEVD patterns (common shock drivers)\n- Diversify across different dominant shock sources\n- Hedging: Use variable with low own-shock (high cross-shock from hedging instrument)\n\nRisk attribution:\nFor portfolio P = w'*Y:\nVar(P_{t+h}|I_t) = w'*MSE(h)*w\nDecompose into contributions from each underlying shock\n\nCausality:\nIf θ_{ij}(h) ≈ 0 for all h → Variable j doesn't \"cause\" variable i\nIf θ_{ij}(h) increases with h → Growing influence over time\n\nPairs trading:\n- Good pairs: high mutual FEVD (shocks explain each other)\n- Poor pairs: low cross-FEVD (independent shock sources)\n- Optimal hedge ratio relates to FEVD structure\n\nExample interpretation:\n\nStock A FEVD at h=10:\n- Own shocks: 30%\n- Stock B shocks: 50%\n- Market shocks: 20%\n\n→ Stock A mostly reacts to Stock B (pairs trading candidate)\n→ Less idiosyncratic risk (30% own)\n→ Some market beta (20%)\n\nStock B FEVD at h=10:\n- Own shocks: 80%\n- Stock A shocks: 5%\n- Market shocks: 15%\n\n→ Stock B is more autonomous (leads the pair)\n→ Trade Stock A, hedge with Stock B\n\nForecast Error Variance Decomposition answers: \"When I'm wrong about tomorrow's price, whose fault is it?\" If 70% of your errors forecasting Stock A come from surprises in Stock B, then Stock B is really running the show. For trading pairs, you want stocks where each one's forecast errors are largely explained by surprises in the other - that's a tight relationship.","rawContent":"Forecast Error Variance Decomposition (FEVD) decomposes the forecast error variance of each variable into proportions attributable to shocks from each variable in the system. It answers \"what percentage of the unpredictability in Stock A is due to surprises in Stock A itself versus surprises in Stock B?\" This reveals the relative importance of different shock sources.\n\nDefinition:\nFor h-step ahead forecast error:\ne_{t+h|t} = Y_{t+h} - E[Y_{t+h}|I_t]\n\nVariance decomposition:\nMSE(h) = E[e_{t+h|t}*e_{t+h|t}']\n       = Σ Ψ_i*Σ_ε*Ψ_i' for i = 0 to h-1\n\nFor orthogonalized shocks:\nContribution of shock j to variable i's h-step forecast variance:\nθ_{ij}(h) = Σ(Ψ_k*P*e_j)_i^2 / MSE_ii(h)\n\nwhere:\n- Ψ_k = impulse response at lag k\n- P = Cholesky factor (orthogonalization)\n- e_j = j-th unit vector\n- Σ θ_{ij}(h) = 1 (all contributions sum to 100%)\n\nInterpretation:\n\nOwn-shock dominance:\nIf θ_{11}(h) = 90% → Variable 1's forecast error is 90% due to its own shocks\n→ Variable 1 is relatively autonomous/exogenous\n\nCross-shock dominance:\nIf θ_{12}(h) = 70% → Variable 1's forecast error is 70% due to Variable 2's shocks\n→ Variable 2 drives Variable 1 (Variable 1 is endogenous)\n\nTime evolution:\n- Short horizon (h=1): Often own-shock dominated\n- Medium horizon (h=5-10): Cross-effects emerge\n- Long horizon (h=20+): Converges to steady state\n\nTrading applications:\n\nPrice discovery:\nHigh θ_{ji} (shock j explains variance of i) → j discovers price, i follows\nExample: θ_{futures,stock}(h) = 60%\n→ Futures lead stock, futures market has price discovery\n\nPortfolio construction:\n- Group stocks with similar FEVD patterns (common shock drivers)\n- Diversify across different dominant shock sources\n- Hedging: Use variable with low own-shock (high cross-shock from hedging instrument)\n\nRisk attribution:\nFor portfolio P = w'*Y:\nVar(P_{t+h}|I_t) = w'*MSE(h)*w\nDecompose into contributions from each underlying shock\n\nCausality:\nIf θ_{ij}(h) ≈ 0 for all h → Variable j doesn't \"cause\" variable i\nIf θ_{ij}(h) increases with h → Growing influence over time\n\nPairs trading:\n- Good pairs: high mutual FEVD (shocks explain each other)\n- Poor pairs: low cross-FEVD (independent shock sources)\n- Optimal hedge ratio relates to FEVD structure\n\nExample interpretation:\n\nStock A FEVD at h=10:\n- Own shocks: 30%\n- Stock B shocks: 50%\n- Market shocks: 20%\n\n→ Stock A mostly reacts to Stock B (pairs trading candidate)\n→ Less idiosyncratic risk (30% own)\n→ Some market beta (20%)\n\nStock B FEVD at h=10:\n- Own shocks: 80%\n- Stock A shocks: 5%\n- Market shocks: 15%\n\n→ Stock B is more autonomous (leads the pair)\n→ Trade Stock A, hedge with Stock B\n\nForecast Error Variance Decomposition answers: \"When I'm wrong about tomorrow's price, whose fault is it?\" If 70% of your errors forecasting Stock A come from surprises in Stock B, then Stock B is really running the show. For trading pairs, you want stocks where each one's forecast errors are largely explained by surprises in the other - that's a tight relationship.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Forecast_Error_Variance_Decomposition.txt","hasFullInfo":true},{"id":278,"title":"Granger Causality Testing","filename":"Granger_Causality_Testing.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Predictive causality","overview":"Granger Causality Testing determines whether one time series helps forecast another. \"X Granger-causes Y\" means past values of X provide statistically significant information about future values of Y beyond what's provided by past values of Y alone. This is \"predictive causality\" - not true causation, but useful for identifying lead-lag relationships in trading.","formula":"Basic framework:\nTest if X Granger-causes Y by comparing:\n\nRestricted model (Y only):\nY_t = α_0 + Σ α_i*Y_{t-i} + ε_t for i=1 to p\n\nUnrestricted model (Y and X):\nY_t = α_0 + Σ α_i*Y_{t-i} + Σ β_j*X_{t-j} + u_t for i,j=1 to p\n\nHypotheses:\nH_0: β_1 = β_2 = ... = β_p = 0 (X does NOT Granger-cause Y)\nH_1: At least one β_j ≠ 0 (X DOES Granger-cause Y)\n\nF-test statistic:\nF = [(RSS_restricted - RSS_unrestricted)/p] / [RSS_unrestricted/(T-2p-1)]\n\nwhere RSS = residual sum of squares, T = sample size\n\nDecision:\n- F > F_critical → Reject H_0 → X Granger-causes Y\n- F < F_critical → Cannot reject H_0 → No Granger causality\n\nFour possible outcomes:\n\n1. X → Y (unidirectional):\n   X Granger-causes Y, but Y does not Granger-cause X\n   → X leads, Y follows\n\n2. Y → X (unidirectional):\n   Y Granger-causes X, but X does not Granger-cause Y\n   → Y leads, X follows\n\n3. X ↔ Y (bidirectional/feedback):\n   Both X Granger-causes Y AND Y Granger-causes X\n   → Mutual feedback, simultaneous relationship\n\n4. X ⊥ Y (independence):\n   Neither Granger-causes the other\n   → Independent processes\n\nExtensions:\n\nMultivariate Granger causality:\nTest if {X_1, X_2} jointly Granger-cause Y\n→ Identifies sets of leading indicators\n\nConditional Granger causality:\nTest if X Granger-causes Y controlling for Z\n→ Removes confounding effects\n\nInstantaneous Granger causality:\nTest contemporaneous correlation after removing lagged effects\n→ Same-period relationships","parameters":"","intuition":"Trading applications:\n\nLead-lag identification:\n- Futures Granger-cause spot → use futures for timing\n- Large caps Granger-cause small caps → trade small caps using large caps as signal\n- VIX Granger-causes SPX → VIX is leading indicator\n\nPairs trading:\nTest both directions for cointegrated pairs:\n- If Stock A → Stock B (but not B → A) → trade B using A as signal\n- If bidirectional → feedback system, more complex\n- If neither → weak relationship despite cointegration\n\nStrategy construction:\n1. Find instruments that Granger-cause target security\n2. Use leading instruments in prediction model\n3. Generate signals from leaders, execute in followers\n\nInformation flow:\n- Direction of Granger causality = direction of information flow\n- Multiple causality chains reveal market microstructure\n- Identify price discovery venues\n\nLimitations:\n\nNot true causation:\n- Third variable Z could cause both X and Y\n- Correlation ≠ causation (Granger or otherwise)\n- Economic interpretation requires theory\n\nStationarity required:\n- Both series must be stationary or cointegrated\n- Non-stationary series can show spurious causality\n- Difference or use VECM if non-stationary\n\nSample size:\n- Requires sufficient data (rule of thumb: T > 30p)\n- Small samples reduce power\n- Use appropriate lag length (AIC/BIC)\n\nGranger Causality Testing tells you whether knowing yesterday's value of X helps predict today's value of Y. If yes, X \"Granger-causes\" Y, meaning X is a useful leading indicator. For trading, this identifies which security to watch (the leader) and which to trade (the follower). It's not \"real\" causation - just predictive value.","rawContent":"Granger Causality Testing determines whether one time series helps forecast another. \"X Granger-causes Y\" means past values of X provide statistically significant information about future values of Y beyond what's provided by past values of Y alone. This is \"predictive causality\" - not true causation, but useful for identifying lead-lag relationships in trading.\n\nBasic framework:\nTest if X Granger-causes Y by comparing:\n\nRestricted model (Y only):\nY_t = α_0 + Σ α_i*Y_{t-i} + ε_t for i=1 to p\n\nUnrestricted model (Y and X):\nY_t = α_0 + Σ α_i*Y_{t-i} + Σ β_j*X_{t-j} + u_t for i,j=1 to p\n\nHypotheses:\nH_0: β_1 = β_2 = ... = β_p = 0 (X does NOT Granger-cause Y)\nH_1: At least one β_j ≠ 0 (X DOES Granger-cause Y)\n\nF-test statistic:\nF = [(RSS_restricted - RSS_unrestricted)/p] / [RSS_unrestricted/(T-2p-1)]\n\nwhere RSS = residual sum of squares, T = sample size\n\nDecision:\n- F > F_critical → Reject H_0 → X Granger-causes Y\n- F < F_critical → Cannot reject H_0 → No Granger causality\n\nFour possible outcomes:\n\n1. X → Y (unidirectional):\n   X Granger-causes Y, but Y does not Granger-cause X\n   → X leads, Y follows\n\n2. Y → X (unidirectional):\n   Y Granger-causes X, but X does not Granger-cause Y\n   → Y leads, X follows\n\n3. X ↔ Y (bidirectional/feedback):\n   Both X Granger-causes Y AND Y Granger-causes X\n   → Mutual feedback, simultaneous relationship\n\n4. X ⊥ Y (independence):\n   Neither Granger-causes the other\n   → Independent processes\n\nExtensions:\n\nMultivariate Granger causality:\nTest if {X_1, X_2} jointly Granger-cause Y\n→ Identifies sets of leading indicators\n\nConditional Granger causality:\nTest if X Granger-causes Y controlling for Z\n→ Removes confounding effects\n\nInstantaneous Granger causality:\nTest contemporaneous correlation after removing lagged effects\n→ Same-period relationships\n\nTrading applications:\n\nLead-lag identification:\n- Futures Granger-cause spot → use futures for timing\n- Large caps Granger-cause small caps → trade small caps using large caps as signal\n- VIX Granger-causes SPX → VIX is leading indicator\n\nPairs trading:\nTest both directions for cointegrated pairs:\n- If Stock A → Stock B (but not B → A) → trade B using A as signal\n- If bidirectional → feedback system, more complex\n- If neither → weak relationship despite cointegration\n\nStrategy construction:\n1. Find instruments that Granger-cause target security\n2. Use leading instruments in prediction model\n3. Generate signals from leaders, execute in followers\n\nInformation flow:\n- Direction of Granger causality = direction of information flow\n- Multiple causality chains reveal market microstructure\n- Identify price discovery venues\n\nLimitations:\n\nNot true causation:\n- Third variable Z could cause both X and Y\n- Correlation ≠ causation (Granger or otherwise)\n- Economic interpretation requires theory\n\nStationarity required:\n- Both series must be stationary or cointegrated\n- Non-stationary series can show spurious causality\n- Difference or use VECM if non-stationary\n\nSample size:\n- Requires sufficient data (rule of thumb: T > 30p)\n- Small samples reduce power\n- Use appropriate lag length (AIC/BIC)\n\nGranger Causality Testing tells you whether knowing yesterday's value of X helps predict today's value of Y. If yes, X \"Granger-causes\" Y, meaning X is a useful leading indicator. For trading, this identifies which security to watch (the leader) and which to trade (the follower). It's not \"real\" causation - just predictive value.","tags":["Volatility","Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Granger_Causality_Testing.txt","hasFullInfo":true},{"id":279,"title":"Heat Map Spectrogram (Frequency Distribution)","filename":"Heat_Map_Spectrogram.txt","group":"group 14","groupNum":14,"categoryId":9,"categoryTitle":"9. CYCLE MEASUREMENT & SPECTRUM ANALYSIS","subcategory":"General","summary":"Visual frequency representation","overview":"A heat map spectrogram is a 2D visual representation that displays how the frequency content of a time series changes over time. It maps frequency on one axis, time on the other axis, and uses color intensity to represent the power or amplitude at each frequency-time point. This creates a \"thermal image\" of market cycles, showing which periodicities are dominant at different times.","formula":"The spectrogram is calculated by:\n1. Divide the time series into overlapping windows\n2. Apply a window function (Hanning, Hamming, etc.) to each segment\n3. Compute FFT or DFT for each windowed segment\n4. Calculate power spectral density: PSD(f) = |FFT(x)|^2\n5. Map PSD values to color scale (blue=low, red=high)\n6. Stack results chronologically to form 2D display\n\nFor trading applications:\nSpectrogram[t,f] = |STFT(price, t, f)|^2\nwhere STFT is the Short-Time Fourier Transform","parameters":"","intuition":"A heat map spectrogram is like a weather radar for market cycles. Instead of showing where rain is falling, it shows which market rhythms (fast wiggles vs slow waves) are \"active\" at any given time. Hot colors mean that particular cycle is strong right now, cool colors mean it's weak or absent.","rawContent":"A heat map spectrogram is a 2D visual representation that displays how the frequency content of a time series changes over time. It maps frequency on one axis, time on the other axis, and uses color intensity to represent the power or amplitude at each frequency-time point. This creates a \"thermal image\" of market cycles, showing which periodicities are dominant at different times.\n\nThe spectrogram is calculated by:\n1. Divide the time series into overlapping windows\n2. Apply a window function (Hanning, Hamming, etc.) to each segment\n3. Compute FFT or DFT for each windowed segment\n4. Calculate power spectral density: PSD(f) = |FFT(x)|^2\n5. Map PSD values to color scale (blue=low, red=high)\n6. Stack results chronologically to form 2D display\n\nFor trading applications:\nSpectrogram[t,f] = |STFT(price, t, f)|^2\nwhere STFT is the Short-Time Fourier Transform\n\nA heat map spectrogram is like a weather radar for market cycles. Instead of showing where rain is falling, it shows which market rhythms (fast wiggles vs slow waves) are \"active\" at any given time. Hot colors mean that particular cycle is strong right now, cool colors mean it's weak or absent.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 14/Heat_Map_Spectrogram.txt","hasFullInfo":true},{"id":280,"title":"Implementation Shortfall Tracker","filename":"Implementation_Shortfall_Tracker.txt","group":"group 14","groupNum":14,"categoryId":30,"categoryTitle":"30. SPECIAL PURPOSE FILTERS","subcategory":"General","summary":"Execution cost analysis","overview":"Implementation Shortfall is a transaction cost analysis metric that measures the difference between the theoretical result of a trading decision (decision price) and the actual result after execution. It captures all costs including market impact, timing risk, and opportunity cost, providing a comprehensive measure of execution quality.","formula":"Components of Implementation Shortfall:\n1. Decision Price (P_decision): Price when decision to trade was made\n2. Actual Execution Price (P_execution): Average price achieved\n3. Target Quantity (Q_target): Intended shares to trade\n4. Executed Quantity (Q_executed): Actual shares filled\n\nTotal Implementation Shortfall = Realized Cost + Opportunity Cost\n\nFor a BUY order:\nRealized Cost = (P_execution - P_decision) * Q_executed\nOpportunity Cost = (P_current - P_decision) * (Q_target - Q_executed)\n\nFor a SELL order:\nRealized Cost = (P_decision - P_execution) * Q_executed  \nOpportunity Cost = (P_decision - P_current) * (Q_target - Q_executed)\n\nBreakdown into components:\n- Delay Cost: (P_order_placed - P_decision) * Q_target\n- Market Impact Cost: (P_execution - P_order_placed) * Q_executed\n- Timing Cost: Variation from ideal execution timing\n- Missed Trade Cost: (P_current - P_decision) * Q_unfilled\n\nBenchmark comparisons:\n- Arrival Price: Price when order entered system\n- Closing Price: End-of-day price\n- VWAP/TWAP: Volume or time-weighted average","parameters":"","intuition":"Implementation Shortfall is like measuring how much money you lost from the moment you decided \"I should buy this stock\" to when you actually finished buying it. If you decided at $100, but the price ran up while you were slowly buying, and you ended up averaging $102, your shortfall is $2 per share. It's the cost of being slow or having bad execution strategy.","rawContent":"Implementation Shortfall is a transaction cost analysis metric that measures the difference between the theoretical result of a trading decision (decision price) and the actual result after execution. It captures all costs including market impact, timing risk, and opportunity cost, providing a comprehensive measure of execution quality.\n\nComponents of Implementation Shortfall:\n1. Decision Price (P_decision): Price when decision to trade was made\n2. Actual Execution Price (P_execution): Average price achieved\n3. Target Quantity (Q_target): Intended shares to trade\n4. Executed Quantity (Q_executed): Actual shares filled\n\nTotal Implementation Shortfall = Realized Cost + Opportunity Cost\n\nFor a BUY order:\nRealized Cost = (P_execution - P_decision) * Q_executed\nOpportunity Cost = (P_current - P_decision) * (Q_target - Q_executed)\n\nFor a SELL order:\nRealized Cost = (P_decision - P_execution) * Q_executed  \nOpportunity Cost = (P_decision - P_current) * (Q_target - Q_executed)\n\nBreakdown into components:\n- Delay Cost: (P_order_placed - P_decision) * Q_target\n- Market Impact Cost: (P_execution - P_order_placed) * Q_executed\n- Timing Cost: Variation from ideal execution timing\n- Missed Trade Cost: (P_current - P_decision) * Q_unfilled\n\nBenchmark comparisons:\n- Arrival Price: Price when order entered system\n- Closing Price: End-of-day price\n- VWAP/TWAP: Volume or time-weighted average\n\nImplementation Shortfall is like measuring how much money you lost from the moment you decided \"I should buy this stock\" to when you actually finished buying it. If you decided at $100, but the price ran up while you were slowly buying, and you ended up averaging $102, your shortfall is $2 per share. It's the cost of being slow or having bad execution strategy.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 14/Implementation_Shortfall_Tracker.txt","hasFullInfo":true},{"id":281,"title":"Impulse Response Functions (IRF)","filename":"Impulse_Response_Functions.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Shock propagation","overview":"Impulse Response Functions (IRF) trace the dynamic effect of a one-time shock in one variable on all variables in the system over time. IRFs show how disturbances propagate through a multivariate system, revealing lead-lag relationships, shock persistence, and the speed of adjustment back to equilibrium. They are essential for understanding system dynamics in cointegrated models.","formula":"Definition:\nIRF(h) = ∂Y_{t+h}/∂ε_t\n\nThe response of Y at horizon h to a unit shock in ε at time t\n\nCalculation from VAR/VECM:\nFrom MA representation: Y_t = Σ Ψ_i*ε_{t-i}\nIRF at horizon h = Ψ_h matrix\n\nFor orthogonalized shocks (structural IRF):\nIRF_orthog(h) = Ψ_h*P\nwhere P is Cholesky decomposition of Σ_ε (shock covariance)\n\nTypes of IRF:\n\n1. Orthogonalized IRF (Cholesky):\n- Shocks made uncorrelated through Cholesky ordering\n- Result depends on variable ordering\n- Common in practice despite ordering dependence\n\n2. Generalized IRF (Pesaran-Shin):\n- Order-invariant\n- Allows correlated shocks\n- More robust to specification\n\n3. Structural IRF:\n- Based on economic theory\n- Identifies contemporaneous relationships\n- Requires additional restrictions\n\nProperties:\n\nTransitory vs Permanent:\n- Transitory: IRF → 0 as h → ∞\n- Permanent: IRF → constant ≠ 0 as h → ∞\n\nSpeed of adjustment:\n- Fast: IRF peaks early, decays quickly\n- Slow: IRF builds gradually, persists longer\n\nFor cointegrated systems:\n- Shocks to cointegrating relationships are transitory\n- IRF of β'*Y to any shock → 0 (mean reversion)\n- Shocks to common trends are permanent\n- IRF can show which variable adjusts faster","parameters":"","intuition":"Trading interpretation:\n\nShock persistence:\n- Long-lasting IRF (slow decay) → trend-following opportunity\n- Quick decay IRF → mean-reversion opportunity\n- Time to half-life indicates optimal holding period\n\nLead-lag relationships:\n- Variable A shock → immediate response in B = B follows A\n- Delayed peak in B's response = B lags A\n- Use leads for timing, lags for confirmation\n\nPairs trading:\n- Shock to Stock 1 → observe IRF of spread\n- Fast mean reversion (quick decay) → good pair\n- Slow or non-reverting → weak relationship\n\nCross-market effects:\n- VIX shock → IRF shows equity index response dynamics\n- Bond shock → IRF shows stock market spillover\n- Commodity shock → IRF shows sector rotation pattern\n\nConfidence intervals:\nBootstrap or analytical SE to assess significance:\n- 68% band: ± 1 SE\n- 95% band: ± 1.96 SE\n- IRF significantly different from zero if band excludes zero\n\nImpulse Response Functions are like dropping a pebble in a pond and watching the ripples. The IRF shows you: (1) How big is the splash in each variable? (2) How long until the ripples die out? (3) Which direction do ripples travel (does shock in Stock A move to Stock B, or reverse)? For trading, this tells you how long opportunities last and which stocks lead/lag.","rawContent":"Impulse Response Functions (IRF) trace the dynamic effect of a one-time shock in one variable on all variables in the system over time. IRFs show how disturbances propagate through a multivariate system, revealing lead-lag relationships, shock persistence, and the speed of adjustment back to equilibrium. They are essential for understanding system dynamics in cointegrated models.\n\nDefinition:\nIRF(h) = ∂Y_{t+h}/∂ε_t\n\nThe response of Y at horizon h to a unit shock in ε at time t\n\nCalculation from VAR/VECM:\nFrom MA representation: Y_t = Σ Ψ_i*ε_{t-i}\nIRF at horizon h = Ψ_h matrix\n\nFor orthogonalized shocks (structural IRF):\nIRF_orthog(h) = Ψ_h*P\nwhere P is Cholesky decomposition of Σ_ε (shock covariance)\n\nTypes of IRF:\n\n1. Orthogonalized IRF (Cholesky):\n- Shocks made uncorrelated through Cholesky ordering\n- Result depends on variable ordering\n- Common in practice despite ordering dependence\n\n2. Generalized IRF (Pesaran-Shin):\n- Order-invariant\n- Allows correlated shocks\n- More robust to specification\n\n3. Structural IRF:\n- Based on economic theory\n- Identifies contemporaneous relationships\n- Requires additional restrictions\n\nProperties:\n\nTransitory vs Permanent:\n- Transitory: IRF → 0 as h → ∞\n- Permanent: IRF → constant ≠ 0 as h → ∞\n\nSpeed of adjustment:\n- Fast: IRF peaks early, decays quickly\n- Slow: IRF builds gradually, persists longer\n\nFor cointegrated systems:\n- Shocks to cointegrating relationships are transitory\n- IRF of β'*Y to any shock → 0 (mean reversion)\n- Shocks to common trends are permanent\n- IRF can show which variable adjusts faster\n\nTrading interpretation:\n\nShock persistence:\n- Long-lasting IRF (slow decay) → trend-following opportunity\n- Quick decay IRF → mean-reversion opportunity\n- Time to half-life indicates optimal holding period\n\nLead-lag relationships:\n- Variable A shock → immediate response in B = B follows A\n- Delayed peak in B's response = B lags A\n- Use leads for timing, lags for confirmation\n\nPairs trading:\n- Shock to Stock 1 → observe IRF of spread\n- Fast mean reversion (quick decay) → good pair\n- Slow or non-reverting → weak relationship\n\nCross-market effects:\n- VIX shock → IRF shows equity index response dynamics\n- Bond shock → IRF shows stock market spillover\n- Commodity shock → IRF shows sector rotation pattern\n\nConfidence intervals:\nBootstrap or analytical SE to assess significance:\n- 68% band: ± 1 SE\n- 95% band: ± 1.96 SE\n- IRF significantly different from zero if band excludes zero\n\nImpulse Response Functions are like dropping a pebble in a pond and watching the ripples. The IRF shows you: (1) How big is the splash in each variable? (2) How long until the ripples die out? (3) Which direction do ripples travel (does shock in Stock A move to Stock B, or reverse)? For trading, this tells you how long opportunities last and which stocks lead/lag.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Impulse_Response_Functions.txt","hasFullInfo":true},{"id":282,"title":"Johansen Cointegration Test & Methodology","filename":"Johansen_Cointegration_Test.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Maximum likelihood test","overview":"The Johansen test is a multivariate maximum likelihood procedure for testing cointegration among multiple non-stationary time series. Unlike Engle-Granger, it can detect multiple cointegrating relationships and doesn't require choosing a dependent variable. It's the preferred method for finding equilibrium relationships in portfolios of multiple securities.","formula":"Methodology:\nStart with VAR(p) model:\nY_t = A_1*Y_{t-1} + ... + A_p*Y_{t-p} + ε_t\n\nRewrite in VECM form:\nΔY_t = Π*Y_{t-1} + Γ_1*ΔY_{t-1} + ... + Γ_{p-1}*ΔY_{t-p+1} + ε_t\n\nwhere Π = α*β' contains cointegration information\n\nRank of Π determines number of cointegrating relationships:\n- rank(Π) = 0: No cointegration (all variables I(1))\n- rank(Π) = r < k: r cointegrating relationships\n- rank(Π) = k: All variables I(0) (stationary)\n\nTwo test statistics:\n\nTrace Test:\nH_0: rank(Π) ≤ r vs H_1: rank(Π) > r\nλ_trace(r) = -T * Σ ln(1 - λ_i) for i = r+1 to k\nwhere λ_i are eigenvalues, T is sample size\n\nMaximum Eigenvalue Test:\nH_0: rank(Π) = r vs H_1: rank(Π) = r+1  \nλ_max(r) = -T * ln(1 - λ_{r+1})\n\nProcedure:\n1. Test rank = 0 (no cointegration)\n2. If rejected, test rank = 1\n3. Continue until cannot reject H_0\n4. Number of cointegrating vectors = r\n\nOutput:\n- β matrix: r cointegrating vectors (equilibrium relationships)\n- α matrix: adjustment speeds\n- Identification: normalize β to interpret relationships\n\nTrading application (3+ stocks):\n- Find multiple equilibrium relationships simultaneously\n- Construct optimal linear combinations for mean reversion\n- Portfolio weights derived from cointegrating vectors\n- More robust than pairwise Engle-Granger","parameters":"","intuition":"Johansen test is like finding all the invisible rubber bands connecting multiple stocks. With 5 stocks, there might be 2 different \"bundles\" that move together (2 cointegrating relationships). The test finds how many bundles exist and which stocks are in each bundle. This lets you trade baskets of stocks, not just pairs, based on their equilibrium relationships.","rawContent":"The Johansen test is a multivariate maximum likelihood procedure for testing cointegration among multiple non-stationary time series. Unlike Engle-Granger, it can detect multiple cointegrating relationships and doesn't require choosing a dependent variable. It's the preferred method for finding equilibrium relationships in portfolios of multiple securities.\n\nMethodology:\nStart with VAR(p) model:\nY_t = A_1*Y_{t-1} + ... + A_p*Y_{t-p} + ε_t\n\nRewrite in VECM form:\nΔY_t = Π*Y_{t-1} + Γ_1*ΔY_{t-1} + ... + Γ_{p-1}*ΔY_{t-p+1} + ε_t\n\nwhere Π = α*β' contains cointegration information\n\nRank of Π determines number of cointegrating relationships:\n- rank(Π) = 0: No cointegration (all variables I(1))\n- rank(Π) = r < k: r cointegrating relationships\n- rank(Π) = k: All variables I(0) (stationary)\n\nTwo test statistics:\n\nTrace Test:\nH_0: rank(Π) ≤ r vs H_1: rank(Π) > r\nλ_trace(r) = -T * Σ ln(1 - λ_i) for i = r+1 to k\nwhere λ_i are eigenvalues, T is sample size\n\nMaximum Eigenvalue Test:\nH_0: rank(Π) = r vs H_1: rank(Π) = r+1  \nλ_max(r) = -T * ln(1 - λ_{r+1})\n\nProcedure:\n1. Test rank = 0 (no cointegration)\n2. If rejected, test rank = 1\n3. Continue until cannot reject H_0\n4. Number of cointegrating vectors = r\n\nOutput:\n- β matrix: r cointegrating vectors (equilibrium relationships)\n- α matrix: adjustment speeds\n- Identification: normalize β to interpret relationships\n\nTrading application (3+ stocks):\n- Find multiple equilibrium relationships simultaneously\n- Construct optimal linear combinations for mean reversion\n- Portfolio weights derived from cointegrating vectors\n- More robust than pairwise Engle-Granger\n\nJohansen test is like finding all the invisible rubber bands connecting multiple stocks. With 5 stocks, there might be 2 different \"bundles\" that move together (2 cointegrating relationships). The test finds how many bundles exist and which stocks are in each bundle. This lets you trade baskets of stocks, not just pairs, based on their equilibrium relationships.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Johansen_Cointegration_Test.txt","hasFullInfo":true},{"id":283,"title":"Market Impact Estimator","filename":"Market_Impact_Estimator.txt","group":"group 14","groupNum":14,"categoryId":30,"categoryTitle":"30. SPECIAL PURPOSE FILTERS","subcategory":"General","summary":"Trade impact modeling","overview":"Market Impact Estimator quantifies how much a trade moves the market price against the trader. Large orders can push prices up (when buying) or down (when selling) during execution, creating a cost beyond the bid-ask spread. Impact models estimate this cost before trading to optimize execution strategy and estimate total transaction costs.","formula":"Square-Root Law (simplified model):\nMarket_Impact = σ * f(Q/V)","parameters":"where:\n- σ = volatility of the security\n- Q = order size (shares)\n- V = average daily volume\n- f() = impact function, typically f(x) = γ * sqrt(x)\n\nAlmgren-Chriss Model:\nTemporary Impact: η * (dQ/dt) * σ\nPermanent Impact: γ * Q * σ / V\n\nwhere:\n- η = temporary impact coefficient\n- γ = permanent impact coefficient  \n- dQ/dt = trading rate\n- σ = daily volatility\n- V = daily volume\n\nKyle's Lambda:\nPrice_Impact = λ * Q\nwhere λ = market depth parameter (estimated from order flow data)\n\nExtended models include:\n- Bid-ask spread component\n- Nonlinear impact (larger orders have disproportionate impact)\n- Intraday volume patterns (higher impact during low-volume periods)\n- Order book depth (resistance from limit orders)\n\nEstimation factors:\n- Order size relative to average volume (Q/ADV ratio)\n- Volatility (higher vol → higher impact)\n- Spread width (wider spread → higher impact)\n- Time horizon (faster execution → higher impact)","intuition":"Market Impact Estimator is like figuring out how much you'll move the price if you try to buy a large quantity of something. If you want to buy 100 apples at a farmers market with only 200 apples for sale, you'll probably drive up the price as you buy. The estimator calculates: \"If I try to buy X shares in Y minutes, the price will probably move against me by Z cents per share.\"","rawContent":"Market Impact Estimator quantifies how much a trade moves the market price against the trader. Large orders can push prices up (when buying) or down (when selling) during execution, creating a cost beyond the bid-ask spread. Impact models estimate this cost before trading to optimize execution strategy and estimate total transaction costs.\n\nSquare-Root Law (simplified model):\nMarket_Impact = σ * f(Q/V)\nwhere:\n- σ = volatility of the security\n- Q = order size (shares)\n- V = average daily volume\n- f() = impact function, typically f(x) = γ * sqrt(x)\n\nAlmgren-Chriss Model:\nTemporary Impact: η * (dQ/dt) * σ\nPermanent Impact: γ * Q * σ / V\n\nwhere:\n- η = temporary impact coefficient\n- γ = permanent impact coefficient  \n- dQ/dt = trading rate\n- σ = daily volatility\n- V = daily volume\n\nKyle's Lambda:\nPrice_Impact = λ * Q\nwhere λ = market depth parameter (estimated from order flow data)\n\nExtended models include:\n- Bid-ask spread component\n- Nonlinear impact (larger orders have disproportionate impact)\n- Intraday volume patterns (higher impact during low-volume periods)\n- Order book depth (resistance from limit orders)\n\nEstimation factors:\n- Order size relative to average volume (Q/ADV ratio)\n- Volatility (higher vol → higher impact)\n- Spread width (wider spread → higher impact)\n- Time horizon (faster execution → higher impact)\n\nMarket Impact Estimator is like figuring out how much you'll move the price if you try to buy a large quantity of something. If you want to buy 100 apples at a farmers market with only 200 apples for sale, you'll probably drive up the price as you buy. The estimator calculates: \"If I try to buy X shares in Y minutes, the price will probably move against me by Z cents per share.\"","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 14/Market_Impact_Estimator.txt","hasFullInfo":true},{"id":284,"title":"MIDAS (Market Interpretation/Data Analysis System)","filename":"MIDAS.txt","group":"group 14","groupNum":14,"categoryId":30,"categoryTitle":"30. SPECIAL PURPOSE FILTERS","subcategory":"General","summary":"Cumulative volume","overview":"MIDAS is a volume-weighted indicator system developed by Paul Levine that uses cumulative volume from a starting point to create dynamic support and resistance curves. Unlike traditional moving averages, MIDAS curves change their weighting based on the volume at each bar, making them highly responsive to institutional accumulation/distribution while remaining smooth during low-volume periods.","formula":"Core MIDAS calculation from anchor point A:\nFor each bar t ≥ A:\nMIDAS[t] = (Σ(Price[i] * Volume[i])) / (Σ Volume[i]) for i = A to t","parameters":"Where:\n- Price[i] can be High, Low, Close, or (H+L)/2\n- Anchor point A is chosen at significant high/low or algorithmic trigger\n- Calculation creates hyperbolic curve shape\n\nVariants:\n1. MIDAS Support (anchored at high, uses lows)\n2. MIDAS Resistance (anchored at low, uses highs)\n3. Displaced MIDAS (offset by fixed number of bars)\n4. Standard Deviation MIDAS (adds volatility bands)\n\nKey properties:\n- Curve flattens as cumulative volume increases\n- Heavy volume bars have more influence\n- Creates natural support/resistance that \"bends\" with volume\n- No lookback period - uses all data from anchor\n- Self-adjusting - doesn't require parameter optimization","intuition":"MIDAS is like a weighted average price, but instead of giving equal weight to each day, it weights by trading volume. On days when lots of shares trade, that price \"counts more\" in the average. This creates a curve that shows where the \"real money\" entered or exited, making it a better support/resistance line than simple trendlines.","rawContent":"MIDAS is a volume-weighted indicator system developed by Paul Levine that uses cumulative volume from a starting point to create dynamic support and resistance curves. Unlike traditional moving averages, MIDAS curves change their weighting based on the volume at each bar, making them highly responsive to institutional accumulation/distribution while remaining smooth during low-volume periods.\n\nCore MIDAS calculation from anchor point A:\nFor each bar t ≥ A:\nMIDAS[t] = (Σ(Price[i] * Volume[i])) / (Σ Volume[i]) for i = A to t\n\nWhere:\n- Price[i] can be High, Low, Close, or (H+L)/2\n- Anchor point A is chosen at significant high/low or algorithmic trigger\n- Calculation creates hyperbolic curve shape\n\nVariants:\n1. MIDAS Support (anchored at high, uses lows)\n2. MIDAS Resistance (anchored at low, uses highs)\n3. Displaced MIDAS (offset by fixed number of bars)\n4. Standard Deviation MIDAS (adds volatility bands)\n\nKey properties:\n- Curve flattens as cumulative volume increases\n- Heavy volume bars have more influence\n- Creates natural support/resistance that \"bends\" with volume\n- No lookback period - uses all data from anchor\n- Self-adjusting - doesn't require parameter optimization\n\nMIDAS is like a weighted average price, but instead of giving equal weight to each day, it weights by trading volume. On days when lots of shares trade, that price \"counts more\" in the average. This creates a curve that shows where the \"real money\" entered or exited, making it a better support/resistance line than simple trendlines.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 14/MIDAS.txt","hasFullInfo":true},{"id":285,"title":"Moving Average Representation (VECM)","filename":"Moving_Average_Representation_VECM.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"MA form of VECM","overview":"The Moving Average (MA) Representation of a VECM expresses current values as a weighted sum of current and past innovations (shocks), rather than as a function of past values. This representation shows how shocks propagate through the system and reveals the dynamic response structure, which is crucial for understanding impulse responses and shock persistence.","formula":"Granger Representation Theorem:\nA cointegrated VAR can be written as:\nY_t = Ψ(L)*ε_t = Σ Ψ_i*ε_{t-i}","parameters":"where:\n- Ψ(L) = moving average polynomial lag operator\n- ε_t = vector of innovations (shocks)\n- Ψ_i = impulse response matrices at lag i\n\nFull MA representation from VECM:\nΔY_t = α*β'*Y_{t-1} + Γ_1*ΔY_{t-1} + ... + ε_t\n\nBecomes:\nY_t = Ψ(1)*Σε_i + Ψ*(L)*ε_t + Y_0\n\nwhere:\n- Ψ(1) = long-run multiplier matrix (permanent effects)\n- Ψ*(L) = transitory effects polynomial\n- Σε_i = cumulative permanent shocks\n\nDecomposition:\nΨ(L) = Ψ(1) + (1-L)*Ψ*(L)\n\nPermanent component: Ψ(1)*Σε_i\nTransitory component: Ψ*(L)*ε_t\n\nFor cointegrated system:\n- β'*Ψ(1) = 0 (cointegrating vectors eliminate permanent effects)\n- Rank(Ψ(1)) = k - r (number of common trends)\n- α_⊥*Ψ(1) spans permanent direction (common trends)\n\nImpulse Response Functions (IRF):\nIRF at horizon h: ∂Y_{t+h}/∂ε_t = Ψ_h\n\nProperties:\n- Permanent shocks: Σ Ψ_i ≠ 0 as i → ∞\n- Transitory shocks: Σ Ψ_i → 0 as i → ∞\n- Cointegration constraint: β'*Ψ_∞ = 0\n\nTrading application:\n\nShock persistence:\n- Identify which shocks have permanent vs temporary effects\n- Permanent shock → position until new information arrives\n- Transitory shock → mean-reversion trade opportunity\n\nForecast error variance:\nVar(Y_{t+h} | I_t) = Σ Ψ_i*Σ_ε*Ψ_i' for i = 0 to h\n\nwhere Σ_ε = covariance of innovations\n\nThis shows contribution of each shock type to forecast uncertainty\n\nCommon trends identification:\nCommon trends = α_⊥*Ψ(1)*Σε_i\n- Represents permanent component\n- Cannot be diversified away\n- Systematic risk factors\n\nPortfolio construction:\n- β'*Y_t eliminates permanent shocks (stationary portfolio)\n- Transitory movements in β'*Y_t are tradeable\n- MA representation shows decay rate of opportunities\n\nMoving Average Representation shows your stocks as a pile-up of all past \"surprises\" (shocks). Some surprises stick around forever (permanent shocks like \"the whole market dropped\"), others fade away (transitory shocks like \"this stock had a weird spike\"). The representation tells you which shocks matter long-term and which create temporary trading opportunities as they fade.","intuition":"","rawContent":"The Moving Average (MA) Representation of a VECM expresses current values as a weighted sum of current and past innovations (shocks), rather than as a function of past values. This representation shows how shocks propagate through the system and reveals the dynamic response structure, which is crucial for understanding impulse responses and shock persistence.\n\nGranger Representation Theorem:\nA cointegrated VAR can be written as:\nY_t = Ψ(L)*ε_t = Σ Ψ_i*ε_{t-i}\n\nwhere:\n- Ψ(L) = moving average polynomial lag operator\n- ε_t = vector of innovations (shocks)\n- Ψ_i = impulse response matrices at lag i\n\nFull MA representation from VECM:\nΔY_t = α*β'*Y_{t-1} + Γ_1*ΔY_{t-1} + ... + ε_t\n\nBecomes:\nY_t = Ψ(1)*Σε_i + Ψ*(L)*ε_t + Y_0\n\nwhere:\n- Ψ(1) = long-run multiplier matrix (permanent effects)\n- Ψ*(L) = transitory effects polynomial\n- Σε_i = cumulative permanent shocks\n\nDecomposition:\nΨ(L) = Ψ(1) + (1-L)*Ψ*(L)\n\nPermanent component: Ψ(1)*Σε_i\nTransitory component: Ψ*(L)*ε_t\n\nFor cointegrated system:\n- β'*Ψ(1) = 0 (cointegrating vectors eliminate permanent effects)\n- Rank(Ψ(1)) = k - r (number of common trends)\n- α_⊥*Ψ(1) spans permanent direction (common trends)\n\nImpulse Response Functions (IRF):\nIRF at horizon h: ∂Y_{t+h}/∂ε_t = Ψ_h\n\nProperties:\n- Permanent shocks: Σ Ψ_i ≠ 0 as i → ∞\n- Transitory shocks: Σ Ψ_i → 0 as i → ∞\n- Cointegration constraint: β'*Ψ_∞ = 0\n\nTrading application:\n\nShock persistence:\n- Identify which shocks have permanent vs temporary effects\n- Permanent shock → position until new information arrives\n- Transitory shock → mean-reversion trade opportunity\n\nForecast error variance:\nVar(Y_{t+h} | I_t) = Σ Ψ_i*Σ_ε*Ψ_i' for i = 0 to h\n\nwhere Σ_ε = covariance of innovations\n\nThis shows contribution of each shock type to forecast uncertainty\n\nCommon trends identification:\nCommon trends = α_⊥*Ψ(1)*Σε_i\n- Represents permanent component\n- Cannot be diversified away\n- Systematic risk factors\n\nPortfolio construction:\n- β'*Y_t eliminates permanent shocks (stationary portfolio)\n- Transitory movements in β'*Y_t are tradeable\n- MA representation shows decay rate of opportunities\n\nMoving Average Representation shows your stocks as a pile-up of all past \"surprises\" (shocks). Some surprises stick around forever (permanent shocks like \"the whole market dropped\"), others fade away (transitory shocks like \"this stock had a weird spike\"). The representation tells you which shocks matter long-term and which create temporary trading opportunities as they fade.","tags":["Cointegration","Moving Averages"],"relPath":"public/concept-list/list-concepts/group 14/Moving_Average_Representation_VECM.txt","hasFullInfo":true},{"id":286,"title":"Multi-Timeframe Spectral Analysis","filename":"Multi_Timeframe_Spectral_Analysis.txt","group":"group 14","groupNum":14,"categoryId":29,"categoryTitle":"29. SPECTRUM VISUALIZATION & ANALYSIS","subcategory":"General","summary":"Cross-timeframe spectrum","overview":"Multi-timeframe spectral analysis involves computing frequency spectra (dominant cycles) across multiple chart timeframes simultaneously and combining the results to identify which cycles are persistent across scales. This helps distinguish between noise (appears only on one timeframe) and true market rhythms (visible across multiple timeframes).","formula":"The process involves:\n1. Collect synchronized price data from multiple timeframes (e.g., 5min, 15min, 1hr, 4hr)\n2. Compute power spectrum for each timeframe using DFT/FFT\n3. Normalize each spectrum to account for different sampling rates\n4. Identify peaks (dominant cycles) in each spectrum\n5. Cross-validate: cycles appearing in multiple timeframes are more significant\n6. Weight cycles by their cross-timeframe consistency\n\nFor timeframes TF_1, TF_2, ..., TF_n:\nSpectrum_i = DFT(price_on_TF_i)\nConsensus_Cycle = argmax(Σ Normalized_Spectrum_i * Correlation_Weight_i)\n\nValidation criteria:\n- Cycle must appear within ±20% period across timeframes (accounting for resolution differences)\n- Amplitude must be above threshold in at least 2+ timeframes\n- Phase alignment between timeframes indicates genuine cycle","parameters":"","intuition":"Multi-timeframe spectral analysis is like listening to the same song on different quality speakers. Real musical notes (true cycles) will sound clear on all speakers, while static and interference (noise) might only appear on the cheap speaker. By comparing what you hear across all speakers, you figure out what's the actual music versus what's just speaker distortion.","rawContent":"Multi-timeframe spectral analysis involves computing frequency spectra (dominant cycles) across multiple chart timeframes simultaneously and combining the results to identify which cycles are persistent across scales. This helps distinguish between noise (appears only on one timeframe) and true market rhythms (visible across multiple timeframes).\n\nThe process involves:\n1. Collect synchronized price data from multiple timeframes (e.g., 5min, 15min, 1hr, 4hr)\n2. Compute power spectrum for each timeframe using DFT/FFT\n3. Normalize each spectrum to account for different sampling rates\n4. Identify peaks (dominant cycles) in each spectrum\n5. Cross-validate: cycles appearing in multiple timeframes are more significant\n6. Weight cycles by their cross-timeframe consistency\n\nFor timeframes TF_1, TF_2, ..., TF_n:\nSpectrum_i = DFT(price_on_TF_i)\nConsensus_Cycle = argmax(Σ Normalized_Spectrum_i * Correlation_Weight_i)\n\nValidation criteria:\n- Cycle must appear within ±20% period across timeframes (accounting for resolution differences)\n- Amplitude must be above threshold in at least 2+ timeframes\n- Phase alignment between timeframes indicates genuine cycle\n\nMulti-timeframe spectral analysis is like listening to the same song on different quality speakers. Real musical notes (true cycles) will sound clear on all speakers, while static and interference (noise) might only appear on the cheap speaker. By comparing what you hear across all speakers, you figure out what's the actual music versus what's just speaker distortion.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 14/Multi_Timeframe_Spectral_Analysis.txt","hasFullInfo":true},{"id":287,"title":"Spurious Regression Detection","filename":"Spurious_Regression_Detection.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Non-stationary regression testing","overview":"Spurious Regression occurs when regressing one non-stationary time series on another produces statistically significant results even when the variables are completely unrelated. The classic t-statistics and R² appear highly significant, creating the illusion of a meaningful relationship where none exists. This is one of the most dangerous pitfalls in time series analysis.","formula":"The spurious regression problem:\nFor two independent random walks:\nY_t = Y_{t-1} + ε_t\nX_t = X_{t-1} + u_t\n\nwhere ε_t and u_t are independent white noise\n\nRegression: Y_t = α + β*X_t + error\n\nResults in:\n- R² → 1 (appears to fit perfectly)\n- t-stat(β) → ∞ (appears highly significant)\n- DW statistic → 0 (severe autocorrelation)\n- But β is meaningless! (spurious)\n\nTheoretical basis (Phillips, 1986):\nFor non-stationary I(1) variables:\n- OLS estimator doesn't converge to true value\n- Distribution is non-standard\n- Standard inference (t-tests, F-tests) is invalid\n- R² and t-stats diverge even with zero true relationship\n\nDetection methods:\n\n1. Durbin-Watson test:\nDW = Σ(e_t - e_{t-1})²/Σe_t²\n\nRule: DW ≈ 0 suggests spurious regression\n- DW << 2 with high R² → likely spurious\n- Proper regression usually has DW ≈ 2\n\n2. Check residuals for stationarity:\nRun ADF test on regression residuals\n- If residuals are I(1) → spurious regression\n- If residuals are I(0) → potentially valid (cointegration)\n\n3. Compare R² and DW:\nIf R² > DW → strong warning sign of spurious regression\n\n4. Granger-Newbold test:\nRegress first differences:\nΔY_t = γ + δ*ΔX_t + v_t\n- If original regression significant but differenced is not → spurious\n\nPrevention strategies:\n\nFor non-stationary data:\n\nOption 1 - Difference the data:\nΔY_t = α + β*ΔX_t + ε_t\n→ Valid if Y and X are I(1)\n→ Loses long-run information\n\nOption 2 - Test for cointegration:\nIf Y and X are cointegrated → valid regression (special case)\n→ Regression captures equilibrium relationship\n→ Use Engle-Granger or Johansen tests\n\nOption 3 - VECM:\nProperly model non-stationary cointegrated system\n→ Separates short-run and long-run dynamics\n\nOption 4 - Detrend first:\nRemove deterministic trends, then regress\n→ Valid for trend-stationary processes\n\nTrading implications:\n\nDanger of spurious strategies:\nTwo trending stocks appear correlated:\n- Price_A and Price_B both trending up\n- Regression shows R² = 0.95, \"highly significant\"\n- But they're just both in uptrends - no actual relationship\n- Pairs trade would fail catastrophically\n\nProper approach:\n1. Test both series for unit roots (ADF test)\n2. If both I(1), test for cointegration\n3. Only trade if true cointegration exists (stationary residuals)\n4. Otherwise, work with returns (differences)\n\nBacktesting pitfall:\n- In-sample spurious regression → overfitted strategy\n- Appears profitable historically\n- Fails completely out-of-sample\n- Always verify stationarity\n\nReal example:\nRegressing cumulative profits on cumulative trades:\n- Both are cumulative (non-stationary)\n- Will show spurious \"relationship\"\n- Should use per-trade profits (stationary)\n\nWarning signs in trading models:\n- R² > 0.8 with time series price levels → suspicious\n- DW near zero → check for spurious regression\n- Strategy works in-sample, fails out-of-sample → likely spurious\n\nSpurious Regression is finding \"patterns\" in random walks that don't actually exist. Two stocks both drifting upward will appear correlated even if they're completely unrelated - just like two drunks both stumbling north will seem to be walking together. Before trading any statistical relationship, you must verify the residuals are stationary. Otherwise your \"edge\" is pure illusion.","parameters":"","intuition":"","rawContent":"Spurious Regression occurs when regressing one non-stationary time series on another produces statistically significant results even when the variables are completely unrelated. The classic t-statistics and R² appear highly significant, creating the illusion of a meaningful relationship where none exists. This is one of the most dangerous pitfalls in time series analysis.\n\nThe spurious regression problem:\nFor two independent random walks:\nY_t = Y_{t-1} + ε_t\nX_t = X_{t-1} + u_t\n\nwhere ε_t and u_t are independent white noise\n\nRegression: Y_t = α + β*X_t + error\n\nResults in:\n- R² → 1 (appears to fit perfectly)\n- t-stat(β) → ∞ (appears highly significant)\n- DW statistic → 0 (severe autocorrelation)\n- But β is meaningless! (spurious)\n\nTheoretical basis (Phillips, 1986):\nFor non-stationary I(1) variables:\n- OLS estimator doesn't converge to true value\n- Distribution is non-standard\n- Standard inference (t-tests, F-tests) is invalid\n- R² and t-stats diverge even with zero true relationship\n\nDetection methods:\n\n1. Durbin-Watson test:\nDW = Σ(e_t - e_{t-1})²/Σe_t²\n\nRule: DW ≈ 0 suggests spurious regression\n- DW << 2 with high R² → likely spurious\n- Proper regression usually has DW ≈ 2\n\n2. Check residuals for stationarity:\nRun ADF test on regression residuals\n- If residuals are I(1) → spurious regression\n- If residuals are I(0) → potentially valid (cointegration)\n\n3. Compare R² and DW:\nIf R² > DW → strong warning sign of spurious regression\n\n4. Granger-Newbold test:\nRegress first differences:\nΔY_t = γ + δ*ΔX_t + v_t\n- If original regression significant but differenced is not → spurious\n\nPrevention strategies:\n\nFor non-stationary data:\n\nOption 1 - Difference the data:\nΔY_t = α + β*ΔX_t + ε_t\n→ Valid if Y and X are I(1)\n→ Loses long-run information\n\nOption 2 - Test for cointegration:\nIf Y and X are cointegrated → valid regression (special case)\n→ Regression captures equilibrium relationship\n→ Use Engle-Granger or Johansen tests\n\nOption 3 - VECM:\nProperly model non-stationary cointegrated system\n→ Separates short-run and long-run dynamics\n\nOption 4 - Detrend first:\nRemove deterministic trends, then regress\n→ Valid for trend-stationary processes\n\nTrading implications:\n\nDanger of spurious strategies:\nTwo trending stocks appear correlated:\n- Price_A and Price_B both trending up\n- Regression shows R² = 0.95, \"highly significant\"\n- But they're just both in uptrends - no actual relationship\n- Pairs trade would fail catastrophically\n\nProper approach:\n1. Test both series for unit roots (ADF test)\n2. If both I(1), test for cointegration\n3. Only trade if true cointegration exists (stationary residuals)\n4. Otherwise, work with returns (differences)\n\nBacktesting pitfall:\n- In-sample spurious regression → overfitted strategy\n- Appears profitable historically\n- Fails completely out-of-sample\n- Always verify stationarity\n\nReal example:\nRegressing cumulative profits on cumulative trades:\n- Both are cumulative (non-stationary)\n- Will show spurious \"relationship\"\n- Should use per-trade profits (stationary)\n\nWarning signs in trading models:\n- R² > 0.8 with time series price levels → suspicious\n- DW near zero → check for spurious regression\n- Strategy works in-sample, fails out-of-sample → likely spurious\n\nSpurious Regression is finding \"patterns\" in random walks that don't actually exist. Two stocks both drifting upward will appear correlated even if they're completely unrelated - just like two drunks both stumbling north will seem to be walking together. Before trading any statistical relationship, you must verify the residuals are stationary. Otherwise your \"edge\" is pure illusion.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Spurious_Regression_Detection.txt","hasFullInfo":true},{"id":288,"title":"Swing Wave Heat Map","filename":"Swing_Wave_Heat_Map.txt","group":"group 14","groupNum":14,"categoryId":29,"categoryTitle":"29. SPECTRUM VISUALIZATION & ANALYSIS","subcategory":"General","summary":"Cycle period visualization","overview":"A swing wave heat map is a specialized visualization that displays the dominant cycle period across different bars, showing how the market's primary rhythm changes over time. It creates a color-coded representation where each bar is colored according to the detected cycle period at that moment, allowing traders to see regime transitions from fast cycles (ranging markets) to slow cycles (trending markets).","formula":"Calculation process:\n1. For each bar, measure the dominant cycle period (using Hilbert Transform, autocorrelation, or DFT)\n2. Map detected period to color scale:\n   - Short periods (8-15 bars) → Blue/cool colors (fast cycling)\n   - Medium periods (15-30 bars) → Green/yellow (transitional)\n   - Long periods (30-50 bars) → Red/hot colors (slow trending)\n3. Plot colored bars or background to show cycle evolution\n\nDominant_Period[t] = argmax(Power_Spectrum(price[t-N:t]))\nColor[t] = ColorScale(Dominant_Period[t], min=8, max=50)\n\nThe display often includes:\n- Background coloring of price chart\n- Separate indicator panel with period values\n- Transitional smoothing to reduce rapid color changes","parameters":"","intuition":"A swing wave heat map is like a speedometer for market rhythms. When the market is bouncing quickly (short cycles), the colors are cool blues. When it's moving in long, slow swings (trending), the colors turn hot red. Watching the color transitions tells you when the market is shifting gears from choppy to smooth or vice versa.","rawContent":"A swing wave heat map is a specialized visualization that displays the dominant cycle period across different bars, showing how the market's primary rhythm changes over time. It creates a color-coded representation where each bar is colored according to the detected cycle period at that moment, allowing traders to see regime transitions from fast cycles (ranging markets) to slow cycles (trending markets).\n\nCalculation process:\n1. For each bar, measure the dominant cycle period (using Hilbert Transform, autocorrelation, or DFT)\n2. Map detected period to color scale:\n   - Short periods (8-15 bars) → Blue/cool colors (fast cycling)\n   - Medium periods (15-30 bars) → Green/yellow (transitional)\n   - Long periods (30-50 bars) → Red/hot colors (slow trending)\n3. Plot colored bars or background to show cycle evolution\n\nDominant_Period[t] = argmax(Power_Spectrum(price[t-N:t]))\nColor[t] = ColorScale(Dominant_Period[t], min=8, max=50)\n\nThe display often includes:\n- Background coloring of price chart\n- Separate indicator panel with period values\n- Transitional smoothing to reduce rapid color changes\n\nA swing wave heat map is like a speedometer for market rhythms. When the market is bouncing quickly (short cycles), the colors are cool blues. When it's moving in long, slow swings (trending), the colors turn hot red. Watching the color transitions tells you when the market is shifting gears from choppy to smooth or vice versa.","tags":["Cycle & Spectral"],"relPath":"public/concept-list/list-concepts/group 14/Swing_Wave_Heat_Map.txt","hasFullInfo":true},{"id":289,"title":"Triangular Representation (VECM)","filename":"Triangular_Representation_VECM.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Alternative VECM form","overview":"The Triangular Representation is an alternative formulation of the VECM that explicitly separates variables into \"adjusting variables\" (endogenous to the equilibrium) and \"forcing variables\" (weakly exogenous). This structure clarifies causal ordering and is useful for understanding which variables drive the system versus which variables respond to equilibrium deviations.","formula":"Standard VECM:\nΔY_t = α*β'*Y_{t-1} + Γ*ΔY_{t-1} + ε_t\n\nTriangular form partitions Y into:\nY_t = [Y_{1,t}]  (m × 1, adjusting variables)\n      [Y_{2,t}]  (n × 1, forcing variables)\nwhere m + n = k\n\nTriangular VECM structure:\n\nAdjusting block:\nΔY_{1,t} = α_1*β'*Y_{t-1} + Γ_{11}*ΔY_{1,t-1} + Γ_{12}*ΔY_{2,t-1} + ε_{1,t}\n\nForcing block:\nΔY_{2,t} = Γ_{21}*ΔY_{1,t-1} + Γ_{22}*ΔY_{2,t-1} + ε_{2,t}\n\nKey properties:\n- α_2 = 0 (forcing variables don't respond to ECT)\n- Y_{2,t} is weakly exogenous for β\n- Efficient estimation possible using conditional system\n- Clear causal interpretation\n\nExample (stock and its sector index):\n\nStock equation (adjusting):\nΔStock_t = α*(Stock_{t-1} - β*Index_{t-1}) + γ_1*ΔStock_{t-1} + γ_2*ΔIndex_{t-1} + ε_t\n\nIndex equation (forcing):\nΔIndex_t = δ_1*ΔStock_{t-1} + δ_2*ΔIndex_{t-1} + u_t\n\nInterpretation:\n- Stock adjusts to deviations from equilibrium with index\n- Index doesn't respond to stock-index spread\n- Index is price discovery vehicle (leads)\n- Stock follows index in long run\n\nTesting for triangular form:\n1. Estimate full VECM\n2. Test H_0: α_2 = 0 (weak exogeneity)\n3. If cannot reject, variable is forcing\n4. Re-estimate in triangular form\n\nTrading implications:\n\nIf Stock is adjusting, Index is forcing:\n- Trade stock against index when spread widens\n- Don't trade index against stock\n- Use index as leading indicator\n- Stock mean-reverts to index, not vice versa\n\nPosition sizing:\n- Full position in adjusting security\n- Hedge position in forcing security\n- Forcing security carries systematic risk\n\nEfficiency gains:\n- Conditional system (adjusting on forcing) is more efficient\n- Reduced parameter space\n- Better out-of-sample forecasting\n- Clearer economic interpretation\n\nTriangular Representation separates stocks into \"leaders\" and \"followers.\" The leader (forcing variable) does its own thing and doesn't care about the relationship. The follower (adjusting variable) watches the leader and corrects when it gets too far away. In pairs trading, you want to trade the follower, using the leader as your reference - not the other way around.","parameters":"","intuition":"","rawContent":"The Triangular Representation is an alternative formulation of the VECM that explicitly separates variables into \"adjusting variables\" (endogenous to the equilibrium) and \"forcing variables\" (weakly exogenous). This structure clarifies causal ordering and is useful for understanding which variables drive the system versus which variables respond to equilibrium deviations.\n\nStandard VECM:\nΔY_t = α*β'*Y_{t-1} + Γ*ΔY_{t-1} + ε_t\n\nTriangular form partitions Y into:\nY_t = [Y_{1,t}]  (m × 1, adjusting variables)\n      [Y_{2,t}]  (n × 1, forcing variables)\nwhere m + n = k\n\nTriangular VECM structure:\n\nAdjusting block:\nΔY_{1,t} = α_1*β'*Y_{t-1} + Γ_{11}*ΔY_{1,t-1} + Γ_{12}*ΔY_{2,t-1} + ε_{1,t}\n\nForcing block:\nΔY_{2,t} = Γ_{21}*ΔY_{1,t-1} + Γ_{22}*ΔY_{2,t-1} + ε_{2,t}\n\nKey properties:\n- α_2 = 0 (forcing variables don't respond to ECT)\n- Y_{2,t} is weakly exogenous for β\n- Efficient estimation possible using conditional system\n- Clear causal interpretation\n\nExample (stock and its sector index):\n\nStock equation (adjusting):\nΔStock_t = α*(Stock_{t-1} - β*Index_{t-1}) + γ_1*ΔStock_{t-1} + γ_2*ΔIndex_{t-1} + ε_t\n\nIndex equation (forcing):\nΔIndex_t = δ_1*ΔStock_{t-1} + δ_2*ΔIndex_{t-1} + u_t\n\nInterpretation:\n- Stock adjusts to deviations from equilibrium with index\n- Index doesn't respond to stock-index spread\n- Index is price discovery vehicle (leads)\n- Stock follows index in long run\n\nTesting for triangular form:\n1. Estimate full VECM\n2. Test H_0: α_2 = 0 (weak exogeneity)\n3. If cannot reject, variable is forcing\n4. Re-estimate in triangular form\n\nTrading implications:\n\nIf Stock is adjusting, Index is forcing:\n- Trade stock against index when spread widens\n- Don't trade index against stock\n- Use index as leading indicator\n- Stock mean-reverts to index, not vice versa\n\nPosition sizing:\n- Full position in adjusting security\n- Hedge position in forcing security\n- Forcing security carries systematic risk\n\nEfficiency gains:\n- Conditional system (adjusting on forcing) is more efficient\n- Reduced parameter space\n- Better out-of-sample forecasting\n- Clearer economic interpretation\n\nTriangular Representation separates stocks into \"leaders\" and \"followers.\" The leader (forcing variable) does its own thing and doesn't care about the relationship. The follower (adjusting variable) watches the leader and corrects when it gets too far away. In pairs trading, you want to trade the follower, using the leader as your reference - not the other way around.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Triangular_Representation_VECM.txt","hasFullInfo":true},{"id":290,"title":"Time-Weighted Average Price (TWAP)","filename":"TWAP.txt","group":"group 14","groupNum":14,"categoryId":30,"categoryTitle":"30. SPECIAL PURPOSE FILTERS","subcategory":"General","summary":"Execution benchmark","overview":"TWAP (Time-Weighted Average Price) is an execution algorithm and benchmark that calculates the average price of a security over a specific time period, giving equal weight to each time interval regardless of volume. It's primarily used as an execution strategy to split large orders into smaller pieces distributed evenly over time, and as a benchmark to evaluate execution quality.","formula":"Calculation over time period [T_start, T_end]:\nTWAP = (Σ Price[t]) / N","parameters":"where:\n- N = number of time intervals\n- Each interval gets equal weight (1/N)\n- Typically samples at regular intervals (every minute, every 5 minutes, etc.)\n\nFor continuous calculation:\nTWAP = (∫ Price(t) dt) / (T_end - T_start) from T_start to T_end\n\nAs execution algorithm:\n1. Divide total order quantity Q into N equal slices\n2. Divide time period T into N equal intervals\n3. Execute slice of size Q/N at each interval\n4. Minimize market impact by spreading execution evenly\n\nComparison with VWAP:\n- TWAP: time-weighted (ignores volume)\n- VWAP: volume-weighted (follows volume distribution)\n- TWAP better when volume is unpredictable\n- VWAP better when following natural volume patterns","intuition":"TWAP is like buying a car by making equal monthly payments over a year, regardless of whether the dealer is busy or quiet. You're not trying to \"time\" busy periods - you just spread your purchase evenly across time. For trading, this means you're not chasing volume spikes or avoiding quiet periods; you're systematically buying/selling a fixed amount at regular intervals.","rawContent":"TWAP (Time-Weighted Average Price) is an execution algorithm and benchmark that calculates the average price of a security over a specific time period, giving equal weight to each time interval regardless of volume. It's primarily used as an execution strategy to split large orders into smaller pieces distributed evenly over time, and as a benchmark to evaluate execution quality.\n\nCalculation over time period [T_start, T_end]:\nTWAP = (Σ Price[t]) / N\nwhere:\n- N = number of time intervals\n- Each interval gets equal weight (1/N)\n- Typically samples at regular intervals (every minute, every 5 minutes, etc.)\n\nFor continuous calculation:\nTWAP = (∫ Price(t) dt) / (T_end - T_start) from T_start to T_end\n\nAs execution algorithm:\n1. Divide total order quantity Q into N equal slices\n2. Divide time period T into N equal intervals\n3. Execute slice of size Q/N at each interval\n4. Minimize market impact by spreading execution evenly\n\nComparison with VWAP:\n- TWAP: time-weighted (ignores volume)\n- VWAP: volume-weighted (follows volume distribution)\n- TWAP better when volume is unpredictable\n- VWAP better when following natural volume patterns\n\nTWAP is like buying a car by making equal monthly payments over a year, regardless of whether the dealer is busy or quiet. You're not trying to \"time\" busy periods - you just spread your purchase evenly across time. For trading, this means you're not chasing volume spikes or avoiding quiet periods; you're systematically buying/selling a fixed amount at regular intervals.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 14/TWAP.txt","hasFullInfo":true},{"id":291,"title":"Vector Autoregression (VAR)","filename":"Vector_Autoregression.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Multivariate autoregression","overview":"Vector Autoregression (VAR) is a multivariate time series model that captures the linear interdependencies among multiple variables. Each variable is modeled as a function of its own past values and the past values of all other variables in the system. VAR is used to analyze the dynamic relationships between multiple securities, such as stocks in a sector or related markets.","formula":"VAR(p) model structure for k variables:\nY_t = c + A_1*Y_{t-1} + A_2*Y_{t-2} + ... + A_p*Y_{t-p} + ε_t","parameters":"where:\n- Y_t = [y_1,t, y_2,t, ..., y_k,t]' is k×1 vector of variables at time t\n- c = k×1 vector of constants\n- A_i = k×k coefficient matrices (i = 1, ..., p)\n- p = lag order (number of lags)\n- ε_t = k×1 vector of error terms (white noise)\n\nFor 2 variables (bivariate VAR(1)):\ny_1,t = c_1 + a_11*y_1,t-1 + a_12*y_2,t-1 + ε_1,t\ny_2,t = c_2 + a_21*y_1,t-1 + a_22*y_2,t-1 + ε_2,t\n\nKey features:\n- Endogenous variables: All variables treated symmetrically (no explicit dependent/independent)\n- Reduced form: Direct estimation without structural assumptions\n- Lag selection: Use AIC, BIC, or HQ information criteria\n- Stationarity required: Variables must be I(0) or cointegrated\n\nApplications in trading:\n- Lead-lag relationships between stocks\n- Cross-market dependencies (stocks, bonds, commodities)\n- Sector rotation analysis\n- Volatility spillovers","intuition":"VAR is like having multiple thermometers in different rooms, where each room's temperature depends on its own past temperature AND the past temperatures of the other rooms (because heat flows between them). The model learns how much each room influences the others over time. For stocks, it captures how yesterday's price movements in one stock affect today's movements in related stocks.","rawContent":"Vector Autoregression (VAR) is a multivariate time series model that captures the linear interdependencies among multiple variables. Each variable is modeled as a function of its own past values and the past values of all other variables in the system. VAR is used to analyze the dynamic relationships between multiple securities, such as stocks in a sector or related markets.\n\nVAR(p) model structure for k variables:\nY_t = c + A_1*Y_{t-1} + A_2*Y_{t-2} + ... + A_p*Y_{t-p} + ε_t\n\nwhere:\n- Y_t = [y_1,t, y_2,t, ..., y_k,t]' is k×1 vector of variables at time t\n- c = k×1 vector of constants\n- A_i = k×k coefficient matrices (i = 1, ..., p)\n- p = lag order (number of lags)\n- ε_t = k×1 vector of error terms (white noise)\n\nFor 2 variables (bivariate VAR(1)):\ny_1,t = c_1 + a_11*y_1,t-1 + a_12*y_2,t-1 + ε_1,t\ny_2,t = c_2 + a_21*y_1,t-1 + a_22*y_2,t-1 + ε_2,t\n\nKey features:\n- Endogenous variables: All variables treated symmetrically (no explicit dependent/independent)\n- Reduced form: Direct estimation without structural assumptions\n- Lag selection: Use AIC, BIC, or HQ information criteria\n- Stationarity required: Variables must be I(0) or cointegrated\n\nApplications in trading:\n- Lead-lag relationships between stocks\n- Cross-market dependencies (stocks, bonds, commodities)\n- Sector rotation analysis\n- Volatility spillovers\n\nVAR is like having multiple thermometers in different rooms, where each room's temperature depends on its own past temperature AND the past temperatures of the other rooms (because heat flows between them). The model learns how much each room influences the others over time. For stocks, it captures how yesterday's price movements in one stock affect today's movements in related stocks.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Vector_Autoregression.txt","hasFullInfo":true},{"id":292,"title":"Vector Error Correction Model (VECM)","filename":"Vector_Error_Correction_Model.txt","group":"group 14","groupNum":14,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Cointegrated VAR","overview":"Vector Error Correction Model (VECM) is a restricted VAR model used for cointegrated non-stationary time series. When variables share long-run equilibrium relationships (cointegration), VECM captures both short-run dynamics and the speed of adjustment back to equilibrium after deviations. This is essential for modeling securities that move together in the long run but can diverge temporarily.","formula":"VECM representation:\nΔY_t = Π*Y_{t-1} + Γ_1*ΔY_{t-1} + ... + Γ_{p-1}*ΔY_{t-p+1} + ε_t","parameters":"where:\n- ΔY_t = Y_t - Y_{t-1} (first difference, changes)\n- Π = α*β' is the long-run impact matrix\n  - β = cointegrating vectors (equilibrium relationships)\n  - α = adjustment coefficients (speed of correction)\n- Γ_i = short-run coefficient matrices\n- ε_t = error vector\n\nFor 2 cointegrated variables:\nΔy_1,t = α_1*(β_1*y_1,t-1 + β_2*y_2,t-1) + γ_11*Δy_1,t-1 + γ_12*Δy_2,t-1 + ε_1,t\nΔy_2,t = α_2*(β_1*y_1,t-1 + β_2*y_2,t-1) + γ_21*Δy_1,t-1 + γ_22*Δy_2,t-1 + ε_2,t\n\nError Correction Term (ECT):\nECT_t = β'*Y_t = deviation from equilibrium\n- If ECT > 0: system above equilibrium, should decrease\n- If ECT < 0: system below equilibrium, should increase\n- α determines how fast adjustment occurs\n\nTrading application (pairs trading):\n- β defines the hedge ratio (how many shares of stock 2 per stock 1)\n- ECT signals entry (divergence from equilibrium)\n- α indicates mean-reversion speed\n- Position unwinding occurs as ECT → 0","intuition":"VECM is like a rubber band connecting two stocks that usually move together. When they drift apart (error correction term is large), the rubber band pulls them back together. The \"α\" coefficient tells you how strong the rubber band is - how quickly the divergence closes. Traders use this to find pairs that have wandered apart temporarily and will snap back.","rawContent":"Vector Error Correction Model (VECM) is a restricted VAR model used for cointegrated non-stationary time series. When variables share long-run equilibrium relationships (cointegration), VECM captures both short-run dynamics and the speed of adjustment back to equilibrium after deviations. This is essential for modeling securities that move together in the long run but can diverge temporarily.\n\nVECM representation:\nΔY_t = Π*Y_{t-1} + Γ_1*ΔY_{t-1} + ... + Γ_{p-1}*ΔY_{t-p+1} + ε_t\n\nwhere:\n- ΔY_t = Y_t - Y_{t-1} (first difference, changes)\n- Π = α*β' is the long-run impact matrix\n  - β = cointegrating vectors (equilibrium relationships)\n  - α = adjustment coefficients (speed of correction)\n- Γ_i = short-run coefficient matrices\n- ε_t = error vector\n\nFor 2 cointegrated variables:\nΔy_1,t = α_1*(β_1*y_1,t-1 + β_2*y_2,t-1) + γ_11*Δy_1,t-1 + γ_12*Δy_2,t-1 + ε_1,t\nΔy_2,t = α_2*(β_1*y_1,t-1 + β_2*y_2,t-1) + γ_21*Δy_1,t-1 + γ_22*Δy_2,t-1 + ε_2,t\n\nError Correction Term (ECT):\nECT_t = β'*Y_t = deviation from equilibrium\n- If ECT > 0: system above equilibrium, should decrease\n- If ECT < 0: system below equilibrium, should increase\n- α determines how fast adjustment occurs\n\nTrading application (pairs trading):\n- β defines the hedge ratio (how many shares of stock 2 per stock 1)\n- ECT signals entry (divergence from equilibrium)\n- α indicates mean-reversion speed\n- Position unwinding occurs as ECT → 0\n\nVECM is like a rubber band connecting two stocks that usually move together. When they drift apart (error correction term is large), the rubber band pulls them back together. The \"α\" coefficient tells you how strong the rubber band is - how quickly the divergence closes. Traders use this to find pairs that have wandered apart temporarily and will snap back.","tags":["Cointegration"],"relPath":"public/concept-list/list-concepts/group 14/Vector_Error_Correction_Model.txt","hasFullInfo":true},{"id":293,"title":"AdaBoost for Signals (Adaptive Boosting)","filename":"AdaBoost_for_Signals.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Adaptive boosting","overview":"An ensemble learning algorithm that combines multiple weak classifiers into a strong classifier by adaptively weighting training examples and models. Introduced by Freund and Schapire in 1996, AdaBoost works by training a sequence of weak learners (typically decision stumps - single-split trees) where each new learner focuses more on examples that previous learners misclassified. The algorithm increases weights of misclassified examples and decreases weights of correctly classified ones, forcing subsequent models to pay more attention to difficult cases. Final predictions are weighted votes from all weak learners, with better performers getting more influence. AdaBoost was revolutionary in machine learning and remains effective for trading signal generation, particularly for binary classification tasks like trend direction or regime identification.","formula":"Algorithm:\n1. Initialize weights: w_i = 1/n for all examples\n2. For t = 1 to T:\n   a. Train weak classifier h_t on weighted data\n   b. Calculate error: ε_t = Σᵢ w_i · I(h_t(x_i) ≠ y_i)\n   c. Calculate model weight: α_t = 0.5 · log((1-ε_t)/ε_t)\n   d. Update example weights:\n      w_i = w_i · exp(-α_t · y_i · h_t(x_i))\n   e. Normalize weights: w_i = w_i / Σⱼ w_j\n3. Final classifier: H(x) = sign(Σₜ α_t · h_t(x))","parameters":"Where:\n- h_t(x) ∈ {-1, +1} weak classifier prediction\n- α_t = influence of classifier t\n- Higher α_t for more accurate classifiers","intuition":"Think of AdaBoost like studying for an exam with a tutor. First practice test, you get some questions wrong - your tutor makes you focus extra hard on those topics (increases their weight). Second practice test uses your new focus, and you get different questions wrong - tutor shifts focus to those. Each round, you're building expertise by concentrating on your weaknesses. Finally, when taking the real exam, you combine all your focused knowledge, giving more weight to areas you really mastered. In trading, AdaBoost builds signal generators by identifying hard-to-classify market conditions and creating specialists for them. Maybe first model misses sideways markets, so second model specializes in those, creating a comprehensive system that handles all market types.","rawContent":"An ensemble learning algorithm that combines multiple weak classifiers into a strong classifier by adaptively weighting training examples and models. Introduced by Freund and Schapire in 1996, AdaBoost works by training a sequence of weak learners (typically decision stumps - single-split trees) where each new learner focuses more on examples that previous learners misclassified. The algorithm increases weights of misclassified examples and decreases weights of correctly classified ones, forcing subsequent models to pay more attention to difficult cases. Final predictions are weighted votes from all weak learners, with better performers getting more influence. AdaBoost was revolutionary in machine learning and remains effective for trading signal generation, particularly for binary classification tasks like trend direction or regime identification.\n\nAlgorithm:\n1. Initialize weights: w_i = 1/n for all examples\n2. For t = 1 to T:\n   a. Train weak classifier h_t on weighted data\n   b. Calculate error: ε_t = Σᵢ w_i · I(h_t(x_i) ≠ y_i)\n   c. Calculate model weight: α_t = 0.5 · log((1-ε_t)/ε_t)\n   d. Update example weights:\n      w_i = w_i · exp(-α_t · y_i · h_t(x_i))\n   e. Normalize weights: w_i = w_i / Σⱼ w_j\n3. Final classifier: H(x) = sign(Σₜ α_t · h_t(x))\n\nWhere:\n- h_t(x) ∈ {-1, +1} weak classifier prediction\n- α_t = influence of classifier t\n- Higher α_t for more accurate classifiers\n\nThink of AdaBoost like studying for an exam with a tutor. First practice test, you get some questions wrong - your tutor makes you focus extra hard on those topics (increases their weight). Second practice test uses your new focus, and you get different questions wrong - tutor shifts focus to those. Each round, you're building expertise by concentrating on your weaknesses. Finally, when taking the real exam, you combine all your focused knowledge, giving more weight to areas you really mastered. In trading, AdaBoost builds signal generators by identifying hard-to-classify market conditions and creating specialists for them. Maybe first model misses sideways markets, so second model specializes in those, creating a comprehensive system that handles all market types.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 15/AdaBoost_for_Signals.txt","hasFullInfo":true},{"id":294,"title":"ADMM (Alternating Direction Method of Multipliers)","filename":"ADMM.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Decomposition method","overview":"A versatile optimization algorithm that combines the decomposability of dual ascent with the convergence properties of the method of multipliers, ideal for solving large-scale convex optimization problems that can be split into simpler subproblems. ADMM is particularly effective when the objective function is separable or when the problem has a natural decomposition structure. The method alternates between optimizing different variable blocks while using a dual variable to coordinate between them. Developed in the 1970s but rediscovered and popularized in the 2010s, ADMM has become a workhorse algorithm in machine learning, signal processing, and distributed optimization due to its robustness, flexibility, and ability to leverage problem structure.","formula":"Standard ADMM for problem:\nminimize f(x) + g(z)\nsubject to Ax + Bz = c\n\nAlgorithm (iteration k):\n1. x-update: xₖ₊₁ = argmin_x [f(x) + (ρ/2)||Ax + Bzₖ - c + uₖ||²]\n2. z-update: zₖ₊₁ = argmin_z [g(z) + (ρ/2)||Axₖ₊₁ + Bz - c + uₖ||²]\n3. Dual update: uₖ₊₁ = uₖ + Axₖ₊₁ + Bzₖ₊₁ - c","parameters":"Where:\n- ρ > 0 is penalty parameter\n- u is scaled dual variable\n- Each x and z subproblem is often much simpler than original problem\n\nConverges to optimal solution under mild conditions.","intuition":"Imagine you and a friend are trying to plan a vacation together, but you have different preferences (you want beach, they want mountains) and a shared budget constraint. ADMM is like alternating proposals: you pick your best option given their last suggestion and the budget, then they pick their best option given your new suggestion and the budget, and you keep adjusting until you both agree. The \"dual variable\" is like tracking how much each person is \"bending\" to meet the constraint. In trading, ADMM solves complex problems like portfolio optimization with multiple objectives (maximize return, minimize risk, limit drawdown) by breaking them into simpler pieces that can be solved separately then coordinated, making huge problems tractable.","rawContent":"A versatile optimization algorithm that combines the decomposability of dual ascent with the convergence properties of the method of multipliers, ideal for solving large-scale convex optimization problems that can be split into simpler subproblems. ADMM is particularly effective when the objective function is separable or when the problem has a natural decomposition structure. The method alternates between optimizing different variable blocks while using a dual variable to coordinate between them. Developed in the 1970s but rediscovered and popularized in the 2010s, ADMM has become a workhorse algorithm in machine learning, signal processing, and distributed optimization due to its robustness, flexibility, and ability to leverage problem structure.\n\nStandard ADMM for problem:\nminimize f(x) + g(z)\nsubject to Ax + Bz = c\n\nAlgorithm (iteration k):\n1. x-update: xₖ₊₁ = argmin_x [f(x) + (ρ/2)||Ax + Bzₖ - c + uₖ||²]\n2. z-update: zₖ₊₁ = argmin_z [g(z) + (ρ/2)||Axₖ₊₁ + Bz - c + uₖ||²]\n3. Dual update: uₖ₊₁ = uₖ + Axₖ₊₁ + Bzₖ₊₁ - c\n\nWhere:\n- ρ > 0 is penalty parameter\n- u is scaled dual variable\n- Each x and z subproblem is often much simpler than original problem\n\nConverges to optimal solution under mild conditions.\n\nImagine you and a friend are trying to plan a vacation together, but you have different preferences (you want beach, they want mountains) and a shared budget constraint. ADMM is like alternating proposals: you pick your best option given their last suggestion and the budget, then they pick their best option given your new suggestion and the budget, and you keep adjusting until you both agree. The \"dual variable\" is like tracking how much each person is \"bending\" to meet the constraint. In trading, ADMM solves complex problems like portfolio optimization with multiple objectives (maximize return, minimize risk, limit drawdown) by breaking them into simpler pieces that can be solved separately then coordinated, making huge problems tractable.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/ADMM.txt","hasFullInfo":true},{"id":295,"title":"Bagging Filters (Bootstrap Aggregating)","filename":"Bagging_Filters.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Bootstrap aggregating","overview":"An ensemble learning technique that improves model stability and accuracy by training multiple versions of a model on different bootstrap samples of the data and averaging their predictions. Introduced by Leo Breiman in 1996, bagging reduces variance by creating diversity through random sampling with replacement. Each model sees a slightly different view of the data, capturing different aspects of the underlying pattern. For regression, predictions are averaged; for classification, votes are tallied. Bagging is particularly effective for high-variance models like deep decision trees. Random Forest is actually a bagging method applied to decision trees with additional randomization in feature selection. In trading, bagging creates more robust signals and filters that are less sensitive to outliers or peculiar data patterns.","formula":"Algorithm:\n1. Given dataset D with n samples\n2. For b = 1 to B (number of bootstrap samples):\n   a. Create D_b by sampling n examples from D with replacement\n   b. Train model f_b on D_b\n3. Final prediction:\n   - Regression: F(x) = (1/B) Σᵦ f_b(x)\n   - Classification: F(x) = majority_vote{f₁(x), ..., f_B(x)}\n\nProperties:\n- Each bootstrap sample contains ~63.2% unique examples\n- Remaining ~36.8% are out-of-bag (OOB) samples\n- OOB samples can be used for validation without separate test set\n\nVariance Reduction:\nVar(average) = Var(single model) / B (if models independent)","parameters":"","intuition":"Think of bagging like asking the same question to 100 people who each saw slightly different versions of an event. Maybe one person saw it from the left, another from the right, some saw it briefly, others watched longer. Each gives you their answer based on their view. By averaging all 100 answers, you get a more reliable story than any single person could give, especially since each person might have made small mistakes or missed something. In trading, bagging a trend detection model means training it on 50 slightly different data samples (random days removed/duplicated), then averaging the 50 trend predictions - this smooths out noise and prevents overfitting to peculiar market days, giving you more reliable signals.","rawContent":"An ensemble learning technique that improves model stability and accuracy by training multiple versions of a model on different bootstrap samples of the data and averaging their predictions. Introduced by Leo Breiman in 1996, bagging reduces variance by creating diversity through random sampling with replacement. Each model sees a slightly different view of the data, capturing different aspects of the underlying pattern. For regression, predictions are averaged; for classification, votes are tallied. Bagging is particularly effective for high-variance models like deep decision trees. Random Forest is actually a bagging method applied to decision trees with additional randomization in feature selection. In trading, bagging creates more robust signals and filters that are less sensitive to outliers or peculiar data patterns.\n\nAlgorithm:\n1. Given dataset D with n samples\n2. For b = 1 to B (number of bootstrap samples):\n   a. Create D_b by sampling n examples from D with replacement\n   b. Train model f_b on D_b\n3. Final prediction:\n   - Regression: F(x) = (1/B) Σᵦ f_b(x)\n   - Classification: F(x) = majority_vote{f₁(x), ..., f_B(x)}\n\nProperties:\n- Each bootstrap sample contains ~63.2% unique examples\n- Remaining ~36.8% are out-of-bag (OOB) samples\n- OOB samples can be used for validation without separate test set\n\nVariance Reduction:\nVar(average) = Var(single model) / B (if models independent)\n\nThink of bagging like asking the same question to 100 people who each saw slightly different versions of an event. Maybe one person saw it from the left, another from the right, some saw it briefly, others watched longer. Each gives you their answer based on their view. By averaging all 100 answers, you get a more reliable story than any single person could give, especially since each person might have made small mistakes or missed something. In trading, bagging a trend detection model means training it on 50 slightly different data samples (random days removed/duplicated), then averaging the 50 trend predictions - this smooths out noise and prevents overfitting to peculiar market days, giving you more reliable signals.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Bagging_Filters.txt","hasFullInfo":true},{"id":296,"title":"Bayesian Model Averaging (BMA)","filename":"Bayesian_Model_Averaging.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Probabilistic averaging","overview":"A statistical method that combines predictions from multiple models by weighting them according to their posterior probability given the observed data, providing a principled Bayesian approach to model uncertainty. Instead of selecting a single \"best\" model, BMA acknowledges model uncertainty by averaging over all candidate models, with each model's contribution proportional to how well it explains the data. The method automatically penalizes overly complex models through Bayesian information criteria, providing protection against overfitting. BMA also produces coherent uncertainty estimates that account for both parameter uncertainty within models and uncertainty about which model is correct. This makes it particularly valuable for forecasting and decision-making when multiple plausible models exist and no single model is clearly superior.","formula":"Posterior Prediction:\np(ŷ|D) = Σₘ p(ŷ|M_m, D) · p(M_m|D)","parameters":"Where:\n- p(ŷ|M_m, D) = prediction from model M_m given data D\n- p(M_m|D) = posterior probability of model M_m\n- D = observed data\n\nModel Posterior (Bayes' Rule):\np(M_m|D) = p(D|M_m) · p(M_m) / Σₖ p(D|M_k) · p(M_k)\n\nWhere:\n- p(D|M_m) = marginal likelihood (model evidence)\n- p(M_m) = prior probability of model m\n\nOften approximated using:\n- BIC: p(M_m|D) ∝ exp(-0.5 · BIC_m)\n- AIC: p(M_m|D) ∝ exp(-0.5 · AIC_m)\n\nModels with better fit and appropriate complexity get higher weight.","intuition":"Think of BMA like being on a jury where each juror has a different theory about what happened, and you need to reach a verdict. Instead of forcing everyone to agree on one theory, BMA lets each juror present their theory weighted by how convincing their evidence is. A theory with strong, simple evidence gets more weight; a complex theory that barely fits the facts gets less weight. The final verdict is a probability-weighted combination of all theories, which is often wiser than picking any single theory. In trading, BMA combines competing models (GARCH for volatility, ARIMA for trends, regime-switching for state changes) by automatically weighting each based on how well it explains recent market behavior, giving you probabilistic forecasts that honestly reflect model uncertainty rather than false confidence from a single model.","rawContent":"A statistical method that combines predictions from multiple models by weighting them according to their posterior probability given the observed data, providing a principled Bayesian approach to model uncertainty. Instead of selecting a single \"best\" model, BMA acknowledges model uncertainty by averaging over all candidate models, with each model's contribution proportional to how well it explains the data. The method automatically penalizes overly complex models through Bayesian information criteria, providing protection against overfitting. BMA also produces coherent uncertainty estimates that account for both parameter uncertainty within models and uncertainty about which model is correct. This makes it particularly valuable for forecasting and decision-making when multiple plausible models exist and no single model is clearly superior.\n\nPosterior Prediction:\np(ŷ|D) = Σₘ p(ŷ|M_m, D) · p(M_m|D)\n\nWhere:\n- p(ŷ|M_m, D) = prediction from model M_m given data D\n- p(M_m|D) = posterior probability of model M_m\n- D = observed data\n\nModel Posterior (Bayes' Rule):\np(M_m|D) = p(D|M_m) · p(M_m) / Σₖ p(D|M_k) · p(M_k)\n\nWhere:\n- p(D|M_m) = marginal likelihood (model evidence)\n- p(M_m) = prior probability of model m\n\nOften approximated using:\n- BIC: p(M_m|D) ∝ exp(-0.5 · BIC_m)\n- AIC: p(M_m|D) ∝ exp(-0.5 · AIC_m)\n\nModels with better fit and appropriate complexity get higher weight.\n\nThink of BMA like being on a jury where each juror has a different theory about what happened, and you need to reach a verdict. Instead of forcing everyone to agree on one theory, BMA lets each juror present their theory weighted by how convincing their evidence is. A theory with strong, simple evidence gets more weight; a complex theory that barely fits the facts gets less weight. The final verdict is a probability-weighted combination of all theories, which is often wiser than picking any single theory. In trading, BMA combines competing models (GARCH for volatility, ARIMA for trends, regime-switching for state changes) by automatically weighting each based on how well it explains recent market behavior, giving you probabilistic forecasts that honestly reflect model uncertainty rather than false confidence from a single model.","tags":["State Space"],"relPath":"public/concept-list/list-concepts/group 15/Bayesian_Model_Averaging.txt","hasFullInfo":true},{"id":297,"title":"Convergent Cross Mapping (CCM)","filename":"Convergent_Cross_Mapping.txt","group":"group 15","groupNum":15,"categoryId":48,"categoryTitle":"48. CAUSALITY & DEPENDENCE TESTING","subcategory":"General","summary":"Nonlinear causality","overview":"A method for detecting causal relationships in dynamically coupled nonlinear systems, particularly effective when traditional correlation or Granger causality methods fail. Developed by Sugihara et al. in 2012, CCM is based on state-space reconstruction from Takens' theorem and tests whether the historical record of one variable contains information about the state of another. Unlike Granger causality which tests predictive ability, CCM identifies whether two variables are from the same dynamical system by checking if one variable's attractor can be reconstructed from the other's time series. The \"convergence\" aspect means that as more data is collected, the cross-mapping skill should improve if true causality exists.","formula":"1. Reconstruct attractor manifold M_X from time series X using time-delay embedding\n2. For each point in M_X, find k nearest neighbors\n3. Use these neighbors to estimate corresponding values in Y\n4. Correlation between estimated and actual Y values gives cross-map skill ρ(X→Y)\n5. Repeat with increasing library length L\n6. If ρ(X→Y) converges to high value as L increases, X is causally influenced by Y\n\nNote: Direction is counterintuitive - if you can predict Y from X's attractor, Y causes X.","parameters":"","intuition":"Imagine two dancers performing together. Even if you only watch one dancer, you might be able to figure out what the other dancer is doing because they're responding to each other. CCM is like testing whether watching Dancer A's moves for longer and longer periods lets you better reconstruct what Dancer B was doing - if it does, it means B is actually leading and A is following. In trading, this helps discover hidden causal relationships that don't show up in simple correlation, like whether trading volume changes are actually driving price moves (not just correlating with them), especially in complex market dynamics where causes and effects are intertwined.","rawContent":"A method for detecting causal relationships in dynamically coupled nonlinear systems, particularly effective when traditional correlation or Granger causality methods fail. Developed by Sugihara et al. in 2012, CCM is based on state-space reconstruction from Takens' theorem and tests whether the historical record of one variable contains information about the state of another. Unlike Granger causality which tests predictive ability, CCM identifies whether two variables are from the same dynamical system by checking if one variable's attractor can be reconstructed from the other's time series. The \"convergence\" aspect means that as more data is collected, the cross-mapping skill should improve if true causality exists.\n\n1. Reconstruct attractor manifold M_X from time series X using time-delay embedding\n2. For each point in M_X, find k nearest neighbors\n3. Use these neighbors to estimate corresponding values in Y\n4. Correlation between estimated and actual Y values gives cross-map skill ρ(X→Y)\n5. Repeat with increasing library length L\n6. If ρ(X→Y) converges to high value as L increases, X is causally influenced by Y\n\nNote: Direction is counterintuitive - if you can predict Y from X's attractor, Y causes X.\n\nImagine two dancers performing together. Even if you only watch one dancer, you might be able to figure out what the other dancer is doing because they're responding to each other. CCM is like testing whether watching Dancer A's moves for longer and longer periods lets you better reconstruct what Dancer B was doing - if it does, it means B is actually leading and A is following. In trading, this helps discover hidden causal relationships that don't show up in simple correlation, like whether trading volume changes are actually driving price moves (not just correlating with them), especially in complex market dynamics where causes and effects are intertwined.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 15/Convergent_Cross_Mapping.txt","hasFullInfo":true},{"id":298,"title":"Convex Optimization Filters","filename":"Convex_Optimization_Filters.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Convex problem solvers","overview":"A class of signal processing methods that formulate filtering as a convex optimization problem, guaranteeing a globally optimal solution. These filters frame denoising, smoothing, or trend extraction as minimizing a convex objective function subject to convex constraints. The convexity property ensures that any local minimum is also a global minimum, making these methods reliable and computationally tractable. Common formulations include minimizing reconstruction error plus a regularization term (like total variation or L1/L2 penalties) to promote desired signal properties such as smoothness or sparsity. These filters are widely used in modern signal processing because they provide theoretical guarantees and can incorporate domain knowledge through carefully chosen constraints.","formula":"General Convex Filter Formulation:\nminimize f(x) = ||y - x||² + λR(x)","parameters":"Where:\n- y = observed noisy signal\n- x = filtered signal (optimization variable)\n- ||y - x||² = data fidelity term (keep close to observations)\n- R(x) = regularization term (promote smoothness/sparsity)\n- λ = regularization parameter (controls trade-off)\n\nCommon regularizers:\n- R(x) = ||Dx||₁ (Total Variation - promotes piecewise constant)\n- R(x) = ||Dx||₂² (Tikhonov - promotes smoothness)\n- R(x) = ||x||₁ (Lasso - promotes sparsity)\n\nSolution methods: gradient descent, proximal algorithms, ADMM","intuition":"Think of filtering as a balancing act: you want your smoothed signal to stay close to the actual noisy data, but you also want it to be \"nice\" (smooth, simple, or sparse). Convex optimization filters are like finding the perfect compromise mathematically guaranteed to be the best possible balance. Imagine smoothing a bumpy road - you want to follow the general terrain but remove the small bumps. The \"convex\" part means there's one clear best answer, not multiple local solutions. In trading, these filters extract clean price trends while preserving important features like breakouts, and you can be confident you're getting the mathematically optimal smoothing for your chosen trade-off between noise removal and signal preservation.","rawContent":"A class of signal processing methods that formulate filtering as a convex optimization problem, guaranteeing a globally optimal solution. These filters frame denoising, smoothing, or trend extraction as minimizing a convex objective function subject to convex constraints. The convexity property ensures that any local minimum is also a global minimum, making these methods reliable and computationally tractable. Common formulations include minimizing reconstruction error plus a regularization term (like total variation or L1/L2 penalties) to promote desired signal properties such as smoothness or sparsity. These filters are widely used in modern signal processing because they provide theoretical guarantees and can incorporate domain knowledge through carefully chosen constraints.\n\nGeneral Convex Filter Formulation:\nminimize f(x) = ||y - x||² + λR(x)\n\nWhere:\n- y = observed noisy signal\n- x = filtered signal (optimization variable)\n- ||y - x||² = data fidelity term (keep close to observations)\n- R(x) = regularization term (promote smoothness/sparsity)\n- λ = regularization parameter (controls trade-off)\n\nCommon regularizers:\n- R(x) = ||Dx||₁ (Total Variation - promotes piecewise constant)\n- R(x) = ||Dx||₂² (Tikhonov - promotes smoothness)\n- R(x) = ||x||₁ (Lasso - promotes sparsity)\n\nSolution methods: gradient descent, proximal algorithms, ADMM\n\nThink of filtering as a balancing act: you want your smoothed signal to stay close to the actual noisy data, but you also want it to be \"nice\" (smooth, simple, or sparse). Convex optimization filters are like finding the perfect compromise mathematically guaranteed to be the best possible balance. Imagine smoothing a bumpy road - you want to follow the general terrain but remove the small bumps. The \"convex\" part means there's one clear best answer, not multiple local solutions. In trading, these filters extract clean price trends while preserving important features like breakouts, and you can be confident you're getting the mathematically optimal smoothing for your chosen trade-off between noise removal and signal preservation.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Convex_Optimization_Filters.txt","hasFullInfo":true},{"id":299,"title":"Distance Correlation","filename":"Distance_Correlation.txt","group":"group 15","groupNum":15,"categoryId":48,"categoryTitle":"48. CAUSALITY & DEPENDENCE TESTING","subcategory":"General","summary":"Nonlinear dependence","overview":"A measure of statistical dependence between two random variables or vectors that captures both linear and nonlinear relationships. Developed by Székely, Rizzo, and Bakirov in 2007, distance correlation equals zero if and only if the variables are independent, unlike Pearson correlation which can be zero even when strong nonlinear relationships exist. It measures all types of dependencies by comparing the distances between all pairs of points in each variable's distribution. The measure ranges from 0 (complete independence) to 1 (complete dependence) and is always non-negative. This makes it particularly valuable for detecting complex relationships that traditional correlation misses.","formula":"dCov²(X,Y) = (1/n²) Σᵢ Σⱼ AᵢⱼBᵢⱼ","parameters":"Where:\n- Aᵢⱼ = aᵢⱼ - āᵢ. - ā.ⱼ + ā..\n- aᵢⱼ = |Xᵢ - Xⱼ|\n- āᵢ. = (1/n)Σⱼ aᵢⱼ (row mean)\n- ā.ⱼ = (1/n)Σᵢ aᵢⱼ (column mean)\n- ā.. = (1/n²)ΣᵢΣⱼ aᵢⱼ (grand mean)\n- B matrix computed similarly from Y distances\n\ndCor(X,Y) = dCov(X,Y) / sqrt[dCov(X,X) × dCov(Y,Y)]\n\nRegular correlation only catches relationships where two things move up and down together in a straight-line fashion. Distance correlation is smarter - it catches ANY pattern of dependence, including curves, circles, or complex shapes. Imagine plotting height vs. weight - regular correlation works well. But imagine plotting time-of-day vs. temperature, which makes a curve (cool morning, hot afternoon, cool evening). Regular correlation might miss this pattern, but distance correlation catches it. In trading, this helps you find hidden relationships between assets that don't move together in simple ways, like options that have complex nonlinear relationships with their underlying stocks.","intuition":"","rawContent":"A measure of statistical dependence between two random variables or vectors that captures both linear and nonlinear relationships. Developed by Székely, Rizzo, and Bakirov in 2007, distance correlation equals zero if and only if the variables are independent, unlike Pearson correlation which can be zero even when strong nonlinear relationships exist. It measures all types of dependencies by comparing the distances between all pairs of points in each variable's distribution. The measure ranges from 0 (complete independence) to 1 (complete dependence) and is always non-negative. This makes it particularly valuable for detecting complex relationships that traditional correlation misses.\n\ndCov²(X,Y) = (1/n²) Σᵢ Σⱼ AᵢⱼBᵢⱼ\n\nWhere:\n- Aᵢⱼ = aᵢⱼ - āᵢ. - ā.ⱼ + ā..\n- aᵢⱼ = |Xᵢ - Xⱼ|\n- āᵢ. = (1/n)Σⱼ aᵢⱼ (row mean)\n- ā.ⱼ = (1/n)Σᵢ aᵢⱼ (column mean)\n- ā.. = (1/n²)ΣᵢΣⱼ aᵢⱼ (grand mean)\n- B matrix computed similarly from Y distances\n\ndCor(X,Y) = dCov(X,Y) / sqrt[dCov(X,X) × dCov(Y,Y)]\n\nRegular correlation only catches relationships where two things move up and down together in a straight-line fashion. Distance correlation is smarter - it catches ANY pattern of dependence, including curves, circles, or complex shapes. Imagine plotting height vs. weight - regular correlation works well. But imagine plotting time-of-day vs. temperature, which makes a curve (cool morning, hot afternoon, cool evening). Regular correlation might miss this pattern, but distance correlation catches it. In trading, this helps you find hidden relationships between assets that don't move together in simple ways, like options that have complex nonlinear relationships with their underlying stocks.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 15/Distance_Correlation.txt","hasFullInfo":true},{"id":300,"title":"Dynamic Model Averaging","filename":"Dynamic_Model_Averaging.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Time-varying weights","overview":"A Bayesian framework that combines forecasts from multiple models with time-varying weights that adapt to changing model performance. Unlike static model averaging where weights are fixed, dynamic model averaging (DMA) continuously updates both model predictions and the weights assigned to each model based on recent forecasting accuracy. This allows the system to shift emphasis between models as market conditions change, automatically favoring models that are currently performing well. The method uses a forgetting factor to give more weight to recent performance, enabling rapid adaptation to regime changes. DMA is particularly valuable in financial markets where the best forecasting model often changes over time, and no single model dominates across all market conditions.","formula":"Basic DMA Framework:\ny_t = Σₘ w_t,m · f_t,m + ε_t\n\nWeight Update (recursive):\nπ_t,m ∝ π_t-1,m^λ · L_t,m","parameters":"Where:\n- w_t,m = weight of model m at time t (normalized π values)\n- f_t,m = forecast from model m\n- L_t,m = likelihood/performance of model m at time t\n- λ ∈ [0,1] = forgetting factor\n- λ close to 1: slow adaptation (stable)\n- λ close to 0: fast adaptation (responsive)\n\nPerformance Measure:\nL_t,m = exp(-0.5 · (y_t - f_t,m)² / σ²)\n\nHigher likelihood for accurate predictions → higher weight","intuition":"Think of dynamic model averaging like a sports team coach who adjusts playing time based on current performance. During the season, the coach continuously evaluates which players are hot and gives them more minutes, while benching players in slumps. The \"forgetting factor\" is like how much the coach values recent games vs. season-long stats - a λ near 1 means season-long performance matters most (stable lineup), λ near 0 means last few games determine who plays (highly reactive). In trading, DMA automatically shifts between a trend-following model during trending markets, a mean-reversion model during sideways periods, and a volatility model during crisis periods, with weights smoothly adjusting as market character evolves - you get the right model for current conditions without manual intervention.","rawContent":"A Bayesian framework that combines forecasts from multiple models with time-varying weights that adapt to changing model performance. Unlike static model averaging where weights are fixed, dynamic model averaging (DMA) continuously updates both model predictions and the weights assigned to each model based on recent forecasting accuracy. This allows the system to shift emphasis between models as market conditions change, automatically favoring models that are currently performing well. The method uses a forgetting factor to give more weight to recent performance, enabling rapid adaptation to regime changes. DMA is particularly valuable in financial markets where the best forecasting model often changes over time, and no single model dominates across all market conditions.\n\nBasic DMA Framework:\ny_t = Σₘ w_t,m · f_t,m + ε_t\n\nWeight Update (recursive):\nπ_t,m ∝ π_t-1,m^λ · L_t,m\n\nWhere:\n- w_t,m = weight of model m at time t (normalized π values)\n- f_t,m = forecast from model m\n- L_t,m = likelihood/performance of model m at time t\n- λ ∈ [0,1] = forgetting factor\n- λ close to 1: slow adaptation (stable)\n- λ close to 0: fast adaptation (responsive)\n\nPerformance Measure:\nL_t,m = exp(-0.5 · (y_t - f_t,m)² / σ²)\n\nHigher likelihood for accurate predictions → higher weight\n\nThink of dynamic model averaging like a sports team coach who adjusts playing time based on current performance. During the season, the coach continuously evaluates which players are hot and gives them more minutes, while benching players in slumps. The \"forgetting factor\" is like how much the coach values recent games vs. season-long stats - a λ near 1 means season-long performance matters most (stable lineup), λ near 0 means last few games determine who plays (highly reactive). In trading, DMA automatically shifts between a trend-following model during trending markets, a mean-reversion model during sideways periods, and a volatility model during crisis periods, with weights smoothly adjusting as market character evolves - you get the right model for current conditions without manual intervention.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 15/Dynamic_Model_Averaging.txt","hasFullInfo":true},{"id":301,"title":"Frank-Wolfe Algorithm (Conditional Gradient Method)","filename":"Frank_Wolfe_Algorithm.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Conditional gradient method","overview":"An iterative optimization algorithm for constrained convex optimization that replaces projection steps with linear optimization over the constraint set. Developed by Marguerite Frank and Philip Wolfe in 1956, this method is particularly valuable when the constraint set has a complex geometry where projections are expensive, but linear optimization is cheap. At each iteration, the algorithm linearizes the objective function and solves a linear program over the feasible region to find a descent direction, then performs a line search. A key advantage is that iterates remain sparse when the linear subproblem solutions are sparse, making it ideal for large-scale problems. The method also provides primal-dual convergence guarantees and works well with simple constraints like simplices or polytopes.","formula":"Minimize f(x) subject to x ∈ D (convex constraint set)\n\nAlgorithm (iteration k):\n1. Linear minimization: sₖ = argmin_{s∈D} ⟨∇f(xₖ), s⟩\n2. Step size: ηₖ ∈ [0,1] (line search or ηₖ = 2/(k+2))\n3. Update: xₖ₊₁ = (1-ηₖ)xₖ + ηₖsₖ = xₖ + ηₖ(sₖ - xₖ)","parameters":"Where:\n- sₖ is vertex of constraint set D\n- ⟨·,·⟩ is inner product\n- Update is convex combination (stays in D)\n\nConvergence: O(1/k) for smooth convex functions","intuition":"Think of finding the lowest point in a mountainous region where you can only walk on designated trails (complex constraints). Instead of trying to directly project yourself onto trails when you step off (which is hard), you look at which direction is steepest downhill from where you stand, then ask \"if I could only walk on trails, which trail point moves most in that direction?\" You walk partway toward that trail point. Each step keeps you on valid trails automatically. In trading, Frank-Wolfe excels at portfolio problems with complex constraints like \"invest only in these 50 approved stocks with weights summing to 1\" - the linear step finds which stock to add/increase, much cheaper than projecting arbitrary portfolios back onto valid allocations.","rawContent":"An iterative optimization algorithm for constrained convex optimization that replaces projection steps with linear optimization over the constraint set. Developed by Marguerite Frank and Philip Wolfe in 1956, this method is particularly valuable when the constraint set has a complex geometry where projections are expensive, but linear optimization is cheap. At each iteration, the algorithm linearizes the objective function and solves a linear program over the feasible region to find a descent direction, then performs a line search. A key advantage is that iterates remain sparse when the linear subproblem solutions are sparse, making it ideal for large-scale problems. The method also provides primal-dual convergence guarantees and works well with simple constraints like simplices or polytopes.\n\nMinimize f(x) subject to x ∈ D (convex constraint set)\n\nAlgorithm (iteration k):\n1. Linear minimization: sₖ = argmin_{s∈D} ⟨∇f(xₖ), s⟩\n2. Step size: ηₖ ∈ [0,1] (line search or ηₖ = 2/(k+2))\n3. Update: xₖ₊₁ = (1-ηₖ)xₖ + ηₖsₖ = xₖ + ηₖ(sₖ - xₖ)\n\nWhere:\n- sₖ is vertex of constraint set D\n- ⟨·,·⟩ is inner product\n- Update is convex combination (stays in D)\n\nConvergence: O(1/k) for smooth convex functions\n\nThink of finding the lowest point in a mountainous region where you can only walk on designated trails (complex constraints). Instead of trying to directly project yourself onto trails when you step off (which is hard), you look at which direction is steepest downhill from where you stand, then ask \"if I could only walk on trails, which trail point moves most in that direction?\" You walk partway toward that trail point. Each step keeps you on valid trails automatically. In trading, Frank-Wolfe excels at portfolio problems with complex constraints like \"invest only in these 50 approved stocks with weights summing to 1\" - the linear step finds which stock to add/increase, much cheaper than projecting arbitrary portfolios back onto valid allocations.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Frank_Wolfe_Algorithm.txt","hasFullInfo":true},{"id":302,"title":"Gradient Projection Methods","filename":"Gradient_Projection_Methods.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Constrained optimization","overview":"Optimization algorithms for constrained problems that combine gradient descent steps with projections onto the feasible region. These methods are conceptually simple: take a gradient descent step (which may leave the feasible set), then project the result back onto the constraint set. The projection step ensures all iterates remain feasible while the gradient step drives toward optimality. Gradient projection methods are particularly effective when the projection operation can be computed efficiently, such as for box constraints, norm balls, or simplices. The method can handle both equality and inequality constraints and forms the foundation for many modern algorithms. Convergence is guaranteed for convex problems with Lipschitz continuous gradients.","formula":"Basic Algorithm:\nxₖ₊₁ = P_C(xₖ - αₖ∇f(xₖ))","parameters":"Where:\n- P_C(y) = argmin_{x∈C} ||x - y|| (projection onto constraint set C)\n- αₖ > 0 is step size\n- ∇f(xₖ) is gradient of objective\n\nCommon Projections:\n- Box: P_[a,b](y) = max(a, min(y, b)) (component-wise)\n- L2 ball: P_{||x||≤r}(y) = r·y/max(||y||,r)\n- Simplex: P_{x≥0, Σxᵢ=1}(y) requires sorting (efficient algorithms exist)\n- Non-negative orthant: P_{x≥0}(y) = max(y, 0)\n\nProjected gradient converges when C is convex and f is convex.","intuition":"Think of constrained optimization like trying to walk downhill while staying inside a fenced yard. Regular gradient descent just walks downhill, potentially leaving the yard. Gradient projection is simple: walk downhill, and if you step outside the fence, immediately step back to the nearest point on the fence. You keep walking and correcting until you reach the lowest point inside the yard. In trading, this handles realistic constraints naturally - like \"no short positions\" (project negative weights to zero) or \"total investment equals $1M\" (project onto simplex). The projection step is often very fast for common constraints, making this approach practical for real-time portfolio optimization with bounds and budget constraints.","rawContent":"Optimization algorithms for constrained problems that combine gradient descent steps with projections onto the feasible region. These methods are conceptually simple: take a gradient descent step (which may leave the feasible set), then project the result back onto the constraint set. The projection step ensures all iterates remain feasible while the gradient step drives toward optimality. Gradient projection methods are particularly effective when the projection operation can be computed efficiently, such as for box constraints, norm balls, or simplices. The method can handle both equality and inequality constraints and forms the foundation for many modern algorithms. Convergence is guaranteed for convex problems with Lipschitz continuous gradients.\n\nBasic Algorithm:\nxₖ₊₁ = P_C(xₖ - αₖ∇f(xₖ))\n\nWhere:\n- P_C(y) = argmin_{x∈C} ||x - y|| (projection onto constraint set C)\n- αₖ > 0 is step size\n- ∇f(xₖ) is gradient of objective\n\nCommon Projections:\n- Box: P_[a,b](y) = max(a, min(y, b)) (component-wise)\n- L2 ball: P_{||x||≤r}(y) = r·y/max(||y||,r)\n- Simplex: P_{x≥0, Σxᵢ=1}(y) requires sorting (efficient algorithms exist)\n- Non-negative orthant: P_{x≥0}(y) = max(y, 0)\n\nProjected gradient converges when C is convex and f is convex.\n\nThink of constrained optimization like trying to walk downhill while staying inside a fenced yard. Regular gradient descent just walks downhill, potentially leaving the yard. Gradient projection is simple: walk downhill, and if you step outside the fence, immediately step back to the nearest point on the fence. You keep walking and correcting until you reach the lowest point inside the yard. In trading, this handles realistic constraints naturally - like \"no short positions\" (project negative weights to zero) or \"total investment equals $1M\" (project onto simplex). The projection step is often very fast for common constraints, making this approach practical for real-time portfolio optimization with bounds and budget constraints.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Gradient_Projection_Methods.txt","hasFullInfo":true},{"id":303,"title":"Granger Causality Test","filename":"Granger_Causality_Test.txt","group":"group 15","groupNum":15,"categoryId":31,"categoryTitle":"31. COINTEGRATION & VECTOR MODELS","subcategory":"General","summary":"Predictive causality","overview":"A statistical hypothesis test for determining whether one time series is useful in forecasting another. The test examines whether past values of variable X provide statistically significant information about future values of variable Y, beyond what Y's own past values already provide. Named after economist Clive Granger who developed the concept, this test is fundamental in econometrics for establishing predictive relationships between time series. The test works by comparing two models: one that predicts Y using only Y's own lagged values, and another that includes both Y's lagged values and X's lagged values. If the second model significantly improves prediction accuracy, X is said to \"Granger-cause\" Y.","formula":"For two time series X and Y, test whether X Granger-causes Y:\n1. Regress Y(t) on lagged Y: Y(t) = α₀ + α₁Y(t-1) + ... + αₚY(t-p) + ε₁(t)\n2. Regress Y(t) on lagged Y and X: Y(t) = β₀ + β₁Y(t-1) + ... + βₚY(t-p) + γ₁X(t-1) + ... + γₚX(t-p) + ε₂(t)\n3. F-statistic = [(RSS₁ - RSS₂)/p] / [RSS₂/(n-2p-1)]\n4. If F > critical value, reject null hypothesis (X does not Granger-cause Y)\n\nWhere RSS₁ is residual sum of squares from model 1, RSS₂ from model 2, p is number of lags, n is sample size.\n\nImagine you're trying to predict tomorrow's temperature. You could use just past temperatures, or you could also include past barometric pressure readings. If adding yesterday's pressure readings helps you predict tomorrow's temperature better than using temperature alone, we'd say pressure \"Granger-causes\" temperature. It doesn't mean pressure physically causes temperature changes - it just means pressure readings contain useful predictive information. In trading, this helps identify if one asset's price movements can help predict another's, like testing if gold price changes predict stock market moves.","parameters":"","intuition":"","rawContent":"A statistical hypothesis test for determining whether one time series is useful in forecasting another. The test examines whether past values of variable X provide statistically significant information about future values of variable Y, beyond what Y's own past values already provide. Named after economist Clive Granger who developed the concept, this test is fundamental in econometrics for establishing predictive relationships between time series. The test works by comparing two models: one that predicts Y using only Y's own lagged values, and another that includes both Y's lagged values and X's lagged values. If the second model significantly improves prediction accuracy, X is said to \"Granger-cause\" Y.\n\nFor two time series X and Y, test whether X Granger-causes Y:\n1. Regress Y(t) on lagged Y: Y(t) = α₀ + α₁Y(t-1) + ... + αₚY(t-p) + ε₁(t)\n2. Regress Y(t) on lagged Y and X: Y(t) = β₀ + β₁Y(t-1) + ... + βₚY(t-p) + γ₁X(t-1) + ... + γₚX(t-p) + ε₂(t)\n3. F-statistic = [(RSS₁ - RSS₂)/p] / [RSS₂/(n-2p-1)]\n4. If F > critical value, reject null hypothesis (X does not Granger-cause Y)\n\nWhere RSS₁ is residual sum of squares from model 1, RSS₂ from model 2, p is number of lags, n is sample size.\n\nImagine you're trying to predict tomorrow's temperature. You could use just past temperatures, or you could also include past barometric pressure readings. If adding yesterday's pressure readings helps you predict tomorrow's temperature better than using temperature alone, we'd say pressure \"Granger-causes\" temperature. It doesn't mean pressure physically causes temperature changes - it just means pressure readings contain useful predictive information. In trading, this helps identify if one asset's price movements can help predict another's, like testing if gold price changes predict stock market moves.","tags":["Volatility","Cointegration"],"relPath":"public/concept-list/list-concepts/group 15/Granger_Causality_Test.txt","hasFullInfo":true},{"id":304,"title":"Hilbert-Huang Transform for Causality","filename":"Hilbert_Huang_Transform_Causality.txt","group":"group 15","groupNum":15,"categoryId":48,"categoryTitle":"48. CAUSALITY & DEPENDENCE TESTING","subcategory":"General","summary":"Instantaneous frequency causality","overview":"An adaptive time-frequency analysis method that combines Empirical Mode Decomposition (EMD) with Hilbert spectral analysis to detect causal relationships through instantaneous frequency and phase dynamics. Unlike Fourier-based methods that assume stationarity, the Hilbert-Huang Transform (HHT) can analyze nonlinear and non-stationary signals by decomposing them into Intrinsic Mode Functions (IMFs) that represent different time scales. For causality analysis, the method examines phase relationships and instantaneous frequencies between corresponding IMFs from two time series. If the phase of one signal consistently leads another, or if frequency changes in one precede changes in another, this suggests a causal relationship. This approach is particularly powerful for detecting time-varying causal relationships that change over different market regimes.","formula":"Causality Detection Process:\n1. Decompose X(t) and Y(t) into IMFs using EMD:\n   X(t) = Σᵢ IMFᵢˣ(t) + rₓ(t)\n   Y(t) = Σⱼ IMFⱼʸ(t) + rᵧ(t)\n\n2. Apply Hilbert transform to each IMF to get analytic signal:\n   Zᵢ(t) = IMFᵢ(t) + i·H[IMFᵢ(t)]\n\n3. Extract instantaneous phase φᵢ(t) and frequency ωᵢ(t):\n   φᵢ(t) = arctan[H[IMFᵢ(t)] / IMFᵢ(t)]\n   ωᵢ(t) = dφᵢ(t)/dt\n\n4. Calculate phase difference: Δφ(t) = φₓ(t) - φᵧ(t)\n\n5. If Δφ(t) is consistently positive/negative, X leads/lags Y","parameters":"","intuition":"Think of two musicians playing together - one might be leading while the other follows. HHT is like analyzing their performance by breaking it into different musical components (bass, melody, rhythm) and checking for each component whether one musician is slightly ahead of the other. It can even detect if the leadership changes during the song. In trading, this reveals dynamic causal relationships that evolve over time, like detecting when one market starts leading another during volatile periods, or discovering that small price oscillations cause large ones (or vice versa) at different times, helping you understand which market signals to watch for advance warning.","rawContent":"An adaptive time-frequency analysis method that combines Empirical Mode Decomposition (EMD) with Hilbert spectral analysis to detect causal relationships through instantaneous frequency and phase dynamics. Unlike Fourier-based methods that assume stationarity, the Hilbert-Huang Transform (HHT) can analyze nonlinear and non-stationary signals by decomposing them into Intrinsic Mode Functions (IMFs) that represent different time scales. For causality analysis, the method examines phase relationships and instantaneous frequencies between corresponding IMFs from two time series. If the phase of one signal consistently leads another, or if frequency changes in one precede changes in another, this suggests a causal relationship. This approach is particularly powerful for detecting time-varying causal relationships that change over different market regimes.\n\nCausality Detection Process:\n1. Decompose X(t) and Y(t) into IMFs using EMD:\n   X(t) = Σᵢ IMFᵢˣ(t) + rₓ(t)\n   Y(t) = Σⱼ IMFⱼʸ(t) + rᵧ(t)\n\n2. Apply Hilbert transform to each IMF to get analytic signal:\n   Zᵢ(t) = IMFᵢ(t) + i·H[IMFᵢ(t)]\n   \n3. Extract instantaneous phase φᵢ(t) and frequency ωᵢ(t):\n   φᵢ(t) = arctan[H[IMFᵢ(t)] / IMFᵢ(t)]\n   ωᵢ(t) = dφᵢ(t)/dt\n\n4. Calculate phase difference: Δφ(t) = φₓ(t) - φᵧ(t)\n\n5. If Δφ(t) is consistently positive/negative, X leads/lags Y\n\nThink of two musicians playing together - one might be leading while the other follows. HHT is like analyzing their performance by breaking it into different musical components (bass, melody, rhythm) and checking for each component whether one musician is slightly ahead of the other. It can even detect if the leadership changes during the song. In trading, this reveals dynamic causal relationships that evolve over time, like detecting when one market starts leading another during volatile periods, or discovering that small price oscillations cause large ones (or vice versa) at different times, helping you understand which market signals to watch for advance warning.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 15/Hilbert_Huang_Transform_Causality.txt","hasFullInfo":true},{"id":305,"title":"Interior Point Methods","filename":"Interior_Point_Methods.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Barrier function optimization","overview":"A family of algorithms for solving linear and nonlinear optimization problems by traversing through the interior of the feasible region rather than along its boundary. Unlike simplex methods that move along edges of the constraint polytope, interior point methods navigate through the interior, approaching the optimal solution from within. These methods use barrier functions to prevent iterates from violating inequality constraints, transforming constrained problems into a sequence of unconstrained problems. The breakthrough came with Karmarkar's algorithm in 1984, which showed polynomial-time complexity for linear programming. Interior point methods are particularly efficient for large-scale problems and have become the method of choice for many practical optimization applications including portfolio optimization and parameter estimation.","formula":"Barrier Method for inequality constrained problem:\nminimize f(x)\nsubject to gᵢ(x) ≤ 0, i=1,...,m\n\nCentral Path Method:\nminimize φ(x,μ) = f(x) - μ Σᵢ log(-gᵢ(x))","parameters":"Where:\n- μ > 0 is barrier parameter\n- log(-gᵢ(x)) is logarithmic barrier (→ ∞ as gᵢ → 0)\n\nAlgorithm:\n1. Start with μ₀ > 0 and feasible x₀\n2. Solve unconstrained problem: minimize φ(x,μₖ)\n3. Decrease μₖ₊₁ = β·μₖ (typically β ≈ 0.1-0.5)\n4. Repeat until μ small enough\n\nUses Newton's method for each unconstrained subproblem.\n\nImagine you're navigating a maze trying to reach the exit (optimal solution), but instead of hugging walls like most maze-solving methods, you walk confidently through the middle of corridors. There's an invisible force that gets stronger as you approach walls, keeping you from hitting them but letting you move freely in open space. As you get closer to the exit, this force weakens, letting you approach it precisely. In trading, interior point methods efficiently solve large portfolio optimization problems with hundreds of assets and constraints, finding the optimal allocation by smoothly navigating through all valid portfolios rather than checking corner cases, which is much faster for big problems.","intuition":"","rawContent":"A family of algorithms for solving linear and nonlinear optimization problems by traversing through the interior of the feasible region rather than along its boundary. Unlike simplex methods that move along edges of the constraint polytope, interior point methods navigate through the interior, approaching the optimal solution from within. These methods use barrier functions to prevent iterates from violating inequality constraints, transforming constrained problems into a sequence of unconstrained problems. The breakthrough came with Karmarkar's algorithm in 1984, which showed polynomial-time complexity for linear programming. Interior point methods are particularly efficient for large-scale problems and have become the method of choice for many practical optimization applications including portfolio optimization and parameter estimation.\n\nBarrier Method for inequality constrained problem:\nminimize f(x)\nsubject to gᵢ(x) ≤ 0, i=1,...,m\n\nCentral Path Method:\nminimize φ(x,μ) = f(x) - μ Σᵢ log(-gᵢ(x))\n\nWhere:\n- μ > 0 is barrier parameter\n- log(-gᵢ(x)) is logarithmic barrier (→ ∞ as gᵢ → 0)\n\nAlgorithm:\n1. Start with μ₀ > 0 and feasible x₀\n2. Solve unconstrained problem: minimize φ(x,μₖ)\n3. Decrease μₖ₊₁ = β·μₖ (typically β ≈ 0.1-0.5)\n4. Repeat until μ small enough\n\nUses Newton's method for each unconstrained subproblem.\n\nImagine you're navigating a maze trying to reach the exit (optimal solution), but instead of hugging walls like most maze-solving methods, you walk confidently through the middle of corridors. There's an invisible force that gets stronger as you approach walls, keeping you from hitting them but letting you move freely in open space. As you get closer to the exit, this force weakens, letting you approach it precisely. In trading, interior point methods efficiently solve large portfolio optimization problems with hundreds of assets and constraints, finding the optimal allocation by smoothly navigating through all valid portfolios rather than checking corner cases, which is much faster for big problems.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Interior_Point_Methods.txt","hasFullInfo":true},{"id":306,"title":"Maximal Information Coefficient (MIC)","filename":"Maximal_Information_Coefficient.txt","group":"group 15","groupNum":15,"categoryId":48,"categoryTitle":"48. CAUSALITY & DEPENDENCE TESTING","subcategory":"General","summary":"General association","overview":"A measure of statistical association that captures a wide range of functional and non-functional relationships between variables. Introduced by Reshef et al. in 2011, MIC is based on the concept of mutual information but explores many possible grid resolutions to find the strongest relationship. It assigns a score between 0 and 1, where values near 0 indicate no relationship and values near 1 indicate strong association. MIC has two key properties: generality (it captures many types of relationships with similar scores) and equitability (it gives similar scores to equally noisy relationships of different types). This makes it particularly useful for exploring datasets where the nature of relationships is unknown.","formula":"MIC(X,Y) = max_{a×b < B(n)} [I*(X,Y; a,b) / log₂(min(a,b))]","parameters":"Where:\n- I*(X,Y; a,b) = max mutual information over all a×b grids\n- a, b are grid dimensions (bins)\n- B(n) = n^0.6 is maximum grid resolution for sample size n\n- Mutual information normalized by log₂(min(a,b))\n\nAlgorithm:\n1. Partition X and Y into grids of various resolutions\n2. Calculate mutual information for each grid\n3. Normalize by grid resolution\n4. Take maximum across all valid grid sizes","intuition":"MIC is like having a universal translator for finding patterns. Imagine you're looking at two things that might be related, but you don't know how - maybe straight line, maybe curve, maybe something weird. MIC tests many different ways of dividing up the data into boxes and seeing if values in one variable help predict the other, then picks the best match. It's like trying different camera lenses to find which one shows the relationship most clearly. In trading, this is incredibly useful when screening hundreds of potential relationships - like finding which economic indicators actually matter for a stock, or discovering that volume has a weird nonlinear relationship with price that traditional correlation completely misses.","rawContent":"A measure of statistical association that captures a wide range of functional and non-functional relationships between variables. Introduced by Reshef et al. in 2011, MIC is based on the concept of mutual information but explores many possible grid resolutions to find the strongest relationship. It assigns a score between 0 and 1, where values near 0 indicate no relationship and values near 1 indicate strong association. MIC has two key properties: generality (it captures many types of relationships with similar scores) and equitability (it gives similar scores to equally noisy relationships of different types). This makes it particularly useful for exploring datasets where the nature of relationships is unknown.\n\nMIC(X,Y) = max_{a×b < B(n)} [I*(X,Y; a,b) / log₂(min(a,b))]\n\nWhere:\n- I*(X,Y; a,b) = max mutual information over all a×b grids\n- a, b are grid dimensions (bins)\n- B(n) = n^0.6 is maximum grid resolution for sample size n\n- Mutual information normalized by log₂(min(a,b))\n\nAlgorithm:\n1. Partition X and Y into grids of various resolutions\n2. Calculate mutual information for each grid\n3. Normalize by grid resolution\n4. Take maximum across all valid grid sizes\n\nMIC is like having a universal translator for finding patterns. Imagine you're looking at two things that might be related, but you don't know how - maybe straight line, maybe curve, maybe something weird. MIC tests many different ways of dividing up the data into boxes and seeing if values in one variable help predict the other, then picks the best match. It's like trying different camera lenses to find which one shows the relationship most clearly. In trading, this is incredibly useful when screening hundreds of potential relationships - like finding which economic indicators actually matter for a stock, or discovering that volume has a weird nonlinear relationship with price that traditional correlation completely misses.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 15/Maximal_Information_Coefficient.txt","hasFullInfo":true},{"id":307,"title":"Multi-Model Combination","filename":"Multi_Model_Combination.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Model averaging","overview":"A framework for combining predictions from fundamentally different types of models (neural networks, linear models, tree-based methods, etc.) to leverage their complementary strengths. Unlike ensembles of the same model type, multi-model combination explicitly seeks diversity in modeling approaches - each model type captures different aspects of the data. Linear models excel at linear relationships, trees at interactions and thresholds, neural networks at complex nonlinear patterns. By combining these diverse perspectives, the ensemble covers a broader range of scenarios and is more robust to model misspecification. Combination weights can be equal, accuracy-weighted, or learned through optimization. This approach is fundamental in modern machine learning competitions and sophisticated trading systems where robustness across market regimes is critical.","formula":"Combination Methods:\n\n1. Simple Average:\n   F(x) = (1/M) Σₘ f_m(x)\n\n2. Weighted Average:\n   F(x) = Σₘ w_m · f_m(x), where Σₘ w_m = 1\n\n3. Optimal Weights (minimize validation error):\n   w* = argmin_w Σᵢ L(yᵢ, Σₘ w_m · f_m(xᵢ))\n\n4. Constrained Combination:\n   Minimize error subject to:\n   - w_m ≥ 0 (non-negative)\n   - Σₘ w_m = 1 (convex combination)\n\nModel Types to Combine:\n- Linear/Ridge regression (captures linear trends)\n- Random Forest (robust to outliers, interactions)\n- Gradient Boosting (complex patterns)\n- Neural Networks (high-capacity nonlinear)\n- Support Vector Machines (robust boundaries)","parameters":"","intuition":"Think of multi-model combination like getting a property valuation from different types of experts: a statistical analyzer uses comparable sales data (linear model), an experienced appraiser notices unique features and renovations (tree model), and an AI trained on millions of properties captures subtle patterns (neural network). Each expert has blind spots but also unique insights. By combining their valuations, you get more reliable estimates that work across different property types and market conditions. In trading, combine a simple moving average system (works in trends), a mean-reversion model (works in ranges), and a machine learning model (works in complex regimes) - the combined system adapts to whatever market throws at it because different components handle different situations.","rawContent":"A framework for combining predictions from fundamentally different types of models (neural networks, linear models, tree-based methods, etc.) to leverage their complementary strengths. Unlike ensembles of the same model type, multi-model combination explicitly seeks diversity in modeling approaches - each model type captures different aspects of the data. Linear models excel at linear relationships, trees at interactions and thresholds, neural networks at complex nonlinear patterns. By combining these diverse perspectives, the ensemble covers a broader range of scenarios and is more robust to model misspecification. Combination weights can be equal, accuracy-weighted, or learned through optimization. This approach is fundamental in modern machine learning competitions and sophisticated trading systems where robustness across market regimes is critical.\n\nCombination Methods:\n\n1. Simple Average:\n   F(x) = (1/M) Σₘ f_m(x)\n\n2. Weighted Average:\n   F(x) = Σₘ w_m · f_m(x), where Σₘ w_m = 1\n\n3. Optimal Weights (minimize validation error):\n   w* = argmin_w Σᵢ L(yᵢ, Σₘ w_m · f_m(xᵢ))\n\n4. Constrained Combination:\n   Minimize error subject to:\n   - w_m ≥ 0 (non-negative)\n   - Σₘ w_m = 1 (convex combination)\n\nModel Types to Combine:\n- Linear/Ridge regression (captures linear trends)\n- Random Forest (robust to outliers, interactions)\n- Gradient Boosting (complex patterns)\n- Neural Networks (high-capacity nonlinear)\n- Support Vector Machines (robust boundaries)\n\nThink of multi-model combination like getting a property valuation from different types of experts: a statistical analyzer uses comparable sales data (linear model), an experienced appraiser notices unique features and renovations (tree model), and an AI trained on millions of properties captures subtle patterns (neural network). Each expert has blind spots but also unique insights. By combining their valuations, you get more reliable estimates that work across different property types and market conditions. In trading, combine a simple moving average system (works in trends), a mean-reversion model (works in ranges), and a machine learning model (works in complex regimes) - the combined system adapts to whatever market throws at it because different components handle different situations.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 15/Multi_Model_Combination.txt","hasFullInfo":true},{"id":308,"title":"Neural Network Ensembles","filename":"Neural_Network_Ensembles.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Multiple network averaging","overview":"A technique that combines predictions from multiple neural networks to improve accuracy, reduce overfitting, and provide uncertainty estimates. Each network in the ensemble may have different architectures, initialization, training data subsets, or hyperparameters, creating diversity in their predictions. The ensemble averages outputs (for regression) or combines probabilities (for classification), which typically performs better than any single network. This approach addresses neural networks' sensitivity to initialization and training randomness. Ensemble methods can also provide prediction confidence through disagreement measures - when networks agree, confidence is high; when they disagree, uncertainty is flagged. Advanced variants include snapshot ensembles (saving networks at different training epochs) and fast geometric ensembles (exploring multiple points along optimization paths).","formula":"Simple Ensemble:\n1. Train N neural networks {f₁, f₂, ..., f_N} with:\n   - Different random initializations\n   - Different training data (bagging/cross-validation)\n   - Different architectures or hyperparameters\n2. Prediction:\n   - Regression: ŷ = (1/N) Σᵢ fᵢ(x)\n   - Classification: p(c|x) = (1/N) Σᵢ pᵢ(c|x)\n\nUncertainty Estimation:\n- Variance: σ²(x) = (1/N) Σᵢ (fᵢ(x) - ŷ)²\n- High variance → high prediction uncertainty\n\nAdvanced Techniques:\n- Snapshot Ensemble: Save model at multiple training stages\n- Fast Geometric Ensemble: Explore loss surface paths\n- Negative Correlation Learning: Train networks to disagree on errors","parameters":"","intuition":"Think of neural network ensembles like getting medical opinions from multiple doctors who went to different medical schools and have different specialties. Each doctor (network) has unique training and perspective, so they might notice different things. By combining their diagnoses, you get more reliable medical advice than from any single doctor, and when all doctors agree, you can be very confident. When they disagree significantly, that signals uncertainty and you might need more tests. In trading, ensemble networks provide robust predictions for complex tasks like next-day volatility or price forecasts, with built-in confidence measures - when ensemble members disagree wildly, market conditions are probably unusual and you should trade cautiously or not at all.","rawContent":"A technique that combines predictions from multiple neural networks to improve accuracy, reduce overfitting, and provide uncertainty estimates. Each network in the ensemble may have different architectures, initialization, training data subsets, or hyperparameters, creating diversity in their predictions. The ensemble averages outputs (for regression) or combines probabilities (for classification), which typically performs better than any single network. This approach addresses neural networks' sensitivity to initialization and training randomness. Ensemble methods can also provide prediction confidence through disagreement measures - when networks agree, confidence is high; when they disagree, uncertainty is flagged. Advanced variants include snapshot ensembles (saving networks at different training epochs) and fast geometric ensembles (exploring multiple points along optimization paths).\n\nSimple Ensemble:\n1. Train N neural networks {f₁, f₂, ..., f_N} with:\n   - Different random initializations\n   - Different training data (bagging/cross-validation)\n   - Different architectures or hyperparameters\n2. Prediction:\n   - Regression: ŷ = (1/N) Σᵢ fᵢ(x)\n   - Classification: p(c|x) = (1/N) Σᵢ pᵢ(c|x)\n\nUncertainty Estimation:\n- Variance: σ²(x) = (1/N) Σᵢ (fᵢ(x) - ŷ)²\n- High variance → high prediction uncertainty\n\nAdvanced Techniques:\n- Snapshot Ensemble: Save model at multiple training stages\n- Fast Geometric Ensemble: Explore loss surface paths\n- Negative Correlation Learning: Train networks to disagree on errors\n\nThink of neural network ensembles like getting medical opinions from multiple doctors who went to different medical schools and have different specialties. Each doctor (network) has unique training and perspective, so they might notice different things. By combining their diagnoses, you get more reliable medical advice than from any single doctor, and when all doctors agree, you can be very confident. When they disagree significantly, that signals uncertainty and you might need more tests. In trading, ensemble networks provide robust predictions for complex tasks like next-day volatility or price forecasts, with built-in confidence measures - when ensemble members disagree wildly, market conditions are probably unusual and you should trade cautiously or not at all.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 15/Neural_Network_Ensembles.txt","hasFullInfo":true},{"id":309,"title":"Phase Synchronization Measure","filename":"Phase_Synchronization_Measure.txt","group":"group 15","groupNum":15,"categoryId":48,"categoryTitle":"48. CAUSALITY & DEPENDENCE TESTING","subcategory":"General","summary":"Oscillator coupling","overview":"A technique for detecting synchronized behavior between oscillatory systems by analyzing the relationship between their instantaneous phases, even when their amplitudes remain uncorrelated. Originating from chaos theory and nonlinear dynamics, phase synchronization occurs when the phases of two oscillators become locked while their amplitudes may vary independently. This is measured using phase locking indices or synchronization indices that quantify how consistently the phase difference remains bounded. Unlike amplitude-based correlation, phase synchronization can detect coupling in complex systems where traditional correlation fails. This is particularly relevant for detecting coordinated behavior in financial markets, regime changes, and cyclical relationships between assets.","formula":"Phase Locking Value (PLV):\nPLV = |⟨e^(i·Δφ(t))⟩|","parameters":"Where:\n- Δφ(t) = φₓ(t) - φᵧ(t) is instantaneous phase difference\n- φₓ(t), φᵧ(t) are instantaneous phases from Hilbert transform\n- ⟨·⟩ denotes time average\n- |·| is complex magnitude\n\nPLV ranges from 0 to 1:\n- PLV = 0: no phase synchronization (random phase difference)\n- PLV = 1: perfect phase locking (constant phase difference)\n\nAlternative measure (Phase Coherence):\nR = |Σₜ e^(i·Δφ(t))| / N","intuition":"Think of two pendulum clocks hanging on the same wall - even if they swing with different amplitudes (one big, one small), they might synchronize their timing so they both reach the left side at the same moments. Phase synchronization measures this timing coordination without caring about swing size. In markets, two stocks might have very different price levels and volatility (different amplitudes) but their cyclical behavior might be locked - maybe they both tend to peak on Mondays and trough on Fridays. This reveals hidden coordination that correlation misses, helping identify when markets are truly coupled vs. just coincidentally moving together, which is crucial for pair trading and understanding systemic risk.","rawContent":"A technique for detecting synchronized behavior between oscillatory systems by analyzing the relationship between their instantaneous phases, even when their amplitudes remain uncorrelated. Originating from chaos theory and nonlinear dynamics, phase synchronization occurs when the phases of two oscillators become locked while their amplitudes may vary independently. This is measured using phase locking indices or synchronization indices that quantify how consistently the phase difference remains bounded. Unlike amplitude-based correlation, phase synchronization can detect coupling in complex systems where traditional correlation fails. This is particularly relevant for detecting coordinated behavior in financial markets, regime changes, and cyclical relationships between assets.\n\nPhase Locking Value (PLV):\nPLV = |⟨e^(i·Δφ(t))⟩|\n\nWhere:\n- Δφ(t) = φₓ(t) - φᵧ(t) is instantaneous phase difference\n- φₓ(t), φᵧ(t) are instantaneous phases from Hilbert transform\n- ⟨·⟩ denotes time average\n- |·| is complex magnitude\n\nPLV ranges from 0 to 1:\n- PLV = 0: no phase synchronization (random phase difference)\n- PLV = 1: perfect phase locking (constant phase difference)\n\nAlternative measure (Phase Coherence):\nR = |Σₜ e^(i·Δφ(t))| / N\n\nThink of two pendulum clocks hanging on the same wall - even if they swing with different amplitudes (one big, one small), they might synchronize their timing so they both reach the left side at the same moments. Phase synchronization measures this timing coordination without caring about swing size. In markets, two stocks might have very different price levels and volatility (different amplitudes) but their cyclical behavior might be locked - maybe they both tend to peak on Mondays and trough on Fridays. This reveals hidden coordination that correlation misses, helping identify when markets are truly coupled vs. just coincidentally moving together, which is crucial for pair trading and understanding systemic risk.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 15/Phase_Synchronization_Measure.txt","hasFullInfo":true},{"id":310,"title":"Proximal Gradient Methods","filename":"Proximal_Gradient_Methods.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Non-smooth optimization","overview":"Optimization algorithms designed to minimize objective functions that can be split into a smooth part and a non-smooth part, combining gradient descent for the smooth component with proximal operators for the non-smooth component. These methods are particularly powerful for problems involving L1 regularization, total variation, and other non-differentiable penalties that promote sparsity or other structural properties. The key innovation is the proximal operator, which provides a way to handle non-smooth terms that don't have gradients. Proximal gradient methods have become fundamental in modern machine learning, compressed sensing, and signal processing, enabling efficient solutions to problems that were previously intractable.","formula":"Minimize f(x) = g(x) + h(x)","parameters":"Where:\n- g(x) is smooth and differentiable\n- h(x) is convex but possibly non-smooth (e.g., ||x||₁)\n\nProximal Gradient Update:\nxₖ₊₁ = prox_ηₖh(xₖ - ηₖ∇g(xₖ))\n\nProximal operator:\nprox_ηh(v) = argmin_x [h(x) + (1/2η)||x - v||²]\n\nExamples:\n- For h(x) = λ||x||₁: prox_ηh(v) = sign(v)·max(|v| - ηλ, 0) (soft thresholding)\n- For h(x) = indicator function: prox_ηh(v) = projection onto constraint set\n\nAccelerated variants (FISTA) achieve faster convergence.","intuition":"Think of optimization as climbing down a hill where part of the terrain is smooth but some areas have sharp ridges or cliffs (non-smooth parts). Regular gradient descent handles smooth hills well, but chokes on cliffs. Proximal methods are like having a special tool: you take a normal downhill step for the smooth part, then use a \"proximity tool\" that smartly handles the rough terrain by finding the nearest safe point. In trading, this lets you optimize portfolios with realistic constraints like \"no short positions\" or \"invest in at most 10 stocks\" (which create non-smooth math), solving problems like finding sparse portfolios that capture the market with minimal holdings.","rawContent":"Optimization algorithms designed to minimize objective functions that can be split into a smooth part and a non-smooth part, combining gradient descent for the smooth component with proximal operators for the non-smooth component. These methods are particularly powerful for problems involving L1 regularization, total variation, and other non-differentiable penalties that promote sparsity or other structural properties. The key innovation is the proximal operator, which provides a way to handle non-smooth terms that don't have gradients. Proximal gradient methods have become fundamental in modern machine learning, compressed sensing, and signal processing, enabling efficient solutions to problems that were previously intractable.\n\nMinimize f(x) = g(x) + h(x)\nWhere:\n- g(x) is smooth and differentiable\n- h(x) is convex but possibly non-smooth (e.g., ||x||₁)\n\nProximal Gradient Update:\nxₖ₊₁ = prox_ηₖh(xₖ - ηₖ∇g(xₖ))\n\nProximal operator:\nprox_ηh(v) = argmin_x [h(x) + (1/2η)||x - v||²]\n\nExamples:\n- For h(x) = λ||x||₁: prox_ηh(v) = sign(v)·max(|v| - ηλ, 0) (soft thresholding)\n- For h(x) = indicator function: prox_ηh(v) = projection onto constraint set\n\nAccelerated variants (FISTA) achieve faster convergence.\n\nThink of optimization as climbing down a hill where part of the terrain is smooth but some areas have sharp ridges or cliffs (non-smooth parts). Regular gradient descent handles smooth hills well, but chokes on cliffs. Proximal methods are like having a special tool: you take a normal downhill step for the smooth part, then use a \"proximity tool\" that smartly handles the rough terrain by finding the nearest safe point. In trading, this lets you optimize portfolios with realistic constraints like \"no short positions\" or \"invest in at most 10 stocks\" (which create non-smooth math), solving problems like finding sparse portfolios that capture the market with minimal holdings.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Proximal_Gradient_Methods.txt","hasFullInfo":true},{"id":311,"title":"Quasi-Newton Methods (BFGS, L-BFGS)","filename":"Quasi_Newton_Methods.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Approximate Hessian","overview":"A family of optimization algorithms that approximate Newton's method without requiring explicit computation of second derivatives (Hessian matrix). These methods build up curvature information iteratively using only gradient evaluations, making them much more practical than pure Newton's method for large-scale problems. The BFGS (Broyden-Fletcher-Goldfarb-Shanno) algorithm is the most popular quasi-Newton method, maintaining a positive definite approximation of the Hessian that is updated at each iteration. L-BFGS (Limited-memory BFGS) is a variant that uses minimal memory by storing only a few vectors instead of the full matrix, making it suitable for problems with thousands or millions of variables. These methods achieve superlinear convergence while requiring only O(n²) storage for BFGS or O(n) for L-BFGS.","formula":"BFGS Update:\nxₖ₊₁ = xₖ - αₖBₖ⁻¹∇f(xₖ)\n\nHessian approximation update:\nBₖ₊₁ = Bₖ + (yₖyₖᵀ)/(yₖᵀsₖ) - (Bₖsₖsₖᵀᴮₖ)/(sₖᵀBₖsₖ)","parameters":"Where:\n- sₖ = xₖ₊₁ - xₖ (position change)\n- yₖ = ∇f(xₖ₊₁) - ∇f(xₖ) (gradient change)\n- αₖ from line search\n- B₀ often initialized as identity matrix\n\nL-BFGS stores only m recent {sᵢ, yᵢ} pairs (typically m=5-20) instead of full Bₖ matrix.","intuition":"Imagine learning to ski down a mountain. Pure Newton's method is like having a perfect 3D map of every bump and curve (expensive to get), while gradient descent just tells you which way is downhill right now (ignores curvature). BFGS is smarter: as you ski, you remember how the slope curved on recent turns and use that memory to make better predictions about upcoming terrain without needing the full map. L-BFGS is like remembering just your last few turns instead of your entire ski history - much less memory but still very effective. In trading, quasi-Newton methods efficiently optimize complex models and portfolios, adapting to the \"landscape\" of your objective function using only gradients, achieving near-Newton speed without the computational cost.","rawContent":"A family of optimization algorithms that approximate Newton's method without requiring explicit computation of second derivatives (Hessian matrix). These methods build up curvature information iteratively using only gradient evaluations, making them much more practical than pure Newton's method for large-scale problems. The BFGS (Broyden-Fletcher-Goldfarb-Shanno) algorithm is the most popular quasi-Newton method, maintaining a positive definite approximation of the Hessian that is updated at each iteration. L-BFGS (Limited-memory BFGS) is a variant that uses minimal memory by storing only a few vectors instead of the full matrix, making it suitable for problems with thousands or millions of variables. These methods achieve superlinear convergence while requiring only O(n²) storage for BFGS or O(n) for L-BFGS.\n\nBFGS Update:\nxₖ₊₁ = xₖ - αₖBₖ⁻¹∇f(xₖ)\n\nHessian approximation update:\nBₖ₊₁ = Bₖ + (yₖyₖᵀ)/(yₖᵀsₖ) - (Bₖsₖsₖᵀᴮₖ)/(sₖᵀBₖsₖ)\n\nWhere:\n- sₖ = xₖ₊₁ - xₖ (position change)\n- yₖ = ∇f(xₖ₊₁) - ∇f(xₖ) (gradient change)\n- αₖ from line search\n- B₀ often initialized as identity matrix\n\nL-BFGS stores only m recent {sᵢ, yᵢ} pairs (typically m=5-20) instead of full Bₖ matrix.\n\nImagine learning to ski down a mountain. Pure Newton's method is like having a perfect 3D map of every bump and curve (expensive to get), while gradient descent just tells you which way is downhill right now (ignores curvature). BFGS is smarter: as you ski, you remember how the slope curved on recent turns and use that memory to make better predictions about upcoming terrain without needing the full map. L-BFGS is like remembering just your last few turns instead of your entire ski history - much less memory but still very effective. In trading, quasi-Newton methods efficiently optimize complex models and portfolios, adapting to the \"landscape\" of your objective function using only gradients, achieving near-Newton speed without the computational cost.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Quasi_Newton_Methods.txt","hasFullInfo":true},{"id":312,"title":"Random Forest for Feature Selection","filename":"Random_Forest_Feature_Selection.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Tree-based selection","overview":"A machine learning ensemble method that uses multiple decision trees to identify the most important features (variables) for prediction or classification tasks. Random Forest builds many decision trees on bootstrapped samples of the data, using random subsets of features at each split. Feature importance is calculated by measuring how much each feature decreases impurity (Gini or entropy) across all trees when used for splitting, or by measuring the decrease in prediction accuracy when a feature is randomly permuted. This provides a robust, non-parametric way to rank features by their predictive power. The ensemble nature makes it resistant to overfitting and capable of handling high-dimensional data with complex interactions, making it ideal for discovering which indicators or market factors actually matter for trading signals.","formula":"Feature Importance (Mean Decrease in Impurity):\nI(f) = (1/T) Σₜ Σₙ∈Sₜ(f) Δimpurity(n)","parameters":"Where:\n- T = number of trees\n- Sₜ(f) = nodes in tree t where feature f is used for splitting\n- Δimpurity(n) = decrease in impurity at node n\n- Impurity: Gini = Σᵢ pᵢ(1-pᵢ) or Entropy = -Σᵢ pᵢlog(pᵢ)\n\nPermutation Importance (more reliable):\n1. Calculate baseline model accuracy\n2. For each feature f:\n   - Randomly shuffle feature f values\n   - Calculate new model accuracy\n   - Importance = baseline - shuffled accuracy\n3. Repeat and average\n\nHigher importance → more predictive feature\n\nImagine you're trying to figure out which factors make a restaurant successful. Instead of asking one person (one decision tree), you ask 100 food critics (100 trees), but each critic only looks at random aspects like \"location, price, cuisine type\" for each decision. Random Forest tracks which factors keep coming up as decisive across all critics. If \"location\" keeps being the key decision in 80% of the critics' analyses while \"décor\" rarely matters, you know location is more important. In trading, this reveals which of your 50 technical indicators actually help predict moves - maybe RSI and volume matter but MACD doesn't - letting you simplify strategies by dropping useless features and focusing computational power on what works.","intuition":"","rawContent":"A machine learning ensemble method that uses multiple decision trees to identify the most important features (variables) for prediction or classification tasks. Random Forest builds many decision trees on bootstrapped samples of the data, using random subsets of features at each split. Feature importance is calculated by measuring how much each feature decreases impurity (Gini or entropy) across all trees when used for splitting, or by measuring the decrease in prediction accuracy when a feature is randomly permuted. This provides a robust, non-parametric way to rank features by their predictive power. The ensemble nature makes it resistant to overfitting and capable of handling high-dimensional data with complex interactions, making it ideal for discovering which indicators or market factors actually matter for trading signals.\n\nFeature Importance (Mean Decrease in Impurity):\nI(f) = (1/T) Σₜ Σₙ∈Sₜ(f) Δimpurity(n)\n\nWhere:\n- T = number of trees\n- Sₜ(f) = nodes in tree t where feature f is used for splitting\n- Δimpurity(n) = decrease in impurity at node n\n- Impurity: Gini = Σᵢ pᵢ(1-pᵢ) or Entropy = -Σᵢ pᵢlog(pᵢ)\n\nPermutation Importance (more reliable):\n1. Calculate baseline model accuracy\n2. For each feature f:\n   - Randomly shuffle feature f values\n   - Calculate new model accuracy\n   - Importance = baseline - shuffled accuracy\n3. Repeat and average\n\nHigher importance → more predictive feature\n\nImagine you're trying to figure out which factors make a restaurant successful. Instead of asking one person (one decision tree), you ask 100 food critics (100 trees), but each critic only looks at random aspects like \"location, price, cuisine type\" for each decision. Random Forest tracks which factors keep coming up as decisive across all critics. If \"location\" keeps being the key decision in 80% of the critics' analyses while \"décor\" rarely matters, you know location is more important. In trading, this reveals which of your 50 technical indicators actually help predict moves - maybe RSI and volume matter but MACD doesn't - letting you simplify strategies by dropping useless features and focusing computational power on what works.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 15/Random_Forest_Feature_Selection.txt","hasFullInfo":true},{"id":313,"title":"Sequential Quadratic Programming (SQP)","filename":"Sequential_Quadratic_Programming.txt","group":"group 15","groupNum":15,"categoryId":49,"categoryTitle":"49. OPTIMIZATION-BASED FILTERS","subcategory":"General","summary":"Nonlinear optimization","overview":"An iterative optimization method for solving nonlinear constrained optimization problems by successively solving quadratic programming approximations. SQP is considered one of the most effective methods for smooth nonlinear optimization and works by approximating the nonlinear problem with a sequence of quadratic subproblems. At each iteration, it constructs a quadratic model of the Lagrangian function and solves it to determine the search direction, then performs a line search to find the step size. The method combines the advantages of Newton's method for convergence speed with the ability to handle inequality and equality constraints. SQP is widely used in engineering and finance for portfolio optimization, optimal control, and parameter estimation.","formula":"At iteration k, solve quadratic subproblem:\nminimize q(d) = ∇f(xₖ)ᵀd + ½dᵀBₖd\nsubject to:\n  ∇cᵢ(xₖ)ᵀd + cᵢ(xₖ) = 0  (equality constraints)\n  ∇gⱼ(xₖ)ᵀd + gⱼ(xₖ) ≥ 0  (inequality constraints)","parameters":"Where:\n- d = search direction\n- Bₖ = approximation of Hessian of Lagrangian (often BFGS update)\n- f(x) = objective function\n- cᵢ(x) = equality constraints\n- gⱼ(x) = inequality constraints\n\nUpdate: xₖ₊₁ = xₖ + αₖdₖ (αₖ from line search)\n\nImagine you're hiking in fog trying to reach the lowest valley while staying on designated paths (constraints). You can't see far ahead, so you approximate the landscape nearby as a simple bowl shape (quadratic), find the best direction to walk within that approximation while respecting path boundaries, take a step, then repeat. Each step gets you closer to the optimal valley. In trading, SQP solves complex optimization problems like: \"maximize my portfolio return while keeping risk below X, maintaining at least Y in bonds, and never exceeding Z exposure to any sector\" - problems too complex for simple formulas but solvable through this systematic approximation approach.","intuition":"","rawContent":"An iterative optimization method for solving nonlinear constrained optimization problems by successively solving quadratic programming approximations. SQP is considered one of the most effective methods for smooth nonlinear optimization and works by approximating the nonlinear problem with a sequence of quadratic subproblems. At each iteration, it constructs a quadratic model of the Lagrangian function and solves it to determine the search direction, then performs a line search to find the step size. The method combines the advantages of Newton's method for convergence speed with the ability to handle inequality and equality constraints. SQP is widely used in engineering and finance for portfolio optimization, optimal control, and parameter estimation.\n\nAt iteration k, solve quadratic subproblem:\nminimize q(d) = ∇f(xₖ)ᵀd + ½dᵀBₖd\nsubject to:\n  ∇cᵢ(xₖ)ᵀd + cᵢ(xₖ) = 0  (equality constraints)\n  ∇gⱼ(xₖ)ᵀd + gⱼ(xₖ) ≥ 0  (inequality constraints)\n\nWhere:\n- d = search direction\n- Bₖ = approximation of Hessian of Lagrangian (often BFGS update)\n- f(x) = objective function\n- cᵢ(x) = equality constraints\n- gⱼ(x) = inequality constraints\n\nUpdate: xₖ₊₁ = xₖ + αₖdₖ (αₖ from line search)\n\nImagine you're hiking in fog trying to reach the lowest valley while staying on designated paths (constraints). You can't see far ahead, so you approximate the landscape nearby as a simple bowl shape (quadratic), find the best direction to walk within that approximation while respecting path boundaries, take a step, then repeat. Each step gets you closer to the optimal valley. In trading, SQP solves complex optimization problems like: \"maximize my portfolio return while keeping risk below X, maintaining at least Y in bonds, and never exceeding Z exposure to any sector\" - problems too complex for simple formulas but solvable through this systematic approximation approach.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Sequential_Quadratic_Programming.txt","hasFullInfo":true},{"id":314,"title":"Stacking Ensemble Filters (Meta-Learning)","filename":"Stacking_Ensemble_Filters.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Meta-learning","overview":"An ensemble machine learning technique that combines multiple base models by training a meta-model to optimally weight their predictions. Unlike simple averaging or voting, stacking learns how to best combine model predictions by treating them as features for a higher-level model. The approach typically uses cross-validation to generate out-of-fold predictions from base models, which prevents overfitting when training the meta-model. Base models can be diverse algorithms (neural networks, decision trees, linear models, etc.), and the meta-model learns when to trust each base model's predictions. This creates a sophisticated system that leverages the strengths of different modeling approaches. Stacking often achieves superior performance compared to individual models or simple averaging, making it popular in competitive machine learning and advanced trading systems.","formula":"Stacking Algorithm:\n1. Split data into K folds\n2. For each base model m:\n   a. Train on K-1 folds\n   b. Predict on held-out fold\n   c. Repeat for all folds to get out-of-fold predictions P_m\n3. Create meta-features: [P₁, P₂, ..., P_M]\n4. Train meta-model on meta-features to predict target y\n5. For new data:\n   a. Get predictions from all base models\n   b. Feed to meta-model for final prediction\n\nMeta-model examples:\n- Linear regression (interpretable weights)\n- Logistic regression (for classification)\n- Neural network (learn complex combinations)\n- Ridge/Lasso (regularized combination)\n\nKey: Base models trained on different data than meta-model sees.","parameters":"","intuition":"Think of stacking like assembling a team of experts with different specialties - a technician, an economist, and a psychologist - to predict stock moves. Each expert gives their opinion, but instead of just averaging those opinions, you have a smart manager (meta-model) who has learned over time that the technician is usually right during high volume, the economist during earnings season, and the psychologist during market crashes. The manager intelligently combines their advice based on the situation. In trading, stacking combines diverse models: maybe a neural network that's great at capturing trends, a tree model excellent at detecting reversals, and a linear model that handles fundamentals - the meta-layer learns when to trust each.","rawContent":"An ensemble machine learning technique that combines multiple base models by training a meta-model to optimally weight their predictions. Unlike simple averaging or voting, stacking learns how to best combine model predictions by treating them as features for a higher-level model. The approach typically uses cross-validation to generate out-of-fold predictions from base models, which prevents overfitting when training the meta-model. Base models can be diverse algorithms (neural networks, decision trees, linear models, etc.), and the meta-model learns when to trust each base model's predictions. This creates a sophisticated system that leverages the strengths of different modeling approaches. Stacking often achieves superior performance compared to individual models or simple averaging, making it popular in competitive machine learning and advanced trading systems.\n\nStacking Algorithm:\n1. Split data into K folds\n2. For each base model m:\n   a. Train on K-1 folds\n   b. Predict on held-out fold\n   c. Repeat for all folds to get out-of-fold predictions P_m\n3. Create meta-features: [P₁, P₂, ..., P_M]\n4. Train meta-model on meta-features to predict target y\n5. For new data:\n   a. Get predictions from all base models\n   b. Feed to meta-model for final prediction\n\nMeta-model examples:\n- Linear regression (interpretable weights)\n- Logistic regression (for classification)\n- Neural network (learn complex combinations)\n- Ridge/Lasso (regularized combination)\n\nKey: Base models trained on different data than meta-model sees.\n\nThink of stacking like assembling a team of experts with different specialties - a technician, an economist, and a psychologist - to predict stock moves. Each expert gives their opinion, but instead of just averaging those opinions, you have a smart manager (meta-model) who has learned over time that the technician is usually right during high volume, the economist during earnings season, and the psychologist during market crashes. The manager intelligently combines their advice based on the situation. In trading, stacking combines diverse models: maybe a neural network that's great at capturing trends, a tree model excellent at detecting reversals, and a linear model that handles fundamentals - the meta-layer learns when to trust each.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 15/Stacking_Ensemble_Filters.txt","hasFullInfo":true},{"id":315,"title":"Time-Lagged Cross-Correlation","filename":"Time_Lagged_Cross_Correlation.txt","group":"group 15","groupNum":15,"categoryId":48,"categoryTitle":"48. CAUSALITY & DEPENDENCE TESTING","subcategory":"General","summary":"Delayed correlation","overview":"A statistical method that measures the similarity between two time series as a function of the time lag between them. This technique calculates correlation coefficients at various time shifts to determine if one series leads or lags another, and by how much. Unlike simple correlation which only looks at simultaneous relationships, time-lagged cross-correlation reveals temporal dependencies and can identify optimal predictive lags. The method produces a correlogram showing correlation values across different lag periods, with peaks indicating the time delays at which the series are most strongly related. This is fundamental for establishing lead-lag relationships between markets, identifying optimal trading delays, and understanding information propagation across assets.","formula":"ρ(τ) = Σₜ [(X(t) - μₓ)(Y(t+τ) - μᵧ)] / [σₓ σᵧ √N]","parameters":"Where:\n- τ = time lag (can be positive or negative)\n- μₓ, μᵧ = means of X and Y\n- σₓ, σᵧ = standard deviations of X and Y\n- N = number of overlapping observations\n- Positive τ: X leads Y by τ periods\n- Negative τ: Y leads X by |τ| periods\n\nMaximum correlation at lag τ* indicates optimal predictive relationship:\nτ* = argmax_τ |ρ(τ)|","intuition":"Imagine you're watching two relay runners on a track. They're running similar patterns, but one is ahead of the other. Time-lagged cross-correlation is like systematically checking whether their stride patterns match better when you shift one runner's recording forward or backward in time. If the match is strongest when you shift Runner A's video forward by 5 seconds, then Runner B is leading by 5 seconds. In trading, this helps discover that crude oil price changes happen 2 days before airline stock changes, or that Asian markets' movements predict US market opens by 12 hours, giving you actionable timing information for trades.","rawContent":"A statistical method that measures the similarity between two time series as a function of the time lag between them. This technique calculates correlation coefficients at various time shifts to determine if one series leads or lags another, and by how much. Unlike simple correlation which only looks at simultaneous relationships, time-lagged cross-correlation reveals temporal dependencies and can identify optimal predictive lags. The method produces a correlogram showing correlation values across different lag periods, with peaks indicating the time delays at which the series are most strongly related. This is fundamental for establishing lead-lag relationships between markets, identifying optimal trading delays, and understanding information propagation across assets.\n\nρ(τ) = Σₜ [(X(t) - μₓ)(Y(t+τ) - μᵧ)] / [σₓ σᵧ √N]\n\nWhere:\n- τ = time lag (can be positive or negative)\n- μₓ, μᵧ = means of X and Y\n- σₓ, σᵧ = standard deviations of X and Y\n- N = number of overlapping observations\n- Positive τ: X leads Y by τ periods\n- Negative τ: Y leads X by |τ| periods\n\nMaximum correlation at lag τ* indicates optimal predictive relationship:\nτ* = argmax_τ |ρ(τ)|\n\nImagine you're watching two relay runners on a track. They're running similar patterns, but one is ahead of the other. Time-lagged cross-correlation is like systematically checking whether their stride patterns match better when you shift one runner's recording forward or backward in time. If the match is strongest when you shift Runner A's video forward by 5 seconds, then Runner B is leading by 5 seconds. In trading, this helps discover that crude oil price changes happen 2 days before airline stock changes, or that Asian markets' movements predict US market opens by 12 hours, giving you actionable timing information for trades.","tags":["Zero-Lag","Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 15/Time_Lagged_Cross_Correlation.txt","hasFullInfo":true},{"id":316,"title":"Transfer Entropy","filename":"Transfer_Entropy.txt","group":"group 15","groupNum":15,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Directed information transfer","overview":"An information-theoretic measure that quantifies the amount of directed information transfer between two time series processes. Unlike correlation-based methods, transfer entropy can detect nonlinear causal relationships and directional information flow. Developed by Thomas Schreiber in 2000, it measures the reduction in uncertainty about the future of one variable when considering the past of another variable, beyond what the first variable's own past already provides. This makes it superior to traditional causality measures for complex, nonlinear systems where relationships may not be captured by linear models. Transfer entropy is asymmetric, meaning TE(X→Y) ≠ TE(Y→X), allowing identification of directional causality.","formula":"TE(X→Y) = Σ p(yₜ₊₁, yₜ, xₜ) log[p(yₜ₊₁|yₜ, xₜ) / p(yₜ₊₁|yₜ)]","parameters":"Where:\n- yₜ represents past states of Y\n- xₜ represents past states of X\n- yₜ₊₁ represents future state of Y\n- p() denotes probability distributions\n- Sum is over all possible states\n\nPractical calculation often uses binning or kernel density estimation to estimate probabilities from data.","intuition":"Think of transfer entropy like measuring how much \"insider information\" one person gives another. If Alice and Bob are both trying to guess tomorrow's weather, and Bob can predict better when he knows what Alice observed today (beyond just knowing his own observations), then Alice is transferring information to Bob. The amount of improvement in Bob's predictions measures the transfer entropy from Alice to Bob. In trading, this reveals if one market (like oil) is giving you genuine advance warning about another market (like airline stocks), not just moving together but actually providing predictive power that helps you forecast better.","rawContent":"An information-theoretic measure that quantifies the amount of directed information transfer between two time series processes. Unlike correlation-based methods, transfer entropy can detect nonlinear causal relationships and directional information flow. Developed by Thomas Schreiber in 2000, it measures the reduction in uncertainty about the future of one variable when considering the past of another variable, beyond what the first variable's own past already provides. This makes it superior to traditional causality measures for complex, nonlinear systems where relationships may not be captured by linear models. Transfer entropy is asymmetric, meaning TE(X→Y) ≠ TE(Y→X), allowing identification of directional causality.\n\nTE(X→Y) = Σ p(yₜ₊₁, yₜ, xₜ) log[p(yₜ₊₁|yₜ, xₜ) / p(yₜ₊₁|yₜ)]\n\nWhere:\n- yₜ represents past states of Y\n- xₜ represents past states of X\n- yₜ₊₁ represents future state of Y\n- p() denotes probability distributions\n- Sum is over all possible states\n\nPractical calculation often uses binning or kernel density estimation to estimate probabilities from data.\n\nThink of transfer entropy like measuring how much \"insider information\" one person gives another. If Alice and Bob are both trying to guess tomorrow's weather, and Bob can predict better when he knows what Alice observed today (beyond just knowing his own observations), then Alice is transferring information to Bob. The amount of improvement in Bob's predictions measures the transfer entropy from Alice to Bob. In trading, this reveals if one market (like oil) is giving you genuine advance warning about another market (like airline stocks), not just moving together but actually providing predictive power that helps you forecast better.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 15/Transfer_Entropy.txt","hasFullInfo":true},{"id":317,"title":"Voting Classifiers","filename":"Voting_Classifiers.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Democratic ensemble","overview":"An ensemble method that combines predictions from multiple classification models through voting mechanisms to make final predictions. The approach can use hard voting (majority vote) where each model gets one vote for its predicted class, or soft voting (weighted average of probabilities) where models provide probability estimates that are averaged. Voting classifiers work on the principle that combining diverse models reduces variance and can correct individual model errors. The method is most effective when base models are relatively uncorrelated in their mistakes - if all models fail in the same way, voting provides no benefit. This simple but powerful technique often improves classification accuracy for trading signals, regime detection, and market direction prediction.","formula":"Hard Voting (Classification):\nŷ = mode{h₁(x), h₂(x), ..., h_M(x)}","parameters":"Where:\n- mode = most frequent prediction\n- h_m(x) = prediction from model m\n- Each model gets equal vote\n\nSoft Voting (Probability-based):\nŷ = argmax_c Σₘ w_m · p_m(c|x)\n\nWhere:\n- p_m(c|x) = probability model m assigns to class c\n- w_m = weight for model m (often 1/M for equal weights)\n- argmax_c selects class with highest weighted probability\n\nWeighted Voting:\n- Weights can be set by validation accuracy\n- Better models get more influence\n- w_m = accuracy_m / Σₖ accuracy_k","intuition":"Think of voting classifiers like a jury making a decision. In hard voting, each juror simply says \"guilty\" or \"not guilty\" and majority wins - simple but effective. In soft voting, each juror provides their confidence level like \"80% sure guilty\" and you average those confidences - more nuanced and typically better. You might also weight votes, giving experienced jurors more influence. In trading, combine multiple signal generators: maybe an RSI model, a pattern recognition model, and a volume model all vote on \"buy/sell/hold.\" When all three agree, you have high confidence; when they disagree, you get valuable information about uncertainty and might reduce position size or wait.","rawContent":"An ensemble method that combines predictions from multiple classification models through voting mechanisms to make final predictions. The approach can use hard voting (majority vote) where each model gets one vote for its predicted class, or soft voting (weighted average of probabilities) where models provide probability estimates that are averaged. Voting classifiers work on the principle that combining diverse models reduces variance and can correct individual model errors. The method is most effective when base models are relatively uncorrelated in their mistakes - if all models fail in the same way, voting provides no benefit. This simple but powerful technique often improves classification accuracy for trading signals, regime detection, and market direction prediction.\n\nHard Voting (Classification):\nŷ = mode{h₁(x), h₂(x), ..., h_M(x)}\n\nWhere:\n- mode = most frequent prediction\n- h_m(x) = prediction from model m\n- Each model gets equal vote\n\nSoft Voting (Probability-based):\nŷ = argmax_c Σₘ w_m · p_m(c|x)\n\nWhere:\n- p_m(c|x) = probability model m assigns to class c\n- w_m = weight for model m (often 1/M for equal weights)\n- argmax_c selects class with highest weighted probability\n\nWeighted Voting:\n- Weights can be set by validation accuracy\n- Better models get more influence\n- w_m = accuracy_m / Σₖ accuracy_k\n\nThink of voting classifiers like a jury making a decision. In hard voting, each juror simply says \"guilty\" or \"not guilty\" and majority wins - simple but effective. In soft voting, each juror provides their confidence level like \"80% sure guilty\" and you average those confidences - more nuanced and typically better. You might also weight votes, giving experienced jurors more influence. In trading, combine multiple signal generators: maybe an RSI model, a pattern recognition model, and a volume model all vote on \"buy/sell/hold.\" When all three agree, you have high confidence; when they disagree, you get valuable information about uncertainty and might reduce position size or wait.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 15/Voting_Classifiers.txt","hasFullInfo":true},{"id":318,"title":"XGBoost/Gradient Boosting for Signals","filename":"XGBoost_Gradient_Boosting.txt","group":"group 15","groupNum":15,"categoryId":50,"categoryTitle":"50. ENSEMBLE & HYBRID METHODS","subcategory":"General","summary":"Boosted trees","overview":"A powerful machine learning technique that builds an ensemble of decision trees sequentially, where each new tree corrects the errors of the previous trees. Unlike Random Forest which builds trees independently, gradient boosting creates trees that learn from the mistakes of earlier trees by fitting to residual errors. XGBoost (Extreme Gradient Boosting) is an optimized implementation that adds regularization to prevent overfitting, handles missing values intelligently, and uses advanced techniques for speed and accuracy. The method works by optimizing a differentiable loss function using gradient descent in function space. XGBoost has become dominant in machine learning competitions and is widely used for generating trading signals, predicting returns, and classifying market regimes due to its superior performance on structured data.","formula":"Gradient Boosting Algorithm:\n1. Initialize: F₀(x) = argmin_γ Σᵢ L(yᵢ, γ)\n2. For m = 1 to M:\n   a. Compute residuals: rᵢₘ = -∂L(yᵢ, F(xᵢ))/∂F(xᵢ)|_{F=Fₘ₋₁}\n   b. Fit tree hₘ(x) to residuals {rᵢₘ}\n   c. Update: Fₘ(x) = Fₘ₋₁(x) + ν·hₘ(x)\n\nXGBoost Objective:\nObj = Σᵢ L(yᵢ, ŷᵢ) + Σₖ Ω(fₖ)","parameters":"Where:\n- L(yᵢ, ŷᵢ) = loss function (MSE, log-loss, etc.)\n- Ω(fₖ) = regularization term (controls tree complexity)\n- ν = learning rate (shrinkage)\n- M = number of trees\n\nRegularization prevents overfitting despite many trees.","intuition":"Imagine you're learning archery and have multiple coaches helping you sequentially. First coach says \"you're shooting too far left,\" so you adjust. Second coach sees your new shots and says \"now you're too high,\" so you adjust again. Each coach corrects your remaining error. Gradient boosting does this with prediction models - each tree looks at what previous trees got wrong and tries to fix those specific mistakes. XGBoost is like having really smart coaches who also prevent you from over-correcting. In trading, XGBoost excels at predicting next-day returns or volatility using dozens of features (prices, volumes, indicators), automatically discovering complex patterns like \"when RSI>70 AND volume drops AND VIX rises, expect reversal\" - relationships too subtle for human detection.","rawContent":"A powerful machine learning technique that builds an ensemble of decision trees sequentially, where each new tree corrects the errors of the previous trees. Unlike Random Forest which builds trees independently, gradient boosting creates trees that learn from the mistakes of earlier trees by fitting to residual errors. XGBoost (Extreme Gradient Boosting) is an optimized implementation that adds regularization to prevent overfitting, handles missing values intelligently, and uses advanced techniques for speed and accuracy. The method works by optimizing a differentiable loss function using gradient descent in function space. XGBoost has become dominant in machine learning competitions and is widely used for generating trading signals, predicting returns, and classifying market regimes due to its superior performance on structured data.\n\nGradient Boosting Algorithm:\n1. Initialize: F₀(x) = argmin_γ Σᵢ L(yᵢ, γ)\n2. For m = 1 to M:\n   a. Compute residuals: rᵢₘ = -∂L(yᵢ, F(xᵢ))/∂F(xᵢ)|_{F=Fₘ₋₁}\n   b. Fit tree hₘ(x) to residuals {rᵢₘ}\n   c. Update: Fₘ(x) = Fₘ₋₁(x) + ν·hₘ(x)\n\nXGBoost Objective:\nObj = Σᵢ L(yᵢ, ŷᵢ) + Σₖ Ω(fₖ)\n\nWhere:\n- L(yᵢ, ŷᵢ) = loss function (MSE, log-loss, etc.)\n- Ω(fₖ) = regularization term (controls tree complexity)\n- ν = learning rate (shrinkage)\n- M = number of trees\n\nRegularization prevents overfitting despite many trees.\n\nImagine you're learning archery and have multiple coaches helping you sequentially. First coach says \"you're shooting too far left,\" so you adjust. Second coach sees your new shots and says \"now you're too high,\" so you adjust again. Each coach corrects your remaining error. Gradient boosting does this with prediction models - each tree looks at what previous trees got wrong and tries to fix those specific mistakes. XGBoost is like having really smart coaches who also prevent you from over-correcting. In trading, XGBoost excels at predicting next-day returns or volatility using dozens of features (prices, volumes, indicators), automatically discovering complex patterns like \"when RSI>70 AND volume drops AND VIX rises, expect reversal\" - relationships too subtle for human detection.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 15/XGBoost_Gradient_Boosting.txt","hasFullInfo":true},{"id":319,"title":"Anisotropic Diffusion (Perona-Malik)","filename":"Anisotropic_Diffusion.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Adaptive smoothing","overview":"An adaptive smoothing technique that diffuses (smooths) price data at different rates depending on local gradients, preserving edges while removing noise. Unlike isotropic diffusion (which smooths equally in all directions), anisotropic diffusion reduces smoothing near large gradients (edges/breakouts) and increases it in flat regions. This creates noise-free consolidations while maintaining sharp trend changes.","formula":"The method models heat diffusion with spatially-varying conductivity: smooth regions have high conductivity (diffuse quickly), while edges have low conductivity (resist diffusion).\n\nMathematical formulation:\nDiffusion equation:\n∂u/∂t = div(c(||∇u||) * ∇u)\n\nFor discrete 1D time series:\nu_i^(t+1) = u_i^(t) + λ * [c_N * ∇_N u + c_S * ∇_S u]","parameters":"Where:\n- u_i^(t) = price value at bar i, iteration t\n- ∇_N u = u_(i+1) - u_i (north/forward gradient)\n- ∇_S u = u_i - u_(i-1) (south/backward gradient)\n- c_N, c_S = conductivity coefficients\n- λ = step size (typically 0.1-0.25)\n\nConductivity functions:\nOption 1: c(∇u) = exp(-(||∇u|| / K)²)\nOption 2: c(∇u) = 1 / (1 + (||∇u|| / K)²)\n\nWhere:\n- K = edge threshold parameter (controls what counts as an \"edge\")\n- ||∇u|| = gradient magnitude\n\nSetting K:\nK = percentile(|∇u|, 90) * 0.5\nor K = noise_level * 2\n\nTypical implementation:\n- Initialize: u^(0) = f (noisy input)\n- Iterate: 20-100 steps\n- Step size λ: 0.15-0.25 (must be < 0.25 for stability)\n\nBehavior:\n- Small gradient (< K): c ≈ 1, full diffusion (smooth)\n- Large gradient (> K): c ≈ 0, no diffusion (preserve edge)\n\nPicture price movement like heat flowing through a material. In normal heat flow, heat spreads equally in all directions (that's regular smoothing/averaging). But imagine a material where the ability to conduct heat changes based on temperature differences - small differences allow heat to flow freely, but big differences create barriers. That's anisotropic diffusion for prices. Where prices are changing gradually (low gradient), the \"heat\" (smoothing) flows freely and removes noise. But at sharp moves (high gradient), a barrier forms and prevents smoothing across that edge. You run this diffusion process for many iterations, and noise gradually gets smoothed out while edges stay protected. The K parameter sets the \"barrier height\" - how big a price move needs to be before you protect it as a real edge versus smoothing it as noise.","intuition":"","rawContent":"An adaptive smoothing technique that diffuses (smooths) price data at different rates depending on local gradients, preserving edges while removing noise. Unlike isotropic diffusion (which smooths equally in all directions), anisotropic diffusion reduces smoothing near large gradients (edges/breakouts) and increases it in flat regions. This creates noise-free consolidations while maintaining sharp trend changes.\n\nThe method models heat diffusion with spatially-varying conductivity: smooth regions have high conductivity (diffuse quickly), while edges have low conductivity (resist diffusion).\n\nMathematical formulation:\nDiffusion equation:\n∂u/∂t = div(c(||∇u||) * ∇u)\n\nFor discrete 1D time series:\nu_i^(t+1) = u_i^(t) + λ * [c_N * ∇_N u + c_S * ∇_S u]\n\nWhere:\n- u_i^(t) = price value at bar i, iteration t\n- ∇_N u = u_(i+1) - u_i (north/forward gradient)\n- ∇_S u = u_i - u_(i-1) (south/backward gradient)\n- c_N, c_S = conductivity coefficients\n- λ = step size (typically 0.1-0.25)\n\nConductivity functions:\nOption 1: c(∇u) = exp(-(||∇u|| / K)²)\nOption 2: c(∇u) = 1 / (1 + (||∇u|| / K)²)\n\nWhere:\n- K = edge threshold parameter (controls what counts as an \"edge\")\n- ||∇u|| = gradient magnitude\n\nSetting K:\nK = percentile(|∇u|, 90) * 0.5\nor K = noise_level * 2\n\nTypical implementation:\n- Initialize: u^(0) = f (noisy input)\n- Iterate: 20-100 steps\n- Step size λ: 0.15-0.25 (must be < 0.25 for stability)\n\nBehavior:\n- Small gradient (< K): c ≈ 1, full diffusion (smooth)\n- Large gradient (> K): c ≈ 0, no diffusion (preserve edge)\n\nPicture price movement like heat flowing through a material. In normal heat flow, heat spreads equally in all directions (that's regular smoothing/averaging). But imagine a material where the ability to conduct heat changes based on temperature differences - small differences allow heat to flow freely, but big differences create barriers. That's anisotropic diffusion for prices. Where prices are changing gradually (low gradient), the \"heat\" (smoothing) flows freely and removes noise. But at sharp moves (high gradient), a barrier forms and prevents smoothing across that edge. You run this diffusion process for many iterations, and noise gradually gets smoothed out while edges stay protected. The K parameter sets the \"barrier height\" - how big a price move needs to be before you protect it as a real edge versus smoothing it as noise.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Anisotropic_Diffusion.txt","hasFullInfo":true},{"id":320,"title":"Approximate Non-Local Total Variation Algorithm","filename":"Approximate_Non-Local_Total_Variation_Algorithm.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Edge-preserving denoising","overview":"An edge-preserving denoising technique that removes noise from price data while maintaining sharp transitions at true trend changes and support/resistance breaks. Unlike local smoothing methods that blur everything equally, this algorithm looks at similar patterns across the entire dataset (non-local) and preserves important price structures while eliminating random noise.","formula":"The algorithm works by minimizing a functional that balances data fidelity with a regularization term based on total variation. The non-local aspect means it compares patches of data across different time periods, finding similar price patterns and using them to distinguish between noise and genuine price movements.\n\nMathematical formulation:\nminimize: ||u - f||² + λ * TV_NL(u)","parameters":"Where:\n- u = denoised output\n- f = noisy input (price data)\n- λ = regularization parameter (controls smoothing strength)\n- TV_NL = non-local total variation norm\n\nFor discrete time series:\nTV_NL(u) = Σᵢ Σⱼ w(i,j) * |u(i) - u(j)|\n\nWhere w(i,j) represents similarity weights between data points i and j based on patch comparison.","intuition":"Think of this like having a smart noise filter that knows the difference between real price movements and random jitter. Instead of just averaging nearby prices (which would blur genuine breakouts), it looks across the entire chart for similar price patterns. If multiple similar patterns all show a sharp move, it keeps that move sharp. But if only one isolated bar has a weird spike that doesn't match any other patterns, it smooths that out as noise. It's like crowd-sourcing the decision about what's real and what's noise by checking if similar situations elsewhere confirm the movement.","rawContent":"An edge-preserving denoising technique that removes noise from price data while maintaining sharp transitions at true trend changes and support/resistance breaks. Unlike local smoothing methods that blur everything equally, this algorithm looks at similar patterns across the entire dataset (non-local) and preserves important price structures while eliminating random noise.\n\nThe algorithm works by minimizing a functional that balances data fidelity with a regularization term based on total variation. The non-local aspect means it compares patches of data across different time periods, finding similar price patterns and using them to distinguish between noise and genuine price movements.\n\nMathematical formulation:\nminimize: ||u - f||² + λ * TV_NL(u)\n\nWhere:\n- u = denoised output\n- f = noisy input (price data)\n- λ = regularization parameter (controls smoothing strength)\n- TV_NL = non-local total variation norm\n\nFor discrete time series:\nTV_NL(u) = Σᵢ Σⱼ w(i,j) * |u(i) - u(j)|\n\nWhere w(i,j) represents similarity weights between data points i and j based on patch comparison.\n\nThink of this like having a smart noise filter that knows the difference between real price movements and random jitter. Instead of just averaging nearby prices (which would blur genuine breakouts), it looks across the entire chart for similar price patterns. If multiple similar patterns all show a sharp move, it keeps that move sharp. But if only one isolated bar has a weird spike that doesn't match any other patterns, it smooths that out as noise. It's like crowd-sourcing the decision about what's real and what's noise by checking if similar situations elsewhere confirm the movement.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Approximate_Non-Local_Total_Variation_Algorithm.txt","hasFullInfo":true},{"id":321,"title":"Attention Mechanism for Time Series","filename":"Attention_Mechanism_Time_Series.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Self-attention on sequences","overview":"A neural network component that learns to focus on the most relevant historical price bars when making predictions or extracting features. Instead of treating all historical data equally or fading recent data with fixed weights (like exponential smoothing), attention mechanisms dynamically compute importance weights based on the current context, allowing the model to \"attend\" to whichever historical patterns are most relevant.","formula":"The mechanism computes similarity between the current state and all historical states, then uses these similarities as weights to create a context-aware representation.\n\nMathematical formulation:\nBasic attention score:\ne_t,i = score(h_t, h_i)\n\nCommon scoring functions:\n1. Dot-product: score(h_t, h_i) = h_t^T * h_i\n2. Scaled dot-product: score(h_t, h_i) = (h_t^T * h_i) / √d\n3. Additive: score(h_t, h_i) = v^T * tanh(W_1*h_t + W_2*h_i)\n4. Multiplicative: score(h_t, h_i) = h_t^T * W * h_i\n\nAttention weights (normalized scores):\nα_t,i = exp(e_t,i) / Σⱼ exp(e_t,j)\n\nContext vector (weighted sum):\nc_t = Σᵢ α_t,i * h_i","parameters":"Where:\n- h_t = current hidden state (encoded current price context)\n- h_i = historical hidden state at time i\n- α_t,i = attention weight from time t to time i\n- c_t = context vector (attended historical information)\n- d = dimension of hidden states\n\nFor time series forecasting:\nOutput = f(c_t, h_t)\n\nWhere f is typically a feed-forward network combining context with current state.\n\nTemporal Attention variant:\nLimits attention to a sliding window:\nα_t,i = exp(e_t,i) / Σⱼ∈[t-w, t] exp(e_t,j)\n\nWhere w = window size (e.g., 50-200 bars)\n\nSelf-Attention (each timestep attends to all timesteps):\nFor each position i: c_i = Σⱼ α_i,j * h_j\n\nPractical implementation for trading:\nInput: Price sequence → Embedding → Hidden states\nAttention: Compute weights showing which past bars matter\nOutput: Context-aware features for prediction or filtering","intuition":"Think of attention like a smart spotlight on your price chart. Traditional indicators use fixed rules - \"the last 20 bars matter equally\" or \"recent bars matter more, with exponential decay.\" Attention learns a different strategy: \"which historical bars look most like the current situation?\" If you're at a resistance level, it automatically gives high weight to past times you were at resistance, even if that was 100 bars ago. If you're in a tight range, it focuses on previous range-bound periods. The weights aren't fixed - they're computed fresh each bar based on similarity between now and then. It's like having an adaptive memory that recalls the most relevant past experiences for each new situation, learned from data rather than programmed with rules.","rawContent":"A neural network component that learns to focus on the most relevant historical price bars when making predictions or extracting features. Instead of treating all historical data equally or fading recent data with fixed weights (like exponential smoothing), attention mechanisms dynamically compute importance weights based on the current context, allowing the model to \"attend\" to whichever historical patterns are most relevant.\n\nThe mechanism computes similarity between the current state and all historical states, then uses these similarities as weights to create a context-aware representation.\n\nMathematical formulation:\nBasic attention score:\ne_t,i = score(h_t, h_i)\n\nCommon scoring functions:\n1. Dot-product: score(h_t, h_i) = h_t^T * h_i\n2. Scaled dot-product: score(h_t, h_i) = (h_t^T * h_i) / √d\n3. Additive: score(h_t, h_i) = v^T * tanh(W_1*h_t + W_2*h_i)\n4. Multiplicative: score(h_t, h_i) = h_t^T * W * h_i\n\nAttention weights (normalized scores):\nα_t,i = exp(e_t,i) / Σⱼ exp(e_t,j)\n\nContext vector (weighted sum):\nc_t = Σᵢ α_t,i * h_i\n\nWhere:\n- h_t = current hidden state (encoded current price context)\n- h_i = historical hidden state at time i\n- α_t,i = attention weight from time t to time i\n- c_t = context vector (attended historical information)\n- d = dimension of hidden states\n\nFor time series forecasting:\nOutput = f(c_t, h_t)\n\nWhere f is typically a feed-forward network combining context with current state.\n\nTemporal Attention variant:\nLimits attention to a sliding window:\nα_t,i = exp(e_t,i) / Σⱼ∈[t-w, t] exp(e_t,j)\n\nWhere w = window size (e.g., 50-200 bars)\n\nSelf-Attention (each timestep attends to all timesteps):\nFor each position i: c_i = Σⱼ α_i,j * h_j\n\nPractical implementation for trading:\nInput: Price sequence → Embedding → Hidden states\nAttention: Compute weights showing which past bars matter\nOutput: Context-aware features for prediction or filtering\n\nThink of attention like a smart spotlight on your price chart. Traditional indicators use fixed rules - \"the last 20 bars matter equally\" or \"recent bars matter more, with exponential decay.\" Attention learns a different strategy: \"which historical bars look most like the current situation?\" If you're at a resistance level, it automatically gives high weight to past times you were at resistance, even if that was 100 bars ago. If you're in a tight range, it focuses on previous range-bound periods. The weights aren't fixed - they're computed fresh each bar based on similarity between now and then. It's like having an adaptive memory that recalls the most relevant past experiences for each new situation, learned from data rather than programmed with rules.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Attention_Mechanism_Time_Series.txt","hasFullInfo":true},{"id":322,"title":"Autoencoders for Dimensionality Reduction","filename":"Autoencoders_Dimensionality_Reduction.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Neural compression","overview":"A neural network architecture that learns to compress high-dimensional data (many features, indicators, or price series) into a lower-dimensional representation (bottleneck) and then reconstruct the original data. For trading, autoencoders can compress dozens of indicators into a few meaningful features, remove noise, or learn compact representations of price patterns. The compressed representation captures the most important information while discarding redundant or noisy components.","formula":"The network has two parts: an encoder that compresses data and a decoder that reconstructs it. Training minimizes reconstruction error, forcing the bottleneck to capture essential information.\n\nMathematical formulation:\nEncoder:\nz = f_encoder(x) = σ(W_encoder * x + b_encoder)\n\nDecoder:\nx̂ = f_decoder(z) = σ(W_decoder * z + b_decoder)","parameters":"Where:\n- x = input (original features)\n- z = latent representation (compressed features)\n- x̂ = reconstructed output\n- σ = activation function (ReLU, tanh, etc.)\n- W, b = learned weights and biases\n\nMulti-layer autoencoder:\nEncoder: x → h₁ → h₂ → z (progressively smaller)\nDecoder: z → h₂' → h₁' → x̂ (progressively larger)\n\nLoss function:\nL = ||x - x̂||² + λ * Regularization\n\nCommon variants:\n1. L2 loss: Σᵢ(xᵢ - x̂ᵢ)²\n2. L1 loss: Σᵢ|xᵢ - x̂ᵢ|\n\nRegularization options:\n- L2 weight decay: λ * Σ||W||²\n- Sparsity penalty: force many z components to be zero\n- Denoising: corrupt input, learn to reconstruct clean version\n\nFor trading applications:\nInput dimension: 50-200 features\n- Multiple indicators (RSI, MACD, Bollinger, ATR, etc.)\n- Multiple timeframes\n- Price transformations (returns, log, etc.)\n\nBottleneck dimension: 5-20 features\n- Compact representation of market state\n\nArchitecture example:\nInput (100) → Dense(64) → Dense(32) → Bottleneck(10) → Dense(32) → Dense(64) → Output(100)\n\nTraining:\n- Minimize reconstruction error on historical data\n- 50-200 epochs with Adam optimizer\n- Learning rate: 0.001-0.01\n\nUsing the learned representation:\n1. Feature extraction: Use z for other models (SVM, random forest)\n2. Noise reduction: Use x̂ instead of x (smoother)\n3. Anomaly detection: Large ||x - x̂|| indicates unusual patterns\n4. Regime detection: Cluster z values to find market regimes","intuition":"Think of having 100 different indicators on your screen - RSI, MACD, Bollinger Bands, volume indicators, etc. They're redundant (many measure similar things) and noisy. An autoencoder is like hiring a data analyst who learns to summarize all 100 indicators into 10 essential numbers that capture everything important, then proves they did a good job by reconstructing the original 100 from just those 10. During training, it learns \"RSI, Stoch, and CCI are all measuring overbought/oversold, I can combine them into one number\" and \"these three volume indicators basically say the same thing, one number is enough.\" The 10-number compressed version (latent representation) becomes your actual trading features - much cleaner, no redundancy, captures what matters. You can use these 10 features instead of the messy 100.","rawContent":"A neural network architecture that learns to compress high-dimensional data (many features, indicators, or price series) into a lower-dimensional representation (bottleneck) and then reconstruct the original data. For trading, autoencoders can compress dozens of indicators into a few meaningful features, remove noise, or learn compact representations of price patterns. The compressed representation captures the most important information while discarding redundant or noisy components.\n\nThe network has two parts: an encoder that compresses data and a decoder that reconstructs it. Training minimizes reconstruction error, forcing the bottleneck to capture essential information.\n\nMathematical formulation:\nEncoder:\nz = f_encoder(x) = σ(W_encoder * x + b_encoder)\n\nDecoder:\nx̂ = f_decoder(z) = σ(W_decoder * z + b_decoder)\n\nWhere:\n- x = input (original features)\n- z = latent representation (compressed features)\n- x̂ = reconstructed output\n- σ = activation function (ReLU, tanh, etc.)\n- W, b = learned weights and biases\n\nMulti-layer autoencoder:\nEncoder: x → h₁ → h₂ → z (progressively smaller)\nDecoder: z → h₂' → h₁' → x̂ (progressively larger)\n\nLoss function:\nL = ||x - x̂||² + λ * Regularization\n\nCommon variants:\n1. L2 loss: Σᵢ(xᵢ - x̂ᵢ)²\n2. L1 loss: Σᵢ|xᵢ - x̂ᵢ|\n\nRegularization options:\n- L2 weight decay: λ * Σ||W||²\n- Sparsity penalty: force many z components to be zero\n- Denoising: corrupt input, learn to reconstruct clean version\n\nFor trading applications:\nInput dimension: 50-200 features\n- Multiple indicators (RSI, MACD, Bollinger, ATR, etc.)\n- Multiple timeframes\n- Price transformations (returns, log, etc.)\n\nBottleneck dimension: 5-20 features\n- Compact representation of market state\n\nArchitecture example:\nInput (100) → Dense(64) → Dense(32) → Bottleneck(10) → Dense(32) → Dense(64) → Output(100)\n\nTraining:\n- Minimize reconstruction error on historical data\n- 50-200 epochs with Adam optimizer\n- Learning rate: 0.001-0.01\n\nUsing the learned representation:\n1. Feature extraction: Use z for other models (SVM, random forest)\n2. Noise reduction: Use x̂ instead of x (smoother)\n3. Anomaly detection: Large ||x - x̂|| indicates unusual patterns\n4. Regime detection: Cluster z values to find market regimes\n\nThink of having 100 different indicators on your screen - RSI, MACD, Bollinger Bands, volume indicators, etc. They're redundant (many measure similar things) and noisy. An autoencoder is like hiring a data analyst who learns to summarize all 100 indicators into 10 essential numbers that capture everything important, then proves they did a good job by reconstructing the original 100 from just those 10. During training, it learns \"RSI, Stoch, and CCI are all measuring overbought/oversold, I can combine them into one number\" and \"these three volume indicators basically say the same thing, one number is enough.\" The 10-number compressed version (latent representation) becomes your actual trading features - much cleaner, no redundancy, captures what matters. You can use these 10 features instead of the messy 100.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Autoencoders_Dimensionality_Reduction.txt","hasFullInfo":true},{"id":323,"title":"Bidirectional LSTM (BiLSTM)","filename":"Bidirectional_LSTM.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Forward-backward LSTM","overview":"A neural network architecture that processes time series in both forward and backward directions simultaneously, combining information from both past and future context. While this makes BiLSTM unsuitable for real-time prediction (can't use future data), it's powerful for analysis, pattern recognition, and feature extraction where the full sequence is available, such as backtesting or identifying complete patterns in historical data.","formula":"The network runs two separate LSTM chains - one forward through time, one backward - and combines their outputs to create representations that incorporate context from both directions.\n\nMathematical formulation:\nForward LSTM (processes past → present):\nh⃗_t = LSTM_forward(x_t, h⃗_(t-1))\n\nBackward LSTM (processes future ← present):\nh⃖_t = LSTM_backward(x_t, h⃖_(t+1))\n\nCombined output:\ny_t = f([h⃗_t ; h⃖_t])","parameters":"Where:\n- h⃗_t = forward hidden state at time t\n- h⃖_t = backward hidden state at time t\n- [h⃗_t ; h⃖_t] = concatenation of forward and backward states\n- f = output function (linear layer, softmax, etc.)\n- x_t = input at time t\n\nFull BiLSTM equations:\nForward direction (t = 1 to T):\nf⃗_t = σ(W_f⃗ * [h⃗_(t-1), x_t] + b_f⃗)\ni⃗_t = σ(W_i⃗ * [h⃗_(t-1), x_t] + b_i⃗)\nC̃⃗_t = tanh(W_C⃗ * [h⃗_(t-1), x_t] + b_C⃗)\nC⃗_t = f⃗_t ⊙ C⃗_(t-1) + i⃗_t ⊙ C̃⃗_t\no⃗_t = σ(W_o⃗ * [h⃗_(t-1), x_t] + b_o⃗)\nh⃗_t = o⃗_t ⊙ tanh(C⃗_t)\n\nBackward direction (t = T to 1):\n(same equations with backward parameters and reverse time)\n\nFor trading applications:\nUse cases:\n1. Pattern recognition (head & shoulders, double tops, etc.)\n2. Complete trend classification (identify full trend after completion)\n3. Feature extraction for subsequent models\n4. Backtesting analysis (not live trading)\n\nArchitecture:\n- Input: Full price sequence [x_1, ..., x_T]\n- Forward LSTM: 64-256 units\n- Backward LSTM: 64-256 units (same size as forward)\n- Concatenated output: 128-512 dimensional features\n- Layers: 1-3 BiLSTM layers","intuition":"Think of analyzing a completed price pattern. Looking only forward in time (standard LSTM), you might see a rally but not know it's the left shoulder of a head-and-shoulders top. Looking only backward from the end, you see it completed but lack the context of what led to it. BiLSTM looks both ways simultaneously - at each bar, it knows both what came before AND what came after. This makes it perfect for pattern recognition on historical data: \"this bar is important because it's the neckline - I know this because I can see both the prior head formation AND the subsequent breakdown.\" You can't use this for live prediction (you don't have future bars yet), but for analyzing completed patterns, extracting features, or training models on historical sequences, having both-directions context makes pattern recognition much more powerful.","rawContent":"A neural network architecture that processes time series in both forward and backward directions simultaneously, combining information from both past and future context. While this makes BiLSTM unsuitable for real-time prediction (can't use future data), it's powerful for analysis, pattern recognition, and feature extraction where the full sequence is available, such as backtesting or identifying complete patterns in historical data.\n\nThe network runs two separate LSTM chains - one forward through time, one backward - and combines their outputs to create representations that incorporate context from both directions.\n\nMathematical formulation:\nForward LSTM (processes past → present):\nh⃗_t = LSTM_forward(x_t, h⃗_(t-1))\n\nBackward LSTM (processes future ← present):\nh⃖_t = LSTM_backward(x_t, h⃖_(t+1))\n\nCombined output:\ny_t = f([h⃗_t ; h⃖_t])\n\nWhere:\n- h⃗_t = forward hidden state at time t\n- h⃖_t = backward hidden state at time t\n- [h⃗_t ; h⃖_t] = concatenation of forward and backward states\n- f = output function (linear layer, softmax, etc.)\n- x_t = input at time t\n\nFull BiLSTM equations:\nForward direction (t = 1 to T):\nf⃗_t = σ(W_f⃗ * [h⃗_(t-1), x_t] + b_f⃗)\ni⃗_t = σ(W_i⃗ * [h⃗_(t-1), x_t] + b_i⃗)\nC̃⃗_t = tanh(W_C⃗ * [h⃗_(t-1), x_t] + b_C⃗)\nC⃗_t = f⃗_t ⊙ C⃗_(t-1) + i⃗_t ⊙ C̃⃗_t\no⃗_t = σ(W_o⃗ * [h⃗_(t-1), x_t] + b_o⃗)\nh⃗_t = o⃗_t ⊙ tanh(C⃗_t)\n\nBackward direction (t = T to 1):\n(same equations with backward parameters and reverse time)\n\nFor trading applications:\nUse cases:\n1. Pattern recognition (head & shoulders, double tops, etc.)\n2. Complete trend classification (identify full trend after completion)\n3. Feature extraction for subsequent models\n4. Backtesting analysis (not live trading)\n\nArchitecture:\n- Input: Full price sequence [x_1, ..., x_T]\n- Forward LSTM: 64-256 units\n- Backward LSTM: 64-256 units (same size as forward)\n- Concatenated output: 128-512 dimensional features\n- Layers: 1-3 BiLSTM layers\n\nThink of analyzing a completed price pattern. Looking only forward in time (standard LSTM), you might see a rally but not know it's the left shoulder of a head-and-shoulders top. Looking only backward from the end, you see it completed but lack the context of what led to it. BiLSTM looks both ways simultaneously - at each bar, it knows both what came before AND what came after. This makes it perfect for pattern recognition on historical data: \"this bar is important because it's the neckline - I know this because I can see both the prior head formation AND the subsequent breakdown.\" You can't use this for live prediction (you don't have future bars yet), but for analyzing completed patterns, extracting features, or training models on historical sequences, having both-directions context makes pattern recognition much more powerful.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Bidirectional_LSTM.txt","hasFullInfo":true},{"id":324,"title":"Bilateral Filter","filename":"Bilateral_Filter.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Edge-preserving smoothing","overview":"An edge-preserving smoothing technique that combines spatial proximity and value similarity to denoise price data. Unlike simple moving averages that weight only by distance, bilateral filtering gives high weight to nearby points that are also similar in value, effectively preserving sharp price transitions (breakouts, reversals) while smoothing noise in flat regions.","formula":"The filter uses two Gaussian kernels: one for spatial distance (how far apart in time) and one for value similarity (how different in price). Only bars that are both nearby AND similar in price get significant weight.\n\nMathematical formulation:\nu(i) = (Σⱼ w(i,j) * f(j)) / (Σⱼ w(i,j))\n\nCombined weight function:\nw(i,j) = w_spatial(i,j) * w_range(i,j)\n\nSpatial weight (distance in time):\nw_spatial(i,j) = exp(-(i-j)² / (2σ_d²))\n\nRange weight (similarity in value):\nw_range(i,j) = exp(-(f(i) - f(j))² / (2σ_r²))","parameters":"Where:\n- f(i), f(j) = price values at bars i and j\n- σ_d = spatial standard deviation (controls time neighborhood size)\n- σ_r = range standard deviation (controls value similarity tolerance)\n- i, j = bar indices\n\nFor trading applications:\nTypical parameters:\n- σ_d = 5-10 bars (spatial kernel width)\n- σ_r = 1-2 * ATR (range kernel width)\n- Window size = 3 * σ_d (e.g., ±15 bars)\n\nBehavior:\n- In flat zones: averages across many bars (high spatial + high range weights)\n- At breakouts: only nearby same-side bars contribute (spatial weight high, range weight low for opposite side)\n- Result: smooth consolidations, sharp breakouts preserved\n\nImagine you're smoothing a price chart, but you're being smart about it. For each bar, you look at nearby bars and ask two questions: (1) \"How close in time is this bar?\" and (2) \"How similar is its price?\" You only average in bars that score well on BOTH questions. During consolidation, most nearby bars have similar prices, so you average across many of them - strong smoothing. But at a breakout, bars on the other side of the breakout are nearby in time but very different in price, so they get excluded from the average. Result: you smooth away noise during ranging periods, but breakouts stay crisp and sharp because you're not mixing pre-breakout and post-breakout prices. It's like edge-aware smoothing.","intuition":"","rawContent":"An edge-preserving smoothing technique that combines spatial proximity and value similarity to denoise price data. Unlike simple moving averages that weight only by distance, bilateral filtering gives high weight to nearby points that are also similar in value, effectively preserving sharp price transitions (breakouts, reversals) while smoothing noise in flat regions.\n\nThe filter uses two Gaussian kernels: one for spatial distance (how far apart in time) and one for value similarity (how different in price). Only bars that are both nearby AND similar in price get significant weight.\n\nMathematical formulation:\nu(i) = (Σⱼ w(i,j) * f(j)) / (Σⱼ w(i,j))\n\nCombined weight function:\nw(i,j) = w_spatial(i,j) * w_range(i,j)\n\nSpatial weight (distance in time):\nw_spatial(i,j) = exp(-(i-j)² / (2σ_d²))\n\nRange weight (similarity in value):\nw_range(i,j) = exp(-(f(i) - f(j))² / (2σ_r²))\n\nWhere:\n- f(i), f(j) = price values at bars i and j\n- σ_d = spatial standard deviation (controls time neighborhood size)\n- σ_r = range standard deviation (controls value similarity tolerance)\n- i, j = bar indices\n\nFor trading applications:\nTypical parameters:\n- σ_d = 5-10 bars (spatial kernel width)\n- σ_r = 1-2 * ATR (range kernel width)\n- Window size = 3 * σ_d (e.g., ±15 bars)\n\nBehavior:\n- In flat zones: averages across many bars (high spatial + high range weights)\n- At breakouts: only nearby same-side bars contribute (spatial weight high, range weight low for opposite side)\n- Result: smooth consolidations, sharp breakouts preserved\n\nImagine you're smoothing a price chart, but you're being smart about it. For each bar, you look at nearby bars and ask two questions: (1) \"How close in time is this bar?\" and (2) \"How similar is its price?\" You only average in bars that score well on BOTH questions. During consolidation, most nearby bars have similar prices, so you average across many of them - strong smoothing. But at a breakout, bars on the other side of the breakout are nearby in time but very different in price, so they get excluded from the average. Result: you smooth away noise during ranging periods, but breakouts stay crisp and sharp because you're not mixing pre-breakout and post-breakout prices. It's like edge-aware smoothing.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 16/Bilateral_Filter.txt","hasFullInfo":true},{"id":325,"title":"Conditional GANs (cGAN)","filename":"Conditional_GANs.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Conditional generation","overview":"An extension of GANs where both the Generator and Discriminator are conditioned on additional information (labels, features, or context), allowing controlled generation of synthetic data with specific properties. For trading, this enables generating price scenarios for specific market regimes (high/low volatility, trending/ranging), creating synthetic data matching certain conditions (e.g., \"generate a bear market with high VIX\"), or augmenting underrepresented patterns in training data.","formula":"Conditioning provides control over what type of synthetic data is generated, rather than purely random outputs.\n\nMathematical formulation:\nConditional Generator:\nx_fake = G(z, c; θ_G)\n\nConditional Discriminator:\nD(x, c; θ_D) → [0, 1]","parameters":"Where:\n- z = random noise vector\n- c = conditioning information (regime, volatility level, trend direction, etc.)\n- x = generated or real data (price series)\n\nAdversarial objective:\nmin_G max_D V(D, G) = 𝔼[log D(x, c)] + 𝔼[log(1 - D(G(z, c), c))]\n\nTraining process:\n1. Sample real data with labels: (x_real, c) from dataset\n2. Sample noise and labels: (z, c) where z ~ p_z, c from label distribution\n3. Generate fake data: x_fake = G(z, c)\n4. Update Discriminator: Distinguish (x_real, c) from (x_fake, c)\n5. Update Generator: Fool discriminator with (x_fake, c)\n\nConditioning methods:\n\n1. Concatenation:\n   G_input = [z; c]\n   D_input = [x; c]\n\n2. Embedding:\n   c_embed = Embedding(c)\n   G uses embedded c in hidden layers\n   D uses embedded c in hidden layers\n\n3. Projection (for image-like data):\n   Add conditioning to intermediate feature maps\n\nFor trading applications:\n\nConditioning variables:\n- Market regime: [trending_up, trending_down, ranging, volatile]\n- Volatility level: [low, medium, high]\n- Correlation regime: [high_correlation, decorrelated]\n- Time period: [bull_market, bear_market, crisis]\n- Technical pattern: [breakout, reversal, continuation]\n\nExample: Volatility-conditioned generation\nc = volatility_regime ∈ {low, medium, high}\nGenerate realistic price series with specific volatility characteristics\n\nArchitecture:\nGenerator:\n- Noise: z ~ N(0, I_100)\n- Condition: c (one-hot encoded or continuous)\n- Combined: [z; c] → LSTM(128) → LSTM(128) → Dense → Returns\n\nDiscriminator:\n- Input: Returns sequence\n- Condition: c (one-hot encoded)\n- Combined: [returns; c] → Conv1D → LSTM → Dense → Real/Fake\n\nApplications:\n\n1. Regime-specific data augmentation:\n   \"Generate more bear market examples\"\n   x_bear = G(z, c=\"bear_market\")\n\n2. Scenario generation:\n   \"Create high-volatility ranging scenarios\"\n   x_scenario = G(z, c={vol=\"high\", trend=\"ranging\"})\n\n3. Pattern completion:\n   Given partial pattern, generate completions\n   \"Here's a bull flag, generate realistic breakouts\"\n\n4. Balanced dataset creation:\n   If crash scenarios are rare in training data\n   Generate synthetic crashes: G(z, c=\"crash\")\n\n5. Counterfactual generation:\n   \"What if volatility was different during this period?\"\n\nMultiple conditions:\nc = [regime, volatility, correlation, sentiment]\nEnables fine-grained control over generated data properties","intuition":"Think of regular GAN as a random scenario generator - you pull a lever (random noise) and get a random synthetic price chart. Conditional GAN is like a scenario generator with control knobs. You specify \"I want a high-volatility bear market scenario\" and it generates exactly that. Or \"give me a low-volatility breakout.\" The conditioning tells both networks \"we're playing a specific game now - generate/detect THIS type of market, not just any market.\" Training teaches the Generator to map noise+conditions to realistic scenarios matching those conditions, while the Discriminator learns \"this is realistic for a bear market\" vs \"this doesn't match a bear market pattern even if it's generally realistic.\" Result: you control what you generate, perfect for creating specific training scenarios, testing edge cases, or augmenting rare but important patterns.","rawContent":"An extension of GANs where both the Generator and Discriminator are conditioned on additional information (labels, features, or context), allowing controlled generation of synthetic data with specific properties. For trading, this enables generating price scenarios for specific market regimes (high/low volatility, trending/ranging), creating synthetic data matching certain conditions (e.g., \"generate a bear market with high VIX\"), or augmenting underrepresented patterns in training data.\n\nConditioning provides control over what type of synthetic data is generated, rather than purely random outputs.\n\nMathematical formulation:\nConditional Generator:\nx_fake = G(z, c; θ_G)\n\nConditional Discriminator:\nD(x, c; θ_D) → [0, 1]\n\nWhere:\n- z = random noise vector\n- c = conditioning information (regime, volatility level, trend direction, etc.)\n- x = generated or real data (price series)\n\nAdversarial objective:\nmin_G max_D V(D, G) = 𝔼[log D(x, c)] + 𝔼[log(1 - D(G(z, c), c))]\n\nTraining process:\n1. Sample real data with labels: (x_real, c) from dataset\n2. Sample noise and labels: (z, c) where z ~ p_z, c from label distribution\n3. Generate fake data: x_fake = G(z, c)\n4. Update Discriminator: Distinguish (x_real, c) from (x_fake, c)\n5. Update Generator: Fool discriminator with (x_fake, c)\n\nConditioning methods:\n\n1. Concatenation:\n   G_input = [z; c]\n   D_input = [x; c]\n\n2. Embedding:\n   c_embed = Embedding(c)\n   G uses embedded c in hidden layers\n   D uses embedded c in hidden layers\n\n3. Projection (for image-like data):\n   Add conditioning to intermediate feature maps\n\nFor trading applications:\n\nConditioning variables:\n- Market regime: [trending_up, trending_down, ranging, volatile]\n- Volatility level: [low, medium, high]\n- Correlation regime: [high_correlation, decorrelated]\n- Time period: [bull_market, bear_market, crisis]\n- Technical pattern: [breakout, reversal, continuation]\n\nExample: Volatility-conditioned generation\nc = volatility_regime ∈ {low, medium, high}\nGenerate realistic price series with specific volatility characteristics\n\nArchitecture:\nGenerator:\n- Noise: z ~ N(0, I_100)\n- Condition: c (one-hot encoded or continuous)\n- Combined: [z; c] → LSTM(128) → LSTM(128) → Dense → Returns\n\nDiscriminator:\n- Input: Returns sequence\n- Condition: c (one-hot encoded)\n- Combined: [returns; c] → Conv1D → LSTM → Dense → Real/Fake\n\nApplications:\n\n1. Regime-specific data augmentation:\n   \"Generate more bear market examples\"\n   x_bear = G(z, c=\"bear_market\")\n\n2. Scenario generation:\n   \"Create high-volatility ranging scenarios\"\n   x_scenario = G(z, c={vol=\"high\", trend=\"ranging\"})\n\n3. Pattern completion:\n   Given partial pattern, generate completions\n   \"Here's a bull flag, generate realistic breakouts\"\n\n4. Balanced dataset creation:\n   If crash scenarios are rare in training data\n   Generate synthetic crashes: G(z, c=\"crash\")\n\n5. Counterfactual generation:\n   \"What if volatility was different during this period?\"\n\nMultiple conditions:\nc = [regime, volatility, correlation, sentiment]\nEnables fine-grained control over generated data properties\n\nThink of regular GAN as a random scenario generator - you pull a lever (random noise) and get a random synthetic price chart. Conditional GAN is like a scenario generator with control knobs. You specify \"I want a high-volatility bear market scenario\" and it generates exactly that. Or \"give me a low-volatility breakout.\" The conditioning tells both networks \"we're playing a specific game now - generate/detect THIS type of market, not just any market.\" Training teaches the Generator to map noise+conditions to realistic scenarios matching those conditions, while the Discriminator learns \"this is realistic for a bear market\" vs \"this doesn't match a bear market pattern even if it's generally realistic.\" Result: you control what you generate, perfect for creating specific training scenarios, testing edge cases, or augmenting rare but important patterns.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Conditional_GANs.txt","hasFullInfo":true},{"id":326,"title":"Deep Kalman Filters","filename":"Deep_Kalman_Filters.txt","group":"group 16","groupNum":16,"categoryId":3,"categoryTitle":"3. ADAPTIVE FILTERS","subcategory":"Kalman Family","summary":"Optimal state estimation for linear systems","overview":"A neural network architecture that combines the structured probabilistic approach of Kalman filtering with the representational power of deep learning. While classical Kalman filters assume linear dynamics and Gaussian noise, Deep Kalman Filters use neural networks to model complex nonlinear dynamics in the latent state space, making them powerful for tracking hidden market states, filtering noise from price data, and predicting future price movements with uncertainty estimates.","formula":"The model learns both the dynamics (how states evolve) and the emission (how states produce observations) using neural networks instead of fixed linear matrices.\n\nMathematical formulation:\nState-space model structure:\n\nTransition model (dynamics):\nz_t = f_trans(z_(t-1), u_t) + w_t\nwhere w_t ~ N(0, Q_t)\n\nEmission model (observation):\nx_t = f_emit(z_t) + v_t\nwhere v_t ~ N(0, R_t)\n\nNeural network parameterization:\nTransition: [μ_z_t, Q_t] = NN_trans(z_(t-1), u_t)\nEmission: [μ_x_t, R_t] = NN_emit(z_t)","parameters":"Where:\n- z_t = latent state at time t (hidden market condition)\n- x_t = observation (price, returns, indicators)\n- u_t = control/input (optional external features)\n- w_t, v_t = process and observation noise\n- Q_t, R_t = state-dependent covariance matrices\n- NN_trans, NN_emit = neural networks\n\nInference (filtering/smoothing):\nUse variational inference to approximate posterior p(z_1:T | x_1:T)\n\nRecognition network (encoder):\nq(z_t | x_1:T) ≈ N(μ_rec_t, Σ_rec_t)\n[μ_rec_t, Σ_rec_t] = NN_rec(x_1:t, z_(t-1))\n\nLoss function (Variational Lower Bound):\nL = Σ_t [||x_t - μ_x_t||² + KL(q(z_t|...) || p(z_t|z_(t-1)))]\n\nTraining:\n1. Feed forward through recognition network (encoder)\n2. Sample latent states: z_t ~ q(z_t | x_1:T)\n3. Compute predictions via emission network\n4. Backpropagate to minimize reconstruction + KL loss\n\nFor trading applications:\nLatent state z_t represents hidden market condition:\n- Trend strength\n- Volatility regime  \n- Liquidity state\n- Market sentiment\n\nArchitecture:\nRecognition net: BiLSTM or TCN (processes price history)\nTransition net: LSTM or GRU (models state dynamics)\nEmission net: Dense layers (maps state to observables)\n\nState dimension: 5-20 (represents market condition factors)\nObservation dimension: 1-10 (price, volume, indicators)\n\nUses:\n1. Price prediction with uncertainty\n2. Regime detection (cluster z_t)\n3. Noise filtering (use μ_x_t instead of raw x_t)\n4. Hidden factor extraction (z_t values)","intuition":"Think of this as a smart Kalman filter that learned to be nonlinear. Classic Kalman filter says \"the market state evolves linearly, observations are linear functions of state, plus Gaussian noise.\" That's too simple for real markets. Deep Kalman Filter says \"I'll use neural networks to learn the complex nonlinear rules for how hidden market conditions evolve AND how those conditions produce what we observe as prices.\" The latent state z_t might capture things like trend strength, volatility regime, and sentiment - things we can't directly observe but that drive prices. The networks learn from data what these hidden states should be and how they change over time. You get sophisticated state tracking with uncertainty estimates (like Kalman) but with the flexibility to model complex nonlinear market dynamics (like deep learning). Perfect for filtering noise while tracking regime changes.","rawContent":"A neural network architecture that combines the structured probabilistic approach of Kalman filtering with the representational power of deep learning. While classical Kalman filters assume linear dynamics and Gaussian noise, Deep Kalman Filters use neural networks to model complex nonlinear dynamics in the latent state space, making them powerful for tracking hidden market states, filtering noise from price data, and predicting future price movements with uncertainty estimates.\n\nThe model learns both the dynamics (how states evolve) and the emission (how states produce observations) using neural networks instead of fixed linear matrices.\n\nMathematical formulation:\nState-space model structure:\n\nTransition model (dynamics):\nz_t = f_trans(z_(t-1), u_t) + w_t\nwhere w_t ~ N(0, Q_t)\n\nEmission model (observation):\nx_t = f_emit(z_t) + v_t\nwhere v_t ~ N(0, R_t)\n\nNeural network parameterization:\nTransition: [μ_z_t, Q_t] = NN_trans(z_(t-1), u_t)\nEmission: [μ_x_t, R_t] = NN_emit(z_t)\n\nWhere:\n- z_t = latent state at time t (hidden market condition)\n- x_t = observation (price, returns, indicators)\n- u_t = control/input (optional external features)\n- w_t, v_t = process and observation noise\n- Q_t, R_t = state-dependent covariance matrices\n- NN_trans, NN_emit = neural networks\n\nInference (filtering/smoothing):\nUse variational inference to approximate posterior p(z_1:T | x_1:T)\n\nRecognition network (encoder):\nq(z_t | x_1:T) ≈ N(μ_rec_t, Σ_rec_t)\n[μ_rec_t, Σ_rec_t] = NN_rec(x_1:t, z_(t-1))\n\nLoss function (Variational Lower Bound):\nL = Σ_t [||x_t - μ_x_t||² + KL(q(z_t|...) || p(z_t|z_(t-1)))]\n\nTraining:\n1. Feed forward through recognition network (encoder)\n2. Sample latent states: z_t ~ q(z_t | x_1:T)\n3. Compute predictions via emission network\n4. Backpropagate to minimize reconstruction + KL loss\n\nFor trading applications:\nLatent state z_t represents hidden market condition:\n- Trend strength\n- Volatility regime  \n- Liquidity state\n- Market sentiment\n\nArchitecture:\nRecognition net: BiLSTM or TCN (processes price history)\nTransition net: LSTM or GRU (models state dynamics)\nEmission net: Dense layers (maps state to observables)\n\nState dimension: 5-20 (represents market condition factors)\nObservation dimension: 1-10 (price, volume, indicators)\n\nUses:\n1. Price prediction with uncertainty\n2. Regime detection (cluster z_t)\n3. Noise filtering (use μ_x_t instead of raw x_t)\n4. Hidden factor extraction (z_t values)\n\nThink of this as a smart Kalman filter that learned to be nonlinear. Classic Kalman filter says \"the market state evolves linearly, observations are linear functions of state, plus Gaussian noise.\" That's too simple for real markets. Deep Kalman Filter says \"I'll use neural networks to learn the complex nonlinear rules for how hidden market conditions evolve AND how those conditions produce what we observe as prices.\" The latent state z_t might capture things like trend strength, volatility regime, and sentiment - things we can't directly observe but that drive prices. The networks learn from data what these hidden states should be and how they change over time. You get sophisticated state tracking with uncertainty estimates (like Kalman) but with the flexibility to model complex nonlinear market dynamics (like deep learning). Perfect for filtering noise while tracking regime changes.","tags":["DSP Filtering","State Space"],"relPath":"public/concept-list/list-concepts/group 16/Deep_Kalman_Filters.txt","hasFullInfo":true},{"id":327,"title":"Denoising Diffusion Implicit Models (DDIM)","filename":"Denoising_Diffusion_Implicit_Models.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Generative denoising","overview":"A generative denoising method based on diffusion processes that can remove noise from price data through an iterative refinement process. DDIM is a deterministic variant of denoising diffusion probabilistic models (DDPM) that allows for faster sampling while maintaining high-quality denoising results.","formula":"The method works by learning a reverse diffusion process: it starts with noisy data and gradually removes noise through a series of steps, each one making the data slightly cleaner. Unlike stochastic diffusion models, DDIM uses a deterministic denoising trajectory which makes it more efficient and controllable for financial time series applications.\n\nMathematical framework:\nForward process (adding noise): x_t = √(ᾱ_t) * x_0 + √(1 - ᾱ_t) * ε\n\nReverse process (denoising): x_{t-1} = √(ᾱ_{t-1}) * f_θ(x_t, t) + √(1 - ᾱ_{t-1} - σ_t²) * ε_θ(x_t, t)","parameters":"Where:\n- x_0 = original clean signal\n- x_t = noisy signal at step t\n- ᾱ_t = cumulative noise schedule parameter\n- ε_θ = learned noise prediction network\n- f_θ = predicted clean signal\n- σ_t = variance schedule (σ_t = 0 for deterministic DDIM)\n\nFor trading applications:\n- Input: Noisy price series with market microstructure noise\n- Process: T-step iterative denoising (typically T = 10-50 steps)\n- Output: Smooth price series preserving trends and patterns\n\nImagine your price chart is covered in static and random spikes from market noise. DDIM works like an AI-powered photo restoration tool but for price data. It doesn't just blur everything - instead, it learns what \"clean\" price patterns should look like and gradually removes the noise in multiple passes, getting cleaner each time. Each pass asks \"what would this price look like with slightly less noise?\" and makes that adjustment. After 10-50 of these intelligent cleaning passes, you get smooth price action that keeps real trends and breakouts but eliminates the random jitter that can trigger false signals.","intuition":"","rawContent":"A generative denoising method based on diffusion processes that can remove noise from price data through an iterative refinement process. DDIM is a deterministic variant of denoising diffusion probabilistic models (DDPM) that allows for faster sampling while maintaining high-quality denoising results.\n\nThe method works by learning a reverse diffusion process: it starts with noisy data and gradually removes noise through a series of steps, each one making the data slightly cleaner. Unlike stochastic diffusion models, DDIM uses a deterministic denoising trajectory which makes it more efficient and controllable for financial time series applications.\n\nMathematical framework:\nForward process (adding noise): x_t = √(ᾱ_t) * x_0 + √(1 - ᾱ_t) * ε\n\nReverse process (denoising): x_{t-1} = √(ᾱ_{t-1}) * f_θ(x_t, t) + √(1 - ᾱ_{t-1} - σ_t²) * ε_θ(x_t, t)\n\nWhere:\n- x_0 = original clean signal\n- x_t = noisy signal at step t\n- ᾱ_t = cumulative noise schedule parameter\n- ε_θ = learned noise prediction network\n- f_θ = predicted clean signal\n- σ_t = variance schedule (σ_t = 0 for deterministic DDIM)\n\nFor trading applications:\n- Input: Noisy price series with market microstructure noise\n- Process: T-step iterative denoising (typically T = 10-50 steps)\n- Output: Smooth price series preserving trends and patterns\n\nImagine your price chart is covered in static and random spikes from market noise. DDIM works like an AI-powered photo restoration tool but for price data. It doesn't just blur everything - instead, it learns what \"clean\" price patterns should look like and gradually removes the noise in multiple passes, getting cleaner each time. Each pass asks \"what would this price look like with slightly less noise?\" and makes that adjustment. After 10-50 of these intelligent cleaning passes, you get smooth price action that keeps real trends and breakouts but eliminates the random jitter that can trigger false signals.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Denoising_Diffusion_Implicit_Models.txt","hasFullInfo":true},{"id":328,"title":"Denoising Diffusion Probabilistic Models (DDPM)","filename":"Denoising_Diffusion_Probabilistic_Models.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Diffusion-based generation","overview":"A generative modeling approach that learns to reverse a gradual noising process, generating realistic data by iteratively denoising random noise. DDPMs work by defining a forward diffusion process that slowly adds Gaussian noise to data over T steps until it becomes pure noise, then learning a reverse process that gradually denoises random noise back into realistic data. For finance, DDPMs can generate high-quality synthetic price sequences, complete partial patterns, or denoise real price data.","formula":"The key insight is that learning to reverse small noising steps is easier than directly generating data, and the composition of many small reversals produces high-quality samples.\n\nMathematical formulation:\nForward process (fixed, gradually adds noise):\nq(x_t | x_(t-1)) = N(x_t; √(1-β_t) * x_(t-1), β_t * I)","parameters":"Where:\n- x_0 = real data (price sequence)\n- x_T ~ N(0, I) (pure noise)\n- β_t = noise schedule (typically 0.0001 to 0.02)\n- T = number of steps (typically 1000)\n\nForward process in closed form:\nq(x_t | x_0) = N(x_t; √(ᾱ_t) * x_0, (1-ᾱ_t) * I)\n\nWhere ᾱ_t = ∏_(s=1)^t (1 - β_s)\n\nReverse process (learned neural network):\np_θ(x_(t-1) | x_t) = N(x_(t-1); μ_θ(x_t, t), Σ_θ(x_t, t))\n\nTypically fix Σ_θ = σ_t² * I and learn μ_θ\n\nDenoising network prediction:\nμ_θ(x_t, t) = (1/√(1-β_t)) * (x_t - (β_t/√(1-ᾱ_t)) * ε_θ(x_t, t))\n\nWhere ε_θ is a neural network predicting the noise\n\nTraining objective:\nL_simple = 𝔼_t,x_0,ε[||ε - ε_θ(x_t, t)||²]\n\nWhere:\n- t ~ Uniform(1, T)\n- x_0 = real data\n- ε ~ N(0, I) (noise added to create x_t)\n- x_t = √(ᾱ_t) * x_0 + √(1-ᾱ_t) * ε\n\nSampling (generation):\n1. Start with x_T ~ N(0, I)\n2. For t = T to 1:\n   z ~ N(0, I) if t > 1, else z = 0\n   x_(t-1) = (1/√(1-β_t)) * (x_t - (β_t/√(1-ᾱ_t)) * ε_θ(x_t, t)) + σ_t * z\n3. Return x_0\n\nFor financial time series:\n\nNetwork architecture ε_θ:\n- Input: Noisy sequence x_t, timestep embedding t\n- Backbone: U-Net style with temporal convolutions or LSTM\n- Output: Predicted noise ε\n\nComponents:\n1. Time embedding: Sinusoidal positional encoding of t\n2. Sequence encoder: Conv1D or LSTM\n3. Denoising blocks: Residual blocks with time conditioning\n4. Sequence decoder: Transposed conv or LSTM\n\nNoise schedule:\nLinear: β_t = β_1 + (β_T - β_1) * t/T\nCosine: Better for time series, smoother transition\n\nTraining:\n- Dataset: Historical return sequences\n- Batch size: 32-128\n- Steps: 100k-1M iterations\n- Optimizer: Adam, lr=2e-4\n- T: 1000 steps (can be reduced with DDIM)\n\nApplications:\n\n1. Unconditional generation:\n   Generate synthetic price sequences from pure noise\n\n2. Conditional generation:\n   Condition on regime, volatility, or partial sequence\n\n3. Denoising:\n   Given noisy price data x_t, denoise to x_0\n\n4. Interpolation:\n   Smoothly interpolate between two price patterns\n\n5. Inpainting:\n   Complete missing sections of price data\n\nAdvantages:\n- High-quality samples\n- Stable training (no mode collapse like GAN)\n- Explicit likelihood-based model\n- Works well with small datasets\n\nDisadvantages:\n- Slow sampling (T forward passes)\n- More memory intensive than GAN\n\nDDIM variant (faster sampling):\n- Deterministic sampling process\n- Can use 10-50 steps instead of 1000\n- Same quality with 10-100x speedup","intuition":"Think of creating synthetic price data as a sculptor revealing a statue from marble. The forward process is like gradually covering a real price chart with more and more noise until it's completely random (pure marble). The network learns to reverse this - given noisy data at any stage, predict what noise was added, then subtract it to get slightly cleaner data. To generate new price sequences, start with pure random noise (marble) and apply the denoising network 1000 times (each time removing a small amount of predicted noise), gradually revealing a realistic price chart (statue). Each denoising step is small and easy to learn, but 1000 steps compound to transform random noise into realistic price action with proper autocorrelation, volatility clustering, and distribution. It's methodical, stable training compared to GANs, and produces excellent quality synthetic data.","rawContent":"A generative modeling approach that learns to reverse a gradual noising process, generating realistic data by iteratively denoising random noise. DDPMs work by defining a forward diffusion process that slowly adds Gaussian noise to data over T steps until it becomes pure noise, then learning a reverse process that gradually denoises random noise back into realistic data. For finance, DDPMs can generate high-quality synthetic price sequences, complete partial patterns, or denoise real price data.\n\nThe key insight is that learning to reverse small noising steps is easier than directly generating data, and the composition of many small reversals produces high-quality samples.\n\nMathematical formulation:\nForward process (fixed, gradually adds noise):\nq(x_t | x_(t-1)) = N(x_t; √(1-β_t) * x_(t-1), β_t * I)\n\nWhere:\n- x_0 = real data (price sequence)\n- x_T ~ N(0, I) (pure noise)\n- β_t = noise schedule (typically 0.0001 to 0.02)\n- T = number of steps (typically 1000)\n\nForward process in closed form:\nq(x_t | x_0) = N(x_t; √(ᾱ_t) * x_0, (1-ᾱ_t) * I)\n\nWhere ᾱ_t = ∏_(s=1)^t (1 - β_s)\n\nReverse process (learned neural network):\np_θ(x_(t-1) | x_t) = N(x_(t-1); μ_θ(x_t, t), Σ_θ(x_t, t))\n\nTypically fix Σ_θ = σ_t² * I and learn μ_θ\n\nDenoising network prediction:\nμ_θ(x_t, t) = (1/√(1-β_t)) * (x_t - (β_t/√(1-ᾱ_t)) * ε_θ(x_t, t))\n\nWhere ε_θ is a neural network predicting the noise\n\nTraining objective:\nL_simple = 𝔼_t,x_0,ε[||ε - ε_θ(x_t, t)||²]\n\nWhere:\n- t ~ Uniform(1, T)\n- x_0 = real data\n- ε ~ N(0, I) (noise added to create x_t)\n- x_t = √(ᾱ_t) * x_0 + √(1-ᾱ_t) * ε\n\nSampling (generation):\n1. Start with x_T ~ N(0, I)\n2. For t = T to 1:\n   z ~ N(0, I) if t > 1, else z = 0\n   x_(t-1) = (1/√(1-β_t)) * (x_t - (β_t/√(1-ᾱ_t)) * ε_θ(x_t, t)) + σ_t * z\n3. Return x_0\n\nFor financial time series:\n\nNetwork architecture ε_θ:\n- Input: Noisy sequence x_t, timestep embedding t\n- Backbone: U-Net style with temporal convolutions or LSTM\n- Output: Predicted noise ε\n\nComponents:\n1. Time embedding: Sinusoidal positional encoding of t\n2. Sequence encoder: Conv1D or LSTM\n3. Denoising blocks: Residual blocks with time conditioning\n4. Sequence decoder: Transposed conv or LSTM\n\nNoise schedule:\nLinear: β_t = β_1 + (β_T - β_1) * t/T\nCosine: Better for time series, smoother transition\n\nTraining:\n- Dataset: Historical return sequences\n- Batch size: 32-128\n- Steps: 100k-1M iterations\n- Optimizer: Adam, lr=2e-4\n- T: 1000 steps (can be reduced with DDIM)\n\nApplications:\n\n1. Unconditional generation:\n   Generate synthetic price sequences from pure noise\n\n2. Conditional generation:\n   Condition on regime, volatility, or partial sequence\n\n3. Denoising:\n   Given noisy price data x_t, denoise to x_0\n\n4. Interpolation:\n   Smoothly interpolate between two price patterns\n\n5. Inpainting:\n   Complete missing sections of price data\n\nAdvantages:\n- High-quality samples\n- Stable training (no mode collapse like GAN)\n- Explicit likelihood-based model\n- Works well with small datasets\n\nDisadvantages:\n- Slow sampling (T forward passes)\n- More memory intensive than GAN\n\nDDIM variant (faster sampling):\n- Deterministic sampling process\n- Can use 10-50 steps instead of 1000\n- Same quality with 10-100x speedup\n\nThink of creating synthetic price data as a sculptor revealing a statue from marble. The forward process is like gradually covering a real price chart with more and more noise until it's completely random (pure marble). The network learns to reverse this - given noisy data at any stage, predict what noise was added, then subtract it to get slightly cleaner data. To generate new price sequences, start with pure random noise (marble) and apply the denoising network 1000 times (each time removing a small amount of predicted noise), gradually revealing a realistic price chart (statue). Each denoising step is small and easy to learn, but 1000 steps compound to transform random noise into realistic price action with proper autocorrelation, volatility clustering, and distribution. It's methodical, stable training compared to GANs, and produces excellent quality synthetic data.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Denoising_Diffusion_Probabilistic_Models.txt","hasFullInfo":true},{"id":329,"title":"Fourier Transform-Based Bandpass Filtering (for noise elimination)","filename":"Fourier_Transform_Bandpass_Filtering.txt","group":"group 16","groupNum":16,"categoryId":4,"categoryTitle":"4. DIGITAL SIGNAL PROCESSING FILTERS","subcategory":"Specialized DSP","summary":"Passes frequencies within range","overview":"A frequency-domain noise removal technique that transforms price data into its frequency components, filters out unwanted frequencies, and transforms back to the time domain. This method is particularly effective at removing periodic noise patterns and isolating specific cyclical components in price action.","formula":"The process converts time-series price data into the frequency domain using the Fourier Transform, applies a bandpass filter to keep only desired frequencies, then converts back to price data using the Inverse Fourier Transform. This allows precise control over which frequencies are preserved and which are removed.\n\nMathematical formulation:\nStep 1 - Forward FFT: F(ω) = Σ(n=0 to N-1) x(n) * e^(-j2πωn/N)\n\nStep 2 - Apply bandpass filter: F_filtered(ω) = F(ω) * H(ω)\n\nStep 3 - Inverse FFT: x_filtered(n) = (1/N) * Σ(ω=0 to N-1) F_filtered(ω) * e^(j2πωn/N)\n\nBandpass filter function:\nH(ω) = 1  if  ω_low ≤ ω ≤ ω_high\nH(ω) = 0  otherwise","parameters":"Where:\n- x(n) = input price series\n- F(ω) = frequency spectrum\n- H(ω) = bandpass filter\n- ω_low, ω_high = cutoff frequencies\n- N = number of data points\n\nFor trading applications:\n- Remove high-frequency noise (ω > ω_high): Eliminates tick-by-tick jitter\n- Remove low-frequency drift (ω < ω_low): Removes very slow trends\n- Keep middle frequencies: Preserves trading cycles (e.g., 10-50 bar cycles)","intuition":"Think of your price chart as a musical recording that has both the song you want to hear (real price cycles) and unwanted noise (static, hum, etc.). This filter works like an audio equalizer. First, it breaks down the price movement into all its different \"frequencies\" - fast wiggles, medium swings, and slow trends. Then you tell it which speeds of movement you care about (like \"keep cycles between 10 and 50 bars\"). It mutes everything else - the ultra-fast noise and the super-slow drift - and gives you back just the clean cycles you want to trade. It's surgical noise removal based on the speed of the price movement.","rawContent":"A frequency-domain noise removal technique that transforms price data into its frequency components, filters out unwanted frequencies, and transforms back to the time domain. This method is particularly effective at removing periodic noise patterns and isolating specific cyclical components in price action.\n\nThe process converts time-series price data into the frequency domain using the Fourier Transform, applies a bandpass filter to keep only desired frequencies, then converts back to price data using the Inverse Fourier Transform. This allows precise control over which frequencies are preserved and which are removed.\n\nMathematical formulation:\nStep 1 - Forward FFT: F(ω) = Σ(n=0 to N-1) x(n) * e^(-j2πωn/N)\n\nStep 2 - Apply bandpass filter: F_filtered(ω) = F(ω) * H(ω)\n\nStep 3 - Inverse FFT: x_filtered(n) = (1/N) * Σ(ω=0 to N-1) F_filtered(ω) * e^(j2πωn/N)\n\nBandpass filter function:\nH(ω) = 1  if  ω_low ≤ ω ≤ ω_high\nH(ω) = 0  otherwise\n\nWhere:\n- x(n) = input price series\n- F(ω) = frequency spectrum\n- H(ω) = bandpass filter\n- ω_low, ω_high = cutoff frequencies\n- N = number of data points\n\nFor trading applications:\n- Remove high-frequency noise (ω > ω_high): Eliminates tick-by-tick jitter\n- Remove low-frequency drift (ω < ω_low): Removes very slow trends\n- Keep middle frequencies: Preserves trading cycles (e.g., 10-50 bar cycles)\n\nThink of your price chart as a musical recording that has both the song you want to hear (real price cycles) and unwanted noise (static, hum, etc.). This filter works like an audio equalizer. First, it breaks down the price movement into all its different \"frequencies\" - fast wiggles, medium swings, and slow trends. Then you tell it which speeds of movement you care about (like \"keep cycles between 10 and 50 bars\"). It mutes everything else - the ultra-fast noise and the super-slow drift - and gives you back just the clean cycles you want to trade. It's surgical noise removal based on the speed of the price movement.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 16/Fourier_Transform_Bandpass_Filtering.txt","hasFullInfo":true},{"id":330,"title":"Generative Adversarial Networks (GANs) for Finance","filename":"GANs_for_Finance.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Synthetic data generation","overview":"A neural network framework consisting of two competing networks: a Generator that creates synthetic financial data (price series, returns, patterns) and a Discriminator that tries to distinguish real from synthetic data. Through adversarial training, the Generator learns to produce increasingly realistic market data that captures complex statistical properties, correlations, and dynamics of real markets. This is valuable for data augmentation, stress testing, scenario generation, and training other models when real data is limited.","formula":"The adversarial game forces the Generator to match not just simple statistics but the full distribution of real market behavior.\n\nMathematical formulation:\nGenerator network:\nx_fake = G(z; θ_G)","parameters":"Where:\n- z ~ p_z (random noise, typically N(0, I))\n- G = generator neural network\n- θ_G = generator parameters\n- x_fake = synthetic price/return series\n\nDiscriminator network:\nD(x; θ_D) → [0, 1]\n\nWhere:\n- x = real or fake data\n- D = discriminator neural network  \n- θ_D = discriminator parameters\n- Output ≈ 1 if real, ≈ 0 if fake\n\nAdversarial training objective:\nmin_G max_D V(D, G) = 𝔼_x~p_data[log D(x)] + 𝔼_z~p_z[log(1 - D(G(z)))]\n\nTraining alternates:\n1. Update Discriminator (maximize V):\n   Learns to distinguish real from fake\n   ∇θ_D = ∇[log D(x_real) + log(1 - D(x_fake))]\n\n2. Update Generator (minimize V):\n   Learns to fool discriminator\n   ∇θ_G = -∇[log D(G(z))]\n   (or use non-saturating: ∇[log(1 - D(G(z)))])\n\nFor financial time series:\n\nGenerator architecture:\nInput: Random noise vector z (e.g., 100-dim)\nNetwork: LSTM, GRU, or TCN layers\nOutput: Synthetic price/return sequence\n\nDiscriminator architecture:\nInput: Real or fake price sequence\nNetwork: CNN or LSTM for sequence processing\nOutput: Real/fake probability\n\nTraining on financial data:\nReal data: Historical returns, patterns, multi-asset series\nFake data: G(z) where z ~ N(0, 1)\n\nLoss variants:\n1. Original GAN: Binary cross-entropy\n2. Wasserstein GAN: EM distance (more stable)\n3. Least Squares GAN: L2 loss\n\nConditional GAN extension:\nGenerate data conditioned on regime or features\nx_fake = G(z, c; θ_G)\nD(x, c; θ_D) → [0, 1]\n\nWhere c = conditioning (volatility regime, market type, etc.)\n\nApplications:\n1. Data augmentation: Generate more training examples\n2. Stress testing: Create extreme but realistic scenarios\n3. Privacy: Synthetic data that preserves properties but isn't real\n4. Backtesting: Test strategies on diverse synthetic histories\n5. Rare event simulation: Generate crisis-like scenarios","intuition":"Think of it like an art forger and an art expert playing a game. The forger (Generator) tries to create fake price charts that look real, while the expert (Discriminator) tries to spot the fakes. Initially, the forger is terrible - just random noise that's obviously fake. The expert easily spots it. But the forger learns from each failure, getting better. Soon it creates charts that have the right volatility clustering. The expert learns to spot this isn't quite right and the forger improves further, adding realistic autocorrelation. This back-and-forth continues until the forger is so good the expert can't tell real from fake anymore. At that point, you have a Generator that creates synthetic price data with all the complex statistical properties of real markets - you can generate thousands of realistic price scenarios for testing, all from random noise input.","rawContent":"A neural network framework consisting of two competing networks: a Generator that creates synthetic financial data (price series, returns, patterns) and a Discriminator that tries to distinguish real from synthetic data. Through adversarial training, the Generator learns to produce increasingly realistic market data that captures complex statistical properties, correlations, and dynamics of real markets. This is valuable for data augmentation, stress testing, scenario generation, and training other models when real data is limited.\n\nThe adversarial game forces the Generator to match not just simple statistics but the full distribution of real market behavior.\n\nMathematical formulation:\nGenerator network:\nx_fake = G(z; θ_G)\n\nWhere:\n- z ~ p_z (random noise, typically N(0, I))\n- G = generator neural network\n- θ_G = generator parameters\n- x_fake = synthetic price/return series\n\nDiscriminator network:\nD(x; θ_D) → [0, 1]\n\nWhere:\n- x = real or fake data\n- D = discriminator neural network  \n- θ_D = discriminator parameters\n- Output ≈ 1 if real, ≈ 0 if fake\n\nAdversarial training objective:\nmin_G max_D V(D, G) = 𝔼_x~p_data[log D(x)] + 𝔼_z~p_z[log(1 - D(G(z)))]\n\nTraining alternates:\n1. Update Discriminator (maximize V):\n   Learns to distinguish real from fake\n   ∇θ_D = ∇[log D(x_real) + log(1 - D(x_fake))]\n\n2. Update Generator (minimize V):\n   Learns to fool discriminator\n   ∇θ_G = -∇[log D(G(z))]\n   (or use non-saturating: ∇[log(1 - D(G(z)))])\n\nFor financial time series:\n\nGenerator architecture:\nInput: Random noise vector z (e.g., 100-dim)\nNetwork: LSTM, GRU, or TCN layers\nOutput: Synthetic price/return sequence\n\nDiscriminator architecture:\nInput: Real or fake price sequence\nNetwork: CNN or LSTM for sequence processing\nOutput: Real/fake probability\n\nTraining on financial data:\nReal data: Historical returns, patterns, multi-asset series\nFake data: G(z) where z ~ N(0, 1)\n\nLoss variants:\n1. Original GAN: Binary cross-entropy\n2. Wasserstein GAN: EM distance (more stable)\n3. Least Squares GAN: L2 loss\n\nConditional GAN extension:\nGenerate data conditioned on regime or features\nx_fake = G(z, c; θ_G)\nD(x, c; θ_D) → [0, 1]\n\nWhere c = conditioning (volatility regime, market type, etc.)\n\nApplications:\n1. Data augmentation: Generate more training examples\n2. Stress testing: Create extreme but realistic scenarios\n3. Privacy: Synthetic data that preserves properties but isn't real\n4. Backtesting: Test strategies on diverse synthetic histories\n5. Rare event simulation: Generate crisis-like scenarios\n\nThink of it like an art forger and an art expert playing a game. The forger (Generator) tries to create fake price charts that look real, while the expert (Discriminator) tries to spot the fakes. Initially, the forger is terrible - just random noise that's obviously fake. The expert easily spots it. But the forger learns from each failure, getting better. Soon it creates charts that have the right volatility clustering. The expert learns to spot this isn't quite right and the forger improves further, adding realistic autocorrelation. This back-and-forth continues until the forger is so good the expert can't tell real from fake anymore. At that point, you have a Generator that creates synthetic price data with all the complex statistical properties of real markets - you can generate thousands of realistic price scenarios for testing, all from random noise input.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/GANs_for_Finance.txt","hasFullInfo":true},{"id":331,"title":"GRU (Gated Recurrent Units)","filename":"GRU_Networks.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Simplified LSTM","overview":"A simplified variant of LSTM that also solves the vanishing gradient problem but with fewer parameters and faster training. GRUs merge the forget and input gates into a single \"update gate\" and combine the cell state and hidden state, making them more computationally efficient while maintaining similar performance for many time series tasks. They're particularly effective for trading applications where training speed and model simplicity matter.","formula":"The GRU uses two gates instead of LSTM's three, making it more streamlined while preserving the ability to learn long-term dependencies.\n\nMathematical formulation:\nGRU has two gates and simpler update:\n\n1. Update gate (how much past to keep):\nz_t = σ(W_z * [h_(t-1), x_t] + b_z)\n\n2. Reset gate (how much past to forget when computing new content):\nr_t = σ(W_r * [h_(t-1), x_t] + b_r)\n\n3. Candidate activation (new content):\nh̃_t = tanh(W_h * [r_t ⊙ h_(t-1), x_t] + b_h)\n\n4. Final hidden state (interpolation between old and new):\nh_t = (1 - z_t) ⊙ h_(t-1) + z_t ⊙ h̃_t","parameters":"Where:\n- x_t = input at time t (price/features)\n- h_t = hidden state (combines memory and output)\n- z_t = update gate (0 = keep old, 1 = use new)\n- r_t = reset gate (0 = ignore past, 1 = use past)\n- σ = sigmoid function (0-1 range)\n- tanh = hyperbolic tangent (-1 to 1 range)\n- ⊙ = element-wise multiplication\n- W, b = learned weights and biases\n\nComparison to LSTM:\n- LSTM: 3 gates, separate cell state and hidden state\n- GRU: 2 gates, merged cell/hidden state\n- Parameters: GRU has ~25% fewer than LSTM\n- Speed: GRU trains ~30% faster\n- Performance: Often similar for trading tasks\n\nGate behavior:\n- z_t ≈ 0: keep old state h_(t-1) (stable regime)\n- z_t ≈ 1: use new candidate h̃_t (regime change)\n- r_t ≈ 0: ignore past when computing new (breakout)\n- r_t ≈ 1: use past when computing new (continuation)\n\nFor trading applications:\nInput: Price sequences with features\nArchitecture: 1-3 GRU layers (64-256 units)\nOutput: Predictions, features, classifications\nTypical training: 50-200 bar sequences","intuition":"Think of GRU as a streamlined version of LSTM - same core idea but with a simpler design. Instead of separate highways for short-term and long-term memory, GRU has one unified memory. Each bar, it makes two decisions: (1) \"How much should I update my memory vs. keep the old memory?\" (the update gate), and (2) \"When computing new information, how much should I look at what I already know?\" (the reset gate). During stable trending, the update gate stays low (keep the trend memory), reset gate stays high (use that trend info). At a reversal, update gate goes high (accept the new regime), reset gate might go low (ignore the old trend). It's like LSTM-lite: faster, simpler, fewer parameters to train, but still smart enough to learn what to remember and what to update in price sequences.","rawContent":"A simplified variant of LSTM that also solves the vanishing gradient problem but with fewer parameters and faster training. GRUs merge the forget and input gates into a single \"update gate\" and combine the cell state and hidden state, making them more computationally efficient while maintaining similar performance for many time series tasks. They're particularly effective for trading applications where training speed and model simplicity matter.\n\nThe GRU uses two gates instead of LSTM's three, making it more streamlined while preserving the ability to learn long-term dependencies.\n\nMathematical formulation:\nGRU has two gates and simpler update:\n\n1. Update gate (how much past to keep):\nz_t = σ(W_z * [h_(t-1), x_t] + b_z)\n\n2. Reset gate (how much past to forget when computing new content):\nr_t = σ(W_r * [h_(t-1), x_t] + b_r)\n\n3. Candidate activation (new content):\nh̃_t = tanh(W_h * [r_t ⊙ h_(t-1), x_t] + b_h)\n\n4. Final hidden state (interpolation between old and new):\nh_t = (1 - z_t) ⊙ h_(t-1) + z_t ⊙ h̃_t\n\nWhere:\n- x_t = input at time t (price/features)\n- h_t = hidden state (combines memory and output)\n- z_t = update gate (0 = keep old, 1 = use new)\n- r_t = reset gate (0 = ignore past, 1 = use past)\n- σ = sigmoid function (0-1 range)\n- tanh = hyperbolic tangent (-1 to 1 range)\n- ⊙ = element-wise multiplication\n- W, b = learned weights and biases\n\nComparison to LSTM:\n- LSTM: 3 gates, separate cell state and hidden state\n- GRU: 2 gates, merged cell/hidden state\n- Parameters: GRU has ~25% fewer than LSTM\n- Speed: GRU trains ~30% faster\n- Performance: Often similar for trading tasks\n\nGate behavior:\n- z_t ≈ 0: keep old state h_(t-1) (stable regime)\n- z_t ≈ 1: use new candidate h̃_t (regime change)\n- r_t ≈ 0: ignore past when computing new (breakout)\n- r_t ≈ 1: use past when computing new (continuation)\n\nFor trading applications:\nInput: Price sequences with features\nArchitecture: 1-3 GRU layers (64-256 units)\nOutput: Predictions, features, classifications\nTypical training: 50-200 bar sequences\n\nThink of GRU as a streamlined version of LSTM - same core idea but with a simpler design. Instead of separate highways for short-term and long-term memory, GRU has one unified memory. Each bar, it makes two decisions: (1) \"How much should I update my memory vs. keep the old memory?\" (the update gate), and (2) \"When computing new information, how much should I look at what I already know?\" (the reset gate). During stable trending, the update gate stays low (keep the trend memory), reset gate stays high (use that trend info). At a reversal, update gate goes high (accept the new regime), reset gate might go low (ignore the old trend). It's like LSTM-lite: faster, simpler, fewer parameters to train, but still smart enough to learn what to remember and what to update in price sequences.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/GRU_Networks.txt","hasFullInfo":true},{"id":332,"title":"Guided Filter","filename":"Guided_Filter.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Edge-preserving filtering","overview":"An edge-preserving filtering technique that uses a guidance image (typically the price itself or a related indicator) to determine where to smooth and where to preserve edges. The filter assumes the output is a local linear transform of the guidance image, which allows it to preserve sharp transitions while smoothing homogeneous regions. It's computationally efficient and produces consistent results without gradient reversal artifacts.","formula":"The key innovation is that the filter output is related to the guidance image by a linear model in local windows, and this relationship is maintained while minimizing the difference from the input.\n\nMathematical formulation:\nFor each local window w_k centered at pixel k:\n\nLocal linear model:\nu_i = a_k * g_i + b_k,  ∀i ∈ w_k","parameters":"Where:\n- u_i = output (denoised price) at bar i\n- g_i = guidance image (usually input price) at bar i\n- a_k, b_k = linear coefficients in window k\n\nCoefficient calculation:\na_k = (Σ(g_i * f_i) - μ_k * f̄_k) / (σ_k² + ε)\n\nb_k = f̄_k - a_k * μ_k\n\nWhere:\n- f_i = noisy input price\n- μ_k = mean of guidance in window k\n- σ_k² = variance of guidance in window k\n- f̄_k = mean of input in window k\n- ε = regularization parameter (prevents division by zero)\n\nFinal output (averaging overlapping windows):\nu_i = ā_i * g_i + b̄_i\n\nWhere:\n- ā_i = average of all a_k containing pixel i\n- b̄_i = average of all b_k containing pixel i\n\nParameters:\n- Window radius r: typically 5-15 bars\n- Regularization ε: controls edge preservation (smaller = sharper edges)\n  ε ≈ (0.01 to 0.1)² * price_range²","intuition":"Think of this as smart smoothing that respects the character of your price action. The filter looks at each small section of the chart and figures out the local relationship between the noisy prices and the guidance (usually the prices themselves). In smooth sections where prices are varying gently, it smooths aggressively. But in sections where there's a sharp edge (breakout, reversal), the local statistics show high variance, and the filter preserves that sharpness. The genius is the ε parameter - it's like a threshold that says \"if price variance in this area is bigger than ε, it's a real edge, keep it sharp.\" The result is strong smoothing in flat zones but preserved edges at real moves, all computed very efficiently using running averages.","rawContent":"An edge-preserving filtering technique that uses a guidance image (typically the price itself or a related indicator) to determine where to smooth and where to preserve edges. The filter assumes the output is a local linear transform of the guidance image, which allows it to preserve sharp transitions while smoothing homogeneous regions. It's computationally efficient and produces consistent results without gradient reversal artifacts.\n\nThe key innovation is that the filter output is related to the guidance image by a linear model in local windows, and this relationship is maintained while minimizing the difference from the input.\n\nMathematical formulation:\nFor each local window w_k centered at pixel k:\n\nLocal linear model:\nu_i = a_k * g_i + b_k,  ∀i ∈ w_k\n\nWhere:\n- u_i = output (denoised price) at bar i\n- g_i = guidance image (usually input price) at bar i\n- a_k, b_k = linear coefficients in window k\n\nCoefficient calculation:\na_k = (Σ(g_i * f_i) - μ_k * f̄_k) / (σ_k² + ε)\n\nb_k = f̄_k - a_k * μ_k\n\nWhere:\n- f_i = noisy input price\n- μ_k = mean of guidance in window k\n- σ_k² = variance of guidance in window k\n- f̄_k = mean of input in window k\n- ε = regularization parameter (prevents division by zero)\n\nFinal output (averaging overlapping windows):\nu_i = ā_i * g_i + b̄_i\n\nWhere:\n- ā_i = average of all a_k containing pixel i\n- b̄_i = average of all b_k containing pixel i\n\nParameters:\n- Window radius r: typically 5-15 bars\n- Regularization ε: controls edge preservation (smaller = sharper edges)\n  ε ≈ (0.01 to 0.1)² * price_range²\n\nThink of this as smart smoothing that respects the character of your price action. The filter looks at each small section of the chart and figures out the local relationship between the noisy prices and the guidance (usually the prices themselves). In smooth sections where prices are varying gently, it smooths aggressively. But in sections where there's a sharp edge (breakout, reversal), the local statistics show high variance, and the filter preserves that sharpness. The genius is the ε parameter - it's like a threshold that says \"if price variance in this area is bigger than ε, it's a real edge, keep it sharp.\" The result is strong smoothing in flat zones but preserved edges at real moves, all computed very efficiently using running averages.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 16/Guided_Filter.txt","hasFullInfo":true},{"id":333,"title":"LSTM (Long Short-Term Memory) Networks","filename":"LSTM_Networks.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Recurrent neural networks","overview":"A type of recurrent neural network designed to learn long-term dependencies in sequential data like price time series. LSTMs solve the \"vanishing gradient problem\" that prevents standard RNNs from remembering information over long sequences. They use a sophisticated gating mechanism to selectively remember or forget information, making them excellent for capturing complex temporal patterns in market data.","formula":"The LSTM cell maintains both short-term activation and long-term memory, with gates controlling information flow.\n\nMathematical formulation:\nLSTM cell has four components:\n\n1. Forget gate (what to remove from memory):\nf_t = σ(W_f * [h_(t-1), x_t] + b_f)\n\n2. Input gate (what new info to add):\ni_t = σ(W_i * [h_(t-1), x_t] + b_i)\nC̃_t = tanh(W_C * [h_(t-1), x_t] + b_C)\n\n3. Cell state update:\nC_t = f_t ⊙ C_(t-1) + i_t ⊙ C̃_t\n\n4. Output gate (what to output):\no_t = σ(W_o * [h_(t-1), x_t] + b_o)\nh_t = o_t ⊙ tanh(C_t)","parameters":"Where:\n- x_t = input at time t (current price/features)\n- h_t = hidden state (short-term memory)\n- C_t = cell state (long-term memory)\n- f_t, i_t, o_t = forget, input, output gates\n- σ = sigmoid function (outputs 0-1, acts as gate)\n- tanh = hyperbolic tangent (outputs -1 to 1)\n- ⊙ = element-wise multiplication\n- W, b = learned weight matrices and biases\n\nGate intuition:\n- f_t ≈ 1: keep old memory, f_t ≈ 0: forget old memory\n- i_t ≈ 1: accept new info, i_t ≈ 0: ignore new info\n- o_t ≈ 1: expose memory, o_t ≈ 0: hide memory\n\nFor trading applications:\nInput: Sequential price features [p_1, p_2, ..., p_t]\nHidden layers: 1-3 LSTM layers (64-256 units each)\nOutput: Predictions, features, or trading signals\n\nTraining: Backpropagation Through Time (BPTT)\n- Use past N bars to predict next M bars\n- Common: N = 50-200, M = 1-10","intuition":"Think of an LSTM like a trader's brain with selective memory. As each new bar comes in, it makes three smart decisions: (1) \"What should I forget from what I learned before?\" (maybe old support levels that are no longer relevant), (2) \"What new information should I remember?\" (new trend started, volume spike), and (3) \"What should I output to the next stage?\" The genius is the cell state - a memory highway that runs through the network carrying important long-term information (like \"we're in an uptrend\") while the gates carefully add, remove, or modify that memory each step. Unlike simple averages that mechanically fade old data, LSTMs learn what's important to remember and what to forget, allowing them to maintain context over hundreds of bars while still adapting to new patterns.","rawContent":"A type of recurrent neural network designed to learn long-term dependencies in sequential data like price time series. LSTMs solve the \"vanishing gradient problem\" that prevents standard RNNs from remembering information over long sequences. They use a sophisticated gating mechanism to selectively remember or forget information, making them excellent for capturing complex temporal patterns in market data.\n\nThe LSTM cell maintains both short-term activation and long-term memory, with gates controlling information flow.\n\nMathematical formulation:\nLSTM cell has four components:\n\n1. Forget gate (what to remove from memory):\nf_t = σ(W_f * [h_(t-1), x_t] + b_f)\n\n2. Input gate (what new info to add):\ni_t = σ(W_i * [h_(t-1), x_t] + b_i)\nC̃_t = tanh(W_C * [h_(t-1), x_t] + b_C)\n\n3. Cell state update:\nC_t = f_t ⊙ C_(t-1) + i_t ⊙ C̃_t\n\n4. Output gate (what to output):\no_t = σ(W_o * [h_(t-1), x_t] + b_o)\nh_t = o_t ⊙ tanh(C_t)\n\nWhere:\n- x_t = input at time t (current price/features)\n- h_t = hidden state (short-term memory)\n- C_t = cell state (long-term memory)\n- f_t, i_t, o_t = forget, input, output gates\n- σ = sigmoid function (outputs 0-1, acts as gate)\n- tanh = hyperbolic tangent (outputs -1 to 1)\n- ⊙ = element-wise multiplication\n- W, b = learned weight matrices and biases\n\nGate intuition:\n- f_t ≈ 1: keep old memory, f_t ≈ 0: forget old memory\n- i_t ≈ 1: accept new info, i_t ≈ 0: ignore new info\n- o_t ≈ 1: expose memory, o_t ≈ 0: hide memory\n\nFor trading applications:\nInput: Sequential price features [p_1, p_2, ..., p_t]\nHidden layers: 1-3 LSTM layers (64-256 units each)\nOutput: Predictions, features, or trading signals\n\nTraining: Backpropagation Through Time (BPTT)\n- Use past N bars to predict next M bars\n- Common: N = 50-200, M = 1-10\n\nThink of an LSTM like a trader's brain with selective memory. As each new bar comes in, it makes three smart decisions: (1) \"What should I forget from what I learned before?\" (maybe old support levels that are no longer relevant), (2) \"What new information should I remember?\" (new trend started, volume spike), and (3) \"What should I output to the next stage?\" The genius is the cell state - a memory highway that runs through the network carrying important long-term information (like \"we're in an uptrend\") while the gates carefully add, remove, or modify that memory each step. Unlike simple averages that mechanically fade old data, LSTMs learn what's important to remember and what to forget, allowing them to maintain context over hundreds of bars while still adapting to new patterns.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/LSTM_Networks.txt","hasFullInfo":true},{"id":334,"title":"Neural Network-Based Adaptive Filters","filename":"Neural_Network_Adaptive_Filters.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Learned adaptive filters","overview":"A class of filters that use neural networks to learn optimal filtering strategies directly from data, automatically adapting to changing market conditions without manual parameter tuning. Unlike traditional adaptive filters (LMS, Kalman) with fixed mathematical structures, neural adaptive filters learn the entire filtering function, including what features to use, how to combine them, and how to adapt over time. They can capture complex nonlinear relationships between price patterns and optimal smoothing/prediction strategies.","formula":"The network learns to predict the true signal from noisy observations or to optimally combine multiple filtering approaches based on current market state.\n\nMathematical formulation:\nBasic adaptive filter structure:\nŷ_t = f_NN(x_t, x_(t-1), ..., x_(t-k); θ_t)","parameters":"Where:\n- x_t = noisy input (observed prices)\n- ŷ_t = filtered output (estimated true price)\n- f_NN = neural network with parameters θ\n- k = lookback window\n\nAdaptive parameter update:\nθ_t = θ_(t-1) - η * ∇L(y_t, ŷ_t)\n\nWhere:\n- L = loss function (prediction error)\n- η = learning rate (can be adaptive)\n- ∇L = gradient of loss\n\nOnline learning variants:\n1. Stochastic gradient descent (SGD):\n   Update after each observation\n   \n2. Mini-batch updates:\n   Update after B observations\n   \n3. Exponentially weighted updates:\n   θ_t = β * θ_(t-1) + (1-β) * θ_new\n\nCommon architectures:\n\n1. Time-Delay Neural Network (TDNN):\nInput layer: [x_t, x_(t-1), ..., x_(t-k)]\nHidden layers: Dense networks with nonlinear activation\nOutput: ŷ_t\n\n2. Recurrent adaptive filter:\nh_t = f_RNN(x_t, h_(t-1))\nŷ_t = W_out * h_t\n\n3. Attention-based adaptive filter:\nα_t,i = attention_weight(x_t, x_i)\nŷ_t = Σᵢ α_t,i * x_i\n\n4. Meta-learning filter:\nFast weights θ_fast updated online\nSlow weights θ_slow updated on longer timescale\nCombines quick adaptation with stable long-term learning\n\nLoss functions:\nL_MSE = (y_t - ŷ_t)²\nL_MAE = |y_t - ŷ_t|\nL_Huber = {0.5(y - ŷ)²  if |y - ŷ| ≤ δ\n          {δ(|y - ŷ| - 0.5δ)  otherwise\n\nFor trading applications:\n\nExample: Adaptive trend filter\nInput: [price, volume, volatility, time-of-day, regime_indicator]\nNetwork: LSTM or TCN with 2-3 layers\nOutput: Filtered price or trend prediction\nUpdate: Online learning with decay\n- Fast adaptation to regime changes\n- Robust to varying noise levels\n\nExample: Multi-model ensemble filter\nMultiple filters: SMA, EMA, Kalman, wavelet\nNetwork learns adaptive weights: w_t = softmax(NN(market_state))\nOutput: ŷ_t = Σᵢ w_i,t * filter_i(x_t)\n\nAdvantages:\n- Learns optimal filtering without manual tuning\n- Adapts to regime changes automatically\n- Handles nonlinear patterns\n- Can incorporate multiple data sources\n- Improves with more data\n\nImplementation considerations:\n- Regularization prevents overfitting\n- Learning rate decay for stability\n- Separate validation for early stopping\n- Periodic retraining on expanding window","intuition":"Think of traditional adaptive filters as having a fixed \"brain structure\" (like LMS has its specific update equation) that just tweaks a few parameters. Neural adaptive filters learn the entire brain from scratch - what features to pay attention to, how to combine them, when to smooth heavily vs. lightly, what patterns indicate a regime change. You feed it noisy prices and the true prices (on training data), and it learns \"when the market looks like THIS, the best filter is THAT configuration.\" It might learn that high volatility + low volume means use heavy smoothing, while low volatility breakout means minimal smoothing. The network automatically discovers these rules from data. During trading, it sees the current market state and instantly applies the filtering strategy it learned for that type of condition. It's like having a master filter that contains all other filters and knows when to use each one.","rawContent":"A class of filters that use neural networks to learn optimal filtering strategies directly from data, automatically adapting to changing market conditions without manual parameter tuning. Unlike traditional adaptive filters (LMS, Kalman) with fixed mathematical structures, neural adaptive filters learn the entire filtering function, including what features to use, how to combine them, and how to adapt over time. They can capture complex nonlinear relationships between price patterns and optimal smoothing/prediction strategies.\n\nThe network learns to predict the true signal from noisy observations or to optimally combine multiple filtering approaches based on current market state.\n\nMathematical formulation:\nBasic adaptive filter structure:\nŷ_t = f_NN(x_t, x_(t-1), ..., x_(t-k); θ_t)\n\nWhere:\n- x_t = noisy input (observed prices)\n- ŷ_t = filtered output (estimated true price)\n- f_NN = neural network with parameters θ\n- k = lookback window\n\nAdaptive parameter update:\nθ_t = θ_(t-1) - η * ∇L(y_t, ŷ_t)\n\nWhere:\n- L = loss function (prediction error)\n- η = learning rate (can be adaptive)\n- ∇L = gradient of loss\n\nOnline learning variants:\n1. Stochastic gradient descent (SGD):\n   Update after each observation\n   \n2. Mini-batch updates:\n   Update after B observations\n   \n3. Exponentially weighted updates:\n   θ_t = β * θ_(t-1) + (1-β) * θ_new\n\nCommon architectures:\n\n1. Time-Delay Neural Network (TDNN):\nInput layer: [x_t, x_(t-1), ..., x_(t-k)]\nHidden layers: Dense networks with nonlinear activation\nOutput: ŷ_t\n\n2. Recurrent adaptive filter:\nh_t = f_RNN(x_t, h_(t-1))\nŷ_t = W_out * h_t\n\n3. Attention-based adaptive filter:\nα_t,i = attention_weight(x_t, x_i)\nŷ_t = Σᵢ α_t,i * x_i\n\n4. Meta-learning filter:\nFast weights θ_fast updated online\nSlow weights θ_slow updated on longer timescale\nCombines quick adaptation with stable long-term learning\n\nLoss functions:\nL_MSE = (y_t - ŷ_t)²\nL_MAE = |y_t - ŷ_t|\nL_Huber = {0.5(y - ŷ)²  if |y - ŷ| ≤ δ\n          {δ(|y - ŷ| - 0.5δ)  otherwise\n\nFor trading applications:\n\nExample: Adaptive trend filter\nInput: [price, volume, volatility, time-of-day, regime_indicator]\nNetwork: LSTM or TCN with 2-3 layers\nOutput: Filtered price or trend prediction\nUpdate: Online learning with decay\n- Fast adaptation to regime changes\n- Robust to varying noise levels\n\nExample: Multi-model ensemble filter\nMultiple filters: SMA, EMA, Kalman, wavelet\nNetwork learns adaptive weights: w_t = softmax(NN(market_state))\nOutput: ŷ_t = Σᵢ w_i,t * filter_i(x_t)\n\nAdvantages:\n- Learns optimal filtering without manual tuning\n- Adapts to regime changes automatically\n- Handles nonlinear patterns\n- Can incorporate multiple data sources\n- Improves with more data\n\nImplementation considerations:\n- Regularization prevents overfitting\n- Learning rate decay for stability\n- Separate validation for early stopping\n- Periodic retraining on expanding window\n\nThink of traditional adaptive filters as having a fixed \"brain structure\" (like LMS has its specific update equation) that just tweaks a few parameters. Neural adaptive filters learn the entire brain from scratch - what features to pay attention to, how to combine them, when to smooth heavily vs. lightly, what patterns indicate a regime change. You feed it noisy prices and the true prices (on training data), and it learns \"when the market looks like THIS, the best filter is THAT configuration.\" It might learn that high volatility + low volume means use heavy smoothing, while low volatility breakout means minimal smoothing. The network automatically discovers these rules from data. During trading, it sees the current market state and instantly applies the filtering strategy it learned for that type of condition. It's like having a master filter that contains all other filters and knows when to use each one.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Neural_Network_Adaptive_Filters.txt","hasFullInfo":true},{"id":335,"title":"Non-Local Means Filter","filename":"Non-Local_Means_Filter.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Patch-based denoising","overview":"A patch-based denoising algorithm that averages similar patterns from across the entire time series rather than just nearby points. Unlike traditional smoothing that only uses local neighborhoods, this filter searches the entire dataset for similar price patterns and uses them to denoise the current point. This preserves important structures while effectively removing noise.","formula":"The core idea is that if similar price patterns appear multiple times in history, the variation between them is likely noise, and averaging them reveals the true underlying pattern. The filter assigns weights based on patch similarity rather than just proximity.\n\nMathematical formulation:\nu(i) = Σⱼ w(i,j) * f(j) / Σⱼ w(i,j)","parameters":"Where:\n- u(i) = denoised value at point i\n- f(j) = noisy input values\n- w(i,j) = similarity weight between patches centered at i and j\n\nSimilarity weight calculation:\nw(i,j) = exp(-||P(i) - P(j)||² / h²)\n\nWhere:\n- P(i) = price pattern (patch) centered at point i\n- ||P(i) - P(j)||² = sum of squared differences between patches\n- h = filtering parameter (controls decay of weights)\n\nPatch definition:\nP(i) = [f(i-k), ..., f(i), ..., f(i+k)]\nwhere k = patch radius (typically 3-7 bars)\n\nFor discrete implementation:\n- Search window: typically ±50 to ±200 bars\n- Patch size: 7-15 bars (2k+1)\n- Filtering parameter: h = σ * β (where σ = noise level, β = 0.5-1.0)\n\nComputational optimization:\n- Pre-compute patch distances\n- Use only weights above threshold (w > 0.01)\n- Limit search window size\n\nPicture this: you're trying to figure out if a recent price pattern is real or just noise. Instead of only looking at the bars right next to it, you search through the entire chart history asking \"have I seen this exact pattern before?\" When you find similar patterns (maybe this same 3-bar pattern appeared 20 times in the past), you average all those similar occurrences together. The random noise in each one is different, so it cancels out when averaged. The real underlying pattern is the same, so it gets reinforced. The weights are smart - very similar patterns get heavy weights, somewhat similar get medium weights, and different patterns are ignored. It's like having 20 different photos of the same object and averaging them to get one noise-free image, except here you're doing it with price patterns.","intuition":"","rawContent":"A patch-based denoising algorithm that averages similar patterns from across the entire time series rather than just nearby points. Unlike traditional smoothing that only uses local neighborhoods, this filter searches the entire dataset for similar price patterns and uses them to denoise the current point. This preserves important structures while effectively removing noise.\n\nThe core idea is that if similar price patterns appear multiple times in history, the variation between them is likely noise, and averaging them reveals the true underlying pattern. The filter assigns weights based on patch similarity rather than just proximity.\n\nMathematical formulation:\nu(i) = Σⱼ w(i,j) * f(j) / Σⱼ w(i,j)\n\nWhere:\n- u(i) = denoised value at point i\n- f(j) = noisy input values\n- w(i,j) = similarity weight between patches centered at i and j\n\nSimilarity weight calculation:\nw(i,j) = exp(-||P(i) - P(j)||² / h²)\n\nWhere:\n- P(i) = price pattern (patch) centered at point i\n- ||P(i) - P(j)||² = sum of squared differences between patches\n- h = filtering parameter (controls decay of weights)\n\nPatch definition:\nP(i) = [f(i-k), ..., f(i), ..., f(i+k)]\nwhere k = patch radius (typically 3-7 bars)\n\nFor discrete implementation:\n- Search window: typically ±50 to ±200 bars\n- Patch size: 7-15 bars (2k+1)\n- Filtering parameter: h = σ * β (where σ = noise level, β = 0.5-1.0)\n\nComputational optimization:\n- Pre-compute patch distances\n- Use only weights above threshold (w > 0.01)\n- Limit search window size\n\nPicture this: you're trying to figure out if a recent price pattern is real or just noise. Instead of only looking at the bars right next to it, you search through the entire chart history asking \"have I seen this exact pattern before?\" When you find similar patterns (maybe this same 3-bar pattern appeared 20 times in the past), you average all those similar occurrences together. The random noise in each one is different, so it cancels out when averaged. The real underlying pattern is the same, so it gets reinforced. The weights are smart - very similar patterns get heavy weights, somewhat similar get medium weights, and different patterns are ignored. It's like having 20 different photos of the same object and averaging them to get one noise-free image, except here you're doing it with price patterns.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 16/Non-Local_Means_Filter.txt","hasFullInfo":true},{"id":336,"title":"Pattern Recognition-Based Synthesis","filename":"Pattern_Recognition_Based_Synthesis.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Template-based generation","overview":"A data generation approach that identifies recurring patterns in historical price data, builds a library of these patterns with their statistical properties and transition probabilities, then synthesizes new realistic sequences by intelligently combining and sequencing these learned patterns. Unlike neural generative models, this method is interpretable, requires less data, and preserves recognizable technical patterns while still creating novel sequences. It's particularly effective for generating trading scenarios that maintain realistic pattern behavior.","formula":"The method recognizes that markets exhibit recurring patterns (flags, triangles, breakouts, consolidations) and learns how these patterns connect and evolve.\n\nMathematical formulation:\nPattern library construction:\n\n1. Pattern detection:\n   P = {p_1, p_2, ..., p_K}\n\nWhere each pattern p_i is characterized by:\n   - Shape: normalized price sequence\n   - Duration: typical length distribution\n   - Amplitude: typical price range\n   - Context: preceding/following patterns\n   - Outcomes: distribution of subsequent moves\n\n2. Pattern parameterization:\n   p_i = {μ_shape(t), σ_shape(t), duration_dist, amplitude_dist}\n\n3. Transition matrix:\n   T[i,j] = P(pattern_j | pattern_i)\n\nLearned from historical sequences:\n   T[i,j] = count(p_i → p_j) / count(p_i)\n\n4. Outcome distributions:\n   O_i(Δ, τ) = P(price_change=Δ | pattern_i, horizon=τ)\n\nSynthesis algorithm:\n\n1. Initialize with starting pattern or regime\n2. For each step:\n   a. Select next pattern from transition probabilities\n   b. Sample specific instance from pattern distribution\n   c. Scale pattern to current price/volatility context\n   d. Connect smoothly to previous pattern\n   e. Add pattern-appropriate noise\n3. Continue until desired sequence length\n\nPattern recognition methods:\n\nTemplate matching:\ndistance(x, template) = Σ_t [(x_t - μ_t)/σ_t]²\n\nDynamic Time Warping (DTW):\nFlexible alignment for patterns of varying speed\n\nClustering:\nK-means or hierarchical clustering on normalized subsequences\n\nMotif discovery:\nFind frequent recurring subsequences\nUsing Matrix Profile or SAX (Symbolic Aggregate approXimation)\n\nFor trading applications:\n\nPattern library examples:\n- Consolidation (range-bound, low volatility)\n- Trending (directional, medium volatility)\n- Breakout (sharp move, high volume)\n- Reversal (V-shape or double top/bottom)\n- Accumulation/distribution (volume patterns)\n\nParameterization:\nEach pattern type has:\n- Mean shape: average normalized price path\n- Variance envelope: typical deviations\n- Duration distribution: how long it typically lasts\n- Amplitude distribution: typical percentage move\n- Volume profile: typical volume behavior\n\nExample transition matrix:\n              Next: [Consol, Trend, Break, Reverse]\nFrom Consol:        [0.60,  0.15,  0.20,  0.05]\nFrom Trend:         [0.30,  0.50,  0.10,  0.10]\nFrom Breakout:      [0.40,  0.40,  0.05,  0.15]\nFrom Reversal:      [0.50,  0.30,  0.10,  0.10]\n\nSynthesis process:\n1. Start: Consolidation pattern (scaled to current price)\n2. Transition: 60% stay consolidating, 20% breakout\n3. Sample outcome: Breakout occurs (upward)\n4. Scale: Breakout sized according to learned amplitude distribution\n5. Connect: Smooth transition from consolidation to breakout\n6. Add noise: Pattern-appropriate noise (higher during breakout)\n7. Continue: Breakout leads to trend (40% probability)\n\nAdvanced features:\n\nRegime-aware synthesis:\nPatterns conditioned on market regime:\nP(pattern | regime, previous_pattern)\n\nMulti-asset synthesis:\nLearn cross-asset pattern relationships\nGenerate correlated multi-asset sequences\n\nNoise modeling:\nAdd realistic microstructure noise\nMaintain volatility clustering\n\nContext preservation:\nEnsure patterns occur in realistic contexts\nE.g., breakouts after consolidation, not after reversals\n\nAdvantages:\n- Interpretable (uses real recognizable patterns)\n- Requires less training data than deep models\n- Preserves technical analysis patterns\n- Fast generation\n- Easy to control (specify pattern sequence)\n\nLimitations:\n- Pattern library needs manual curation or sophisticated detection\n- May miss truly novel patterns\n- Limited by patterns seen in training data","parameters":"","intuition":"Think of this like having a playbook of market patterns - consolidations, breakouts, trends, reversals - along with stats on how they typically flow into each other. To generate synthetic data, you basically \"shuffle the playbook\" intelligently. Start with a consolidation pattern, scale it to current price/volatility, add realistic noise. Then check your transition matrix: \"after consolidation, I have 60% chance of more consolidation, 20% chance of breakout.\" Roll the dice, get a breakout. Pull a breakout pattern from your library (with realistic shape and size based on historical breakouts), connect it smoothly to the consolidation, add appropriate noise. Continue this process - picking patterns, scaling them, connecting them - and you build realistic synthetic price sequences that preserve the \"grammar\" of how real markets move through different pattern states.","rawContent":"A data generation approach that identifies recurring patterns in historical price data, builds a library of these patterns with their statistical properties and transition probabilities, then synthesizes new realistic sequences by intelligently combining and sequencing these learned patterns. Unlike neural generative models, this method is interpretable, requires less data, and preserves recognizable technical patterns while still creating novel sequences. It's particularly effective for generating trading scenarios that maintain realistic pattern behavior.\n\nThe method recognizes that markets exhibit recurring patterns (flags, triangles, breakouts, consolidations) and learns how these patterns connect and evolve.\n\nMathematical formulation:\nPattern library construction:\n\n1. Pattern detection:\n   P = {p_1, p_2, ..., p_K}\n   \n   Where each pattern p_i is characterized by:\n   - Shape: normalized price sequence\n   - Duration: typical length distribution\n   - Amplitude: typical price range\n   - Context: preceding/following patterns\n   - Outcomes: distribution of subsequent moves\n\n2. Pattern parameterization:\n   p_i = {μ_shape(t), σ_shape(t), duration_dist, amplitude_dist}\n\n3. Transition matrix:\n   T[i,j] = P(pattern_j | pattern_i)\n   \n   Learned from historical sequences:\n   T[i,j] = count(p_i → p_j) / count(p_i)\n\n4. Outcome distributions:\n   O_i(Δ, τ) = P(price_change=Δ | pattern_i, horizon=τ)\n\nSynthesis algorithm:\n\n1. Initialize with starting pattern or regime\n2. For each step:\n   a. Select next pattern from transition probabilities\n   b. Sample specific instance from pattern distribution\n   c. Scale pattern to current price/volatility context\n   d. Connect smoothly to previous pattern\n   e. Add pattern-appropriate noise\n3. Continue until desired sequence length\n\nPattern recognition methods:\n\nTemplate matching:\ndistance(x, template) = Σ_t [(x_t - μ_t)/σ_t]²\n\nDynamic Time Warping (DTW):\nFlexible alignment for patterns of varying speed\n\nClustering:\nK-means or hierarchical clustering on normalized subsequences\n\nMotif discovery:\nFind frequent recurring subsequences\nUsing Matrix Profile or SAX (Symbolic Aggregate approXimation)\n\nFor trading applications:\n\nPattern library examples:\n- Consolidation (range-bound, low volatility)\n- Trending (directional, medium volatility)\n- Breakout (sharp move, high volume)\n- Reversal (V-shape or double top/bottom)\n- Accumulation/distribution (volume patterns)\n\nParameterization:\nEach pattern type has:\n- Mean shape: average normalized price path\n- Variance envelope: typical deviations\n- Duration distribution: how long it typically lasts\n- Amplitude distribution: typical percentage move\n- Volume profile: typical volume behavior\n\nExample transition matrix:\n              Next: [Consol, Trend, Break, Reverse]\nFrom Consol:        [0.60,  0.15,  0.20,  0.05]\nFrom Trend:         [0.30,  0.50,  0.10,  0.10]\nFrom Breakout:      [0.40,  0.40,  0.05,  0.15]\nFrom Reversal:      [0.50,  0.30,  0.10,  0.10]\n\nSynthesis process:\n1. Start: Consolidation pattern (scaled to current price)\n2. Transition: 60% stay consolidating, 20% breakout\n3. Sample outcome: Breakout occurs (upward)\n4. Scale: Breakout sized according to learned amplitude distribution\n5. Connect: Smooth transition from consolidation to breakout\n6. Add noise: Pattern-appropriate noise (higher during breakout)\n7. Continue: Breakout leads to trend (40% probability)\n\nAdvanced features:\n\nRegime-aware synthesis:\nPatterns conditioned on market regime:\nP(pattern | regime, previous_pattern)\n\nMulti-asset synthesis:\nLearn cross-asset pattern relationships\nGenerate correlated multi-asset sequences\n\nNoise modeling:\nAdd realistic microstructure noise\nMaintain volatility clustering\n\nContext preservation:\nEnsure patterns occur in realistic contexts\nE.g., breakouts after consolidation, not after reversals\n\nAdvantages:\n- Interpretable (uses real recognizable patterns)\n- Requires less training data than deep models\n- Preserves technical analysis patterns\n- Fast generation\n- Easy to control (specify pattern sequence)\n\nLimitations:\n- Pattern library needs manual curation or sophisticated detection\n- May miss truly novel patterns\n- Limited by patterns seen in training data\n\nThink of this like having a playbook of market patterns - consolidations, breakouts, trends, reversals - along with stats on how they typically flow into each other. To generate synthetic data, you basically \"shuffle the playbook\" intelligently. Start with a consolidation pattern, scale it to current price/volatility, add realistic noise. Then check your transition matrix: \"after consolidation, I have 60% chance of more consolidation, 20% chance of breakout.\" Roll the dice, get a breakout. Pull a breakout pattern from your library (with realistic shape and size based on historical breakouts), connect it smoothly to the consolidation, add appropriate noise. Continue this process - picking patterns, scaling them, connecting them - and you build realistic synthetic price sequences that preserve the \"grammar\" of how real markets move through different pattern states.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Pattern_Recognition_Based_Synthesis.txt","hasFullInfo":true},{"id":337,"title":"Reservoir Computing","filename":"Reservoir_Computing.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Echo state networks","overview":"A recurrent neural network framework where the recurrent connections (the \"reservoir\") are fixed and random, with only the output layer trained. This makes training extremely fast compared to standard RNNs while maintaining the ability to capture complex temporal dynamics. The two main variants are Echo State Networks (ESN) and Liquid State Machines (LSM). The reservoir acts as a high-dimensional expansion of the input that the simple output layer can learn from.","formula":"The key insight is that a large random recurrent network with appropriate properties naturally creates rich temporal representations - you don't need to train the recurrent connections, just learn how to read them out.\n\nMathematical formulation:\nReservoir state update:\nh_t = (1 - α) * h_(t-1) + α * tanh(W_in * x_t + W_res * h_(t-1) + b)\n\nOutput computation:\ny_t = W_out * h_t","parameters":"Where:\n- h_t = reservoir state (typically 100-1000 dimensions)\n- x_t = input (price/features)\n- W_in = input weights (random, fixed)\n- W_res = reservoir weights (random, sparse, fixed)\n- W_out = output weights (trained with linear regression)\n- α = leaking rate (0 < α ≤ 1)\n- b = bias term (optional)\n\nReservoir properties (critical for performance):\n1. Spectral radius: ρ(W_res) < 1 (typically 0.9-0.99)\n   Ensures echo state property (stability)\n\n2. Sparsity: typically 1-10% non-zero connections\n   Creates diverse temporal patterns\n\n3. Input scaling: s_in controls ||W_in||\n   Determines nonlinearity strength\n\nTraining (simple linear regression):\nW_out = (H^T * H + λI)^(-1) * H^T * Y\n\nWhere:\n- H = collected reservoir states [h_1, h_2, ..., h_T]\n- Y = target outputs\n- λ = ridge regularization parameter\n\nFor trading applications:\nSetup:\n- Reservoir size: 200-500 neurons\n- Spectral radius: 0.95\n- Sparsity: 2%\n- Leaking rate: 0.3-0.7 (higher = faster adaptation)\n- Input: normalized price returns, indicators\n\nProcess:\n1. Initialize random W_in, W_res (do once)\n2. Run price data through reservoir (collect states)\n3. Train W_out with ridge regression (extremely fast)\n4. Use for prediction or feature extraction\n\nAdvantages:\n- 100-1000x faster training than LSTM\n- No vanishing gradient issues\n- Excellent for short-term prediction\n- Can be retrained online very quickly","intuition":"Think of the reservoir like a complex echo chamber for price data. You throw price information into this chamber (the random recurrent network), and it creates a rich, high-dimensional pattern of echoes and reverberations - some fast-fading, some slow-fading, some amplifying, some dampening. This fixed echo chamber naturally transforms simple price sequences into complex temporal features. All you train is a simple output layer that learns \"when I see THIS pattern of echoes, the next price move is typically THIS.\" The genius is you never train the echo chamber itself - as long as it has the right mathematical properties (spectral radius, sparsity), a random echo chamber works great. Training is just linear regression on the echo patterns. It's shockingly effective and fast, especially for near-term prediction where the temporal patterns in the reservoir capture relevant market dynamics.","rawContent":"A recurrent neural network framework where the recurrent connections (the \"reservoir\") are fixed and random, with only the output layer trained. This makes training extremely fast compared to standard RNNs while maintaining the ability to capture complex temporal dynamics. The two main variants are Echo State Networks (ESN) and Liquid State Machines (LSM). The reservoir acts as a high-dimensional expansion of the input that the simple output layer can learn from.\n\nThe key insight is that a large random recurrent network with appropriate properties naturally creates rich temporal representations - you don't need to train the recurrent connections, just learn how to read them out.\n\nMathematical formulation:\nReservoir state update:\nh_t = (1 - α) * h_(t-1) + α * tanh(W_in * x_t + W_res * h_(t-1) + b)\n\nOutput computation:\ny_t = W_out * h_t\n\nWhere:\n- h_t = reservoir state (typically 100-1000 dimensions)\n- x_t = input (price/features)\n- W_in = input weights (random, fixed)\n- W_res = reservoir weights (random, sparse, fixed)\n- W_out = output weights (trained with linear regression)\n- α = leaking rate (0 < α ≤ 1)\n- b = bias term (optional)\n\nReservoir properties (critical for performance):\n1. Spectral radius: ρ(W_res) < 1 (typically 0.9-0.99)\n   Ensures echo state property (stability)\n\n2. Sparsity: typically 1-10% non-zero connections\n   Creates diverse temporal patterns\n\n3. Input scaling: s_in controls ||W_in||\n   Determines nonlinearity strength\n\nTraining (simple linear regression):\nW_out = (H^T * H + λI)^(-1) * H^T * Y\n\nWhere:\n- H = collected reservoir states [h_1, h_2, ..., h_T]\n- Y = target outputs\n- λ = ridge regularization parameter\n\nFor trading applications:\nSetup:\n- Reservoir size: 200-500 neurons\n- Spectral radius: 0.95\n- Sparsity: 2%\n- Leaking rate: 0.3-0.7 (higher = faster adaptation)\n- Input: normalized price returns, indicators\n\nProcess:\n1. Initialize random W_in, W_res (do once)\n2. Run price data through reservoir (collect states)\n3. Train W_out with ridge regression (extremely fast)\n4. Use for prediction or feature extraction\n\nAdvantages:\n- 100-1000x faster training than LSTM\n- No vanishing gradient issues\n- Excellent for short-term prediction\n- Can be retrained online very quickly\n\nThink of the reservoir like a complex echo chamber for price data. You throw price information into this chamber (the random recurrent network), and it creates a rich, high-dimensional pattern of echoes and reverberations - some fast-fading, some slow-fading, some amplifying, some dampening. This fixed echo chamber naturally transforms simple price sequences into complex temporal features. All you train is a simple output layer that learns \"when I see THIS pattern of echoes, the next price move is typically THIS.\" The genius is you never train the echo chamber itself - as long as it has the right mathematical properties (spectral radius, sparsity), a random echo chamber works great. Training is just linear regression on the echo patterns. It's shockingly effective and fast, especially for near-term prediction where the temporal patterns in the reservoir capture relevant market dynamics.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Reservoir_Computing.txt","hasFullInfo":true},{"id":338,"title":"Sector-Based Synthesis Approach","filename":"Sector_Based_Synthesis_Approach.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Sector-specific generation","overview":"A synthetic data generation method that models the hierarchical structure of markets by generating correlated synthetic data across market sectors, industries, and individual assets while preserving realistic correlation structures, sector rotation patterns, and common factor influences. This approach recognizes that assets don't move independently but are influenced by sector-wide and market-wide factors, creating more realistic multi-asset synthetic scenarios.","formula":"The method models the factor structure: broad market → sectors → industries → individual assets, with appropriate correlation and volatility characteristics at each level.\n\nMathematical formulation:\nHierarchical factor model:\n\nMarket level:\nr_market,t ~ N(μ_market, σ²_market)\n\nSector level (K sectors):\nr_sector_k,t = β_k^market * r_market,t + ε_sector_k,t","parameters":"Where:\n- β_k^market = sector's market beta\n- ε_sector_k,t ~ N(0, σ²_sector_k)\n- Correlation between sectors via market factor\n\nIndustry level (within each sector):\nr_industry_i,t = β_i^sector * r_sector_k,t + ε_industry_i,t\n\nIndividual asset level:\nr_asset_j,t = β_j^industry * r_industry_i,t + β_j^sector * r_sector_k,t + β_j^market * r_market,t + ε_asset_j,t\n\nComplete factor decomposition:\nr_j,t = β_j^M * f_M,t + β_j^S * f_S,t + β_j^I * f_I,t + ε_j,t\n\nWhere:\n- f_M = market factor\n- f_S = sector factor (orthogonalized)\n- f_I = industry factor (orthogonalized)\n- ε_j = idiosyncratic return\n\nFactor estimation from historical data:\n\n1. PCA or Factor Analysis on returns:\n   R = F * B^T + E\n   \n   Where:\n   - R = asset returns matrix (N assets × T time)\n   - F = factor returns (K factors × T time)\n   - B = factor loadings (N assets × K factors)\n   - E = idiosyncratic returns\n\n2. Identify factors with sectors:\n   - Factor 1 → Market\n   - Factors 2-K → Sectors/industries\n   - Estimate loadings β for each asset\n\nCorrelation structure:\nΣ = B * Σ_factors * B^T + Σ_idiosyncratic\n\nWhere:\n- Σ = full covariance matrix\n- Σ_factors = factor covariance\n- Σ_idiosyncratic = diagonal (asset-specific variances)\n\nSynthesis algorithm:\n\n1. Generate market factor:\n   f_market,t ~ AR(1) or GARCH model\n   f_market,t = φ * f_market,t-1 + ε_t\n\n2. Generate sector factors:\n   For each sector k:\n   f_sector_k,t = ρ_k * f_market,t + √(1-ρ_k²) * ν_k,t\n   \n   Where ρ_k = correlation with market\n\n3. Generate industry factors (within sectors):\n   Similar hierarchical structure\n\n4. Generate individual assets:\n   r_j,t = Σ_k β_j,k * f_k,t + ε_j,t\n   \n   Where ε_j,t maintains asset-specific volatility\n\n5. Add regime-switching:\n   Switch between correlation regimes:\n   - Normal: moderate correlation\n   - Crisis: high correlation\n   - Rotation: low/negative correlation\n\nFor trading applications:\n\nSector definitions:\n- Technology, Healthcare, Finance, Energy, etc.\n- Sub-sectors: Software, Semiconductors, Biotech, etc.\n\nParameters to estimate:\n- Market beta per sector: β_sector\n- Inter-sector correlations: Ρ_sectors\n- Intra-sector correlations: ρ_within\n- Volatility hierarchy: σ_market < σ_sector < σ_asset\n- Rotation patterns: sector leadership changes\n\nRegime-dependent synthesis:\nNormal regime:\n- Moderate correlations (0.3-0.6)\n- Sector factors distinct\n- Rotation active\n\nCrisis regime:\n- High correlations (0.7-0.9)\n- Market factor dominates\n- Sector distinctions compressed\n\nExample architecture:\nMarket → [Tech, Health, Finance, Energy] → Individual stocks\n\nTech sector:\n- Market beta: 1.15\n- Sector volatility: 25%\n- Contains: Software, Hardware, Semiconductors\n\nSoftware industry:\n- Tech beta: 1.10\n- Industry volatility: 30%\n- Contains: Individual stocks\n\nIndividual stock (e.g., AAPL):\n- Market beta: 1.05\n- Tech beta: 0.95\n- Software beta: 1.20\n- Idiosyncratic vol: 15%\n\nAdvanced features:\n\nTime-varying correlations:\nUse DCC-GARCH for dynamic correlations\nΡ_t = f(Ρ_t-1, recent_returns)\n\nSector rotation:\nModel leadership changes between sectors\nP(sector_k leads | macro_state)\n\nFactor regimes:\nSwitch between different factor structures\n- Bull market: growth sectors lead\n- Bear market: defensive sectors lead\n- Recovery: cyclical sectors lead\n\nApplications:\n1. Portfolio stress testing across sectors\n2. Sector rotation strategy backtesting\n3. Multi-asset allocation testing\n4. Risk model validation\n5. Training data for multi-asset strategies","intuition":"Think of the market like a tree: the trunk is the broad market, major branches are sectors, smaller branches are industries, and leaves are individual stocks. When the trunk sways (market moves), all branches move partly with it, but each branch also has its own sway (sector-specific movement). Generate synthetic data by first shaking the trunk (generate market return), then each branch sways based on how connected it is to the trunk plus its own movement, then smaller branches and leaves add their own motion. This preserves the realistic correlation structure - in normal times branches move somewhat independently (sector rotation), but in storms everything moves together (crisis correlation). You get multi-asset synthetic data where correlations, sector relationships, and market hierarchies are realistic, not just a bunch of independent random series.","rawContent":"A synthetic data generation method that models the hierarchical structure of markets by generating correlated synthetic data across market sectors, industries, and individual assets while preserving realistic correlation structures, sector rotation patterns, and common factor influences. This approach recognizes that assets don't move independently but are influenced by sector-wide and market-wide factors, creating more realistic multi-asset synthetic scenarios.\n\nThe method models the factor structure: broad market → sectors → industries → individual assets, with appropriate correlation and volatility characteristics at each level.\n\nMathematical formulation:\nHierarchical factor model:\n\nMarket level:\nr_market,t ~ N(μ_market, σ²_market)\n\nSector level (K sectors):\nr_sector_k,t = β_k^market * r_market,t + ε_sector_k,t\n\nWhere:\n- β_k^market = sector's market beta\n- ε_sector_k,t ~ N(0, σ²_sector_k)\n- Correlation between sectors via market factor\n\nIndustry level (within each sector):\nr_industry_i,t = β_i^sector * r_sector_k,t + ε_industry_i,t\n\nIndividual asset level:\nr_asset_j,t = β_j^industry * r_industry_i,t + β_j^sector * r_sector_k,t + β_j^market * r_market,t + ε_asset_j,t\n\nComplete factor decomposition:\nr_j,t = β_j^M * f_M,t + β_j^S * f_S,t + β_j^I * f_I,t + ε_j,t\n\nWhere:\n- f_M = market factor\n- f_S = sector factor (orthogonalized)\n- f_I = industry factor (orthogonalized)\n- ε_j = idiosyncratic return\n\nFactor estimation from historical data:\n\n1. PCA or Factor Analysis on returns:\n   R = F * B^T + E\n   \n   Where:\n   - R = asset returns matrix (N assets × T time)\n   - F = factor returns (K factors × T time)\n   - B = factor loadings (N assets × K factors)\n   - E = idiosyncratic returns\n\n2. Identify factors with sectors:\n   - Factor 1 → Market\n   - Factors 2-K → Sectors/industries\n   - Estimate loadings β for each asset\n\nCorrelation structure:\nΣ = B * Σ_factors * B^T + Σ_idiosyncratic\n\nWhere:\n- Σ = full covariance matrix\n- Σ_factors = factor covariance\n- Σ_idiosyncratic = diagonal (asset-specific variances)\n\nSynthesis algorithm:\n\n1. Generate market factor:\n   f_market,t ~ AR(1) or GARCH model\n   f_market,t = φ * f_market,t-1 + ε_t\n\n2. Generate sector factors:\n   For each sector k:\n   f_sector_k,t = ρ_k * f_market,t + √(1-ρ_k²) * ν_k,t\n   \n   Where ρ_k = correlation with market\n\n3. Generate industry factors (within sectors):\n   Similar hierarchical structure\n\n4. Generate individual assets:\n   r_j,t = Σ_k β_j,k * f_k,t + ε_j,t\n   \n   Where ε_j,t maintains asset-specific volatility\n\n5. Add regime-switching:\n   Switch between correlation regimes:\n   - Normal: moderate correlation\n   - Crisis: high correlation\n   - Rotation: low/negative correlation\n\nFor trading applications:\n\nSector definitions:\n- Technology, Healthcare, Finance, Energy, etc.\n- Sub-sectors: Software, Semiconductors, Biotech, etc.\n\nParameters to estimate:\n- Market beta per sector: β_sector\n- Inter-sector correlations: Ρ_sectors\n- Intra-sector correlations: ρ_within\n- Volatility hierarchy: σ_market < σ_sector < σ_asset\n- Rotation patterns: sector leadership changes\n\nRegime-dependent synthesis:\nNormal regime:\n- Moderate correlations (0.3-0.6)\n- Sector factors distinct\n- Rotation active\n\nCrisis regime:\n- High correlations (0.7-0.9)\n- Market factor dominates\n- Sector distinctions compressed\n\nExample architecture:\nMarket → [Tech, Health, Finance, Energy] → Individual stocks\n\nTech sector:\n- Market beta: 1.15\n- Sector volatility: 25%\n- Contains: Software, Hardware, Semiconductors\n\nSoftware industry:\n- Tech beta: 1.10\n- Industry volatility: 30%\n- Contains: Individual stocks\n\nIndividual stock (e.g., AAPL):\n- Market beta: 1.05\n- Tech beta: 0.95\n- Software beta: 1.20\n- Idiosyncratic vol: 15%\n\nAdvanced features:\n\nTime-varying correlations:\nUse DCC-GARCH for dynamic correlations\nΡ_t = f(Ρ_t-1, recent_returns)\n\nSector rotation:\nModel leadership changes between sectors\nP(sector_k leads | macro_state)\n\nFactor regimes:\nSwitch between different factor structures\n- Bull market: growth sectors lead\n- Bear market: defensive sectors lead\n- Recovery: cyclical sectors lead\n\nApplications:\n1. Portfolio stress testing across sectors\n2. Sector rotation strategy backtesting\n3. Multi-asset allocation testing\n4. Risk model validation\n5. Training data for multi-asset strategies\n\nThink of the market like a tree: the trunk is the broad market, major branches are sectors, smaller branches are industries, and leaves are individual stocks. When the trunk sways (market moves), all branches move partly with it, but each branch also has its own sway (sector-specific movement). Generate synthetic data by first shaking the trunk (generate market return), then each branch sways based on how connected it is to the trunk plus its own movement, then smaller branches and leaves add their own motion. This preserves the realistic correlation structure - in normal times branches move somewhat independently (sector rotation), but in storms everything moves together (crisis correlation). You get multi-asset synthetic data where correlations, sector relationships, and market hierarchies are realistic, not just a bunch of independent random series.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Sector_Based_Synthesis_Approach.txt","hasFullInfo":true},{"id":339,"title":"Temporal Convolutional Networks (TCN)","filename":"Temporal_Convolutional_Networks.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Causal convolutions","overview":"A convolutional neural network architecture specifically designed for sequence modeling, using causal convolutions and dilated convolutions to capture long-range dependencies without the recurrent connections of LSTM/GRU. TCNs offer several advantages: parallelizable training (faster than RNNs), stable gradients (easier to train), and flexible receptive fields (can look back hundreds of steps). They're increasingly popular for financial time series due to speed and performance.","formula":"TCNs apply 1D convolutions along the time axis with two key properties: causal (no future information leakage) and dilated (exponentially expanding receptive field).\n\nMathematical formulation:\nBasic causal convolution:\ny_t = Σ(i=0 to k-1) w_i * x_(t-i)","parameters":"Where:\n- k = kernel size (filter length)\n- w = learned filter weights\n- x_(t-i) = input at time t-i (only past values)\n\nDilated causal convolution:\ny_t = Σ(i=0 to k-1) w_i * x_(t - d*i)\n\nWhere:\n- d = dilation factor (spacing between kernel taps)\n- Receptive field = (k-1) * d + 1\n\nTCN residual block:\n1. Dilated causal conv → WeightNorm → ReLU → Dropout\n2. Dilated causal conv → WeightNorm → ReLU → Dropout\n3. 1x1 conv (if needed to match dimensions)\n4. Residual connection: output = Activation(residual_block(x) + x)\n\nStacked TCN architecture:\nLayer 1: dilation = 1, receptive field = k\nLayer 2: dilation = 2, receptive field = 2k\nLayer 3: dilation = 4, receptive field = 4k\nLayer L: dilation = 2^(L-1), receptive field = 2^(L-1) * k\n\nTotal receptive field:\nRF = Σ(l=1 to L) 2^(l-1) * k = k * (2^L - 1)\n\nExample with k=3, L=4:\nLayer 1 (d=1): sees 3 bars back\nLayer 2 (d=2): sees 6 bars back  \nLayer 3 (d=4): sees 12 bars back\nLayer 4 (d=8): sees 24 bars back\nTotal receptive field: 3 * (2^4 - 1) = 45 bars\n\nFor trading applications:\nArchitecture:\n- Input: price/volume features over time\n- Residual blocks: 4-8 blocks\n- Kernel size: 2-7 (typically 3)\n- Channels: 64-256 per layer\n- Dilation: exponentially increasing\n- Output: predictions, features, or classifications\n\nAdvantages over LSTM/GRU:\n- 10-100x faster training (parallel computation)\n- No vanishing gradient issues\n- Deterministic (same input → same output always)\n- Easy to control lookback via architecture","intuition":"Think of TCN as using sliding windows that grow exponentially longer at each layer. The first layer uses a small 3-bar window scanning across time. But instead of stopping there, it stacks another layer that looks at every-other output from layer 1 (dilation=2), effectively seeing 6 bars. Then another layer that looks at every-4th output (dilation=4), seeing 12 bars back. By the time you stack 4-5 layers with exponentially increasing dilations, you're capturing patterns over hundreds of bars - but you computed it all in parallel, which is way faster than the sequential processing of RNNs. The causal property means despite parallel processing, each prediction only uses past data (no cheating). The residual connections mean information can flow directly from input to output while also going through the convolutional processing, learning both simple and complex patterns.","rawContent":"A convolutional neural network architecture specifically designed for sequence modeling, using causal convolutions and dilated convolutions to capture long-range dependencies without the recurrent connections of LSTM/GRU. TCNs offer several advantages: parallelizable training (faster than RNNs), stable gradients (easier to train), and flexible receptive fields (can look back hundreds of steps). They're increasingly popular for financial time series due to speed and performance.\n\nTCNs apply 1D convolutions along the time axis with two key properties: causal (no future information leakage) and dilated (exponentially expanding receptive field).\n\nMathematical formulation:\nBasic causal convolution:\ny_t = Σ(i=0 to k-1) w_i * x_(t-i)\n\nWhere:\n- k = kernel size (filter length)\n- w = learned filter weights\n- x_(t-i) = input at time t-i (only past values)\n\nDilated causal convolution:\ny_t = Σ(i=0 to k-1) w_i * x_(t - d*i)\n\nWhere:\n- d = dilation factor (spacing between kernel taps)\n- Receptive field = (k-1) * d + 1\n\nTCN residual block:\n1. Dilated causal conv → WeightNorm → ReLU → Dropout\n2. Dilated causal conv → WeightNorm → ReLU → Dropout\n3. 1x1 conv (if needed to match dimensions)\n4. Residual connection: output = Activation(residual_block(x) + x)\n\nStacked TCN architecture:\nLayer 1: dilation = 1, receptive field = k\nLayer 2: dilation = 2, receptive field = 2k\nLayer 3: dilation = 4, receptive field = 4k\nLayer L: dilation = 2^(L-1), receptive field = 2^(L-1) * k\n\nTotal receptive field:\nRF = Σ(l=1 to L) 2^(l-1) * k = k * (2^L - 1)\n\nExample with k=3, L=4:\nLayer 1 (d=1): sees 3 bars back\nLayer 2 (d=2): sees 6 bars back  \nLayer 3 (d=4): sees 12 bars back\nLayer 4 (d=8): sees 24 bars back\nTotal receptive field: 3 * (2^4 - 1) = 45 bars\n\nFor trading applications:\nArchitecture:\n- Input: price/volume features over time\n- Residual blocks: 4-8 blocks\n- Kernel size: 2-7 (typically 3)\n- Channels: 64-256 per layer\n- Dilation: exponentially increasing\n- Output: predictions, features, or classifications\n\nAdvantages over LSTM/GRU:\n- 10-100x faster training (parallel computation)\n- No vanishing gradient issues\n- Deterministic (same input → same output always)\n- Easy to control lookback via architecture\n\nThink of TCN as using sliding windows that grow exponentially longer at each layer. The first layer uses a small 3-bar window scanning across time. But instead of stopping there, it stacks another layer that looks at every-other output from layer 1 (dilation=2), effectively seeing 6 bars. Then another layer that looks at every-4th output (dilation=4), seeing 12 bars back. By the time you stack 4-5 layers with exponentially increasing dilations, you're capturing patterns over hundreds of bars - but you computed it all in parallel, which is way faster than the sequential processing of RNNs. The causal property means despite parallel processing, each prediction only uses past data (no cheating). The residual connections mean information can flow directly from input to output while also going through the convolutional processing, learning both simple and complex patterns.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Temporal_Convolutional_Networks.txt","hasFullInfo":true},{"id":340,"title":"TimeGAN (Time-Series GAN)","filename":"TimeGAN.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Temporal GAN","overview":"A specialized GAN architecture designed specifically for generating realistic time series data by combining adversarial training with supervised and reconstruction losses. Unlike standard GANs adapted for sequences, TimeGAN explicitly models temporal dynamics in a learned latent space, ensuring generated sequences preserve both temporal correlations and distributional properties. This is ideal for financial data where temporal dependencies (autocorrelation, momentum, mean reversion) are crucial.","formula":"TimeGAN adds an embedding/recovery network and a supervisor to standard GAN architecture, creating a framework that separately models static and temporal features.\n\nMathematical formulation:\nFour network components:\n\n1. Embedding function (maps real sequence to latent):\n   h_t = e(x_t; θ_e)\n\n2. Recovery function (maps latent to real):\n   x̃_t = r(h_t; θ_r)\n\n3. Generator (generates latent sequences):\n   h̃_t = g(z_t, h̃_(t-1); θ_g)\n\n4. Discriminator (distinguishes real/fake latent sequences):\n   y_real/fake = d(h_t; θ_d)\n\n5. Supervisor (models temporal dynamics in latent space):\n   ĥ_(t+1) = s(h_t; θ_s)\n\nTraining objectives:\n\nReconstruction loss (autoencoder):\nL_R = 𝔼[||x_t - r(e(x_t))||²]\n\nSupervised loss (step-ahead prediction):\nL_S = 𝔼[||h_(t+1) - s(h_t)||²]\n\nAdversarial losses:\nL_U = 𝔼[log d(e(x_t))] + 𝔼[log(1 - d(g(z_t)))]  (unsupervised)\nL_S_G = 𝔼[log(1 - d(s(h̃_t)))]  (supervised)\nL_S_E = 𝔼[log d(s(h̃_t))]  (embedding)\n\nCombined loss:\nFor embedding/recovery: L_E = L_R + λ*L_S_E\nFor supervisor: L_S\nFor generator: L_G = L_U + γ*L_S_G + η*L_R(generated)\nFor discriminator: L_D = L_U\n\nWhere λ, γ, η are weighting hyperparameters.\n\nTimeGAN architecture for finance:\n\nEmbedding (e):\nInput: Price/return sequence\nLSTM/GRU: Extract latent representation h_t\n\nRecovery (r):\nInput: Latent h_t\nLSTM/GRU: Reconstruct price/return\n\nGenerator (g):\nInput: Random noise z_t\nLSTM/GRU: Generate latent sequence h̃_t\n\nSupervisor (s):\nInput: Latent h_t\nLSTM/GRU: Predict h_(t+1)\n\nDiscriminator (d):\nInput: Real/fake latent sequence\nLSTM + Dense: Classify real vs synthetic\n\nTraining procedure:\nPhase 1: Train embedding/recovery (autoencoder)\n   - Learn latent representation of real data\n\nPhase 2: Train supervisor\n   - Learn temporal dynamics in latent space\n\nPhase 3: Joint training\n   - Alternate between generator, discriminator, embedding updates\n   - All losses combined\n\nFor trading applications:\n\nInput features:\n- Returns\n- Volume\n- Volatility\n- Multiple assets (multivariate)\n\nLatent dimension: 20-50\nSequence length: 50-200 bars\n\nGenerated output:\n- Synthetic price paths\n- Multi-asset correlated sequences  \n- Preserves: autocorrelation, volatility clustering, correlations\n\nAdvantages over standard GAN:\n1. Better temporal coherence\n2. Preserves autocorrelation structure\n3. More stable training\n4. Controls both distribution and dynamics\n\nApplications:\n1. Augment training data for ML models\n2. Simulate realistic market scenarios\n3. Privacy-preserving synthetic data\n4. Stress testing with varied conditions\n5. Generate longer sequences from short real data\n\nEvaluation metrics:\n- Discriminative score (can ML distinguish real/fake?)\n- Predictive score (same prediction accuracy on both?)\n- Visualization (t-SNE/PCA shows overlap?)","parameters":"","intuition":"Think of regular GAN for time series as learning \"this is what realistic data looks like\" but often failing on \"this is how realistic data evolves over time.\" TimeGAN solves this by operating in latent space and explicitly modeling temporal dynamics. The embedding network compresses real price sequences into a latent representation that captures what matters. The supervisor learns \"if latent state is X at time t, it should be Y at time t+1\" - teaching temporal rules. The generator learns to create latent sequences that follow these temporal rules AND look realistic to the discriminator. Finally, recovery maps back to price space. This architecture preserves both \"what prices look like\" (distribution) and \"how prices evolve\" (temporal dynamics), crucial for realistic financial simulation where autocorrelation, momentum, and mean reversion patterns must be preserved.","rawContent":"A specialized GAN architecture designed specifically for generating realistic time series data by combining adversarial training with supervised and reconstruction losses. Unlike standard GANs adapted for sequences, TimeGAN explicitly models temporal dynamics in a learned latent space, ensuring generated sequences preserve both temporal correlations and distributional properties. This is ideal for financial data where temporal dependencies (autocorrelation, momentum, mean reversion) are crucial.\n\nTimeGAN adds an embedding/recovery network and a supervisor to standard GAN architecture, creating a framework that separately models static and temporal features.\n\nMathematical formulation:\nFour network components:\n\n1. Embedding function (maps real sequence to latent):\n   h_t = e(x_t; θ_e)\n\n2. Recovery function (maps latent to real):\n   x̃_t = r(h_t; θ_r)\n\n3. Generator (generates latent sequences):\n   h̃_t = g(z_t, h̃_(t-1); θ_g)\n\n4. Discriminator (distinguishes real/fake latent sequences):\n   y_real/fake = d(h_t; θ_d)\n\n5. Supervisor (models temporal dynamics in latent space):\n   ĥ_(t+1) = s(h_t; θ_s)\n\nTraining objectives:\n\nReconstruction loss (autoencoder):\nL_R = 𝔼[||x_t - r(e(x_t))||²]\n\nSupervised loss (step-ahead prediction):\nL_S = 𝔼[||h_(t+1) - s(h_t)||²]\n\nAdversarial losses:\nL_U = 𝔼[log d(e(x_t))] + 𝔼[log(1 - d(g(z_t)))]  (unsupervised)\nL_S_G = 𝔼[log(1 - d(s(h̃_t)))]  (supervised)\nL_S_E = 𝔼[log d(s(h̃_t))]  (embedding)\n\nCombined loss:\nFor embedding/recovery: L_E = L_R + λ*L_S_E\nFor supervisor: L_S\nFor generator: L_G = L_U + γ*L_S_G + η*L_R(generated)\nFor discriminator: L_D = L_U\n\nWhere λ, γ, η are weighting hyperparameters.\n\nTimeGAN architecture for finance:\n\nEmbedding (e):\nInput: Price/return sequence\nLSTM/GRU: Extract latent representation h_t\n\nRecovery (r):\nInput: Latent h_t\nLSTM/GRU: Reconstruct price/return\n\nGenerator (g):\nInput: Random noise z_t\nLSTM/GRU: Generate latent sequence h̃_t\n\nSupervisor (s):\nInput: Latent h_t\nLSTM/GRU: Predict h_(t+1)\n\nDiscriminator (d):\nInput: Real/fake latent sequence\nLSTM + Dense: Classify real vs synthetic\n\nTraining procedure:\nPhase 1: Train embedding/recovery (autoencoder)\n   - Learn latent representation of real data\n   \nPhase 2: Train supervisor\n   - Learn temporal dynamics in latent space\n   \nPhase 3: Joint training\n   - Alternate between generator, discriminator, embedding updates\n   - All losses combined\n\nFor trading applications:\n\nInput features:\n- Returns\n- Volume\n- Volatility\n- Multiple assets (multivariate)\n\nLatent dimension: 20-50\nSequence length: 50-200 bars\n\nGenerated output:\n- Synthetic price paths\n- Multi-asset correlated sequences  \n- Preserves: autocorrelation, volatility clustering, correlations\n\nAdvantages over standard GAN:\n1. Better temporal coherence\n2. Preserves autocorrelation structure\n3. More stable training\n4. Controls both distribution and dynamics\n\nApplications:\n1. Augment training data for ML models\n2. Simulate realistic market scenarios\n3. Privacy-preserving synthetic data\n4. Stress testing with varied conditions\n5. Generate longer sequences from short real data\n\nEvaluation metrics:\n- Discriminative score (can ML distinguish real/fake?)\n- Predictive score (same prediction accuracy on both?)\n- Visualization (t-SNE/PCA shows overlap?)\n\nThink of regular GAN for time series as learning \"this is what realistic data looks like\" but often failing on \"this is how realistic data evolves over time.\" TimeGAN solves this by operating in latent space and explicitly modeling temporal dynamics. The embedding network compresses real price sequences into a latent representation that captures what matters. The supervisor learns \"if latent state is X at time t, it should be Y at time t+1\" - teaching temporal rules. The generator learns to create latent sequences that follow these temporal rules AND look realistic to the discriminator. Finally, recovery maps back to price space. This architecture preserves both \"what prices look like\" (distribution) and \"how prices evolve\" (temporal dynamics), crucial for realistic financial simulation where autocorrelation, momentum, and mean reversion patterns must be preserved.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/TimeGAN.txt","hasFullInfo":true},{"id":341,"title":"Total Variation Denoising","filename":"Total_Variation_Denoising.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Gradient penalty denoising","overview":"An edge-preserving denoising method that removes noise while maintaining sharp transitions in price data. Total Variation (TV) denoising works on the principle that price signals have low total variation (smooth with occasional sharp changes) while noise has high total variation (constantly changing). It's particularly effective for preserving breakouts, trend changes, and support/resistance levels.","formula":"The method minimizes a cost function that balances fitting the original data with reducing the total variation (sum of absolute differences between consecutive points). This creates smooth regions while preserving edges.\n\nMathematical formulation:\nMinimize: E(u) = ||u - f||² + λ * TV(u)","parameters":"Where:\n- u = denoised output signal\n- f = noisy input signal (observed prices)\n- λ = regularization parameter (controls smoothing strength)\n- ||u - f||² = data fidelity term (how close to original)\n- TV(u) = total variation term (smoothness penalty)\n\nFor discrete time series:\nTV(u) = Σ(i=1 to N-1) |u(i+1) - u(i)|\n\nOr for anisotropic TV:\nTV(u) = Σ(i=1 to N-1) √((u(i+1) - u(i))²)\n\nSolution via iterative optimization:\nu^(k+1) = u^(k) - η * ∇E(u^(k))\n\nWhere:\n- η = step size\n- ∇E = gradient of cost function\n- k = iteration number\n\nTypical parameters:\n- λ = 0.1 to 1.0 (higher = more smoothing)\n- Iterations = 50-200 until convergence","intuition":"Think of price movement as having two types of changes: (1) noise - random tiny jiggles that flip-flop constantly, and (2) real moves - smooth trends punctuated by sharp breakouts. Total variation counts how much the price \"changes direction.\" Noise changes direction constantly, so it has high total variation. Real price action is smooth most of the time with occasional sharp moves, so it has low total variation. This denoiser says \"I want to smooth this chart, but I'll only smooth in a way that reduces total variation.\" Result: the random noise gets smoothed out because it's constantly changing, but sharp real breakouts stay sharp because removing them would actually increase total variation. It's mathematically designed to kill noise while keeping the important stuff.","rawContent":"An edge-preserving denoising method that removes noise while maintaining sharp transitions in price data. Total Variation (TV) denoising works on the principle that price signals have low total variation (smooth with occasional sharp changes) while noise has high total variation (constantly changing). It's particularly effective for preserving breakouts, trend changes, and support/resistance levels.\n\nThe method minimizes a cost function that balances fitting the original data with reducing the total variation (sum of absolute differences between consecutive points). This creates smooth regions while preserving edges.\n\nMathematical formulation:\nMinimize: E(u) = ||u - f||² + λ * TV(u)\n\nWhere:\n- u = denoised output signal\n- f = noisy input signal (observed prices)\n- λ = regularization parameter (controls smoothing strength)\n- ||u - f||² = data fidelity term (how close to original)\n- TV(u) = total variation term (smoothness penalty)\n\nFor discrete time series:\nTV(u) = Σ(i=1 to N-1) |u(i+1) - u(i)|\n\nOr for anisotropic TV:\nTV(u) = Σ(i=1 to N-1) √((u(i+1) - u(i))²)\n\nSolution via iterative optimization:\nu^(k+1) = u^(k) - η * ∇E(u^(k))\n\nWhere:\n- η = step size\n- ∇E = gradient of cost function\n- k = iteration number\n\nTypical parameters:\n- λ = 0.1 to 1.0 (higher = more smoothing)\n- Iterations = 50-200 until convergence\n\nThink of price movement as having two types of changes: (1) noise - random tiny jiggles that flip-flop constantly, and (2) real moves - smooth trends punctuated by sharp breakouts. Total variation counts how much the price \"changes direction.\" Noise changes direction constantly, so it has high total variation. Real price action is smooth most of the time with occasional sharp moves, so it has low total variation. This denoiser says \"I want to smooth this chart, but I'll only smooth in a way that reduces total variation.\" Result: the random noise gets smoothed out because it's constantly changing, but sharp real breakouts stay sharp because removing them would actually increase total variation. It's mathematically designed to kill noise while keeping the important stuff.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Total_Variation_Denoising.txt","hasFullInfo":true},{"id":342,"title":"Transformer-Based Feature Extraction","filename":"Transformer_Based_Feature_Extraction.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Attention mechanism features","overview":"A neural network architecture using self-attention mechanisms to extract meaningful features from price time series data. Transformers can capture long-range dependencies and complex patterns without the recency bias of traditional recurrent networks. Originally designed for natural language processing, transformers excel at finding relationships between distant points in a sequence, making them ideal for detecting price patterns across different timescales.","formula":"The core innovation is the attention mechanism, which allows the model to weigh the importance of each historical bar when analyzing the current bar, regardless of distance in time.\n\nMathematical formulation:\nSelf-Attention mechanism:\nAttention(Q, K, V) = softmax(QK^T / √d_k) * V","parameters":"Where:\n- Q = Query matrix (what we're looking for)\n- K = Key matrix (what each position offers)\n- V = Value matrix (actual information)\n- d_k = dimension of key vectors (scaling factor)\n\nQuery, Key, Value projections:\nQ = X * W_Q\nK = X * W_K  \nV = X * W_V\n\nWhere X = input price features, W = learned weight matrices\n\nMulti-Head Attention:\nMHA(X) = Concat(head_1, ..., head_h) * W_O\n\nhead_i = Attention(Q_i, K_i, V_i)\n\nFull Transformer block:\n1. Multi-head self-attention with residual:\n   X' = X + MHA(LayerNorm(X))\n\n2. Feed-forward network with residual:\n   X'' = X' + FFN(LayerNorm(X'))\n\nWhere:\nFFN(x) = max(0, xW_1 + b_1)W_2 + b_2\n\nFor trading feature extraction:\nInput: Price sequence [p_1, p_2, ..., p_n] with positional encoding\nOutput: Feature vectors capturing patterns, relationships, trends\n\nPositional encoding (since attention has no inherent ordering):\nPE(pos, 2i) = sin(pos / 10000^(2i/d))\nPE(pos, 2i+1) = cos(pos / 10000^(2i/d))\n\nTypical architecture:\n- Input dimension: 1-10 features (OHLCV, indicators)\n- Model dimension: 64-256\n- Attention heads: 4-8\n- Layers: 2-6\n- Context window: 50-500 bars","intuition":"Think of analyzing a price chart like reading a sentence. Traditional methods read left to right, only remembering the most recent words (bars). But what if a pattern from 100 bars ago is super relevant to understanding now? Transformers solve this with \"attention\" - for each bar, they look at ALL other bars and ask \"which ones are most important for understanding this moment?\" They learn to pay attention to relevant patterns no matter how far away. If there's a similar setup from 200 bars ago, the transformer finds it and uses it. The multi-head part means it's looking for multiple different types of patterns simultaneously - one head might track support/resistance, another tracks cycles, another tracks volume relationships. The result is rich feature vectors that capture complex patterns traditional indicators miss.","rawContent":"A neural network architecture using self-attention mechanisms to extract meaningful features from price time series data. Transformers can capture long-range dependencies and complex patterns without the recency bias of traditional recurrent networks. Originally designed for natural language processing, transformers excel at finding relationships between distant points in a sequence, making them ideal for detecting price patterns across different timescales.\n\nThe core innovation is the attention mechanism, which allows the model to weigh the importance of each historical bar when analyzing the current bar, regardless of distance in time.\n\nMathematical formulation:\nSelf-Attention mechanism:\nAttention(Q, K, V) = softmax(QK^T / √d_k) * V\n\nWhere:\n- Q = Query matrix (what we're looking for)\n- K = Key matrix (what each position offers)\n- V = Value matrix (actual information)\n- d_k = dimension of key vectors (scaling factor)\n\nQuery, Key, Value projections:\nQ = X * W_Q\nK = X * W_K  \nV = X * W_V\n\nWhere X = input price features, W = learned weight matrices\n\nMulti-Head Attention:\nMHA(X) = Concat(head_1, ..., head_h) * W_O\n\nhead_i = Attention(Q_i, K_i, V_i)\n\nFull Transformer block:\n1. Multi-head self-attention with residual:\n   X' = X + MHA(LayerNorm(X))\n\n2. Feed-forward network with residual:\n   X'' = X' + FFN(LayerNorm(X'))\n\nWhere:\nFFN(x) = max(0, xW_1 + b_1)W_2 + b_2\n\nFor trading feature extraction:\nInput: Price sequence [p_1, p_2, ..., p_n] with positional encoding\nOutput: Feature vectors capturing patterns, relationships, trends\n\nPositional encoding (since attention has no inherent ordering):\nPE(pos, 2i) = sin(pos / 10000^(2i/d))\nPE(pos, 2i+1) = cos(pos / 10000^(2i/d))\n\nTypical architecture:\n- Input dimension: 1-10 features (OHLCV, indicators)\n- Model dimension: 64-256\n- Attention heads: 4-8\n- Layers: 2-6\n- Context window: 50-500 bars\n\nThink of analyzing a price chart like reading a sentence. Traditional methods read left to right, only remembering the most recent words (bars). But what if a pattern from 100 bars ago is super relevant to understanding now? Transformers solve this with \"attention\" - for each bar, they look at ALL other bars and ask \"which ones are most important for understanding this moment?\" They learn to pay attention to relevant patterns no matter how far away. If there's a similar setup from 200 bars ago, the transformer finds it and uses it. The multi-head part means it's looking for multiple different types of patterns simultaneously - one head might track support/resistance, another tracks cycles, another tracks volume relationships. The result is rich feature vectors that capture complex patterns traditional indicators miss.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Transformer_Based_Feature_Extraction.txt","hasFullInfo":true},{"id":343,"title":"Variational Autoencoders (VAE)","filename":"Variational_Autoencoders.txt","group":"group 16","groupNum":16,"categoryId":33,"categoryTitle":"33. MACHINE LEARNING SIGNAL PROCESSING","subcategory":"General","summary":"Probabilistic autoencoders","overview":"A probabilistic version of autoencoders that learns a probability distribution over the latent space rather than deterministic encodings. Instead of mapping each input to a single point in latent space, VAE maps it to a distribution (typically Gaussian), allowing the model to capture uncertainty and generate new realistic samples. For trading, VAEs can generate synthetic price scenarios, model market regime distributions, or create robust features that account for uncertainty.","formula":"The key innovation is the probabilistic latent space with a regularization term that ensures it's well-structured and suitable for generation.\n\nMathematical formulation:\nEncoder (outputs distribution parameters):\nμ_z = f_μ(x; θ_encoder)\nlog σ²_z = f_σ(x; θ_encoder)\n\nSampling latent variable (reparameterization trick):\nz = μ_z + σ_z ⊙ ε,  where ε ~ N(0, I)\n\nDecoder (reconstructs from sample):\nx̂ = f_decoder(z; θ_decoder)\n\nLoss function (ELBO - Evidence Lower Bound):\nL = Reconstruction_Loss + KL_Divergence\n\nReconstruction loss:\nL_recon = -𝔼[log p(x|z)] ≈ ||x - x̂||²\n\nKL divergence (regularization):\nL_KL = KL(q(z|x) || p(z))\n     = -½ Σⱼ(1 + log σ²_j - μ²_j - σ²_j)\n\nTotal loss:\nL_VAE = ||x - x̂||² + β * KL(q(z|x) || p(z))","parameters":"Where:\n- q(z|x) = encoder distribution (approximate posterior)\n- p(z) = N(0, I) (prior distribution)\n- β = weight of KL term (typically 0.5-2.0)\n\nReparameterization trick (enables backpropagation):\nInstead of: z ~ N(μ, σ²)\nUse: z = μ + σ ⊙ ε, where ε ~ N(0, 1)\n\nFor trading applications:\nInput: Price patterns, indicator combinations, or market states\nLatent space: 5-20 dimensional probability distribution\n\nArchitecture:\nEncoder: Input → Dense → Dense → [μ, log σ²]\nDecoder: z → Dense → Dense → Output\n\nUses:\n1. Synthetic data generation:\n   - Sample z ~ N(0, I)\n   - Generate x̂ = decoder(z)\n   - Creates realistic but new price scenarios\n\n2. Robust feature extraction:\n   - Use μ as features (accounts for uncertainty)\n   - Multiple samples from distribution for robustness\n\n3. Anomaly detection:\n   - High reconstruction error = unusual pattern\n   - High KL divergence = pattern far from typical\n\n4. Market regime modeling:\n   - Cluster in latent space finds regimes\n   - Probability distribution shows regime uncertainty\n\nβ-VAE variant:\nL = ||x - x̂||² + β * KL(...)\n- β > 1: more disentangled representations\n- Learns independent latent factors","intuition":"Think of a regular autoencoder as learning \"this market pattern maps to this exact point in feature space.\" A VAE instead learns \"this market pattern maps to a cloud of possible points (a Gaussian distribution) in feature space.\" Why? Because market patterns aren't exact - similar setups can lead to different outcomes. The VAE captures this uncertainty. The mean of the cloud (μ) tells you the typical features, the spread (σ) tells you the uncertainty. The KL divergence forces all these clouds to overlap in a nice structured way, creating a continuous \"map of market conditions\" in latent space. This lets you do two powerful things: (1) Generate new realistic scenarios by sampling random points from the latent space, and (2) Get robust features that account for uncertainty rather than pretending every pattern has one exact representation.","rawContent":"A probabilistic version of autoencoders that learns a probability distribution over the latent space rather than deterministic encodings. Instead of mapping each input to a single point in latent space, VAE maps it to a distribution (typically Gaussian), allowing the model to capture uncertainty and generate new realistic samples. For trading, VAEs can generate synthetic price scenarios, model market regime distributions, or create robust features that account for uncertainty.\n\nThe key innovation is the probabilistic latent space with a regularization term that ensures it's well-structured and suitable for generation.\n\nMathematical formulation:\nEncoder (outputs distribution parameters):\nμ_z = f_μ(x; θ_encoder)\nlog σ²_z = f_σ(x; θ_encoder)\n\nSampling latent variable (reparameterization trick):\nz = μ_z + σ_z ⊙ ε,  where ε ~ N(0, I)\n\nDecoder (reconstructs from sample):\nx̂ = f_decoder(z; θ_decoder)\n\nLoss function (ELBO - Evidence Lower Bound):\nL = Reconstruction_Loss + KL_Divergence\n\nReconstruction loss:\nL_recon = -𝔼[log p(x|z)] ≈ ||x - x̂||²\n\nKL divergence (regularization):\nL_KL = KL(q(z|x) || p(z))\n     = -½ Σⱼ(1 + log σ²_j - μ²_j - σ²_j)\n\nTotal loss:\nL_VAE = ||x - x̂||² + β * KL(q(z|x) || p(z))\n\nWhere:\n- q(z|x) = encoder distribution (approximate posterior)\n- p(z) = N(0, I) (prior distribution)\n- β = weight of KL term (typically 0.5-2.0)\n\nReparameterization trick (enables backpropagation):\nInstead of: z ~ N(μ, σ²)\nUse: z = μ + σ ⊙ ε, where ε ~ N(0, 1)\n\nFor trading applications:\nInput: Price patterns, indicator combinations, or market states\nLatent space: 5-20 dimensional probability distribution\n\nArchitecture:\nEncoder: Input → Dense → Dense → [μ, log σ²]\nDecoder: z → Dense → Dense → Output\n\nUses:\n1. Synthetic data generation:\n   - Sample z ~ N(0, I)\n   - Generate x̂ = decoder(z)\n   - Creates realistic but new price scenarios\n\n2. Robust feature extraction:\n   - Use μ as features (accounts for uncertainty)\n   - Multiple samples from distribution for robustness\n\n3. Anomaly detection:\n   - High reconstruction error = unusual pattern\n   - High KL divergence = pattern far from typical\n\n4. Market regime modeling:\n   - Cluster in latent space finds regimes\n   - Probability distribution shows regime uncertainty\n\nβ-VAE variant:\nL = ||x - x̂||² + β * KL(...)\n- β > 1: more disentangled representations\n- Learns independent latent factors\n\nThink of a regular autoencoder as learning \"this market pattern maps to this exact point in feature space.\" A VAE instead learns \"this market pattern maps to a cloud of possible points (a Gaussian distribution) in feature space.\" Why? Because market patterns aren't exact - similar setups can lead to different outcomes. The VAE captures this uncertainty. The mean of the cloud (μ) tells you the typical features, the spread (σ) tells you the uncertainty. The KL divergence forces all these clouds to overlap in a nice structured way, creating a continuous \"map of market conditions\" in latent space. This lets you do two powerful things: (1) Generate new realistic scenarios by sampling random points from the latent space, and (2) Get robust features that account for uncertainty rather than pretending every pattern has one exact representation.","tags":["Machine Learning"],"relPath":"public/concept-list/list-concepts/group 16/Variational_Autoencoders.txt","hasFullInfo":true},{"id":344,"title":"Wasserstein GAN (WGAN)","filename":"Wasserstein_GAN.txt","group":"group 16","groupNum":16,"categoryId":34,"categoryTitle":"34. GENERATIVE MODELS & SYNTHETIC DATA","subcategory":"General","summary":"Improved training stability","overview":"An improved GAN architecture that uses the Wasserstein distance (Earth Mover's distance) instead of Jensen-Shannon divergence as the training objective. This solves major training instability issues in vanilla GANs: mode collapse (generator produces limited variety), vanishing gradients, and difficulty balancing generator/discriminator training. For financial applications, WGAN produces more diverse and stable synthetic data generation, crucial for creating representative market scenarios.","formula":"The key innovation is the critic (replaces discriminator) outputs a score rather than probability, and is constrained to be Lipschitz continuous.\n\nMathematical formulation:\nWasserstein distance (Earth Mover's Distance):\nW(p_r, p_g) = inf_{γ∈Π(p_r,p_g)} 𝔼_(x,y)~γ[||x - y||]\n\nKantorovich-Rubinstein duality:\nW(p_r, p_g) = sup_{||f||_L≤1} 𝔼_x~p_r[f(x)] - 𝔼_z~p_z[f(G(z))]","parameters":"Where:\n- p_r = real data distribution\n- p_g = generator distribution\n- f = 1-Lipschitz function (critic)\n- ||f||_L ≤ 1 = Lipschitz constraint\n\nWGAN objective:\nmin_G max_{D∈1-Lipschitz} 𝔼_x~p_r[D(x)] - 𝔼_z~p_z[D(G(z))]\n\nCritic (not discriminator):\n- No sigmoid output (outputs real number)\n- Measures \"realness score\" not probability\n- Must satisfy Lipschitz constraint\n\nTraining algorithm:\nfor iteration in training:\n    # Train critic more than generator (n_critic = 5)\n    for i in range(n_critic):\n        Sample real data: x ~ p_r\n        Sample noise: z ~ p_z\n        Generate fake: x_fake = G(z)\n        \n        Critic loss:\n        L_D = -[D(x_real) - D(x_fake)]\n        \n        Update critic: θ_D ← θ_D - α * ∇L_D\n        Enforce Lipschitz: Weight clipping or gradient penalty\n    \n    # Train generator\n    Sample noise: z ~ p_z\n    L_G = -D(G(z))\n    Update generator: θ_G ← θ_G - α * ∇L_G\n\nLipschitz constraint methods:\n\n1. Weight Clipping (original WGAN):\n   After each update: w ← clip(w, -c, c)\n   Typically c = 0.01\n\n2. Gradient Penalty (WGAN-GP, better):\n   L_GP = λ * 𝔼_x̂[(||∇_x̂ D(x̂)||_2 - 1)²]\n   \n   Where x̂ = ε*x_real + (1-ε)*x_fake, ε ~ U(0,1)\n   Penalty applied at interpolated points\n   Typically λ = 10\n\nFor financial time series:\n\nGenerator:\nz ~ N(0, I) → LSTM/TCN → Returns sequence\n\nCritic:\nReturns sequence → Conv1D/LSTM → Score (unbounded)\n\nAdvantages over vanilla GAN:\n1. More stable training (no mode collapse)\n2. Meaningful loss metric (correlates with quality)\n3. No need to balance G/D carefully\n4. Generates more diverse scenarios\n\nWGAN-GP architecture example:\nGenerator:\n- Input: noise (100-dim)\n- LSTM: 2 layers, 128 units\n- Output: return sequence (100 timesteps)\n\nCritic:\n- Input: return sequence\n- Conv1D: 64 filters, kernel=3\n- LSTM: 128 units\n- Dense: → score (no activation)\n\nTraining hyperparameters:\n- n_critic = 5 (train critic 5x per generator update)\n- Learning rate: 1e-4 (Adam)\n- λ_GP = 10 (gradient penalty weight)\n- Batch size: 64\n\nApplications:\n1. Generate diverse market scenarios\n2. Data augmentation without mode collapse\n3. Rare event generation (crashes, rallies)\n4. Multi-asset synthetic correlation structures","intuition":"Think of the original GAN training as unstable - the discriminator often gets too good too fast and gives zero gradients, or the generator gets stuck producing the same few patterns (mode collapse). WGAN fixes this with a clever distance metric. Instead of binary real/fake, the critic gives a \"realness score\" - higher score = more realistic. The Wasserstein distance measures \"how much work to transform fake distribution into real distribution\" and provides stable gradients throughout training. The Lipschitz constraint (via gradient penalty) prevents the critic from having crazy steep slopes that would destabilize training. Result: you can train the critic as much as you want without breaking the generator, the loss actually means something (lower = better quality), and you get diverse outputs instead of mode collapse. Much more reliable for generating varied realistic market scenarios.","rawContent":"An improved GAN architecture that uses the Wasserstein distance (Earth Mover's distance) instead of Jensen-Shannon divergence as the training objective. This solves major training instability issues in vanilla GANs: mode collapse (generator produces limited variety), vanishing gradients, and difficulty balancing generator/discriminator training. For financial applications, WGAN produces more diverse and stable synthetic data generation, crucial for creating representative market scenarios.\n\nThe key innovation is the critic (replaces discriminator) outputs a score rather than probability, and is constrained to be Lipschitz continuous.\n\nMathematical formulation:\nWasserstein distance (Earth Mover's Distance):\nW(p_r, p_g) = inf_{γ∈Π(p_r,p_g)} 𝔼_(x,y)~γ[||x - y||]\n\nKantorovich-Rubinstein duality:\nW(p_r, p_g) = sup_{||f||_L≤1} 𝔼_x~p_r[f(x)] - 𝔼_z~p_z[f(G(z))]\n\nWhere:\n- p_r = real data distribution\n- p_g = generator distribution\n- f = 1-Lipschitz function (critic)\n- ||f||_L ≤ 1 = Lipschitz constraint\n\nWGAN objective:\nmin_G max_{D∈1-Lipschitz} 𝔼_x~p_r[D(x)] - 𝔼_z~p_z[D(G(z))]\n\nCritic (not discriminator):\n- No sigmoid output (outputs real number)\n- Measures \"realness score\" not probability\n- Must satisfy Lipschitz constraint\n\nTraining algorithm:\nfor iteration in training:\n    # Train critic more than generator (n_critic = 5)\n    for i in range(n_critic):\n        Sample real data: x ~ p_r\n        Sample noise: z ~ p_z\n        Generate fake: x_fake = G(z)\n        \n        Critic loss:\n        L_D = -[D(x_real) - D(x_fake)]\n        \n        Update critic: θ_D ← θ_D - α * ∇L_D\n        Enforce Lipschitz: Weight clipping or gradient penalty\n    \n    # Train generator\n    Sample noise: z ~ p_z\n    L_G = -D(G(z))\n    Update generator: θ_G ← θ_G - α * ∇L_G\n\nLipschitz constraint methods:\n\n1. Weight Clipping (original WGAN):\n   After each update: w ← clip(w, -c, c)\n   Typically c = 0.01\n\n2. Gradient Penalty (WGAN-GP, better):\n   L_GP = λ * 𝔼_x̂[(||∇_x̂ D(x̂)||_2 - 1)²]\n   \n   Where x̂ = ε*x_real + (1-ε)*x_fake, ε ~ U(0,1)\n   Penalty applied at interpolated points\n   Typically λ = 10\n\nFor financial time series:\n\nGenerator:\nz ~ N(0, I) → LSTM/TCN → Returns sequence\n\nCritic:\nReturns sequence → Conv1D/LSTM → Score (unbounded)\n\nAdvantages over vanilla GAN:\n1. More stable training (no mode collapse)\n2. Meaningful loss metric (correlates with quality)\n3. No need to balance G/D carefully\n4. Generates more diverse scenarios\n\nWGAN-GP architecture example:\nGenerator:\n- Input: noise (100-dim)\n- LSTM: 2 layers, 128 units\n- Output: return sequence (100 timesteps)\n\nCritic:\n- Input: return sequence\n- Conv1D: 64 filters, kernel=3\n- LSTM: 128 units\n- Dense: → score (no activation)\n\nTraining hyperparameters:\n- n_critic = 5 (train critic 5x per generator update)\n- Learning rate: 1e-4 (Adam)\n- λ_GP = 10 (gradient penalty weight)\n- Batch size: 64\n\nApplications:\n1. Generate diverse market scenarios\n2. Data augmentation without mode collapse\n3. Rare event generation (crashes, rallies)\n4. Multi-asset synthetic correlation structures\n\nThink of the original GAN training as unstable - the discriminator often gets too good too fast and gives zero gradients, or the generator gets stuck producing the same few patterns (mode collapse). WGAN fixes this with a clever distance metric. Instead of binary real/fake, the critic gives a \"realness score\" - higher score = more realistic. The Wasserstein distance measures \"how much work to transform fake distribution into real distribution\" and provides stable gradients throughout training. The Lipschitz constraint (via gradient penalty) prevents the critic from having crazy steep slopes that would destabilize training. Result: you can train the critic as much as you want without breaking the generator, the loss actually means something (lower = better quality), and you get diverse outputs instead of mode collapse. Much more reliable for generating varied realistic market scenarios.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 16/Wasserstein_GAN.txt","hasFullInfo":true},{"id":345,"title":"Wavelet Denoising (Soft/Hard Thresholding)","filename":"Wavelet_Denoising.txt","group":"group 16","groupNum":16,"categoryId":32,"categoryTitle":"32. ADVANCED NOISE REDUCTION & DENOISING","subcategory":"General","summary":"Multi-scale denoising","overview":"A multi-scale denoising technique that decomposes price data into different frequency components using wavelets, applies thresholding to remove noise coefficients, and reconstructs the clean signal. This method is superior to Fourier-based approaches for non-stationary financial time series because wavelets provide both time and frequency localization.","formula":"The process involves three steps: (1) decompose the signal into wavelet coefficients at multiple scales, (2) apply thresholding to distinguish noise from signal, and (3) reconstruct the denoised signal using only the significant coefficients.\n\nMathematical formulation:\nWavelet decomposition: W(a,b) = ∫ x(t) * ψ*(a,b,t) dt","parameters":"Where:\n- x(t) = input price signal\n- ψ = wavelet function (e.g., Daubechies, Haar)\n- a = scale parameter\n- b = translation parameter\n- W(a,b) = wavelet coefficients\n\nHard thresholding:\nW_hard(a,b) = W(a,b)  if  |W(a,b)| > λ\nW_hard(a,b) = 0       if  |W(a,b)| ≤ λ\n\nSoft thresholding:\nW_soft(a,b) = sign(W(a,b)) * max(|W(a,b)| - λ, 0)\n\nUniversal threshold: λ = σ * √(2 * log(N))\n\nWhere:\n- σ = noise standard deviation (estimated from finest scale)\n- N = number of data points\n\nReconstruction: x_denoised(t) = Σ W_thresholded(a,b) * ψ(a,b,t)\n\nHard thresholding: Zeros out small coefficients completely, keeps large ones unchanged\nSoft thresholding: Shrinks all coefficients toward zero by λ amount (smoother result)","intuition":"Imagine you have a price chart that's a mix of real patterns at different timescales plus noise. Wavelet denoising is like having multiple magnifying glasses, each showing price movement at a different zoom level - very fast wiggles, medium swings, slow trends. At each zoom level, you check: \"is this movement big enough to be real, or is it just noise?\" You set a threshold - movements smaller than that are assumed to be noise and get removed (hard threshold) or shrunk (soft threshold). The big movements stay because they're real price action. Then you stack all the zoom levels back together, and you've got clean price data where noise is gone but real patterns at all timescales are preserved. It's like noise-canceling headphones but for trading charts.","rawContent":"A multi-scale denoising technique that decomposes price data into different frequency components using wavelets, applies thresholding to remove noise coefficients, and reconstructs the clean signal. This method is superior to Fourier-based approaches for non-stationary financial time series because wavelets provide both time and frequency localization.\n\nThe process involves three steps: (1) decompose the signal into wavelet coefficients at multiple scales, (2) apply thresholding to distinguish noise from signal, and (3) reconstruct the denoised signal using only the significant coefficients.\n\nMathematical formulation:\nWavelet decomposition: W(a,b) = ∫ x(t) * ψ*(a,b,t) dt\n\nWhere:\n- x(t) = input price signal\n- ψ = wavelet function (e.g., Daubechies, Haar)\n- a = scale parameter\n- b = translation parameter\n- W(a,b) = wavelet coefficients\n\nHard thresholding:\nW_hard(a,b) = W(a,b)  if  |W(a,b)| > λ\nW_hard(a,b) = 0       if  |W(a,b)| ≤ λ\n\nSoft thresholding:\nW_soft(a,b) = sign(W(a,b)) * max(|W(a,b)| - λ, 0)\n\nUniversal threshold: λ = σ * √(2 * log(N))\n\nWhere:\n- σ = noise standard deviation (estimated from finest scale)\n- N = number of data points\n\nReconstruction: x_denoised(t) = Σ W_thresholded(a,b) * ψ(a,b,t)\n\nHard thresholding: Zeros out small coefficients completely, keeps large ones unchanged\nSoft thresholding: Shrinks all coefficients toward zero by λ amount (smoother result)\n\nImagine you have a price chart that's a mix of real patterns at different timescales plus noise. Wavelet denoising is like having multiple magnifying glasses, each showing price movement at a different zoom level - very fast wiggles, medium swings, slow trends. At each zoom level, you check: \"is this movement big enough to be real, or is it just noise?\" You set a threshold - movements smaller than that are assumed to be noise and get removed (hard threshold) or shrunk (soft threshold). The big movements stay because they're real price action. Then you stack all the zoom levels back together, and you've got clean price data where noise is gone but real patterns at all timescales are preserved. It's like noise-canceling headphones but for trading charts.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 16/Wavelet_Denoising.txt","hasFullInfo":true},{"id":346,"title":"Abnormal Return Calculation","filename":"Abnormal_Return_Calculation.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Expected vs actual returns","overview":"Abnormal Return Calculation quantifies the portion of an asset's return attributable to a specific event or factor, isolated from normal market movements and systematic risk exposures. It represents the \"surprise\" return that cannot be explained by the chosen normal return model. Accurate abnormal return calculation is fundamental to event studies, performance attribution, and determining whether information events contain genuine news.","formula":"**Basic abnormal return:**\n\nAR_{it} = R_{it} - E[R_{it}]","parameters":"Where:\n- R_{it} = actual return of asset i at time t\n- E[R_{it}] = expected (normal) return\n- AR_{it} = abnormal return (unexpected component)\n\n**Normal return models:**\n\n1. **Mean-adjusted model:**\n   E[R_{it}] = μᵢ\n   \n   Where μᵢ = average return during estimation period\n   - Simple but ignores market movements\n\n2. **Market model:**\n   E[R_{it}] = α̂ᵢ + β̂ᵢR_{mt}\n   \n   Estimated via OLS: R_{it} = αᵢ + βᵢR_{mt} + εᵢₜ\n   - Removes systematic market risk\n   - Most commonly used model\n\n3. **Market-adjusted model:**\n   E[R_{it}] = R_{mt}\n   \n   Assumes αᵢ = 0, βᵢ = 1 (simplification of market model)\n\n4. **Fama-French three-factor:**\n   E[R_{it}] = α̂ᵢ + β̂ᵢR_{mt} + ŝᵢSMB_t + ĥᵢHML_t\n   \n   Controls for size and value effects\n\n5. **CAPM (theoretical):**\n   E[R_{it}] = R_f + β̂ᵢ(R_{mt} - R_f)\n\n**Cumulative abnormal returns:**\n\nCAR_i(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AR_{it}\n\nMeasures total abnormal performance over event window [t₁, t₂]\n\n**Buy-and-hold abnormal return (BHAR):**\n\nBHAR_i = Πₜ₌ₜ₁^{t₂} (1 + R_{it}) - Πₜ₌ₜ₁^{t₂} (1 + E[R_{it}])\n\nAccounts for compounding, more accurate for long horizons\n\n**Variance of abnormal returns:**\n\nVar(AR_{it}) = σ²ᵢ[1 + 1/T + (R_{mt} - μₘ)²/(Σ(R_{mt} - μₘ)²)]\n\nWhere T = estimation window length\nAccounts for parameter estimation uncertainty","intuition":"Think of abnormal returns as the \"did this event actually matter?\" test. On the day Apple announces earnings, the stock rises +3%. But the overall market rose +2% that day. The abnormal return calculation says: \"Given Apple's beta of 1.2, we expected it to rise +2.4% just from following the market. It actually rose +3%. Therefore, the abnormal return attributable to the earnings announcement is +0.6%.\" This isolates the earnings news impact from general market movements. It's the difference between \"what happened\" and \"what should have happened based on normal patterns.\"","rawContent":"Abnormal Return Calculation quantifies the portion of an asset's return attributable to a specific event or factor, isolated from normal market movements and systematic risk exposures. It represents the \"surprise\" return that cannot be explained by the chosen normal return model. Accurate abnormal return calculation is fundamental to event studies, performance attribution, and determining whether information events contain genuine news.\n\n**Basic abnormal return:**\n\nAR_{it} = R_{it} - E[R_{it}]\n\nWhere:\n- R_{it} = actual return of asset i at time t\n- E[R_{it}] = expected (normal) return\n- AR_{it} = abnormal return (unexpected component)\n\n**Normal return models:**\n\n1. **Mean-adjusted model:**\n   E[R_{it}] = μᵢ\n   \n   Where μᵢ = average return during estimation period\n   - Simple but ignores market movements\n\n2. **Market model:**\n   E[R_{it}] = α̂ᵢ + β̂ᵢR_{mt}\n   \n   Estimated via OLS: R_{it} = αᵢ + βᵢR_{mt} + εᵢₜ\n   - Removes systematic market risk\n   - Most commonly used model\n\n3. **Market-adjusted model:**\n   E[R_{it}] = R_{mt}\n   \n   Assumes αᵢ = 0, βᵢ = 1 (simplification of market model)\n\n4. **Fama-French three-factor:**\n   E[R_{it}] = α̂ᵢ + β̂ᵢR_{mt} + ŝᵢSMB_t + ĥᵢHML_t\n   \n   Controls for size and value effects\n\n5. **CAPM (theoretical):**\n   E[R_{it}] = R_f + β̂ᵢ(R_{mt} - R_f)\n\n**Cumulative abnormal returns:**\n\nCAR_i(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AR_{it}\n\nMeasures total abnormal performance over event window [t₁, t₂]\n\n**Buy-and-hold abnormal return (BHAR):**\n\nBHAR_i = Πₜ₌ₜ₁^{t₂} (1 + R_{it}) - Πₜ₌ₜ₁^{t₂} (1 + E[R_{it}])\n\nAccounts for compounding, more accurate for long horizons\n\n**Variance of abnormal returns:**\n\nVar(AR_{it}) = σ²ᵢ[1 + 1/T + (R_{mt} - μₘ)²/(Σ(R_{mt} - μₘ)²)]\n\nWhere T = estimation window length\nAccounts for parameter estimation uncertainty\n\nThink of abnormal returns as the \"did this event actually matter?\" test. On the day Apple announces earnings, the stock rises +3%. But the overall market rose +2% that day. The abnormal return calculation says: \"Given Apple's beta of 1.2, we expected it to rise +2.4% just from following the market. It actually rose +3%. Therefore, the abnormal return attributable to the earnings announcement is +0.6%.\" This isolates the earnings news impact from general market movements. It's the difference between \"what happened\" and \"what should have happened based on normal patterns.\"","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Abnormal_Return_Calculation.txt","hasFullInfo":true},{"id":347,"title":"Approximate Factor Models","filename":"Approximate_Factor_Models.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Large-dimensional factors","overview":"Approximate Factor Models are factor models designed for high-dimensional settings where the number of variables (N) is large, potentially larger than the number of time periods (T). Unlike exact factor models which assume factors perfectly explain common variance, approximate models allow for weak cross-sectional correlation in the idiosyncratic errors, making them more realistic and robust for large datasets. They're foundational in modern empirical finance for analyzing hundreds or thousands of assets simultaneously.","formula":"The approximate factor model is:\nX_{it} = λ'_i F_t + e_{it}","parameters":"Where:\n- X_{it} = observation for variable i at time t\n- F_t = r × 1 vector of common factors (r fixed, small)\n- λ_i = r × 1 vector of factor loadings for variable i\n- e_{it} = idiosyncratic component\n\nKey assumptions:\n1. Strong factors: factors explain O(N) of the total variance\n2. Weak cross-sectional dependence: E(e_{it} e_{jt}) small but not necessarily zero\n3. As N → ∞, the factor structure dominates\n\nEstimation via Principal Components:\n1. Construct covariance/correlation matrix of X\n2. Extract first r eigenvectors (factor estimates)\n3. Project data onto factors to get loadings\n\nFactor number selection criteria:\n- IC_p1(r) = ln(V(r)) + r * ((N+T)/(NT)) * ln(NT/(N+T))  [Bai-Ng criterion]\n- IC_p2(r) = ln(V(r)) + r * ((N+T)/(NT)) * ln(min(N,T))\n- IC_p3(r) = ln(V(r)) + r * (ln(min(N,T))/min(N,T))\n\nWhere V(r) = residual variance with r factors.\n\nImagine you're analyzing 500 stocks. Traditional factor models say each stock is purely explained by a few factors plus its own independent noise. Approximate factor models are more realistic: they say \"yes, there are a few main factors driving everything, but the 'noise' for each stock might be slightly correlated with nearby stocks' noise—not perfectly independent, but weak enough that the main factors still dominate.\" This flexibility makes the model work reliably with massive datasets where perfect independence assumptions would fail. It's the workhorse model for understanding what drives large cross-sections of assets.","intuition":"","rawContent":"Approximate Factor Models are factor models designed for high-dimensional settings where the number of variables (N) is large, potentially larger than the number of time periods (T). Unlike exact factor models which assume factors perfectly explain common variance, approximate models allow for weak cross-sectional correlation in the idiosyncratic errors, making them more realistic and robust for large datasets. They're foundational in modern empirical finance for analyzing hundreds or thousands of assets simultaneously.\n\nThe approximate factor model is:\nX_{it} = λ'_i F_t + e_{it}\n\nWhere:\n- X_{it} = observation for variable i at time t\n- F_t = r × 1 vector of common factors (r fixed, small)\n- λ_i = r × 1 vector of factor loadings for variable i\n- e_{it} = idiosyncratic component\n\nKey assumptions:\n1. Strong factors: factors explain O(N) of the total variance\n2. Weak cross-sectional dependence: E(e_{it} e_{jt}) small but not necessarily zero\n3. As N → ∞, the factor structure dominates\n\nEstimation via Principal Components:\n1. Construct covariance/correlation matrix of X\n2. Extract first r eigenvectors (factor estimates)\n3. Project data onto factors to get loadings\n\nFactor number selection criteria:\n- IC_p1(r) = ln(V(r)) + r * ((N+T)/(NT)) * ln(NT/(N+T))  [Bai-Ng criterion]\n- IC_p2(r) = ln(V(r)) + r * ((N+T)/(NT)) * ln(min(N,T))\n- IC_p3(r) = ln(V(r)) + r * (ln(min(N,T))/min(N,T))\n\nWhere V(r) = residual variance with r factors.\n\nImagine you're analyzing 500 stocks. Traditional factor models say each stock is purely explained by a few factors plus its own independent noise. Approximate factor models are more realistic: they say \"yes, there are a few main factors driving everything, but the 'noise' for each stock might be slightly correlated with nearby stocks' noise—not perfectly independent, but weak enough that the main factors still dominate.\" This flexibility makes the model work reliably with massive datasets where perfect independence assumptions would fail. It's the workhorse model for understanding what drives large cross-sections of assets.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Approximate_Factor_Models.txt","hasFullInfo":true},{"id":348,"title":"Bai-Perron Multiple Break Tests","filename":"Bai-Perron_Multiple_Break_Tests.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Multiple breakpoint detection","overview":"Bai-Perron tests are a comprehensive framework for detecting and estimating multiple structural breaks in linear regression models when both the number and timing of breaks are unknown. Developed by Jushan Bai and Pierre Perron, these tests allow systematic identification of regime changes in economic and financial time series, providing consistent estimates of break dates and valid inference even with multiple unknown breakpoints.","formula":"**Model with m breaks (m+1 regimes):**\n\ny_t = x_t'β_j + u_t,  for t = T_{j-1}+1, ..., T_j  (j = 1, ..., m+1)","parameters":"Where:\n- T₀ = 0, T_{m+1} = T (boundaries)\n- T₁, ..., T_m = unknown break dates to be estimated\n- β_j = regime-specific coefficients\n\n**Break date estimation:**\n\n({T̂₁, ..., T̂_m}, {β̂₁, ..., β̂_{m+1}}) = argmin Σⱼ₌₁^{m+1} Σₜ₌ₜⱼ₋₁₊₁^{Tⱼ} (y_t - x_t'β_j)²\n\nSubject to: minimum regime length (trimming ε, typically 5-15% of sample)\n\n**Sequential testing procedure:**\n\n1. **Test for no breaks vs. ℓ breaks:**\n   - F(ℓ; 0) tests H₀: no breaks vs. H₁: ℓ breaks\n   - Computed for ℓ = 1, 2, ..., M_max\n\n2. **SupF test (unknown number of breaks):**\n   - SupF(ℓ) = sup_{τ₁,...,τ_ℓ} F(τ₁, ..., τ_ℓ)\n   - Tests for ℓ breaks against no breaks\n\n3. **Double maximum tests:**\n   - UDMax = max_{1≤ℓ≤M} SupF(ℓ)\n   - WDMax = weighted version using critical values\n\n4. **Sequential procedure:**\n   - Test ℓ vs. ℓ+1 breaks sequentially\n   - Stop when F(ℓ+1; ℓ) is insignificant\n\n**Information criteria (BIC, LWZ):**\nBIC(m) = ln(SSR(m)/T) + ln(T)/T * (m+1)k\n\nSelect m minimizing BIC.\n\nImagine analyzing GDP growth from 1960-2020. You suspect multiple regime changes but don't know when or how many. Bai-Perron systematically searches all possible break configurations: \"Maybe 1 break in 1980? Or 2 breaks in 1973 and 2008? Or 3 breaks in 1973, 1991, and 2008?\" It evaluates each possibility, estimates break dates, and determines how many breaks are statistically justified. The result might be: \"There are 3 significant breaks at 1974, 1992, and 2008, dividing the data into 4 distinct regimes with different growth dynamics.\" It's the gold standard for \"when and how many times did this relationship change?\"","intuition":"","rawContent":"Bai-Perron tests are a comprehensive framework for detecting and estimating multiple structural breaks in linear regression models when both the number and timing of breaks are unknown. Developed by Jushan Bai and Pierre Perron, these tests allow systematic identification of regime changes in economic and financial time series, providing consistent estimates of break dates and valid inference even with multiple unknown breakpoints.\n\n**Model with m breaks (m+1 regimes):**\n\ny_t = x_t'β_j + u_t,  for t = T_{j-1}+1, ..., T_j  (j = 1, ..., m+1)\n\nWhere:\n- T₀ = 0, T_{m+1} = T (boundaries)\n- T₁, ..., T_m = unknown break dates to be estimated\n- β_j = regime-specific coefficients\n\n**Break date estimation:**\n\n({T̂₁, ..., T̂_m}, {β̂₁, ..., β̂_{m+1}}) = argmin Σⱼ₌₁^{m+1} Σₜ₌ₜⱼ₋₁₊₁^{Tⱼ} (y_t - x_t'β_j)²\n\nSubject to: minimum regime length (trimming ε, typically 5-15% of sample)\n\n**Sequential testing procedure:**\n\n1. **Test for no breaks vs. ℓ breaks:**\n   - F(ℓ; 0) tests H₀: no breaks vs. H₁: ℓ breaks\n   - Computed for ℓ = 1, 2, ..., M_max\n\n2. **SupF test (unknown number of breaks):**\n   - SupF(ℓ) = sup_{τ₁,...,τ_ℓ} F(τ₁, ..., τ_ℓ)\n   - Tests for ℓ breaks against no breaks\n\n3. **Double maximum tests:**\n   - UDMax = max_{1≤ℓ≤M} SupF(ℓ)\n   - WDMax = weighted version using critical values\n\n4. **Sequential procedure:**\n   - Test ℓ vs. ℓ+1 breaks sequentially\n   - Stop when F(ℓ+1; ℓ) is insignificant\n\n**Information criteria (BIC, LWZ):**\nBIC(m) = ln(SSR(m)/T) + ln(T)/T * (m+1)k\n\nSelect m minimizing BIC.\n\nImagine analyzing GDP growth from 1960-2020. You suspect multiple regime changes but don't know when or how many. Bai-Perron systematically searches all possible break configurations: \"Maybe 1 break in 1980? Or 2 breaks in 1973 and 2008? Or 3 breaks in 1973, 1991, and 2008?\" It evaluates each possibility, estimates break dates, and determines how many breaks are statistically justified. The result might be: \"There are 3 significant breaks at 1974, 1992, and 2008, dividing the data into 4 distinct regimes with different growth dynamics.\" It's the gold standard for \"when and how many times did this relationship change?\"","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Bai-Perron_Multiple_Break_Tests.txt","hasFullInfo":true},{"id":349,"title":"CUSUM (Cumulative Sum Control)","filename":"CUSUM_Cumulative_Sum_Control.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Sequential change detection","overview":"CUSUM (Cumulative Sum Control Chart) is a sequential change detection method that monitors the cumulative sum of deviations from a target value, making it sensitive to small, persistent shifts in the mean of a process. Originally developed for quality control, CUSUM is widely used in finance for detecting structural breaks, regime changes, and parameter instability in real-time without requiring a predetermined breakpoint. It's more sensitive to gradual shifts than simple threshold tests.","formula":"**Basic CUSUM statistic:**\n\nS_t = Σᵢ₌₁ᵗ (xᵢ - μ₀)","parameters":"Where:\n- xᵢ = observations (e.g., regression residuals)\n- μ₀ = target mean (often 0 for residuals)\n- S_t = cumulative sum at time t\n\n**Standardized CUSUM:**\n\nC_t = Σᵢ₌₁ᵗ (xᵢ - μ₀) / σ\n\nWhere σ = standard deviation\n\n**Two-sided CUSUM (detects increases and decreases):**\n\nUpper CUSUM: S_t⁺ = max(0, S_{t-1}⁺ + xᵢ - μ₀ - K)\nLower CUSUM: S_t⁻ = min(0, S_{t-1}⁻ + xᵢ - μ₀ + K)\n\nWhere:\n- K = slack parameter (allowance for noise, typically 0.5σ)\n- Signal if |S_t⁺| > H or |S_t⁻| > H\n- H = decision threshold (typically 4σ to 5σ)\n\n**CUSUM of squares (for variance changes):**\n\nC_t = Σᵢ₌₁ᵗ (xᵢ² - σ₀²) / σ₀²\n\n**Recursive residuals CUSUM:**\nUses recursive residuals from sequential regressions, providing scale-free detection.\n\n**Decision boundaries:**\nPlot C_t with ±confidence bands; break detected if C_t exceeds bands.","intuition":"Imagine you're monitoring if a trading strategy's returns have deteriorated. Daily fluctuations are noisy—some days up, some down—making it hard to spot if something has fundamentally changed. CUSUM accumulates these deviations: if returns are consistently slightly below expectation, the cumulative sum grows steadily, eventually triggering an alarm even though no single day looked unusual. A regular threshold test might miss this gradual decline. CUSUM acts like a sensitive detector that says \"individually these look okay, but cumulatively something has shifted.\" It catches the slow leak that point-by-point monitoring would miss.","rawContent":"CUSUM (Cumulative Sum Control Chart) is a sequential change detection method that monitors the cumulative sum of deviations from a target value, making it sensitive to small, persistent shifts in the mean of a process. Originally developed for quality control, CUSUM is widely used in finance for detecting structural breaks, regime changes, and parameter instability in real-time without requiring a predetermined breakpoint. It's more sensitive to gradual shifts than simple threshold tests.\n\n**Basic CUSUM statistic:**\n\nS_t = Σᵢ₌₁ᵗ (xᵢ - μ₀)\n\nWhere:\n- xᵢ = observations (e.g., regression residuals)\n- μ₀ = target mean (often 0 for residuals)\n- S_t = cumulative sum at time t\n\n**Standardized CUSUM:**\n\nC_t = Σᵢ₌₁ᵗ (xᵢ - μ₀) / σ\n\nWhere σ = standard deviation\n\n**Two-sided CUSUM (detects increases and decreases):**\n\nUpper CUSUM: S_t⁺ = max(0, S_{t-1}⁺ + xᵢ - μ₀ - K)\nLower CUSUM: S_t⁻ = min(0, S_{t-1}⁻ + xᵢ - μ₀ + K)\n\nWhere:\n- K = slack parameter (allowance for noise, typically 0.5σ)\n- Signal if |S_t⁺| > H or |S_t⁻| > H\n- H = decision threshold (typically 4σ to 5σ)\n\n**CUSUM of squares (for variance changes):**\n\nC_t = Σᵢ₌₁ᵗ (xᵢ² - σ₀²) / σ₀²\n\n**Recursive residuals CUSUM:**\nUses recursive residuals from sequential regressions, providing scale-free detection.\n\n**Decision boundaries:**\nPlot C_t with ±confidence bands; break detected if C_t exceeds bands.\n\nImagine you're monitoring if a trading strategy's returns have deteriorated. Daily fluctuations are noisy—some days up, some down—making it hard to spot if something has fundamentally changed. CUSUM accumulates these deviations: if returns are consistently slightly below expectation, the cumulative sum grows steadily, eventually triggering an alarm even though no single day looked unusual. A regular threshold test might miss this gradual decline. CUSUM acts like a sensitive detector that says \"individually these look okay, but cumulatively something has shifted.\" It catches the slow leak that point-by-point monitoring would miss.","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/CUSUM_Cumulative_Sum_Control.txt","hasFullInfo":true},{"id":350,"title":"Dynamic Factor Models (DFM)","filename":"Dynamic_Factor_Models_DFM.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Time-varying factors","overview":"Dynamic Factor Models extend traditional factor analysis to time series data by allowing both the factors and their loadings to evolve over time. DFMs capture the dynamic co-movements among large sets of economic or financial time series, making them powerful for forecasting, nowcasting, and understanding time-varying relationships. They're extensively used in central banks for real-time economic monitoring and prediction.","formula":"The basic DFM structure is:\nX_t = Λ * F_t + ε_t  (observation equation)\nF_t = A * F_{t-1} + η_t  (state equation)","parameters":"Where:\n- X_t = observed variables at time t (p × 1)\n- F_t = latent factors at time t (k × 1)\n- Λ = factor loadings matrix (p × k)\n- A = factor transition matrix (k × k)\n- ε_t = idiosyncratic errors\n- η_t = factor innovations\n\nExtended DFM allows for:\n- Time-varying loadings: Λ_t evolves over time\n- Higher-order dynamics: F_t = A₁F_{t-1} + A₂F_{t-2} + ... + η_t\n- Mixed-frequency data: different variables observed at different frequencies\n\nEstimation typically uses:\n- Kalman filter for factor extraction\n- Principal components for initialization\n- EM algorithm or Bayesian methods for parameter estimation\n\nThe model decomposes variance into:\n- Common component: Λ * F_t (driven by shared factors)\n- Idiosyncratic component: ε_t (series-specific)","intuition":"Think of DFM as tracking the hidden \"moods\" of the market that evolve over time. At any moment, there might be 2-3 dominant forces (factors) affecting all stocks—maybe \"risk appetite,\" \"growth expectations,\" and \"liquidity conditions.\" But these forces themselves change over time: today's risk appetite isn't the same as last year's. DFM tracks both what these hidden forces are AND how they evolve, letting you forecast individual stocks by predicting the common factors. It's like having a dynamic X-ray vision that sees through hundreds of stock prices to the handful of evolving forces actually driving everything.","rawContent":"Dynamic Factor Models extend traditional factor analysis to time series data by allowing both the factors and their loadings to evolve over time. DFMs capture the dynamic co-movements among large sets of economic or financial time series, making them powerful for forecasting, nowcasting, and understanding time-varying relationships. They're extensively used in central banks for real-time economic monitoring and prediction.\n\nThe basic DFM structure is:\nX_t = Λ * F_t + ε_t  (observation equation)\nF_t = A * F_{t-1} + η_t  (state equation)\n\nWhere:\n- X_t = observed variables at time t (p × 1)\n- F_t = latent factors at time t (k × 1)\n- Λ = factor loadings matrix (p × k)\n- A = factor transition matrix (k × k)\n- ε_t = idiosyncratic errors\n- η_t = factor innovations\n\nExtended DFM allows for:\n- Time-varying loadings: Λ_t evolves over time\n- Higher-order dynamics: F_t = A₁F_{t-1} + A₂F_{t-2} + ... + η_t\n- Mixed-frequency data: different variables observed at different frequencies\n\nEstimation typically uses:\n- Kalman filter for factor extraction\n- Principal components for initialization\n- EM algorithm or Bayesian methods for parameter estimation\n\nThe model decomposes variance into:\n- Common component: Λ * F_t (driven by shared factors)\n- Idiosyncratic component: ε_t (series-specific)\n\nThink of DFM as tracking the hidden \"moods\" of the market that evolve over time. At any moment, there might be 2-3 dominant forces (factors) affecting all stocks—maybe \"risk appetite,\" \"growth expectations,\" and \"liquidity conditions.\" But these forces themselves change over time: today's risk appetite isn't the same as last year's. DFM tracks both what these hidden forces are AND how they evolve, letting you forecast individual stocks by predicting the common factors. It's like having a dynamic X-ray vision that sees through hundreds of stock prices to the handful of evolving forces actually driving everything.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Dynamic_Factor_Models_DFM.txt","hasFullInfo":true},{"id":351,"title":"Empirical Bayes Shrinkage","filename":"Empirical_Bayes_Shrinkage.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Data-driven prior","overview":"Empirical Bayes Shrinkage is a statistical technique that uses the data itself to estimate prior distributions, which are then used to shrink individual estimates toward a common value. Unlike full Bayesian methods that require specifying priors in advance, empirical Bayes estimates the prior from the data, making it more practical and objective. It's widely used for improving estimates of means, variances, and other parameters when dealing with multiple related quantities.","formula":"The general empirical Bayes estimate is:\nθ̂ᵢᴱᴮ = B * x̄ᵢ + (1 - B) * μ̂","parameters":"Where:\n- x̄ᵢ = sample mean for observation i\n- μ̂ = grand mean (estimated from all observations)\n- B = shrinkage factor estimated from data\n\nThe shrinkage factor B is typically:\nB = 1 - σ̂ₐ²/(σ̂ₐ² + σ̂ₑ²/nᵢ)\n\nWhere:\n- σ̂ₐ² = estimated variance between true means (signal)\n- σ̂ₑ² = estimated variance within observations (noise)\n- nᵢ = sample size for observation i\n\nWhen signal-to-noise is high, B ≈ 1 (little shrinkage)\nWhen signal-to-noise is low, B ≈ 0 (heavy shrinkage toward grand mean)\n\nEmpirical Bayes automatically calibrates how much to trust individual estimates versus the overall pattern.","intuition":"Imagine you're estimating skill levels of 50 traders based on their recent performance. Some might look amazing just by luck, others terrible by bad luck. Empirical Bayes looks at all 50 traders together and figures out: \"How much of the variation is real skill versus random luck?\" If it's mostly luck, it heavily adjusts everyone toward average. If it's mostly skill, it keeps the estimates closer to their raw performance. The brilliant part is it learns this from the data itself—you don't need to guess how much luck vs. skill exists. It's like having a smart algorithm that automatically knows when to be skeptical of outliers.","rawContent":"Empirical Bayes Shrinkage is a statistical technique that uses the data itself to estimate prior distributions, which are then used to shrink individual estimates toward a common value. Unlike full Bayesian methods that require specifying priors in advance, empirical Bayes estimates the prior from the data, making it more practical and objective. It's widely used for improving estimates of means, variances, and other parameters when dealing with multiple related quantities.\n\nThe general empirical Bayes estimate is:\nθ̂ᵢᴱᴮ = B * x̄ᵢ + (1 - B) * μ̂\n\nWhere:\n- x̄ᵢ = sample mean for observation i\n- μ̂ = grand mean (estimated from all observations)\n- B = shrinkage factor estimated from data\n\nThe shrinkage factor B is typically:\nB = 1 - σ̂ₐ²/(σ̂ₐ² + σ̂ₑ²/nᵢ)\n\nWhere:\n- σ̂ₐ² = estimated variance between true means (signal)\n- σ̂ₑ² = estimated variance within observations (noise)\n- nᵢ = sample size for observation i\n\nWhen signal-to-noise is high, B ≈ 1 (little shrinkage)\nWhen signal-to-noise is low, B ≈ 0 (heavy shrinkage toward grand mean)\n\nEmpirical Bayes automatically calibrates how much to trust individual estimates versus the overall pattern.\n\nImagine you're estimating skill levels of 50 traders based on their recent performance. Some might look amazing just by luck, others terrible by bad luck. Empirical Bayes looks at all 50 traders together and figures out: \"How much of the variation is real skill versus random luck?\" If it's mostly luck, it heavily adjusts everyone toward average. If it's mostly skill, it keeps the estimates closer to their raw performance. The brilliant part is it learns this from the data itself—you don't need to guess how much luck vs. skill exists. It's like having a smart algorithm that automatically knows when to be skeptical of outliers.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Empirical_Bayes_Shrinkage.txt","hasFullInfo":true},{"id":352,"title":"Event Study Methodology","filename":"Event_Study_Methodology.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Abnormal return analysis","overview":"Event Study Methodology is a statistical framework for measuring the impact of specific events on asset prices by isolating abnormal returns attributable to the event from normal market movements. It's the fundamental empirical approach in finance for answering \"did this event matter?\" and \"how much did it move the stock?\" Used extensively for corporate actions, regulatory changes, macroeconomic announcements, and any discrete event whose market impact needs quantification.","formula":"**Standard event study procedure:**\n\n**Step 1: Event identification and dating**\n- Define event precisely (earnings announcement, FDA approval, etc.)\n- Determine event date t₀ (announcement time)\n- Identify sample of affected securities\n\n**Step 2: Define time windows**\n- Estimation window: [-T₀, -T₁] (e.g., [-250, -30])\n  Used to estimate normal return parameters\n- Event window: [-t₁, t₂] (e.g., [-1, +5])\n  Period over which abnormal returns are measured\n- Post-event window: [t₂+1, T₂] (optional, for drift analysis)\n\n**Step 3: Calculate expected (normal) returns**\n\nMarket model:\nR_{it} = αᵢ + βᵢR_{mt} + εᵢₜ\n\nEstimated using OLS on estimation window.\n\nAlternative models:\n- Mean-adjusted: E[R_{it}] = μᵢ\n- Market-adjusted: E[R_{it}] = R_{mt}\n- Fama-French: E[R_{it}] = αᵢ + βᵢR_{mt} + sᵢSMB_t + hᵢHML_t\n\n**Step 4: Calculate abnormal returns**\n\nAR_{it} = R_{it} - E[R_{it}]\n\n**Step 5: Aggregate abnormal returns**\n\nAverage Abnormal Return (AAR):\nAAR_t = (1/N) Σᵢ₌₁^N AR_{it}\n\nCumulative Abnormal Return (CAR):\nCAR_i(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AR_{it}\n\nCumulative Average Abnormal Return (CAAR):\nCAAR(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AAR_t\n\n**Step 6: Statistical testing**\n\nNull hypothesis: H₀: CAR = 0 (no event impact)\n\nTest statistic:\nt = CAR / SE(CAR)\n\nWhere SE(CAR) = √(Σₜ Var(AAR_t))\n\n**Advanced considerations:**\n- Cross-sectional correlation adjustments\n- Event-induced variance changes\n- Clustering (multiple events on same date)\n- Confounding events (overlapping announcements)","parameters":"","intuition":"Think of event studies as controlled experiments in finance. You want to know \"did the FDA drug approval announcement increase the stock price?\" But stocks move for many reasons daily. The event study isolates the announcement effect by asking: \"What would the stock have done based on normal market movements? What did it actually do? The difference is the announcement impact.\" Across 100 FDA approvals, you might find: \"Average +8.2% abnormal return over 2 days, statistically significant, with 80% of approvals showing positive CAR.\" This quantifies the value of FDA approval in hard numbers.","rawContent":"Event Study Methodology is a statistical framework for measuring the impact of specific events on asset prices by isolating abnormal returns attributable to the event from normal market movements. It's the fundamental empirical approach in finance for answering \"did this event matter?\" and \"how much did it move the stock?\" Used extensively for corporate actions, regulatory changes, macroeconomic announcements, and any discrete event whose market impact needs quantification.\n\n**Standard event study procedure:**\n\n**Step 1: Event identification and dating**\n- Define event precisely (earnings announcement, FDA approval, etc.)\n- Determine event date t₀ (announcement time)\n- Identify sample of affected securities\n\n**Step 2: Define time windows**\n- Estimation window: [-T₀, -T₁] (e.g., [-250, -30])\n  Used to estimate normal return parameters\n- Event window: [-t₁, t₂] (e.g., [-1, +5])\n  Period over which abnormal returns are measured\n- Post-event window: [t₂+1, T₂] (optional, for drift analysis)\n\n**Step 3: Calculate expected (normal) returns**\n\nMarket model:\nR_{it} = αᵢ + βᵢR_{mt} + εᵢₜ\n\nEstimated using OLS on estimation window.\n\nAlternative models:\n- Mean-adjusted: E[R_{it}] = μᵢ\n- Market-adjusted: E[R_{it}] = R_{mt}\n- Fama-French: E[R_{it}] = αᵢ + βᵢR_{mt} + sᵢSMB_t + hᵢHML_t\n\n**Step 4: Calculate abnormal returns**\n\nAR_{it} = R_{it} - E[R_{it}]\n\n**Step 5: Aggregate abnormal returns**\n\nAverage Abnormal Return (AAR):\nAAR_t = (1/N) Σᵢ₌₁^N AR_{it}\n\nCumulative Abnormal Return (CAR):\nCAR_i(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AR_{it}\n\nCumulative Average Abnormal Return (CAAR):\nCAAR(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AAR_t\n\n**Step 6: Statistical testing**\n\nNull hypothesis: H₀: CAR = 0 (no event impact)\n\nTest statistic:\nt = CAR / SE(CAR)\n\nWhere SE(CAR) = √(Σₜ Var(AAR_t))\n\n**Advanced considerations:**\n- Cross-sectional correlation adjustments\n- Event-induced variance changes\n- Clustering (multiple events on same date)\n- Confounding events (overlapping announcements)\n\nThink of event studies as controlled experiments in finance. You want to know \"did the FDA drug approval announcement increase the stock price?\" But stocks move for many reasons daily. The event study isolates the announcement effect by asking: \"What would the stock have done based on normal market movements? What did it actually do? The difference is the announcement impact.\" Across 100 FDA approvals, you might find: \"Average +8.2% abnormal return over 2 days, statistically significant, with 80% of approvals showing positive CAR.\" This quantifies the value of FDA approval in hard numbers.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Event_Study_Methodology.txt","hasFullInfo":true},{"id":353,"title":"Factor Analysis","filename":"Factor_Analysis.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Latent variable modeling","overview":"Factor Analysis is a statistical method for describing the variability among observed correlated variables in terms of fewer unobserved latent variables called factors. Unlike PCA which is purely descriptive, factor analysis assumes an underlying causal model where observed variables are linear combinations of hidden factors plus unique error terms. It's widely used in finance for identifying common risk factors driving asset returns.","formula":"The factor analysis model is:\nX = Λ * F + ε","parameters":"Where:\n- X = observed variables (p × 1 vector)\n- Λ = factor loadings matrix (p × k)\n- F = common factors (k × 1 vector, k < p)\n- ε = unique factors/errors (p × 1 vector)\n\nThis implies the covariance structure:\nCov(X) = Λ * Λ' + Ψ\n\nWhere:\n- Λ * Λ' = common variance (shared across variables)\n- Ψ = diagonal matrix of unique variances (specific to each variable)\n\nEstimation methods:\n- Maximum Likelihood\n- Principal Axis Factoring\n- Minimum Residual\n\nFactor rotation (orthogonal or oblique) improves interpretability:\n- Varimax: maximizes variance of squared loadings\n- Promax: allows correlated factors\n- Quartimax: simplifies variables\n\nImagine you observe that stocks in tech, healthcare, and energy sectors move in complex correlated patterns. Factor analysis says: \"These movements aren't random—there are a few hidden forces at work.\" Maybe Factor 1 is \"overall market sentiment,\" Factor 2 is \"interest rate sensitivity,\" and Factor 3 is \"commodity prices.\" Each stock responds to these hidden factors differently (the loadings), plus has its own unique wiggles (errors). Factor analysis uncovers these hidden forces from just watching how stocks co-move, revealing the fundamental drivers behind the complexity you observe.","intuition":"","rawContent":"Factor Analysis is a statistical method for describing the variability among observed correlated variables in terms of fewer unobserved latent variables called factors. Unlike PCA which is purely descriptive, factor analysis assumes an underlying causal model where observed variables are linear combinations of hidden factors plus unique error terms. It's widely used in finance for identifying common risk factors driving asset returns.\n\nThe factor analysis model is:\nX = Λ * F + ε\n\nWhere:\n- X = observed variables (p × 1 vector)\n- Λ = factor loadings matrix (p × k)\n- F = common factors (k × 1 vector, k < p)\n- ε = unique factors/errors (p × 1 vector)\n\nThis implies the covariance structure:\nCov(X) = Λ * Λ' + Ψ\n\nWhere:\n- Λ * Λ' = common variance (shared across variables)\n- Ψ = diagonal matrix of unique variances (specific to each variable)\n\nEstimation methods:\n- Maximum Likelihood\n- Principal Axis Factoring\n- Minimum Residual\n\nFactor rotation (orthogonal or oblique) improves interpretability:\n- Varimax: maximizes variance of squared loadings\n- Promax: allows correlated factors\n- Quartimax: simplifies variables\n\nImagine you observe that stocks in tech, healthcare, and energy sectors move in complex correlated patterns. Factor analysis says: \"These movements aren't random—there are a few hidden forces at work.\" Maybe Factor 1 is \"overall market sentiment,\" Factor 2 is \"interest rate sensitivity,\" and Factor 3 is \"commodity prices.\" Each stock responds to these hidden factors differently (the loadings), plus has its own unique wiggles (errors). Factor analysis uncovers these hidden forces from just watching how stocks co-move, revealing the fundamental drivers behind the complexity you observe.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Factor_Analysis.txt","hasFullInfo":true},{"id":354,"title":"Graphical Lasso (GLASSO)","filename":"Graphical_Lasso_GLASSO.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Sparse precision estimation","overview":"Graphical Lasso is a method for estimating sparse inverse covariance matrices (precision matrices) using L1 regularization. It identifies which variables (assets) are conditionally independent given all others, effectively learning the graphical structure of dependencies in the data. GLASSO produces sparse precision matrices where many entries are exactly zero, indicating no direct conditional dependence between those variable pairs.","formula":"The objective function being minimized is:\nminimize: -log(det(Θ)) + trace(S * Θ) + λ * ||Θ||₁","parameters":"Where:\n- Θ = precision matrix (inverse covariance matrix)\n- S = sample covariance matrix\n- λ = regularization parameter controlling sparsity\n- ||Θ||₁ = sum of absolute values of all elements (L1 penalty)\n- det(Θ) = determinant of Θ\n\nThe L1 penalty (λ * ||Θ||₁) drives small precision matrix elements to exactly zero, creating a sparse network structure. The resulting precision matrix Θ reveals:\n- Non-zero Θᵢⱼ indicates direct conditional dependence between variables i and j\n- Zero Θᵢⱼ indicates conditional independence (no direct connection)\n\nHigher λ values produce sparser networks with fewer connections.","intuition":"Imagine you have 100 stocks and want to understand which ones directly influence each other. Regular methods would suggest everything is connected to everything else, which is overwhelming and often wrong. Graphical Lasso is like a smart detective that figures out the real direct connections and eliminates the spurious ones. If stock A affects stock B, which then affects stock C, GLASSO identifies that A and C aren't directly related—they're only connected through B. This gives you a clean network map showing only the meaningful relationships.","rawContent":"Graphical Lasso is a method for estimating sparse inverse covariance matrices (precision matrices) using L1 regularization. It identifies which variables (assets) are conditionally independent given all others, effectively learning the graphical structure of dependencies in the data. GLASSO produces sparse precision matrices where many entries are exactly zero, indicating no direct conditional dependence between those variable pairs.\n\nThe objective function being minimized is:\nminimize: -log(det(Θ)) + trace(S * Θ) + λ * ||Θ||₁\n\nWhere:\n- Θ = precision matrix (inverse covariance matrix)\n- S = sample covariance matrix\n- λ = regularization parameter controlling sparsity\n- ||Θ||₁ = sum of absolute values of all elements (L1 penalty)\n- det(Θ) = determinant of Θ\n\nThe L1 penalty (λ * ||Θ||₁) drives small precision matrix elements to exactly zero, creating a sparse network structure. The resulting precision matrix Θ reveals:\n- Non-zero Θᵢⱼ indicates direct conditional dependence between variables i and j\n- Zero Θᵢⱼ indicates conditional independence (no direct connection)\n\nHigher λ values produce sparser networks with fewer connections.\n\nImagine you have 100 stocks and want to understand which ones directly influence each other. Regular methods would suggest everything is connected to everything else, which is overwhelming and often wrong. Graphical Lasso is like a smart detective that figures out the real direct connections and eliminates the spurious ones. If stock A affects stock B, which then affects stock C, GLASSO identifies that A and C aren't directly related—they're only connected through B. This gives you a clean network map showing only the meaningful relationships.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Graphical_Lasso_GLASSO.txt","hasFullInfo":true},{"id":355,"title":"Hamilton Filter (Regime Switching)","filename":"Hamilton_Filter_Regime_Switching.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Filtered probabilities","overview":"The Hamilton Filter is an algorithm for computing filtered and smoothed regime probabilities in Markov-Switching models, analogous to the Kalman filter for state-space models. Developed by James Hamilton, it recursively updates the probability distribution over regimes as new data arrives, allowing real-time regime identification and parameter estimation via maximum likelihood. It's the computational engine that makes regime-switching models practical.","formula":"The Hamilton Filter algorithm:\n\n**Prediction step:**\nP(s_t = j | Y_{t-1}) = Σᵢ p_{ij} * P(s_{t-1} = i | Y_{t-1})","parameters":"Where:\n- p_{ij} = transition probability from regime i to j\n- Y_{t-1} = data up to time t-1\n\n**Update step:**\nP(s_t = j | Y_t) = [f(y_t | s_t=j) * P(s_t=j | Y_{t-1})] / f(y_t | Y_{t-1})\n\nWhere:\n- f(y_t | s_t=j) = conditional density given regime j\n- f(y_t | Y_{t-1}) = Σⱼ f(y_t | s_t=j) * P(s_t=j | Y_{t-1})\n\n**Log-likelihood contribution:**\nln L_t = ln f(y_t | Y_{t-1}) = ln[Σⱼ f(y_t | s_t=j) * P(s_t=j | Y_{t-1})]\n\nThe smoothed probabilities use backward recursion:\nP(s_t = i | Y_T) = P(s_t = i | Y_t) * Σⱼ [P(s_{t+1}=j | Y_T) * p_{ij} / P(s_{t+1}=j | Y_t)]\n\nOutputs:\n- Filtered probability: P(s_t | Y_t) = real-time regime estimate\n- Smoothed probability: P(s_t | Y_T) = retrospective regime estimate using all data","intuition":"Think of the Hamilton Filter as a sophisticated regime detector that constantly updates its beliefs. Each day, it sees new price data and thinks: \"Yesterday I thought we were 70% likely in the calm regime. Today's big move makes volatile regime more likely. Updating my probabilities to 40% calm, 60% volatile.\" It simultaneously learns the regime characteristics AND tracks which regime you're currently in. The filter gives you two perspectives: real-time probabilities (what you'd know at each moment) and smoothed probabilities (looking back with full information). It's like having a regime probability dashboard that updates live.","rawContent":"The Hamilton Filter is an algorithm for computing filtered and smoothed regime probabilities in Markov-Switching models, analogous to the Kalman filter for state-space models. Developed by James Hamilton, it recursively updates the probability distribution over regimes as new data arrives, allowing real-time regime identification and parameter estimation via maximum likelihood. It's the computational engine that makes regime-switching models practical.\n\nThe Hamilton Filter algorithm:\n\n**Prediction step:**\nP(s_t = j | Y_{t-1}) = Σᵢ p_{ij} * P(s_{t-1} = i | Y_{t-1})\n\nWhere:\n- p_{ij} = transition probability from regime i to j\n- Y_{t-1} = data up to time t-1\n\n**Update step:**\nP(s_t = j | Y_t) = [f(y_t | s_t=j) * P(s_t=j | Y_{t-1})] / f(y_t | Y_{t-1})\n\nWhere:\n- f(y_t | s_t=j) = conditional density given regime j\n- f(y_t | Y_{t-1}) = Σⱼ f(y_t | s_t=j) * P(s_t=j | Y_{t-1})\n\n**Log-likelihood contribution:**\nln L_t = ln f(y_t | Y_{t-1}) = ln[Σⱼ f(y_t | s_t=j) * P(s_t=j | Y_{t-1})]\n\nThe smoothed probabilities use backward recursion:\nP(s_t = i | Y_T) = P(s_t = i | Y_t) * Σⱼ [P(s_{t+1}=j | Y_T) * p_{ij} / P(s_{t+1}=j | Y_t)]\n\nOutputs:\n- Filtered probability: P(s_t | Y_t) = real-time regime estimate\n- Smoothed probability: P(s_t | Y_T) = retrospective regime estimate using all data\n\nThink of the Hamilton Filter as a sophisticated regime detector that constantly updates its beliefs. Each day, it sees new price data and thinks: \"Yesterday I thought we were 70% likely in the calm regime. Today's big move makes volatile regime more likely. Updating my probabilities to 40% calm, 60% volatile.\" It simultaneously learns the regime characteristics AND tracks which regime you're currently in. The filter gives you two perspectives: real-time probabilities (what you'd know at each moment) and smoothed probabilities (looking back with full information). It's like having a regime probability dashboard that updates live.","tags":["DSP Filtering","Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Hamilton_Filter_Regime_Switching.txt","hasFullInfo":true},{"id":356,"title":"Information Coefficient (IC) Analysis","filename":"Information_Coefficient_IC_Analysis.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Prediction quality","overview":"Information Coefficient Analysis measures the correlation between predicted signals (forecasts, factor scores, alpha signals) and subsequent realized returns, providing a standardized metric for evaluating the quality and consistency of predictive signals. IC is the fundamental performance metric in quantitative portfolio management, indicating how well a signal predicts future returns before transaction costs and implementation constraints. High IC consistency is more valuable than occasional high IC values.","formula":"**Basic Information Coefficient:**\n\nIC_t = Corr(forecast_t, return_{t+1})","parameters":"Where:\n- forecast_t = cross-sectional predictions at time t\n- return_{t+1} = actual returns from t to t+1\n- Correlation typically uses Spearman rank correlation (robust to outliers)\n\n**Pearson IC (parametric):**\nIC_t^P = Σᵢ(fᵢₜ - f̄ₜ)(rᵢ,ₜ₊₁ - r̄ₜ₊₁) / √[Σᵢ(fᵢₜ - f̄ₜ)² × Σᵢ(rᵢ,ₜ₊₁ - r̄ₜ₊₁)²]\n\n**Spearman IC (rank-based, more robust):**\nIC_t^S = 1 - (6 Σᵢ d_i²) / (n(n² - 1))\n\nWhere dᵢ = rank(fᵢₜ) - rank(rᵢ,ₜ₊₁)\n\n**IC statistics:**\n\nMean IC:\nIC_mean = (1/T) Σₜ IC_t\n\nIC standard deviation:\nIC_std = √[(1/T) Σₜ (IC_t - IC_mean)²]\n\nInformation Ratio (IR):\nIR = IC_mean / IC_std\n\nIC hit rate:\nHit_rate = (# of IC_t > 0) / T\n\n**Interpretation:**\n- |IC| < 0.03: negligible predictive power\n- |IC| = 0.03-0.05: weak but potentially profitable\n- |IC| = 0.05-0.10: strong signal\n- |IC| > 0.10: exceptional (rare in practice)\n\n**Time-varying IC:**\nPlot IC_t over time to identify:\n- Regime changes (when signal stops working)\n- Seasonal patterns\n- Market condition dependencies\n\n**IC decay analysis:**\nIC(h) = Corr(forecast_t, return_{t,t+h})\n\nShows how long signal remains predictive (forecast horizon)","intuition":"Think of IC as your signal's report card every period. You rank 500 stocks by your \"momentum signal\" from 1 (worst) to 500 (best). One month later, you check: did the top-ranked stocks actually outperform? IC measures this. If IC = +0.08, there's a strong positive correlation—your signal worked! Track IC monthly and you discover: \"My signal has IC = 0.06 on average with 65% hit rate and IR = 0.8. But IC dropped to 0.02 during 2020 crisis—signal broke temporarily.\" IC analysis reveals not just if a signal works, but when and how reliably.","rawContent":"Information Coefficient Analysis measures the correlation between predicted signals (forecasts, factor scores, alpha signals) and subsequent realized returns, providing a standardized metric for evaluating the quality and consistency of predictive signals. IC is the fundamental performance metric in quantitative portfolio management, indicating how well a signal predicts future returns before transaction costs and implementation constraints. High IC consistency is more valuable than occasional high IC values.\n\n**Basic Information Coefficient:**\n\nIC_t = Corr(forecast_t, return_{t+1})\n\nWhere:\n- forecast_t = cross-sectional predictions at time t\n- return_{t+1} = actual returns from t to t+1\n- Correlation typically uses Spearman rank correlation (robust to outliers)\n\n**Pearson IC (parametric):**\nIC_t^P = Σᵢ(fᵢₜ - f̄ₜ)(rᵢ,ₜ₊₁ - r̄ₜ₊₁) / √[Σᵢ(fᵢₜ - f̄ₜ)² × Σᵢ(rᵢ,ₜ₊₁ - r̄ₜ₊₁)²]\n\n**Spearman IC (rank-based, more robust):**\nIC_t^S = 1 - (6 Σᵢ d_i²) / (n(n² - 1))\n\nWhere dᵢ = rank(fᵢₜ) - rank(rᵢ,ₜ₊₁)\n\n**IC statistics:**\n\nMean IC:\nIC_mean = (1/T) Σₜ IC_t\n\nIC standard deviation:\nIC_std = √[(1/T) Σₜ (IC_t - IC_mean)²]\n\nInformation Ratio (IR):\nIR = IC_mean / IC_std\n\nIC hit rate:\nHit_rate = (# of IC_t > 0) / T\n\n**Interpretation:**\n- |IC| < 0.03: negligible predictive power\n- |IC| = 0.03-0.05: weak but potentially profitable\n- |IC| = 0.05-0.10: strong signal\n- |IC| > 0.10: exceptional (rare in practice)\n\n**Time-varying IC:**\nPlot IC_t over time to identify:\n- Regime changes (when signal stops working)\n- Seasonal patterns\n- Market condition dependencies\n\n**IC decay analysis:**\nIC(h) = Corr(forecast_t, return_{t,t+h})\n\nShows how long signal remains predictive (forecast horizon)\n\nThink of IC as your signal's report card every period. You rank 500 stocks by your \"momentum signal\" from 1 (worst) to 500 (best). One month later, you check: did the top-ranked stocks actually outperform? IC measures this. If IC = +0.08, there's a strong positive correlation—your signal worked! Track IC monthly and you discover: \"My signal has IC = 0.06 on average with 65% hit rate and IR = 0.8. But IC dropped to 0.02 during 2020 crisis—signal broke temporarily.\" IC analysis reveals not just if a signal works, but when and how reliably.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Information_Coefficient_IC_Analysis.txt","hasFullInfo":true},{"id":357,"title":"James-Stein Estimator","filename":"James-Stein_Estimator.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Shrinkage toward mean","overview":"The James-Stein Estimator is a shrinkage estimator that improves upon the maximum likelihood estimator (sample mean) for estimating the means of three or more normally distributed variables. Discovered in 1961, it was a revolutionary finding showing that the intuitive estimator (sample mean) is inadmissible—meaning there exists a better estimator that has lower total mean squared error. The estimator \"shrinks\" individual sample means toward a common value, typically the grand mean.","formula":"The basic James-Stein estimator is:\nθ̂ᴶˢ = (1 - c/||x||²) * x","parameters":"Where:\n- x = vector of sample means (observations)\n- θ̂ᴶˢ = James-Stein estimate\n- c = (p - 2) * σ² for p ≥ 3 dimensions\n- ||x||² = sum of squared observations\n- σ² = known variance (or estimated from data)\n\nThe shrinkage factor is:\nshrinkage = 1 - c/||x||²\n\nThis shrinks each individual estimate toward zero (or toward an alternative target μ₀):\nθ̂ᴶˢ = μ₀ + (1 - c/||x - μ₀||²) * (x - μ₀)\n\nThe James-Stein estimator reduces total mean squared error compared to using sample means directly, though individual estimates may be biased.\n\nImagine you're estimating the average returns of 20 different stocks using their recent performance. Your natural instinct is to use each stock's sample average as your estimate. The James-Stein estimator says: \"Wait, you can do better!\" It slightly pulls each stock's estimate toward the overall average of all stocks. This seems counterintuitive—why would borrowing information from other stocks improve your estimate? But mathematically, this shrinkage reduces overall estimation error. It's like recognizing that extreme observations are often partially due to luck, so tempering them slightly gives you more reliable predictions.","intuition":"","rawContent":"The James-Stein Estimator is a shrinkage estimator that improves upon the maximum likelihood estimator (sample mean) for estimating the means of three or more normally distributed variables. Discovered in 1961, it was a revolutionary finding showing that the intuitive estimator (sample mean) is inadmissible—meaning there exists a better estimator that has lower total mean squared error. The estimator \"shrinks\" individual sample means toward a common value, typically the grand mean.\n\nThe basic James-Stein estimator is:\nθ̂ᴶˢ = (1 - c/||x||²) * x\n\nWhere:\n- x = vector of sample means (observations)\n- θ̂ᴶˢ = James-Stein estimate\n- c = (p - 2) * σ² for p ≥ 3 dimensions\n- ||x||² = sum of squared observations\n- σ² = known variance (or estimated from data)\n\nThe shrinkage factor is:\nshrinkage = 1 - c/||x||²\n\nThis shrinks each individual estimate toward zero (or toward an alternative target μ₀):\nθ̂ᴶˢ = μ₀ + (1 - c/||x - μ₀||²) * (x - μ₀)\n\nThe James-Stein estimator reduces total mean squared error compared to using sample means directly, though individual estimates may be biased.\n\nImagine you're estimating the average returns of 20 different stocks using their recent performance. Your natural instinct is to use each stock's sample average as your estimate. The James-Stein estimator says: \"Wait, you can do better!\" It slightly pulls each stock's estimate toward the overall average of all stocks. This seems counterintuitive—why would borrowing information from other stocks improve your estimate? But mathematically, this shrinkage reduces overall estimation error. It's like recognizing that extreme observations are often partially due to luck, so tempering them slightly gives you more reliable predictions.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/James-Stein_Estimator.txt","hasFullInfo":true},{"id":358,"title":"Kernel PCA","filename":"Kernel_PCA.txt","group":"group 17","groupNum":17,"categoryId":11,"categoryTitle":"11. STATISTICAL & MACHINE LEARNING FILTERS","subcategory":"General","summary":"Nonlinear PCA","overview":"Kernel Principal Component Analysis extends PCA to capture nonlinear patterns in data by implicitly mapping the data to a high-dimensional feature space through a kernel function, then performing PCA in that space. Unlike linear PCA which only finds linear combinations of features, kernel PCA can discover complex curved structures, clusters, and manifolds without explicitly computing the high-dimensional transformation.","formula":"The kernel PCA algorithm:\n\n1. Compute the kernel matrix K:\nK_{ij} = k(x_i, x_j)\n\nCommon kernels:\n- Linear: k(x,y) = x'y\n- Polynomial: k(x,y) = (x'y + c)^d\n- RBF/Gaussian: k(x,y) = exp(-||x-y||²/(2σ²))\n- Sigmoid: k(x,y) = tanh(κx'y + c)\n\n2. Center the kernel matrix:\nK̃ = K - 1_n K - K 1_n + 1_n K 1_n\n\nWhere 1_n = (1/n) * ones(n,n)\n\n3. Compute eigendecomposition:\nK̃ v = λ v\n\n4. Normalize eigenvectors:\nα = v / √λ\n\n5. Project new point x onto component i:\nPC_i(x) = Σⱼ αᵢⱼ k(x, x_j)\n\nThe kernel parameter σ (for RBF) controls the complexity/smoothness of the nonlinear transformation.","parameters":"","intuition":"Imagine you have stock returns that form complex curved patterns—perhaps growth stocks cluster in one curved region, value stocks in another, with cyclicals forming a third curved group. Linear PCA tries to draw straight lines through this curved data, completely missing the structure. Kernel PCA is like putting on magic glasses that see the data in a much richer space where the curved patterns become simple and separable. It might discover \"this curve represents the growth-to-value spectrum\" and \"this other curve represents the cyclical sensitivity,\" capturing relationships that linear methods can't see.","rawContent":"Kernel Principal Component Analysis extends PCA to capture nonlinear patterns in data by implicitly mapping the data to a high-dimensional feature space through a kernel function, then performing PCA in that space. Unlike linear PCA which only finds linear combinations of features, kernel PCA can discover complex curved structures, clusters, and manifolds without explicitly computing the high-dimensional transformation.\n\nThe kernel PCA algorithm:\n\n1. Compute the kernel matrix K:\nK_{ij} = k(x_i, x_j)\n\nCommon kernels:\n- Linear: k(x,y) = x'y\n- Polynomial: k(x,y) = (x'y + c)^d\n- RBF/Gaussian: k(x,y) = exp(-||x-y||²/(2σ²))\n- Sigmoid: k(x,y) = tanh(κx'y + c)\n\n2. Center the kernel matrix:\nK̃ = K - 1_n K - K 1_n + 1_n K 1_n\n\nWhere 1_n = (1/n) * ones(n,n)\n\n3. Compute eigendecomposition:\nK̃ v = λ v\n\n4. Normalize eigenvectors:\nα = v / √λ\n\n5. Project new point x onto component i:\nPC_i(x) = Σⱼ αᵢⱼ k(x, x_j)\n\nThe kernel parameter σ (for RBF) controls the complexity/smoothness of the nonlinear transformation.\n\nImagine you have stock returns that form complex curved patterns—perhaps growth stocks cluster in one curved region, value stocks in another, with cyclicals forming a third curved group. Linear PCA tries to draw straight lines through this curved data, completely missing the structure. Kernel PCA is like putting on magic glasses that see the data in a much richer space where the curved patterns become simple and separable. It might discover \"this curve represents the growth-to-value spectrum\" and \"this other curve represents the cyclical sensitivity,\" capturing relationships that linear methods can't see.","tags":["DSP Filtering","Machine Learning"],"relPath":"public/concept-list/list-concepts/group 17/Kernel_PCA.txt","hasFullInfo":true},{"id":359,"title":"Ledoit-Wolf Shrinkage","filename":"Ledoit-Wolf_Shrinkage.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Covariance shrinkage","overview":"Ledoit-Wolf Shrinkage is a method for estimating covariance matrices that addresses the instability and estimation error found in sample covariance matrices, particularly when the number of assets is large relative to the number of observations. It works by \"shrinking\" the sample covariance matrix toward a structured target matrix (typically a constant correlation or diagonal matrix) using an optimal shrinkage intensity that balances bias and variance.","formula":"The method computes an optimal linear combination of the sample covariance matrix and a target matrix:\nΣ_shrunk = δ * F + (1 - δ) * S","parameters":"Where:\n- S = sample covariance matrix\n- F = target matrix (often identity matrix scaled by average variance)\n- δ = shrinkage intensity (0 to 1), calculated analytically to minimize expected loss\n- The optimal δ is derived from the data without cross-validation\n\nThe shrinkage intensity δ is determined by:\nδ = min(1, (sum of squared estimation errors) / (sum of squared deviations from target))","intuition":"Imagine you're trying to estimate how different stocks move together, but you don't have much data. Your estimates will be noisy and unreliable. Ledoit-Wolf shrinkage is like asking an expert to blend your rough estimates with a sensible default assumption, automatically figuring out the best mix. If your data is good, it uses more of it; if your data is poor, it relies more on the safe default. This prevents you from making overconfident bets based on statistical noise.","rawContent":"Ledoit-Wolf Shrinkage is a method for estimating covariance matrices that addresses the instability and estimation error found in sample covariance matrices, particularly when the number of assets is large relative to the number of observations. It works by \"shrinking\" the sample covariance matrix toward a structured target matrix (typically a constant correlation or diagonal matrix) using an optimal shrinkage intensity that balances bias and variance.\n\nThe method computes an optimal linear combination of the sample covariance matrix and a target matrix:\nΣ_shrunk = δ * F + (1 - δ) * S\n\nWhere:\n- S = sample covariance matrix\n- F = target matrix (often identity matrix scaled by average variance)\n- δ = shrinkage intensity (0 to 1), calculated analytically to minimize expected loss\n- The optimal δ is derived from the data without cross-validation\n\nThe shrinkage intensity δ is determined by:\nδ = min(1, (sum of squared estimation errors) / (sum of squared deviations from target))\n\nImagine you're trying to estimate how different stocks move together, but you don't have much data. Your estimates will be noisy and unreliable. Ledoit-Wolf shrinkage is like asking an expert to blend your rough estimates with a sensible default assumption, automatically figuring out the best mix. If your data is good, it uses more of it; if your data is poor, it relies more on the safe default. This prevents you from making overconfident bets based on statistical noise.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Ledoit-Wolf_Shrinkage.txt","hasFullInfo":true},{"id":360,"title":"Markov Regime-Switching Models","filename":"Markov_Regime-Switching_Models.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"State-dependent dynamics","overview":"Markov Regime-Switching Models (also called Markov-Switching Models or Hamilton Models) allow parameters of a time series model to switch between different regimes according to an unobserved Markov chain. This captures the empirical observation that financial markets exhibit distinct behavioral states (bull/bear markets, high/low volatility, etc.) with different dynamics, switching between them in a probabilistic manner. The regime switches are governed by a hidden Markov process.","formula":"The basic model structure:\n\ny_t = μ(s_t) + φ(s_t) * y_{t-1} + σ(s_t) * ε_t","parameters":"Where:\n- s_t ∈ {1, 2, ..., K} = regime at time t (unobserved)\n- μ(s_t), φ(s_t), σ(s_t) = regime-dependent parameters\n- ε_t ~ N(0,1) = standard normal error\n\nThe regime s_t follows a Markov chain with transition matrix P:\nP(s_t = j | s_{t-1} = i) = p_{ij}\n\nWhere Σⱼ p_{ij} = 1 for all i.\n\nCommon specifications:\n- 2-state model: expansion vs. recession\n- 3-state model: low/medium/high volatility\n- Regime-dependent variance (SWARCH)\n- Regime-dependent autoregression coefficients\n\nEstimation via:\n- Maximum Likelihood with EM algorithm\n- Hamilton Filter (computes filtered and smoothed probabilities)\n\nKey outputs:\n- P(s_t = k | data up to t) = filtered probability\n- P(s_t = k | all data) = smoothed probability\n\nImagine the stock market doesn't have one consistent behavior—sometimes it's calm and mean-reverting, other times it's volatile and trending. Regime-switching models capture this by saying \"right now we're probably in calm regime with 80% probability, but there's a 20% chance we've switched to volatile regime.\" The model learns how different regimes behave and how likely transitions are. It might discover: \"calm periods average 18 months before switching to volatility, which averages 4 months before returning to calm.\" This lets you adapt your strategy as regime probabilities shift in real-time.","intuition":"","rawContent":"Markov Regime-Switching Models (also called Markov-Switching Models or Hamilton Models) allow parameters of a time series model to switch between different regimes according to an unobserved Markov chain. This captures the empirical observation that financial markets exhibit distinct behavioral states (bull/bear markets, high/low volatility, etc.) with different dynamics, switching between them in a probabilistic manner. The regime switches are governed by a hidden Markov process.\n\nThe basic model structure:\n\ny_t = μ(s_t) + φ(s_t) * y_{t-1} + σ(s_t) * ε_t\n\nWhere:\n- s_t ∈ {1, 2, ..., K} = regime at time t (unobserved)\n- μ(s_t), φ(s_t), σ(s_t) = regime-dependent parameters\n- ε_t ~ N(0,1) = standard normal error\n\nThe regime s_t follows a Markov chain with transition matrix P:\nP(s_t = j | s_{t-1} = i) = p_{ij}\n\nWhere Σⱼ p_{ij} = 1 for all i.\n\nCommon specifications:\n- 2-state model: expansion vs. recession\n- 3-state model: low/medium/high volatility\n- Regime-dependent variance (SWARCH)\n- Regime-dependent autoregression coefficients\n\nEstimation via:\n- Maximum Likelihood with EM algorithm\n- Hamilton Filter (computes filtered and smoothed probabilities)\n\nKey outputs:\n- P(s_t = k | data up to t) = filtered probability\n- P(s_t = k | all data) = smoothed probability\n\nImagine the stock market doesn't have one consistent behavior—sometimes it's calm and mean-reverting, other times it's volatile and trending. Regime-switching models capture this by saying \"right now we're probably in calm regime with 80% probability, but there's a 20% chance we've switched to volatile regime.\" The model learns how different regimes behave and how likely transitions are. It might discover: \"calm periods average 18 months before switching to volatility, which averages 4 months before returning to calm.\" This lets you adapt your strategy as regime probabilities shift in real-time.","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Markov_Regime-Switching_Models.txt","hasFullInfo":true},{"id":361,"title":"Natural Language Processing (NLP) Signals","filename":"Natural_Language_Processing_NLP_Signals.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Text-derived features","overview":"Natural Language Processing Signals are quantitative features extracted from unstructured text data (earnings calls, news articles, SEC filings, analyst reports) using computational linguistics and machine learning techniques. NLP transforms qualitative text into numerical signals that can be incorporated into quantitative trading models, revealing information not captured by traditional financial metrics such as management tone, linguistic complexity, and forward-looking statements.","formula":"**Key NLP signal types:**\n\n1. **Sentiment scores:**\n   - Dictionary-based: Loughran-McDonald financial dictionary\n   - Machine learning: Trained classifiers (positive/negative/neutral)\n   - Aspect-based: Sentiment toward specific topics (revenue, margins, guidance)\n\n2. **Linguistic features:**\n   - Readability: Flesch-Kincaid, Fog Index\n   - Complexity: Average sentence length, unique word ratio\n   - Certainty: Hedging words (\"might\", \"could\") vs. confident language\n   - Temporal focus: Past vs. future orientation\n\n3. **Topic modeling:**\n   - Latent Dirichlet Allocation (LDA): Discover hidden topics\n   - Word2Vec/GloVe embeddings: Semantic similarity\n   - Named Entity Recognition (NER): Extract companies, people, locations\n\n4. **Change detection:**\n   - Year-over-year similarity in MD&A sections\n   - Unexpected vocabulary changes\n   - Tone shifts between documents\n\n5. **Specific NLP signals:**\n\nFog Index (readability):\n   Fog = 0.4 * (avg_words_per_sentence + 100 * complex_words / total_words)\n\nLoughran-McDonald sentiment:\n   Net_sentiment = (positive_words - negative_words) / total_words\n\nCosine similarity (document comparison):\n   similarity(d₁, d₂) = (d₁ · d₂) / (||d₁|| * ||d₂||)\n\n**Application examples:**\n\nEarnings call tone → predict post-earnings drift\n10-K readability → predict return volatility\nForward-looking statements → predict guidance revisions\nManagement turnover language → predict performance\n\n**Signal construction workflow:**\nText → Preprocessing (tokenization, lemmatization) → Feature extraction → Scoring → Normalization → Signal","parameters":"","intuition":"Think of NLP as reading between the lines at scale. When a CEO says \"we're cautiously optimistic about challenging market conditions\" versus \"we're extremely confident about robust growth,\" humans detect the tone difference—NLP quantifies it. It might score the first statement at -0.2 (hedging language + negative words) and the second at +0.7 (confident language + positive words). Across thousands of earnings calls, you discover: \"When management hedging language increases >20% quarter-over-quarter, stocks underperform by -2.1% over the next month.\" NLP converts soft qualitative information into hard predictive signals.","rawContent":"Natural Language Processing Signals are quantitative features extracted from unstructured text data (earnings calls, news articles, SEC filings, analyst reports) using computational linguistics and machine learning techniques. NLP transforms qualitative text into numerical signals that can be incorporated into quantitative trading models, revealing information not captured by traditional financial metrics such as management tone, linguistic complexity, and forward-looking statements.\n\n**Key NLP signal types:**\n\n1. **Sentiment scores:**\n   - Dictionary-based: Loughran-McDonald financial dictionary\n   - Machine learning: Trained classifiers (positive/negative/neutral)\n   - Aspect-based: Sentiment toward specific topics (revenue, margins, guidance)\n\n2. **Linguistic features:**\n   - Readability: Flesch-Kincaid, Fog Index\n   - Complexity: Average sentence length, unique word ratio\n   - Certainty: Hedging words (\"might\", \"could\") vs. confident language\n   - Temporal focus: Past vs. future orientation\n\n3. **Topic modeling:**\n   - Latent Dirichlet Allocation (LDA): Discover hidden topics\n   - Word2Vec/GloVe embeddings: Semantic similarity\n   - Named Entity Recognition (NER): Extract companies, people, locations\n\n4. **Change detection:**\n   - Year-over-year similarity in MD&A sections\n   - Unexpected vocabulary changes\n   - Tone shifts between documents\n\n5. **Specific NLP signals:**\n   \n   Fog Index (readability):\n   Fog = 0.4 * (avg_words_per_sentence + 100 * complex_words / total_words)\n   \n   Loughran-McDonald sentiment:\n   Net_sentiment = (positive_words - negative_words) / total_words\n   \n   Cosine similarity (document comparison):\n   similarity(d₁, d₂) = (d₁ · d₂) / (||d₁|| * ||d₂||)\n\n**Application examples:**\n\nEarnings call tone → predict post-earnings drift\n10-K readability → predict return volatility\nForward-looking statements → predict guidance revisions\nManagement turnover language → predict performance\n\n**Signal construction workflow:**\nText → Preprocessing (tokenization, lemmatization) → Feature extraction → Scoring → Normalization → Signal\n\nThink of NLP as reading between the lines at scale. When a CEO says \"we're cautiously optimistic about challenging market conditions\" versus \"we're extremely confident about robust growth,\" humans detect the tone difference—NLP quantifies it. It might score the first statement at -0.2 (hedging language + negative words) and the second at +0.7 (confident language + positive words). Across thousands of earnings calls, you discover: \"When management hedging language increases >20% quarter-over-quarter, stocks underperform by -2.1% over the next month.\" NLP converts soft qualitative information into hard predictive signals.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Natural_Language_Processing_NLP_Signals.txt","hasFullInfo":true},{"id":362,"title":"News Impact Analysis","filename":"News_Impact_Analysis.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Event study on news","overview":"News Impact Analysis quantifies how news events affect asset prices, volatility, and trading volume through event study methodology and econometric modeling. It identifies which types of news move markets, measures the magnitude and duration of impacts, and can be used to predict price reactions to future news. This analysis is crucial for understanding information flow in markets and developing news-based trading strategies.","formula":"**Event study framework:**\n\n1. **Define event window:**\n   - Event day: t = 0\n   - Pre-event window: [-T₁, -1]\n   - Post-event window: [0, T₂]\n   - Estimation window: [-T₀, -T₁-1]\n\n2. **Calculate abnormal returns:**\n   AR_{it} = R_{it} - E[R_{it}]\n\nWhere:\n   - R_{it} = actual return for stock i at time t\n   - E[R_{it}] = expected return (from market model or other benchmark)\n\n3. **Market model expected return:**\n   E[R_{it}] = α̂ᵢ + β̂ᵢR_{mt}\n\nEstimated from pre-event window\n\n4. **Cumulative abnormal returns (CAR):**\n   CAR_i(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AR_{it}\n\n5. **Aggregate across events:**\n   AAR_t = (1/N) Σᵢ₌₁^N AR_{it}\n   CAAR(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AAR_t\n\n**Statistical testing:**\n- t-test: t = CAAR / SE(CAAR)\n- Patell Z-statistic for cross-sectional correlation\n- Boehmer-Musumeci-Poulsen test for event-induced variance\n\n**News categorization:**\n- Earnings announcements (surprise magnitude)\n- Macroeconomic releases (actual vs. forecast)\n- Corporate events (M&A, management changes)\n- Sentiment polarity (positive/negative/neutral)\n\n**Impact measures:**\n- Price impact: |AR| or CAR\n- Volume impact: abnormal volume ratio\n- Volatility impact: change in realized volatility\n- Duration: half-life of price adjustment\n\nImagine analyzing how earnings announcements affect stock prices. News impact analysis measures: \"On average, positive earnings surprises generate +2.3% abnormal return on announcement day, +1.1% the next day, then drift continues for 30 days totaling +4.8%.\" You discover different news types have different patterns: \"M&A news creates immediate +5% jump fully absorbed in one day, while earnings news creates gradual 30-day drift.\" This tells you exactly how markets digest information, letting you predict \"when this type of news hits, expect this price pattern.\" It's the empirical science of news-to-price transmission.","parameters":"","intuition":"","rawContent":"News Impact Analysis quantifies how news events affect asset prices, volatility, and trading volume through event study methodology and econometric modeling. It identifies which types of news move markets, measures the magnitude and duration of impacts, and can be used to predict price reactions to future news. This analysis is crucial for understanding information flow in markets and developing news-based trading strategies.\n\n**Event study framework:**\n\n1. **Define event window:**\n   - Event day: t = 0\n   - Pre-event window: [-T₁, -1]\n   - Post-event window: [0, T₂]\n   - Estimation window: [-T₀, -T₁-1]\n\n2. **Calculate abnormal returns:**\n   AR_{it} = R_{it} - E[R_{it}]\n   \n   Where:\n   - R_{it} = actual return for stock i at time t\n   - E[R_{it}] = expected return (from market model or other benchmark)\n\n3. **Market model expected return:**\n   E[R_{it}] = α̂ᵢ + β̂ᵢR_{mt}\n   \n   Estimated from pre-event window\n\n4. **Cumulative abnormal returns (CAR):**\n   CAR_i(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AR_{it}\n\n5. **Aggregate across events:**\n   AAR_t = (1/N) Σᵢ₌₁^N AR_{it}\n   CAAR(t₁,t₂) = Σₜ₌ₜ₁^{t₂} AAR_t\n\n**Statistical testing:**\n- t-test: t = CAAR / SE(CAAR)\n- Patell Z-statistic for cross-sectional correlation\n- Boehmer-Musumeci-Poulsen test for event-induced variance\n\n**News categorization:**\n- Earnings announcements (surprise magnitude)\n- Macroeconomic releases (actual vs. forecast)\n- Corporate events (M&A, management changes)\n- Sentiment polarity (positive/negative/neutral)\n\n**Impact measures:**\n- Price impact: |AR| or CAR\n- Volume impact: abnormal volume ratio\n- Volatility impact: change in realized volatility\n- Duration: half-life of price adjustment\n\nImagine analyzing how earnings announcements affect stock prices. News impact analysis measures: \"On average, positive earnings surprises generate +2.3% abnormal return on announcement day, +1.1% the next day, then drift continues for 30 days totaling +4.8%.\" You discover different news types have different patterns: \"M&A news creates immediate +5% jump fully absorbed in one day, while earnings news creates gradual 30-day drift.\" This tells you exactly how markets digest information, letting you predict \"when this type of news hits, expect this price pattern.\" It's the empirical science of news-to-price transmission.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/News_Impact_Analysis.txt","hasFullInfo":true},{"id":363,"title":"Non-Negative Matrix Factorization (NMF)","filename":"Non-Negative_Matrix_Factorization_NMF.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Parts-based decomposition","overview":"Non-Negative Matrix Factorization decomposes a non-negative data matrix into the product of two non-negative matrices, providing a parts-based representation where components are additive and interpretable. Unlike PCA which allows negative values, NMF's non-negativity constraint produces components that represent additive combinations, making it natural for data where \"negative contributions\" are meaningless, such as images, text frequencies, or portfolio holdings.","formula":"The NMF decomposition is:\nX ≈ W * H","parameters":"Where:\n- X = data matrix (m × n, non-negative)\n- W = basis matrix (m × r, non-negative)\n- H = coefficient matrix (r × n, non-negative)\n- r = number of components (typically r << min(m,n))\n\nThe optimization problem:\nminimize: ||X - WH||²_F  or  D(X||WH)\nsubject to: W ≥ 0, H ≥ 0\n\nWhere:\n- ||·||_F = Frobenius norm\n- D(X||WH) = Kullback-Leibler divergence (alternative objective)\n\nCommon algorithms:\n- Multiplicative update rules (Lee & Seung)\n- Alternating least squares (ALS)\n- Projected gradient descent\n- Hierarchical alternating least squares (HALS)\n\nUnlike PCA where components can cancel via subtraction, NMF components combine additively:\nx_i ≈ w₁h₁ᵢ + w₂h₂ᵢ + ... + wᵣhᵣᵢ (all terms ≥ 0)\n\nThis produces interpretable \"parts\" rather than contrasts.\n\nImagine decomposing portfolio holdings into investment themes. PCA might give you \"component 1 = lots of tech + negative energy,\" which is mathematically fine but weird to interpret (what does negative energy mean?). NMF instead gives you pure additive themes like \"theme 1 = tech stocks,\" \"theme 2 = energy stocks,\" \"theme 3 = bonds,\" and each portfolio is simply a non-negative mix of these themes. This makes intuitive sense: portfolios are built by adding positions together, not by subtracting some mysterious negative holdings. NMF respects the additive nature of the domain.","intuition":"","rawContent":"Non-Negative Matrix Factorization decomposes a non-negative data matrix into the product of two non-negative matrices, providing a parts-based representation where components are additive and interpretable. Unlike PCA which allows negative values, NMF's non-negativity constraint produces components that represent additive combinations, making it natural for data where \"negative contributions\" are meaningless, such as images, text frequencies, or portfolio holdings.\n\nThe NMF decomposition is:\nX ≈ W * H\n\nWhere:\n- X = data matrix (m × n, non-negative)\n- W = basis matrix (m × r, non-negative)\n- H = coefficient matrix (r × n, non-negative)\n- r = number of components (typically r << min(m,n))\n\nThe optimization problem:\nminimize: ||X - WH||²_F  or  D(X||WH)\nsubject to: W ≥ 0, H ≥ 0\n\nWhere:\n- ||·||_F = Frobenius norm\n- D(X||WH) = Kullback-Leibler divergence (alternative objective)\n\nCommon algorithms:\n- Multiplicative update rules (Lee & Seung)\n- Alternating least squares (ALS)\n- Projected gradient descent\n- Hierarchical alternating least squares (HALS)\n\nUnlike PCA where components can cancel via subtraction, NMF components combine additively:\nx_i ≈ w₁h₁ᵢ + w₂h₂ᵢ + ... + wᵣhᵣᵢ (all terms ≥ 0)\n\nThis produces interpretable \"parts\" rather than contrasts.\n\nImagine decomposing portfolio holdings into investment themes. PCA might give you \"component 1 = lots of tech + negative energy,\" which is mathematically fine but weird to interpret (what does negative energy mean?). NMF instead gives you pure additive themes like \"theme 1 = tech stocks,\" \"theme 2 = energy stocks,\" \"theme 3 = bonds,\" and each portfolio is simply a non-negative mix of these themes. This makes intuitive sense: portfolios are built by adding positions together, not by subtracting some mysterious negative holdings. NMF respects the additive nature of the domain.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 17/Non-Negative_Matrix_Factorization_NMF.txt","hasFullInfo":true},{"id":364,"title":"Oracle Approximating Shrinkage (OAS)","filename":"Oracle_Approximating_Shrinkage_OAS.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Optimal shrinkage","overview":"Oracle Approximating Shrinkage is an extension of Ledoit-Wolf shrinkage that provides an improved estimate of the optimal shrinkage intensity for covariance matrix estimation. It was developed by Chen et al. and aims to better approximate the \"oracle\" shrinkage intensity that would be known if the true covariance matrix were available. OAS is particularly effective when the number of features is large relative to the sample size.","formula":"The OAS estimator computes:\nΣ_OAS = ρ * μ * I + (1 - ρ) * S","parameters":"Where:\n- S = sample covariance matrix\n- I = identity matrix\n- μ = trace(S) / p (average variance across p dimensions)\n- ρ = shrinkage coefficient\n\nThe optimal shrinkage coefficient is:\nρ = ((1 - 2/p) * trace(S²) + trace(S)²) / ((n + 1 - 2/p) * (trace(S²) - trace(S)²/p))\n\nWhere:\n- n = number of samples\n- p = number of features/assets\n- trace(S²) = sum of squared elements of S\n\nOAS provides a more accurate shrinkage intensity than Ledoit-Wolf, especially in high-dimensional settings.","intuition":"Think of OAS as an upgraded version of Ledoit-Wolf shrinkage. While Ledoit-Wolf finds a good balance between your noisy data and a safe default, OAS uses a more sophisticated formula to find an even better balance. It's like having a more experienced expert who can more precisely determine when to trust your data and when to fall back on reasonable assumptions. This becomes especially valuable when you're dealing with many stocks but limited historical data.","rawContent":"Oracle Approximating Shrinkage is an extension of Ledoit-Wolf shrinkage that provides an improved estimate of the optimal shrinkage intensity for covariance matrix estimation. It was developed by Chen et al. and aims to better approximate the \"oracle\" shrinkage intensity that would be known if the true covariance matrix were available. OAS is particularly effective when the number of features is large relative to the sample size.\n\nThe OAS estimator computes:\nΣ_OAS = ρ * μ * I + (1 - ρ) * S\n\nWhere:\n- S = sample covariance matrix\n- I = identity matrix\n- μ = trace(S) / p (average variance across p dimensions)\n- ρ = shrinkage coefficient\n\nThe optimal shrinkage coefficient is:\nρ = ((1 - 2/p) * trace(S²) + trace(S)²) / ((n + 1 - 2/p) * (trace(S²) - trace(S)²/p))\n\nWhere:\n- n = number of samples\n- p = number of features/assets\n- trace(S²) = sum of squared elements of S\n\nOAS provides a more accurate shrinkage intensity than Ledoit-Wolf, especially in high-dimensional settings.\n\nThink of OAS as an upgraded version of Ledoit-Wolf shrinkage. While Ledoit-Wolf finds a good balance between your noisy data and a safe default, OAS uses a more sophisticated formula to find an even better balance. It's like having a more experienced expert who can more precisely determine when to trust your data and when to fall back on reasonable assumptions. This becomes especially valuable when you're dealing with many stocks but limited historical data.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Oracle_Approximating_Shrinkage_OAS.txt","hasFullInfo":true},{"id":365,"title":"Partial Least Squares (PLS)","filename":"Partial_Least_Squares_PLS.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Supervised dimensionality reduction","overview":"Partial Least Squares is a supervised dimensionality reduction and regression technique that finds components maximizing the covariance between predictors and response variables, unlike PCA which only considers predictor variance. PLS is particularly effective when predictors are highly collinear and when the number of predictors exceeds the number of observations, making it superior to PCR for prediction tasks.","formula":"The PLS algorithm iteratively constructs components (latent variables):\n\nFor component k:\n1. Find direction w_k maximizing Cov(X * w_k, y)\n2. Compute scores: t_k = X * w_k\n3. Regress X and y on t_k to get loadings p_k and coefficient q_k\n4. Deflate: X ← X - t_k * p_k', y ← y - t_k * q_k\n\nThe final PLS regression model is:\ny = T * q + ε = X * W * q + ε","parameters":"Where:\n- T = [t₁, t₂, ..., t_k] = score matrix\n- W = [w₁, w₂, ..., w_k] = weight matrix\n- q = regression coefficients\n- k = number of components\n\nPLS components maximize:\nmax Var(t) * Corr²(t, y)\n\nThis differs from PCR which only maximizes Var(t), ignoring the response.","intuition":"Think of PLS versus PCR like this: You have 100 economic indicators to predict stock returns. PCR finds the patterns that explain the most variation in the indicators themselves, whether or not those patterns predict returns. PLS instead finds patterns that are both important in the indicators AND strongly related to returns. It's like PLS asks \"what combination of indicators best predicts returns?\" while PCR asks \"what are the biggest patterns in the indicators?\" When your goal is prediction, PLS usually wins because it's laser-focused on the response variable from the start.","rawContent":"Partial Least Squares is a supervised dimensionality reduction and regression technique that finds components maximizing the covariance between predictors and response variables, unlike PCA which only considers predictor variance. PLS is particularly effective when predictors are highly collinear and when the number of predictors exceeds the number of observations, making it superior to PCR for prediction tasks.\n\nThe PLS algorithm iteratively constructs components (latent variables):\n\nFor component k:\n1. Find direction w_k maximizing Cov(X * w_k, y)\n2. Compute scores: t_k = X * w_k\n3. Regress X and y on t_k to get loadings p_k and coefficient q_k\n4. Deflate: X ← X - t_k * p_k', y ← y - t_k * q_k\n\nThe final PLS regression model is:\ny = T * q + ε = X * W * q + ε\n\nWhere:\n- T = [t₁, t₂, ..., t_k] = score matrix\n- W = [w₁, w₂, ..., w_k] = weight matrix\n- q = regression coefficients\n- k = number of components\n\nPLS components maximize:\nmax Var(t) * Corr²(t, y)\n\nThis differs from PCR which only maximizes Var(t), ignoring the response.\n\nThink of PLS versus PCR like this: You have 100 economic indicators to predict stock returns. PCR finds the patterns that explain the most variation in the indicators themselves, whether or not those patterns predict returns. PLS instead finds patterns that are both important in the indicators AND strongly related to returns. It's like PLS asks \"what combination of indicators best predicts returns?\" while PCR asks \"what are the biggest patterns in the indicators?\" When your goal is prediction, PLS usually wins because it's laser-focused on the response variable from the start.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Partial_Least_Squares_PLS.txt","hasFullInfo":true},{"id":366,"title":"Principal Component Regression (PCR)","filename":"Principal_Component_Regression_PCR.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"PCA + regression","overview":"Principal Component Regression is a regression technique that addresses multicollinearity and overfitting by first transforming the predictor variables into their principal components, then performing regression using only the most important components. This dimensionality reduction eliminates redundant information and noise, improving prediction stability and interpretability compared to ordinary least squares regression.","formula":"The PCR process involves:\n\nStep 1: Compute principal components of predictor matrix X\nZ = X * V\n\nWhere V contains the eigenvectors of X'X (or SVD of X)\n\nStep 2: Select the first k principal components (those with largest eigenvalues)\nZ_k = [z₁, z₂, ..., z_k]\n\nStep 3: Regress y on Z_k instead of X\ny = Z_k * β_z + ε\n\nStep 4: Transform back to original predictor space\nβ_pcr = V_k * β_z","parameters":"Where:\n- k = number of components retained (tuning parameter)\n- V_k = first k eigenvectors\n- β_z = regression coefficients in PC space\n- β_pcr = coefficients in original space\n\nSelection of k can be done via cross-validation, examining variance explained, or scree plots.\n\nImagine you have 50 different technical indicators to predict stock returns, but many are highly correlated (like different moving averages). Running regression on all 50 creates unstable, unreliable predictions because the indicators are redundant. PCR first finds the core \"themes\" in your 50 indicators—maybe theme 1 is \"momentum,\" theme 2 is \"volatility,\" theme 3 is \"trend strength\"—condensing 50 indicators into 5-10 fundamental patterns. Then it predicts returns using only these clean, independent themes. This eliminates noise and redundancy, giving you a more stable and interpretable model.","intuition":"","rawContent":"Principal Component Regression is a regression technique that addresses multicollinearity and overfitting by first transforming the predictor variables into their principal components, then performing regression using only the most important components. This dimensionality reduction eliminates redundant information and noise, improving prediction stability and interpretability compared to ordinary least squares regression.\n\nThe PCR process involves:\n\nStep 1: Compute principal components of predictor matrix X\nZ = X * V\n\nWhere V contains the eigenvectors of X'X (or SVD of X)\n\nStep 2: Select the first k principal components (those with largest eigenvalues)\nZ_k = [z₁, z₂, ..., z_k]\n\nStep 3: Regress y on Z_k instead of X\ny = Z_k * β_z + ε\n\nStep 4: Transform back to original predictor space\nβ_pcr = V_k * β_z\n\nWhere:\n- k = number of components retained (tuning parameter)\n- V_k = first k eigenvectors\n- β_z = regression coefficients in PC space\n- β_pcr = coefficients in original space\n\nSelection of k can be done via cross-validation, examining variance explained, or scree plots.\n\nImagine you have 50 different technical indicators to predict stock returns, but many are highly correlated (like different moving averages). Running regression on all 50 creates unstable, unreliable predictions because the indicators are redundant. PCR first finds the core \"themes\" in your 50 indicators—maybe theme 1 is \"momentum,\" theme 2 is \"volatility,\" theme 3 is \"trend strength\"—condensing 50 indicators into 5-10 fundamental patterns. Then it predicts returns using only these clean, independent themes. This eliminates noise and redundancy, giving you a more stable and interpretable model.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Principal_Component_Regression_PCR.txt","hasFullInfo":true},{"id":367,"title":"Recursive Estimation","filename":"Recursive_Estimation.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Sequential parameter updating","overview":"Recursive Estimation is a method of sequentially updating parameter estimates as new observations arrive, rather than re-estimating the entire model from scratch each time. It provides a rolling window view of how model parameters evolve over time, making it invaluable for detecting structural instability, testing parameter constancy, and implementing real-time adaptive systems. Recursive methods are computationally efficient and ideal for monitoring regime changes.","formula":"**Recursive Least Squares (RLS):**\n\nGiven model: y_t = x_t'β + ε_t\n\nUpdate equations (adding observation t):\n\nβ̂_t = β̂_{t-1} + K_t(y_t - x_t'β̂_{t-1})\n\nK_t = P_{t-1}x_t / (1 + x_t'P_{t-1}x_t)\n\nP_t = P_{t-1} - K_tx_t'P_{t-1}","parameters":"Where:\n- β̂_t = parameter estimate using data 1 to t\n- K_t = Kalman gain\n- P_t = covariance matrix of β̂_t\n- P_t = (X_t'X_t)⁻¹σ² in batch form\n\n**Recursive residuals:**\n\nw_t = (y_t - x_t'β̂_{t-1}) / √(1 + x_t'P_{t-1}x_t)\n\nProperties:\n- E(w_t) = 0 under stability\n- Var(w_t) = σ² (homoscedastic)\n- Independent across t under stability\n\n**Forgetting factor (exponential weighting):**\n\nModifies RLS to downweight old data:\n\nβ̂_t = β̂_{t-1} + K_t(y_t - x_t'β̂_{t-1})\nK_t = P_{t-1}x_t / (λ + x_t'P_{t-1}x_t)\nP_t = (P_{t-1} - K_tx_t'P_{t-1}) / λ\n\nWhere λ ∈ (0,1] is the forgetting factor (λ = 1 is standard RLS, λ < 1 adapts faster)\n\n**Visualization:**\nPlot β̂_t over time with ±2SE bands to see parameter evolution.\n\nImagine you're estimating the relationship between interest rates and stock prices. Standard regression gives you one answer for the entire history. Recursive estimation shows you how this relationship evolved month by month. You might see: \"In the 1990s, the coefficient was -0.3. During 2000-2007 it drifted to -0.8. During 2008 crisis it spiked to -1.5, then stabilized around -0.6 post-crisis.\" Plotting these recursive estimates reveals exactly when and how the relationship changed. It's like having a movie of your regression coefficients instead of a single snapshot, letting you spot structural breaks and regime changes as they develop.","intuition":"","rawContent":"Recursive Estimation is a method of sequentially updating parameter estimates as new observations arrive, rather than re-estimating the entire model from scratch each time. It provides a rolling window view of how model parameters evolve over time, making it invaluable for detecting structural instability, testing parameter constancy, and implementing real-time adaptive systems. Recursive methods are computationally efficient and ideal for monitoring regime changes.\n\n**Recursive Least Squares (RLS):**\n\nGiven model: y_t = x_t'β + ε_t\n\nUpdate equations (adding observation t):\n\nβ̂_t = β̂_{t-1} + K_t(y_t - x_t'β̂_{t-1})\n\nK_t = P_{t-1}x_t / (1 + x_t'P_{t-1}x_t)\n\nP_t = P_{t-1} - K_tx_t'P_{t-1}\n\nWhere:\n- β̂_t = parameter estimate using data 1 to t\n- K_t = Kalman gain\n- P_t = covariance matrix of β̂_t\n- P_t = (X_t'X_t)⁻¹σ² in batch form\n\n**Recursive residuals:**\n\nw_t = (y_t - x_t'β̂_{t-1}) / √(1 + x_t'P_{t-1}x_t)\n\nProperties:\n- E(w_t) = 0 under stability\n- Var(w_t) = σ² (homoscedastic)\n- Independent across t under stability\n\n**Forgetting factor (exponential weighting):**\n\nModifies RLS to downweight old data:\n\nβ̂_t = β̂_{t-1} + K_t(y_t - x_t'β̂_{t-1})\nK_t = P_{t-1}x_t / (λ + x_t'P_{t-1}x_t)\nP_t = (P_{t-1} - K_tx_t'P_{t-1}) / λ\n\nWhere λ ∈ (0,1] is the forgetting factor (λ = 1 is standard RLS, λ < 1 adapts faster)\n\n**Visualization:**\nPlot β̂_t over time with ±2SE bands to see parameter evolution.\n\nImagine you're estimating the relationship between interest rates and stock prices. Standard regression gives you one answer for the entire history. Recursive estimation shows you how this relationship evolved month by month. You might see: \"In the 1990s, the coefficient was -0.3. During 2000-2007 it drifted to -0.8. During 2008 crisis it spiked to -1.5, then stabilized around -0.6 post-crisis.\" Plotting these recursive estimates reveals exactly when and how the relationship changed. It's like having a movie of your regression coefficients instead of a single snapshot, letting you spot structural breaks and regime changes as they develop.","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Recursive_Estimation.txt","hasFullInfo":true},{"id":368,"title":"Ridge Shrinkage for Covariance","filename":"Ridge_Shrinkage_for_Covariance.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"L2 covariance regularization","overview":"Ridge Shrinkage for Covariance is a regularization technique that improves covariance matrix estimation by adding a positive constant to the diagonal elements of the sample covariance matrix. This L2 regularization makes the matrix better conditioned, reduces estimation error, and ensures positive definiteness—critical for portfolio optimization and risk modeling. It's the covariance analog of ridge regression.","formula":"The ridge-shrunk covariance matrix is:\nΣ_ridge = S + λ * I","parameters":"Where:\n- S = sample covariance matrix\n- I = identity matrix\n- λ = ridge penalty parameter (λ ≥ 0)\n\nAlternatively, it can be expressed as a weighted combination:\nΣ_ridge = (1 - α) * S + α * trace(S)/p * I\n\nWhere:\n- α = shrinkage weight (0 ≤ α ≤ 1)\n- p = number of dimensions\n- trace(S)/p = average variance\n\nFor correlation matrices, ridge shrinkage becomes:\nR_ridge = (1 - α) * R + α * I\n\nThis shrinks correlations toward zero while preserving variances.","intuition":"Think of ridge shrinkage as adding a small safety cushion to your covariance estimates. When you calculate how stocks move together from limited data, your estimates can be unstable—small changes in data can dramatically change your results. Ridge shrinkage adds a tiny bit of \"independent variance\" to each stock, making the overall system more stable and reliable. It's like admitting \"I might be slightly overconfident about how precisely these stocks correlate, so I'll assume each has a bit more independent movement than the raw data suggests.\" This prevents catastrophic errors in portfolio construction.","rawContent":"Ridge Shrinkage for Covariance is a regularization technique that improves covariance matrix estimation by adding a positive constant to the diagonal elements of the sample covariance matrix. This L2 regularization makes the matrix better conditioned, reduces estimation error, and ensures positive definiteness—critical for portfolio optimization and risk modeling. It's the covariance analog of ridge regression.\n\nThe ridge-shrunk covariance matrix is:\nΣ_ridge = S + λ * I\n\nWhere:\n- S = sample covariance matrix\n- I = identity matrix\n- λ = ridge penalty parameter (λ ≥ 0)\n\nAlternatively, it can be expressed as a weighted combination:\nΣ_ridge = (1 - α) * S + α * trace(S)/p * I\n\nWhere:\n- α = shrinkage weight (0 ≤ α ≤ 1)\n- p = number of dimensions\n- trace(S)/p = average variance\n\nFor correlation matrices, ridge shrinkage becomes:\nR_ridge = (1 - α) * R + α * I\n\nThis shrinks correlations toward zero while preserving variances.\n\nThink of ridge shrinkage as adding a small safety cushion to your covariance estimates. When you calculate how stocks move together from limited data, your estimates can be unstable—small changes in data can dramatically change your results. Ridge shrinkage adds a tiny bit of \"independent variance\" to each stock, making the overall system more stable and reliable. It's like admitting \"I might be slightly overconfident about how precisely these stocks correlate, so I'll assume each has a bit more independent movement than the raw data suggests.\" This prevents catastrophic errors in portfolio construction.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Ridge_Shrinkage_for_Covariance.txt","hasFullInfo":true},{"id":369,"title":"Robust PCA","filename":"Robust_PCA.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Outlier-resistant PCA","overview":"Robust Principal Component Analysis decomposes a data matrix into a low-rank component (capturing the main structure) plus a sparse component (capturing outliers and anomalies), making it resistant to outliers and corruption that would severely distort traditional PCA. It's based on the insight that real-world data often contains both low-dimensional structure and sparse corruptions, which should be separated rather than mixed together.","formula":"The Robust PCA decomposition seeks:\nX = L + S","parameters":"Where:\n- X = observed data matrix\n- L = low-rank matrix (principal structure)\n- S = sparse matrix (outliers/anomalies)\n\nThe optimization problem (Principal Component Pursuit) is:\nminimize: ||L||_* + λ||S||₁\nsubject to: L + S = X\n\nWhere:\n- ||L||_* = nuclear norm (sum of singular values, promotes low rank)\n- ||S||₁ = L1 norm (sum of absolute values, promotes sparsity)\n- λ = balance parameter, typically λ = 1/√(max(n,m))\n\nSolution via:\n- Augmented Lagrange Multiplier (ALM) method\n- Accelerated Proximal Gradient (APG)\n- Alternating Direction Method of Multipliers (ADMM)\n\nThe rank of L and sparsity of S emerge automatically from the optimization.\n\nApplications:\n- Outlier detection (non-zero entries in S)\n- Background/foreground separation in video\n- Noise removal while preserving anomalies","intuition":"Think of analyzing stock returns where a few days have wild swings due to flash crashes or news shocks. Traditional PCA gets confused—it tries to accommodate both the normal patterns AND the extreme outliers, creating distorted components. Robust PCA is smarter: it says \"let me separate this into the normal low-dimensional structure (the systematic factors) and the weird sparse stuff (flash crashes on specific days).\" The result is clean factors capturing true market dynamics, with outliers explicitly identified in the sparse component. It's like having PCA with built-in outlier detection.","rawContent":"Robust Principal Component Analysis decomposes a data matrix into a low-rank component (capturing the main structure) plus a sparse component (capturing outliers and anomalies), making it resistant to outliers and corruption that would severely distort traditional PCA. It's based on the insight that real-world data often contains both low-dimensional structure and sparse corruptions, which should be separated rather than mixed together.\n\nThe Robust PCA decomposition seeks:\nX = L + S\n\nWhere:\n- X = observed data matrix\n- L = low-rank matrix (principal structure)\n- S = sparse matrix (outliers/anomalies)\n\nThe optimization problem (Principal Component Pursuit) is:\nminimize: ||L||_* + λ||S||₁\nsubject to: L + S = X\n\nWhere:\n- ||L||_* = nuclear norm (sum of singular values, promotes low rank)\n- ||S||₁ = L1 norm (sum of absolute values, promotes sparsity)\n- λ = balance parameter, typically λ = 1/√(max(n,m))\n\nSolution via:\n- Augmented Lagrange Multiplier (ALM) method\n- Accelerated Proximal Gradient (APG)\n- Alternating Direction Method of Multipliers (ADMM)\n\nThe rank of L and sparsity of S emerge automatically from the optimization.\n\nApplications:\n- Outlier detection (non-zero entries in S)\n- Background/foreground separation in video\n- Noise removal while preserving anomalies\n\nThink of analyzing stock returns where a few days have wild swings due to flash crashes or news shocks. Traditional PCA gets confused—it tries to accommodate both the normal patterns AND the extreme outliers, creating distorted components. Robust PCA is smarter: it says \"let me separate this into the normal low-dimensional structure (the systematic factors) and the weird sparse stuff (flash crashes on specific days).\" The result is clean factors capturing true market dynamics, with outliers explicitly identified in the sparse component. It's like having PCA with built-in outlier detection.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Robust_PCA.txt","hasFullInfo":true},{"id":370,"title":"Rolling Window Analysis","filename":"Rolling_Window_Analysis.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Moving window estimation","overview":"Rolling Window Analysis estimates models or statistics over consecutive fixed-length windows that slide through the data one period at a time, providing a dynamic view of how relationships, parameters, or statistics evolve over time. Unlike recursive estimation which uses expanding windows, rolling windows maintain constant sample size, giving equal weight to all observations within each window and making the estimates more responsive to recent changes.","formula":"**Basic rolling window estimation:**\n\nFor window width w:\n- Window 1: observations 1 to w → estimate θ̂₁\n- Window 2: observations 2 to w+1 → estimate θ̂₂\n- Window 3: observations 3 to w+2 → estimate θ̂₃\n- ...\n- Window t: observations t to t+w-1 → estimate θ̂_t\n\nThis produces a time series of estimates {θ̂₁, θ̂₂, ..., θ̂_{T-w+1}}\n\n**Common applications:**\n\nRolling regression:\ny_t = β₀(t) + β₁(t)x_t + ε_t\nEstimate (β₀(t), β₁(t)) using observations [t-w+1, t]\n\nRolling volatility:\nσ_t² = (1/w) Σᵢ₌ₜ₋ᵥ₊₁ᵗ (r_i - r̄)²\n\nRolling correlation:\nρ_t(X,Y) = Corr(X_{t-w+1:t}, Y_{t-w+1:t})\n\nRolling Sharpe ratio:\nSR_t = (μ_t - r_f) / σ_t\n\n**Window selection:**\n- Small w (20-60 obs): responsive but noisy\n- Large w (120-250 obs): stable but slow to adapt\n- Rule of thumb: w = 60-120 for daily data, 12-36 for monthly\n\n**Weighting variants:**\n- Equal weight (standard rolling)\n- Exponentially weighted (EWMA within window)\n- Kernel-weighted (triangular, Gaussian)\n\nImagine tracking how stocks correlate with the market. Static correlation gives you one number for all history. Rolling 60-day correlation shows you: \"These two stocks had +0.8 correlation in early 2019, dropped to +0.3 during mid-2019, spiked to +0.95 during March 2020 crisis, then settled at +0.6 thereafter.\" Each day, you drop the oldest day and add the newest, getting a fresh 60-day correlation. This rolling window reveals when correlations strengthened (crisis periods) or weakened (diverging fundamentals). It's like a moving spotlight that illuminates \"what's the relationship RIGHT NOW based on recent behavior?\"","parameters":"","intuition":"","rawContent":"Rolling Window Analysis estimates models or statistics over consecutive fixed-length windows that slide through the data one period at a time, providing a dynamic view of how relationships, parameters, or statistics evolve over time. Unlike recursive estimation which uses expanding windows, rolling windows maintain constant sample size, giving equal weight to all observations within each window and making the estimates more responsive to recent changes.\n\n**Basic rolling window estimation:**\n\nFor window width w:\n- Window 1: observations 1 to w → estimate θ̂₁\n- Window 2: observations 2 to w+1 → estimate θ̂₂\n- Window 3: observations 3 to w+2 → estimate θ̂₃\n- ...\n- Window t: observations t to t+w-1 → estimate θ̂_t\n\nThis produces a time series of estimates {θ̂₁, θ̂₂, ..., θ̂_{T-w+1}}\n\n**Common applications:**\n\nRolling regression:\ny_t = β₀(t) + β₁(t)x_t + ε_t\nEstimate (β₀(t), β₁(t)) using observations [t-w+1, t]\n\nRolling volatility:\nσ_t² = (1/w) Σᵢ₌ₜ₋ᵥ₊₁ᵗ (r_i - r̄)²\n\nRolling correlation:\nρ_t(X,Y) = Corr(X_{t-w+1:t}, Y_{t-w+1:t})\n\nRolling Sharpe ratio:\nSR_t = (μ_t - r_f) / σ_t\n\n**Window selection:**\n- Small w (20-60 obs): responsive but noisy\n- Large w (120-250 obs): stable but slow to adapt\n- Rule of thumb: w = 60-120 for daily data, 12-36 for monthly\n\n**Weighting variants:**\n- Equal weight (standard rolling)\n- Exponentially weighted (EWMA within window)\n- Kernel-weighted (triangular, Gaussian)\n\nImagine tracking how stocks correlate with the market. Static correlation gives you one number for all history. Rolling 60-day correlation shows you: \"These two stocks had +0.8 correlation in early 2019, dropped to +0.3 during mid-2019, spiked to +0.95 during March 2020 crisis, then settled at +0.6 thereafter.\" Each day, you drop the oldest day and add the newest, getting a fresh 60-day correlation. This rolling window reveals when correlations strengthened (crisis periods) or weakened (diverging fundamentals). It's like a moving spotlight that illuminates \"what's the relationship RIGHT NOW based on recent behavior?\"","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Rolling_Window_Analysis.txt","hasFullInfo":true},{"id":371,"title":"Sentiment Score Filtering","filename":"Sentiment_Score_Filtering.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Text-based sentiment","overview":"Sentiment Score Filtering involves processing and refining raw sentiment scores derived from text data (news, social media, analyst reports) to create tradeable signals or risk indicators. Raw sentiment scores are typically noisy and require filtering, normalization, aggregation, and combination with other data to become useful for trading decisions. This encompasses the entire pipeline from raw sentiment to actionable trading signals.","formula":"**Common sentiment filtering techniques:**\n\n1. **Temporal smoothing:**\n   S_filtered(t) = α * S_raw(t) + (1-α) * S_filtered(t-1)\n\nOr moving average:\n   S_filtered(t) = (1/w) Σᵢ₌₀^{w-1} S_raw(t-i)\n\n2. **Normalization:**\n   - Z-score: S_norm = (S - μ_S) / σ_S\n   - Min-max: S_norm = (S - S_min) / (S_max - S_min)\n   - Rank-based: Convert to percentile ranks\n\n3. **Aggregation across sources:**\n   S_aggregate = Σᵢ wᵢ * S_i(t)\n\nWhere wᵢ = weight for source i (equal, volume-weighted, accuracy-weighted)\n\n4. **Thresholding:**\n   Signal = {\n     +1 if S > threshold_high\n      0 if threshold_low ≤ S ≤ threshold_high\n     -1 if S < threshold_low\n   }\n\n5. **Change vs. level:**\n   - ΔS(t) = S(t) - S(t-k) (sentiment change)\n   - dS/dt = sentiment velocity\n   - Divergence: Price vs. sentiment misalignment\n\n6. **Volume/activity weighting:**\n   S_weighted = Σᵢ (vᵢ * sᵢ) / Σᵢ vᵢ\n\nWhere vᵢ = volume/mentions for entity i\n\n**Sentiment-price fusion:**\n- Sentiment confirms price moves\n- Sentiment leads/lags price\n- Sentiment divergence signals reversals\n\nImagine collecting sentiment from Twitter, news, and analyst reports about a stock. Each source gives noisy, conflicting signals minute-by-minute. Sentiment filtering cleans this chaos: smooth out the noise with exponential averaging, normalize each source to comparable scales, weight them by historical accuracy, aggregate into a single score, and detect when sentiment diverges from price. The result transforms \"Twitter sentiment +0.3, News -0.1, Analysts +0.7\" into a clean signal like \"Aggregate bullish sentiment at 75th percentile, rising, contradicting price decline—potential reversal.\" It's the art of extracting signal from textual noise.","parameters":"","intuition":"","rawContent":"Sentiment Score Filtering involves processing and refining raw sentiment scores derived from text data (news, social media, analyst reports) to create tradeable signals or risk indicators. Raw sentiment scores are typically noisy and require filtering, normalization, aggregation, and combination with other data to become useful for trading decisions. This encompasses the entire pipeline from raw sentiment to actionable trading signals.\n\n**Common sentiment filtering techniques:**\n\n1. **Temporal smoothing:**\n   S_filtered(t) = α * S_raw(t) + (1-α) * S_filtered(t-1)\n   \n   Or moving average:\n   S_filtered(t) = (1/w) Σᵢ₌₀^{w-1} S_raw(t-i)\n\n2. **Normalization:**\n   - Z-score: S_norm = (S - μ_S) / σ_S\n   - Min-max: S_norm = (S - S_min) / (S_max - S_min)\n   - Rank-based: Convert to percentile ranks\n\n3. **Aggregation across sources:**\n   S_aggregate = Σᵢ wᵢ * S_i(t)\n   \n   Where wᵢ = weight for source i (equal, volume-weighted, accuracy-weighted)\n\n4. **Thresholding:**\n   Signal = {\n     +1 if S > threshold_high\n      0 if threshold_low ≤ S ≤ threshold_high\n     -1 if S < threshold_low\n   }\n\n5. **Change vs. level:**\n   - ΔS(t) = S(t) - S(t-k) (sentiment change)\n   - dS/dt = sentiment velocity\n   - Divergence: Price vs. sentiment misalignment\n\n6. **Volume/activity weighting:**\n   S_weighted = Σᵢ (vᵢ * sᵢ) / Σᵢ vᵢ\n   \n   Where vᵢ = volume/mentions for entity i\n\n**Sentiment-price fusion:**\n- Sentiment confirms price moves\n- Sentiment leads/lags price\n- Sentiment divergence signals reversals\n\nImagine collecting sentiment from Twitter, news, and analyst reports about a stock. Each source gives noisy, conflicting signals minute-by-minute. Sentiment filtering cleans this chaos: smooth out the noise with exponential averaging, normalize each source to comparable scales, weight them by historical accuracy, aggregate into a single score, and detect when sentiment diverges from price. The result transforms \"Twitter sentiment +0.3, News -0.1, Analysts +0.7\" into a clean signal like \"Aggregate bullish sentiment at 75th percentile, rising, contradicting price decline—potential reversal.\" It's the art of extracting signal from textual noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 17/Sentiment_Score_Filtering.txt","hasFullInfo":true},{"id":372,"title":"Smooth Transition Autoregressive (STAR)","filename":"Smooth_Transition_Autoregressive_STAR.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Smooth regime transitions","overview":"Smooth Transition Autoregressive models extend TAR models by allowing gradual, smooth transitions between regimes rather than abrupt switches. The transition is governed by a smooth function (typically logistic or exponential) that produces continuous regime weights, making STAR models more realistic for many economic and financial series where regime changes occur gradually rather than instantaneously. They capture smooth nonlinear dynamics while remaining relatively parsimonious.","formula":"The general STAR model:\n\ny_t = (φ₁₀ + Σᵢ φ₁ᵢ y_{t-i}) * [1 - G(z_t; γ, c)] + (φ₂₀ + Σᵢ φ₂ᵢ y_{t-i}) * G(z_t; γ, c) + ε_t\n\nThis can be rewritten as:\ny_t = φ₁₀ + Σᵢ φ₁ᵢ y_{t-i} + [φ₂₀ - φ₁₀ + Σᵢ (φ₂ᵢ - φ₁ᵢ) y_{t-i}] * G(z_t; γ, c) + ε_t\n\nWhere G(z_t; γ, c) is the transition function.\n\n**Logistic STAR (LSTAR):**\nG(z_t; γ, c) = 1 / (1 + exp(-γ(z_t - c)))\n\n- c = threshold/location parameter\n- γ > 0 = smoothness parameter (speed of transition)\n- As γ → ∞, LSTAR → TAR (abrupt switch)\n- z_t = transition variable (often z_t = y_{t-d})\n\n**Exponential STAR (ESTAR):**\nG(z_t; γ, c) = 1 - exp(-γ(z_t - c)²)\n\n- Symmetric around c\n- Suitable for symmetric deviations from equilibrium\n\nThe transition function G smoothly weights between two regimes:\n- G ≈ 0: mostly regime 1 parameters\n- G ≈ 0.5: equal mix of regimes\n- G ≈ 1: mostly regime 2 parameters","parameters":"","intuition":"Think of how markets transition from calm to volatile. TAR says \"it instantly switches when volatility hits 15%.\" STAR says \"as volatility rises from 10% to 20%, the market gradually shifts from calm behavior to volatile behavior, with a 50-50 mix at 15%.\" This smooth transition is more realistic. A STAR model might show: \"Below 10% volatility, purely calm regime. From 10-20%, gradual transition mixing both behaviors. Above 20%, purely volatile regime.\" The transition speed γ determines if this shift happens quickly (steep curve) or gradually (gentle curve). It's like a dimmer switch instead of an on-off switch.","rawContent":"Smooth Transition Autoregressive models extend TAR models by allowing gradual, smooth transitions between regimes rather than abrupt switches. The transition is governed by a smooth function (typically logistic or exponential) that produces continuous regime weights, making STAR models more realistic for many economic and financial series where regime changes occur gradually rather than instantaneously. They capture smooth nonlinear dynamics while remaining relatively parsimonious.\n\nThe general STAR model:\n\ny_t = (φ₁₀ + Σᵢ φ₁ᵢ y_{t-i}) * [1 - G(z_t; γ, c)] + (φ₂₀ + Σᵢ φ₂ᵢ y_{t-i}) * G(z_t; γ, c) + ε_t\n\nThis can be rewritten as:\ny_t = φ₁₀ + Σᵢ φ₁ᵢ y_{t-i} + [φ₂₀ - φ₁₀ + Σᵢ (φ₂ᵢ - φ₁ᵢ) y_{t-i}] * G(z_t; γ, c) + ε_t\n\nWhere G(z_t; γ, c) is the transition function.\n\n**Logistic STAR (LSTAR):**\nG(z_t; γ, c) = 1 / (1 + exp(-γ(z_t - c)))\n\n- c = threshold/location parameter\n- γ > 0 = smoothness parameter (speed of transition)\n- As γ → ∞, LSTAR → TAR (abrupt switch)\n- z_t = transition variable (often z_t = y_{t-d})\n\n**Exponential STAR (ESTAR):**\nG(z_t; γ, c) = 1 - exp(-γ(z_t - c)²)\n\n- Symmetric around c\n- Suitable for symmetric deviations from equilibrium\n\nThe transition function G smoothly weights between two regimes:\n- G ≈ 0: mostly regime 1 parameters\n- G ≈ 0.5: equal mix of regimes\n- G ≈ 1: mostly regime 2 parameters\n\nThink of how markets transition from calm to volatile. TAR says \"it instantly switches when volatility hits 15%.\" STAR says \"as volatility rises from 10% to 20%, the market gradually shifts from calm behavior to volatile behavior, with a 50-50 mix at 15%.\" This smooth transition is more realistic. A STAR model might show: \"Below 10% volatility, purely calm regime. From 10-20%, gradual transition mixing both behaviors. Above 20%, purely volatile regime.\" The transition speed γ determines if this shift happens quickly (steep curve) or gradually (gentle curve). It's like a dimmer switch instead of an on-off switch.","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Smooth_Transition_Autoregressive_STAR.txt","hasFullInfo":true},{"id":373,"title":"Social Media Sentiment Integration","filename":"Social_Media_Sentiment_Integration.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Twitter/Reddit signals","overview":"Social Media Sentiment Integration involves collecting, processing, and incorporating sentiment signals from social media platforms (Twitter, Reddit, StockTwits, etc.) into trading models and market analysis frameworks. Unlike traditional news, social media provides high-frequency, crowd-sourced sentiment that can lead or confirm price movements, though it requires sophisticated filtering to handle noise, spam, bots, and manipulation attempts.","formula":"**Data collection pipeline:**\n\n1. **Source selection:**\n   - Twitter (broad coverage, high volume)\n   - Reddit (r/wallstreetbets, r/stocks: retail sentiment)\n   - StockTwits (trader-focused)\n   - Seeking Alpha, Discord (community analysis)\n\n2. **Filtering criteria:**\n   - Account age and follower count (bot detection)\n   - Post frequency (spam filtering)\n   - Verified accounts vs. general users\n   - Geographic and temporal filters\n\n3. **Text processing:**\n   - Entity extraction (ticker symbols, company names)\n   - Sentiment classification (positive/negative/neutral)\n   - Intensity scoring (-1 to +1)\n   - Topic modeling (earnings, M&A, product launches)\n\n**Aggregation methods:**\n\nVolume-weighted sentiment:\nS_t = Σᵢ (vᵢ * sᵢ) / Σᵢ vᵢ\n\nWhere vᵢ = engagement (likes, retweets, comments)\n\nFollower-weighted (influence-based):\nS_t = Σᵢ (fᵢ * sᵢ) / Σᵢ fᵢ\n\nWhere fᵢ = follower count of poster i\n\n**Signal construction:**\n\nSentiment momentum:\nSM_t = S_t - S_{t-k}\n\nSentiment dispersion (disagreement):\nSD_t = √(Σᵢ wᵢ(sᵢ - S_t)²)\n\nSentiment-volume divergence:\nIf rising sentiment + falling volume → weak signal\nIf rising sentiment + rising volume → strong signal\n\n**Integration approaches:**\n\n1. **Leading indicator:**\n   Predict returns: R_{t+1} = α + β*S_t + ε_{t+1}\n\n2. **Confirmation signal:**\n   Price breakout + sentiment surge → high-confidence trade\n\n3. **Contrarian signal:**\n   Extreme sentiment (99th percentile) → reversal signal\n\n4. **Risk filter:**\n   High sentiment dispersion → elevated uncertainty → reduce position","parameters":"","intuition":"Think of social media as a massive real-time focus group revealing crowd psychology. When GameStop chatter on Reddit exploded from 1,000 mentions/day to 100,000+, sentiment integration detected this surge before the price spike. But raw counts are useless—you need to filter out bots, weight by account credibility, separate real conviction from spam, and detect when sentiment is genuinely shifting versus just noise. Sentiment integration might reveal: \"High-credibility accounts showing 85% bullish sentiment with rising engagement—6 hours before price moves up 3%.\" It's about extracting the crowd's collective wisdom while filtering its madness.","rawContent":"Social Media Sentiment Integration involves collecting, processing, and incorporating sentiment signals from social media platforms (Twitter, Reddit, StockTwits, etc.) into trading models and market analysis frameworks. Unlike traditional news, social media provides high-frequency, crowd-sourced sentiment that can lead or confirm price movements, though it requires sophisticated filtering to handle noise, spam, bots, and manipulation attempts.\n\n**Data collection pipeline:**\n\n1. **Source selection:**\n   - Twitter (broad coverage, high volume)\n   - Reddit (r/wallstreetbets, r/stocks: retail sentiment)\n   - StockTwits (trader-focused)\n   - Seeking Alpha, Discord (community analysis)\n\n2. **Filtering criteria:**\n   - Account age and follower count (bot detection)\n   - Post frequency (spam filtering)\n   - Verified accounts vs. general users\n   - Geographic and temporal filters\n\n3. **Text processing:**\n   - Entity extraction (ticker symbols, company names)\n   - Sentiment classification (positive/negative/neutral)\n   - Intensity scoring (-1 to +1)\n   - Topic modeling (earnings, M&A, product launches)\n\n**Aggregation methods:**\n\nVolume-weighted sentiment:\nS_t = Σᵢ (vᵢ * sᵢ) / Σᵢ vᵢ\n\nWhere vᵢ = engagement (likes, retweets, comments)\n\nFollower-weighted (influence-based):\nS_t = Σᵢ (fᵢ * sᵢ) / Σᵢ fᵢ\n\nWhere fᵢ = follower count of poster i\n\n**Signal construction:**\n\nSentiment momentum:\nSM_t = S_t - S_{t-k}\n\nSentiment dispersion (disagreement):\nSD_t = √(Σᵢ wᵢ(sᵢ - S_t)²)\n\nSentiment-volume divergence:\nIf rising sentiment + falling volume → weak signal\nIf rising sentiment + rising volume → strong signal\n\n**Integration approaches:**\n\n1. **Leading indicator:**\n   Predict returns: R_{t+1} = α + β*S_t + ε_{t+1}\n\n2. **Confirmation signal:**\n   Price breakout + sentiment surge → high-confidence trade\n\n3. **Contrarian signal:**\n   Extreme sentiment (99th percentile) → reversal signal\n\n4. **Risk filter:**\n   High sentiment dispersion → elevated uncertainty → reduce position\n\nThink of social media as a massive real-time focus group revealing crowd psychology. When GameStop chatter on Reddit exploded from 1,000 mentions/day to 100,000+, sentiment integration detected this surge before the price spike. But raw counts are useless—you need to filter out bots, weight by account credibility, separate real conviction from spam, and detect when sentiment is genuinely shifting versus just noise. Sentiment integration might reveal: \"High-credibility accounts showing 85% bullish sentiment with rising engagement—6 hours before price moves up 3%.\" It's about extracting the crowd's collective wisdom while filtering its madness.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Social_Media_Sentiment_Integration.txt","hasFullInfo":true},{"id":374,"title":"Sparse Inverse Covariance Estimation","filename":"Sparse_Inverse_Covariance_Estimation.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Network estimation","overview":"Sparse Inverse Covariance Estimation is a statistical technique for estimating the precision matrix (inverse of the covariance matrix) under the assumption that most variables are conditionally independent. This produces a sparse precision matrix where most off-diagonal elements are zero, representing a parsimonious model of dependencies. It's the broader category that includes methods like Graphical Lasso, and is particularly valuable for high-dimensional data where traditional covariance estimation fails.","formula":"The general formulation seeks to solve:\nminimize: f(Θ) + P(Θ)","parameters":"Where:\n- Θ = precision matrix to be estimated\n- f(Θ) = loss function, typically negative log-likelihood: -log(det(Θ)) + trace(S * Θ)\n- P(Θ) = penalty function promoting sparsity\n- S = sample covariance matrix\n\nCommon penalty functions include:\n- L1 penalty: λ * Σᵢⱼ |Θᵢⱼ| (Graphical Lasso)\n- Adaptive Lasso: λ * Σᵢⱼ wᵢⱼ|Θᵢⱼ| (weighted penalties)\n- SCAD/MCP: non-convex penalties for less biased estimates\n\nThe resulting sparse Θ represents a Gaussian graphical model where:\n- Θᵢⱼ = 0 implies conditional independence between variables i and j\n- Non-zero Θᵢⱼ indicates partial correlation (direct dependence)","intuition":"This is like trying to map out which stocks truly affect each other directly, versus those that just seem related because they're both affected by a third stock. Traditional methods say \"everything correlates with everything,\" which is useless for understanding real cause-and-effect. Sparse inverse covariance estimation cuts through the noise to show you only the direct connections. If 100 stocks exist but each one only directly influences 5 others on average, this method will discover that simple underlying structure instead of giving you a tangled mess of 10,000 relationships.","rawContent":"Sparse Inverse Covariance Estimation is a statistical technique for estimating the precision matrix (inverse of the covariance matrix) under the assumption that most variables are conditionally independent. This produces a sparse precision matrix where most off-diagonal elements are zero, representing a parsimonious model of dependencies. It's the broader category that includes methods like Graphical Lasso, and is particularly valuable for high-dimensional data where traditional covariance estimation fails.\n\nThe general formulation seeks to solve:\nminimize: f(Θ) + P(Θ)\n\nWhere:\n- Θ = precision matrix to be estimated\n- f(Θ) = loss function, typically negative log-likelihood: -log(det(Θ)) + trace(S * Θ)\n- P(Θ) = penalty function promoting sparsity\n- S = sample covariance matrix\n\nCommon penalty functions include:\n- L1 penalty: λ * Σᵢⱼ |Θᵢⱼ| (Graphical Lasso)\n- Adaptive Lasso: λ * Σᵢⱼ wᵢⱼ|Θᵢⱼ| (weighted penalties)\n- SCAD/MCP: non-convex penalties for less biased estimates\n\nThe resulting sparse Θ represents a Gaussian graphical model where:\n- Θᵢⱼ = 0 implies conditional independence between variables i and j\n- Non-zero Θᵢⱼ indicates partial correlation (direct dependence)\n\nThis is like trying to map out which stocks truly affect each other directly, versus those that just seem related because they're both affected by a third stock. Traditional methods say \"everything correlates with everything,\" which is useless for understanding real cause-and-effect. Sparse inverse covariance estimation cuts through the noise to show you only the direct connections. If 100 stocks exist but each one only directly influences 5 others on average, this method will discover that simple underlying structure instead of giving you a tangled mess of 10,000 relationships.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Sparse_Inverse_Covariance_Estimation.txt","hasFullInfo":true},{"id":375,"title":"Sparse PCA","filename":"Sparse_PCA.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"L1-regularized PCA","overview":"Sparse Principal Component Analysis modifies traditional PCA to produce principal components with many zero loadings, making them easier to interpret and more suitable for high-dimensional data. While standard PCA components typically have small but non-zero loadings on all variables, sparse PCA enforces sparsity through regularization, identifying which subset of variables actually contribute to each component. This is crucial when dealing with thousands of variables where interpretability and feature selection matter.","formula":"The sparse PCA optimization problem is:\nmaximize: x'Σx - λ||x||₁\n\nsubject to: ||x||₂ = 1","parameters":"Where:\n- x = sparse loading vector\n- Σ = covariance matrix\n- λ = sparsity penalty parameter\n- ||x||₁ = sum of absolute values (L1 norm, promotes sparsity)\n- ||x||₂ = Euclidean norm (normalization constraint)\n\nAlternative formulation (Zou et al.):\nminimize: Σᵢ ||xᵢ - Xβᵢ||² + λ Σⱼ |βᵢⱼ| + λ₂ Σⱼ βᵢⱼ²\n\nThis combines:\n- Reconstruction error\n- L1 penalty (sparsity)\n- L2 penalty (Ridge, prevents overfitting)\n\nThe result is components where:\n- Only k << p variables have non-zero loadings\n- Each component captures a distinct subset of variables\n- Interpretation is much clearer than dense PCA\n\nLarger λ produces sparser components; k (number of non-zero loadings) can be controlled directly.\n\nImagine analyzing 1000 genetic markers to predict disease risk. Regular PCA gives you components that are tiny combinations of all 1000 markers—mathematically optimal but impossible to interpret or act on. Sparse PCA says \"the first pattern is driven by just these 15 specific genes, the second by these 12 different genes,\" with all other genes having exactly zero weight. This makes the results interpretable: you can identify which specific genes matter for each disease pattern, not just an uninterpretable soup of 1000 tiny contributions. It's PCA that talks like a human would.","intuition":"","rawContent":"Sparse Principal Component Analysis modifies traditional PCA to produce principal components with many zero loadings, making them easier to interpret and more suitable for high-dimensional data. While standard PCA components typically have small but non-zero loadings on all variables, sparse PCA enforces sparsity through regularization, identifying which subset of variables actually contribute to each component. This is crucial when dealing with thousands of variables where interpretability and feature selection matter.\n\nThe sparse PCA optimization problem is:\nmaximize: x'Σx - λ||x||₁\n\nsubject to: ||x||₂ = 1\n\nWhere:\n- x = sparse loading vector\n- Σ = covariance matrix\n- λ = sparsity penalty parameter\n- ||x||₁ = sum of absolute values (L1 norm, promotes sparsity)\n- ||x||₂ = Euclidean norm (normalization constraint)\n\nAlternative formulation (Zou et al.):\nminimize: Σᵢ ||xᵢ - Xβᵢ||² + λ Σⱼ |βᵢⱼ| + λ₂ Σⱼ βᵢⱼ²\n\nThis combines:\n- Reconstruction error\n- L1 penalty (sparsity)\n- L2 penalty (Ridge, prevents overfitting)\n\nThe result is components where:\n- Only k << p variables have non-zero loadings\n- Each component captures a distinct subset of variables\n- Interpretation is much clearer than dense PCA\n\nLarger λ produces sparser components; k (number of non-zero loadings) can be controlled directly.\n\nImagine analyzing 1000 genetic markers to predict disease risk. Regular PCA gives you components that are tiny combinations of all 1000 markers—mathematically optimal but impossible to interpret or act on. Sparse PCA says \"the first pattern is driven by just these 15 specific genes, the second by these 12 different genes,\" with all other genes having exactly zero weight. This makes the results interpretable: you can identify which specific genes matter for each disease pattern, not just an uninterpretable soup of 1000 tiny contributions. It's PCA that talks like a human would.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Sparse_PCA.txt","hasFullInfo":true},{"id":376,"title":"Stein's Unbiased Risk Estimate (SURE)","filename":"Steins_Unbiased_Risk_Estimate_SURE.txt","group":"group 17","groupNum":17,"categoryId":40,"categoryTitle":"40. SHRINKAGE & REGULARIZATION METHODS","subcategory":"General","summary":"Risk estimation","overview":"Stein's Unbiased Risk Estimate (SURE) is a method for estimating the mean squared error of an estimator without knowing the true parameter values. Developed by Charles Stein, it provides an unbiased estimate of risk that can be computed solely from the data, making it invaluable for tuning regularization parameters and selecting among different estimators. SURE is widely used in wavelet denoising, shrinkage estimation, and model selection.","formula":"For an estimator θ̂(x) of a parameter θ based on observation x ~ N(θ, σ²I), SURE states:\nSURE(θ̂) = ||θ̂ - x||² - nσ² + 2σ² * div(θ̂)","parameters":"Where:\n- ||θ̂ - x||² = squared distance from estimate to observation\n- n = dimension\n- σ² = known noise variance\n- div(θ̂) = divergence = Σᵢ ∂θ̂ᵢ/∂xᵢ (sum of partial derivatives)\n\nThe remarkable property is:\nE[SURE(θ̂)] = E[||θ̂ - θ||²] = Mean Squared Error\n\nThis means SURE is an unbiased estimator of the true MSE, even though we don't know θ!\n\nFor shrinkage estimators of the form θ̂ = η(x) * x (element-wise):\ndiv(θ̂) = Σᵢ [η(xᵢ) + xᵢ * η'(xᵢ)]\n\nSURE allows data-driven selection of optimal shrinkage parameters by minimizing the estimated risk.","intuition":"Imagine you're trying to denoise a price series and need to choose how aggressive your denoising should be. Too little and you keep the noise; too much and you lose real signal. Normally, you'd need to know the \"true\" clean prices to evaluate how well you did—but you don't have them! SURE is like a magical formula that lets you estimate how well you're doing using only your noisy data. It tells you \"if you dial the denoising to level X, your expected error will be Y\" without ever seeing the truth. This lets you automatically tune your denoising to the optimal setting.","rawContent":"Stein's Unbiased Risk Estimate (SURE) is a method for estimating the mean squared error of an estimator without knowing the true parameter values. Developed by Charles Stein, it provides an unbiased estimate of risk that can be computed solely from the data, making it invaluable for tuning regularization parameters and selecting among different estimators. SURE is widely used in wavelet denoising, shrinkage estimation, and model selection.\n\nFor an estimator θ̂(x) of a parameter θ based on observation x ~ N(θ, σ²I), SURE states:\nSURE(θ̂) = ||θ̂ - x||² - nσ² + 2σ² * div(θ̂)\n\nWhere:\n- ||θ̂ - x||² = squared distance from estimate to observation\n- n = dimension\n- σ² = known noise variance\n- div(θ̂) = divergence = Σᵢ ∂θ̂ᵢ/∂xᵢ (sum of partial derivatives)\n\nThe remarkable property is:\nE[SURE(θ̂)] = E[||θ̂ - θ||²] = Mean Squared Error\n\nThis means SURE is an unbiased estimator of the true MSE, even though we don't know θ!\n\nFor shrinkage estimators of the form θ̂ = η(x) * x (element-wise):\ndiv(θ̂) = Σᵢ [η(xᵢ) + xᵢ * η'(xᵢ)]\n\nSURE allows data-driven selection of optimal shrinkage parameters by minimizing the estimated risk.\n\nImagine you're trying to denoise a price series and need to choose how aggressive your denoising should be. Too little and you keep the noise; too much and you lose real signal. Normally, you'd need to know the \"true\" clean prices to evaluate how well you did—but you don't have them! SURE is like a magical formula that lets you estimate how well you're doing using only your noisy data. It tells you \"if you dial the denoising to level X, your expected error will be Y\" without ever seeing the truth. This lets you automatically tune your denoising to the optimal setting.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Steins_Unbiased_Risk_Estimate_SURE.txt","hasFullInfo":true},{"id":377,"title":"Structural Break Detection (Chow Test)","filename":"Structural_Break_Detection_Chow_Test.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Parameter stability test","overview":"The Chow Test is a statistical test for detecting structural breaks in regression models by testing whether coefficients are stable across different subsamples. Developed by Gregory Chow, it determines if a relationship has changed at a known breakpoint (e.g., policy change date) or can be extended to search for unknown breakpoints. It's fundamental for identifying when market dynamics or economic relationships have fundamentally shifted.","formula":"**Standard Chow Test (known breakpoint at time T₁):**\n\nNull hypothesis H₀: No structural break (β₁ = β₂)\nAlternative H₁: Structural break exists (β₁ ≠ β₂)\n\nThe test statistic is:\nF = [(RSS_pooled - RSS₁ - RSS₂) / k] / [(RSS₁ + RSS₂) / (n - 2k)]","parameters":"Where:\n- RSS_pooled = residual sum of squares from full sample regression\n- RSS₁ = residual sum of squares from first subsample (t = 1 to T₁)\n- RSS₂ = residual sum of squares from second subsample (t = T₁+1 to T)\n- k = number of parameters\n- n = total observations\n- F ~ F(k, n-2k) under H₀\n\n**Decision rule:**\nReject H₀ if F > F_critical(k, n-2k, α)\n\n**Unknown breakpoint:**\n- Test all possible breakpoints t ∈ [T₁_min, T₁_max]\n- Compute F-statistic for each candidate\n- Select breakpoint maximizing F-statistic (supF test)\n- Use modified critical values accounting for search\n\n**Multiple breaks:**\n- Sequentially test for additional breaks\n- Use information criteria (BIC, AIC) for break number selection\n\nImagine you're modeling the relationship between interest rates and stock returns. The Chow test asks: \"Did this relationship change after the 2008 crisis?\" You fit the model before 2008, after 2008, and on the full period. If the before/after models fit much better than the pooled model, you've detected a structural break—the rules of the game changed. You can also search: \"I don't know when it broke, test every month from 2005-2012.\" The test finds the most likely break date and tells you if it's statistically significant. It's like a lie detector for \"has this relationship been stable?\"","intuition":"","rawContent":"The Chow Test is a statistical test for detecting structural breaks in regression models by testing whether coefficients are stable across different subsamples. Developed by Gregory Chow, it determines if a relationship has changed at a known breakpoint (e.g., policy change date) or can be extended to search for unknown breakpoints. It's fundamental for identifying when market dynamics or economic relationships have fundamentally shifted.\n\n**Standard Chow Test (known breakpoint at time T₁):**\n\nNull hypothesis H₀: No structural break (β₁ = β₂)\nAlternative H₁: Structural break exists (β₁ ≠ β₂)\n\nThe test statistic is:\nF = [(RSS_pooled - RSS₁ - RSS₂) / k] / [(RSS₁ + RSS₂) / (n - 2k)]\n\nWhere:\n- RSS_pooled = residual sum of squares from full sample regression\n- RSS₁ = residual sum of squares from first subsample (t = 1 to T₁)\n- RSS₂ = residual sum of squares from second subsample (t = T₁+1 to T)\n- k = number of parameters\n- n = total observations\n- F ~ F(k, n-2k) under H₀\n\n**Decision rule:**\nReject H₀ if F > F_critical(k, n-2k, α)\n\n**Unknown breakpoint:**\n- Test all possible breakpoints t ∈ [T₁_min, T₁_max]\n- Compute F-statistic for each candidate\n- Select breakpoint maximizing F-statistic (supF test)\n- Use modified critical values accounting for search\n\n**Multiple breaks:**\n- Sequentially test for additional breaks\n- Use information criteria (BIC, AIC) for break number selection\n\nImagine you're modeling the relationship between interest rates and stock returns. The Chow test asks: \"Did this relationship change after the 2008 crisis?\" You fit the model before 2008, after 2008, and on the full period. If the before/after models fit much better than the pooled model, you've detected a structural break—the rules of the game changed. You can also search: \"I don't know when it broke, test every month from 2005-2012.\" The test finds the most likely break date and tells you if it's statistically significant. It's like a lie detector for \"has this relationship been stable?\"","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Structural_Break_Detection_Chow_Test.txt","hasFullInfo":true},{"id":378,"title":"Tensor Decomposition","filename":"Tensor_Decomposition.txt","group":"group 17","groupNum":17,"categoryId":41,"categoryTitle":"41. FACTOR MODELS & DIMENSIONALITY REDUCTION","subcategory":"General","summary":"Multi-way array factorization","overview":"Tensor Decomposition extends matrix factorization to higher-order arrays (tensors), allowing analysis of data with multiple modes or dimensions simultaneously. While matrices are two-way arrays, tensors are three-way or higher, enabling representation of data varying across stocks × time × features, or stocks × stocks × time. Tensor methods uncover multi-dimensional patterns that matrix methods would miss or conflate.","formula":"Common tensor decompositions:\n\n1. CANDECOMP/PARAFAC (CP):\nX ≈ Σᵣ λᵣ (a_r ⊗ b_r ⊗ c_r)\n\nDecomposes 3-way tensor into sum of rank-1 tensors:\n- a_r = first mode component\n- b_r = second mode component  \n- c_r = third mode component\n- ⊗ = outer product\n- r = number of components\n\n2. Tucker Decomposition:\nX ≈ G ×₁ A ×₂ B ×₃ C","parameters":"Where:\n- G = core tensor (captures interactions)\n- A, B, C = factor matrices for each mode\n- ×ₙ = mode-n product\n\n3. Tensor-Train (TT):\nRepresents high-dimensional tensors efficiently via chain of 3D cores\n\n4. Higher-Order SVD (HOSVD):\nExtends SVD to tensors with orthogonal factors\n\nApplications in finance:\n- Stocks × Time × Fundamental factors\n- Portfolios × Assets × Time\n- Stocks × Stocks × Time (covariance dynamics)\n- Multi-asset, multi-frequency, multi-feature analysis\n\nImagine analyzing how 100 stocks interact with each other over 500 days. A matrix can show stocks × time or stocks × stocks, but not both simultaneously. A tensor captures stocks × stocks × time, revealing how the entire correlation structure evolves. Tensor decomposition might discover: \"Pattern 1: during calm periods, tech stocks cluster; Pattern 2: during stress, everything correlates; Pattern 3: sector rotation shows delayed cross-correlation.\" These multi-way patterns are invisible to matrix methods but naturally emerge from tensor analysis. It's like upgrading from 2D to 3D vision.","intuition":"","rawContent":"Tensor Decomposition extends matrix factorization to higher-order arrays (tensors), allowing analysis of data with multiple modes or dimensions simultaneously. While matrices are two-way arrays, tensors are three-way or higher, enabling representation of data varying across stocks × time × features, or stocks × stocks × time. Tensor methods uncover multi-dimensional patterns that matrix methods would miss or conflate.\n\nCommon tensor decompositions:\n\n1. CANDECOMP/PARAFAC (CP):\nX ≈ Σᵣ λᵣ (a_r ⊗ b_r ⊗ c_r)\n\nDecomposes 3-way tensor into sum of rank-1 tensors:\n- a_r = first mode component\n- b_r = second mode component  \n- c_r = third mode component\n- ⊗ = outer product\n- r = number of components\n\n2. Tucker Decomposition:\nX ≈ G ×₁ A ×₂ B ×₃ C\n\nWhere:\n- G = core tensor (captures interactions)\n- A, B, C = factor matrices for each mode\n- ×ₙ = mode-n product\n\n3. Tensor-Train (TT):\nRepresents high-dimensional tensors efficiently via chain of 3D cores\n\n4. Higher-Order SVD (HOSVD):\nExtends SVD to tensors with orthogonal factors\n\nApplications in finance:\n- Stocks × Time × Fundamental factors\n- Portfolios × Assets × Time\n- Stocks × Stocks × Time (covariance dynamics)\n- Multi-asset, multi-frequency, multi-feature analysis\n\nImagine analyzing how 100 stocks interact with each other over 500 days. A matrix can show stocks × time or stocks × stocks, but not both simultaneously. A tensor captures stocks × stocks × time, revealing how the entire correlation structure evolves. Tensor decomposition might discover: \"Pattern 1: during calm periods, tech stocks cluster; Pattern 2: during stress, everything correlates; Pattern 3: sector rotation shows delayed cross-correlation.\" These multi-way patterns are invisible to matrix methods but naturally emerge from tensor analysis. It's like upgrading from 2D to 3D vision.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 17/Tensor_Decomposition.txt","hasFullInfo":true},{"id":379,"title":"Textual Analysis Filters","filename":"Textual_Analysis_Filters.txt","group":"group 17","groupNum":17,"categoryId":43,"categoryTitle":"43. SENTIMENT & ALTERNATIVE DATA PROCESSING","subcategory":"General","summary":"Document processing","overview":"Textual Analysis Filters are preprocessing and refinement techniques applied to raw text data to improve signal quality by removing noise, standardizing content, handling outliers, and focusing on informative content. These filters sit between raw text collection and signal generation, ensuring that downstream NLP models operate on clean, relevant data rather than being confused by irrelevant content, formatting artifacts, or manipulated text.","formula":"**Preprocessing filters:**\n\n1. **Content cleaning:**\n   - Remove HTML tags, URLs, email addresses\n   - Strip boilerplate (disclaimers, standard legal text)\n   - Normalize whitespace and punctuation\n   - Handle special characters and encoding issues\n\n2. **Text normalization:**\n   - Lowercase conversion\n   - Stemming: \"running\", \"runs\", \"ran\" → \"run\"\n   - Lemmatization: \"better\" → \"good\" (preserves meaning)\n   - Spell correction\n   - Number normalization: \"1,234.56\" → numeric token\n\n3. **Stop word filtering:**\n   - Remove common words (\"the\", \"a\", \"is\")\n   - Domain-specific stop words (legal boilerplate)\n   - Retain sentiment-bearing stop words (\"not\", \"never\")\n\n4. **Entity standardization:**\n   - Company name variants: \"Apple Inc.\", \"AAPL\", \"Apple\" → canonical form\n   - Person name disambiguation\n   - Date/time normalization\n\n**Quality filters:**\n\n5. **Spam/manipulation detection:**\n   - Repeated identical text (copy-paste campaigns)\n   - Excessive punctuation/capitalization\n   - Coordinated posting patterns\n   - Bot account identification\n\n6. **Relevance filtering:**\n   - Document-level: Is this about the target company/topic?\n   - Sentence-level: Does this sentence contain signal?\n   - Threshold by tf-idf scores\n   - Remove off-topic sections\n\n7. **Temporal filters:**\n   - Publication date vs. market hours\n   - Embargo periods (pre-announcement blackouts)\n   - Information staleness (discard old news)\n\n8. **Source credibility weighting:**\n   - Author reputation scores\n   - Historical accuracy tracking\n   - Platform reliability (WSJ > random blog)\n\n**Statistical outlier filtering:**\n\nExtreme sentiment scores:\n- Identify outliers using z-score or IQR\n- Winsorize extreme values\n- Investigate manually for validity\n\nLength filtering:\n- Too short (<5 words): likely spam\n- Too long (>10,000 words): often irrelevant sections\n\nImagine processing 10,000 news articles daily. Without filters, your sentiment model sees: HTML code fragments, legal boilerplate (\"forward-looking statements...\"), bot-generated spam, off-topic sections about unrelated companies, and formatting errors. Textual filters clean this: strip HTML, remove standard disclaimers, detect and exclude bot posts, identify and extract only sections mentioning your target stocks, normalize all company name variants, and remove articles that are 90% identical to yesterday's (stale). The result transforms messy real-world text into clean, focused content where your NLP models can actually extract meaningful signals instead of learning patterns from garbage.","parameters":"","intuition":"","rawContent":"Textual Analysis Filters are preprocessing and refinement techniques applied to raw text data to improve signal quality by removing noise, standardizing content, handling outliers, and focusing on informative content. These filters sit between raw text collection and signal generation, ensuring that downstream NLP models operate on clean, relevant data rather than being confused by irrelevant content, formatting artifacts, or manipulated text.\n\n**Preprocessing filters:**\n\n1. **Content cleaning:**\n   - Remove HTML tags, URLs, email addresses\n   - Strip boilerplate (disclaimers, standard legal text)\n   - Normalize whitespace and punctuation\n   - Handle special characters and encoding issues\n\n2. **Text normalization:**\n   - Lowercase conversion\n   - Stemming: \"running\", \"runs\", \"ran\" → \"run\"\n   - Lemmatization: \"better\" → \"good\" (preserves meaning)\n   - Spell correction\n   - Number normalization: \"1,234.56\" → numeric token\n\n3. **Stop word filtering:**\n   - Remove common words (\"the\", \"a\", \"is\")\n   - Domain-specific stop words (legal boilerplate)\n   - Retain sentiment-bearing stop words (\"not\", \"never\")\n\n4. **Entity standardization:**\n   - Company name variants: \"Apple Inc.\", \"AAPL\", \"Apple\" → canonical form\n   - Person name disambiguation\n   - Date/time normalization\n\n**Quality filters:**\n\n5. **Spam/manipulation detection:**\n   - Repeated identical text (copy-paste campaigns)\n   - Excessive punctuation/capitalization\n   - Coordinated posting patterns\n   - Bot account identification\n\n6. **Relevance filtering:**\n   - Document-level: Is this about the target company/topic?\n   - Sentence-level: Does this sentence contain signal?\n   - Threshold by tf-idf scores\n   - Remove off-topic sections\n\n7. **Temporal filters:**\n   - Publication date vs. market hours\n   - Embargo periods (pre-announcement blackouts)\n   - Information staleness (discard old news)\n\n8. **Source credibility weighting:**\n   - Author reputation scores\n   - Historical accuracy tracking\n   - Platform reliability (WSJ > random blog)\n\n**Statistical outlier filtering:**\n\nExtreme sentiment scores:\n- Identify outliers using z-score or IQR\n- Winsorize extreme values\n- Investigate manually for validity\n\nLength filtering:\n- Too short (<5 words): likely spam\n- Too long (>10,000 words): often irrelevant sections\n\nImagine processing 10,000 news articles daily. Without filters, your sentiment model sees: HTML code fragments, legal boilerplate (\"forward-looking statements...\"), bot-generated spam, off-topic sections about unrelated companies, and formatting errors. Textual filters clean this: strip HTML, remove standard disclaimers, detect and exclude bot posts, identify and extract only sections mentioning your target stocks, normalize all company name variants, and remove articles that are 90% identical to yesterday's (stale). The result transforms messy real-world text into clean, focused content where your NLP models can actually extract meaningful signals instead of learning patterns from garbage.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 17/Textual_Analysis_Filters.txt","hasFullInfo":true},{"id":380,"title":"Threshold Autoregressive (TAR) Models","filename":"Threshold_Autoregressive_TAR_Models.txt","group":"group 17","groupNum":17,"categoryId":42,"categoryTitle":"42. REGIME-SWITCHING & STRUCTURAL BREAK","subcategory":"General","summary":"Threshold-dependent dynamics","overview":"Threshold Autoregressive models are nonlinear time series models where the dynamics switch between different autoregressive regimes based on whether a threshold variable crosses specified threshold values. Unlike Markov-switching models where regime transitions are probabilistic, TAR models have deterministic regime switches triggered by observable variables, making them simpler to estimate and interpret. They're widely used to model asymmetric dynamics in financial markets.","formula":"The basic TAR(p; k₁, k₂) model with 2 regimes:\n\ny_t = φ₁₀ + Σᵢ φ₁ᵢ y_{t-i} + ε₁t,  if z_t ≤ r\ny_t = φ₂₀ + Σᵢ φ₂ᵢ y_{t-i} + ε₂t,  if z_t > r","parameters":"Where:\n- z_t = threshold variable (often z_t = y_{t-d}, the d-lagged value)\n- r = threshold parameter\n- p = autoregressive order\n- φⱼ = regime-specific parameters\n- d = delay parameter\n\nThe Self-Exciting TAR (SETAR) uses z_t = y_{t-d}:\n\ny_t = {\n  φ₁₀ + φ₁₁y_{t-1} + ... + ε₁t,  if y_{t-d} ≤ r\n  φ₂₀ + φ₂₁y_{t-1} + ... + ε₂t,  if y_{t-d} > r\n}\n\nMultiple thresholds create multiple regimes:\nRegime 1: z_t ≤ r₁\nRegime 2: r₁ < z_t ≤ r₂\nRegime 3: z_t > r₂\n\nEstimation:\n1. Grid search over threshold r\n2. OLS in each regime conditional on r\n3. Select r minimizing overall RSS or AIC\n\nImagine stock returns behave differently depending on recent volatility levels. A TAR model might discover: \"When recent volatility is below 15% (low regime), returns are persistent with mean reversion. When volatility exceeds 15% (high regime), returns become momentum-driven with no mean reversion.\" The threshold of 15% volatility is estimated from data, not assumed. Unlike regime-switching models that probabilistically guess which regime you're in, TAR models give you a clear rule: \"Check the volatility. If it's above 15%, use these parameters; if below, use those parameters.\" It's a simple, transparent switching mechanism.","intuition":"","rawContent":"Threshold Autoregressive models are nonlinear time series models where the dynamics switch between different autoregressive regimes based on whether a threshold variable crosses specified threshold values. Unlike Markov-switching models where regime transitions are probabilistic, TAR models have deterministic regime switches triggered by observable variables, making them simpler to estimate and interpret. They're widely used to model asymmetric dynamics in financial markets.\n\nThe basic TAR(p; k₁, k₂) model with 2 regimes:\n\ny_t = φ₁₀ + Σᵢ φ₁ᵢ y_{t-i} + ε₁t,  if z_t ≤ r\ny_t = φ₂₀ + Σᵢ φ₂ᵢ y_{t-i} + ε₂t,  if z_t > r\n\nWhere:\n- z_t = threshold variable (often z_t = y_{t-d}, the d-lagged value)\n- r = threshold parameter\n- p = autoregressive order\n- φⱼ = regime-specific parameters\n- d = delay parameter\n\nThe Self-Exciting TAR (SETAR) uses z_t = y_{t-d}:\n\ny_t = {\n  φ₁₀ + φ₁₁y_{t-1} + ... + ε₁t,  if y_{t-d} ≤ r\n  φ₂₀ + φ₂₁y_{t-1} + ... + ε₂t,  if y_{t-d} > r\n}\n\nMultiple thresholds create multiple regimes:\nRegime 1: z_t ≤ r₁\nRegime 2: r₁ < z_t ≤ r₂\nRegime 3: z_t > r₂\n\nEstimation:\n1. Grid search over threshold r\n2. OLS in each regime conditional on r\n3. Select r minimizing overall RSS or AIC\n\nImagine stock returns behave differently depending on recent volatility levels. A TAR model might discover: \"When recent volatility is below 15% (low regime), returns are persistent with mean reversion. When volatility exceeds 15% (high regime), returns become momentum-driven with no mean reversion.\" The threshold of 15% volatility is estimated from data, not assumed. Unlike regime-switching models that probabilistically guess which regime you're in, TAR models give you a clear rule: \"Check the volatility. If it's above 15%, use these parameters; if below, use those parameters.\" It's a simple, transparent switching mechanism.","tags":["Regime Switching"],"relPath":"public/concept-list/list-concepts/group 17/Threshold_Autoregressive_TAR_Models.txt","hasFullInfo":true},{"id":381,"title":"Adaptive Shortfall Algorithm","filename":"Adaptive_Shortfall_Algorithm.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Dynamic execution","overview":"A dynamic execution strategy that continuously recalculates the optimal trading trajectory based on real-time market conditions, adjusting to changes in volatility, volume, spread, and price momentum. Unlike static algorithms with predetermined schedules, it adapts the trade-off between market impact and opportunity cost as conditions evolve.","formula":"The core idea is to start with an optimal execution plan (e.g., Almgren-Chriss model) but then update it continuously as you observe actual market impact, volume, volatility, and price drift. If markets become more favorable (high liquidity, tight spreads), trade more aggressively to capture the opportunity. If conditions deteriorate (low liquidity, adverse price movement), slow down to minimize impact.\n\nThis creates a feedback loop: measure current conditions → recalculate optimal trajectory → execute next slice → observe results → update parameters → repeat. The algorithm learns about actual market impact from its own trades and adjusts accordingly. This is the state-of-the-art in institutional execution, used by major brokers and buy-side traders for large orders.\n\nCalculation:\nState variables updated each interval:\n- σ_t = current volatility (updated from recent returns)\n- V_t = current volume rate (updated from market data)\n- α_t = temporary impact (updated from fill quality)\n- β_t = permanent impact (updated from price trajectory)\n- Q_remaining = unfilled quantity\n\nOptimal trading rate (recalculated):\nτ_t = argmin E[Market Impact + λ × Variance(Cost) + Risk × Q²]\n\nAdjustment factors:\nif realized impact < expected: trade more aggressively\nif realized impact > expected: trade more passively\nif price moving favorably: accelerate\nif price moving adversely: may accelerate (get it done) or decelerate (reduce impact)","parameters":"","intuition":"Think of this as having a smart trader who constantly adjusts the plan based on what's actually happening. Start the day planning to spread trades evenly, but then liquidity surges unexpectedly - the algorithm pounces and executes more aggressively while conditions are good. Later, spreads widen and the market gets choppy - it backs off and waits for better conditions. It's like driving with GPS that reroutes based on real-time traffic, not just following a preset route. You get the benefit of an optimal plan but with the flexibility to adapt when reality doesn't match expectations, which is always.","rawContent":"A dynamic execution strategy that continuously recalculates the optimal trading trajectory based on real-time market conditions, adjusting to changes in volatility, volume, spread, and price momentum. Unlike static algorithms with predetermined schedules, it adapts the trade-off between market impact and opportunity cost as conditions evolve.\n\nThe core idea is to start with an optimal execution plan (e.g., Almgren-Chriss model) but then update it continuously as you observe actual market impact, volume, volatility, and price drift. If markets become more favorable (high liquidity, tight spreads), trade more aggressively to capture the opportunity. If conditions deteriorate (low liquidity, adverse price movement), slow down to minimize impact.\n\nThis creates a feedback loop: measure current conditions → recalculate optimal trajectory → execute next slice → observe results → update parameters → repeat. The algorithm learns about actual market impact from its own trades and adjusts accordingly. This is the state-of-the-art in institutional execution, used by major brokers and buy-side traders for large orders.\n\nCalculation:\nState variables updated each interval:\n- σ_t = current volatility (updated from recent returns)\n- V_t = current volume rate (updated from market data)\n- α_t = temporary impact (updated from fill quality)\n- β_t = permanent impact (updated from price trajectory)\n- Q_remaining = unfilled quantity\n\nOptimal trading rate (recalculated):\nτ_t = argmin E[Market Impact + λ × Variance(Cost) + Risk × Q²]\n\nAdjustment factors:\nif realized impact < expected: trade more aggressively\nif realized impact > expected: trade more passively\nif price moving favorably: accelerate\nif price moving adversely: may accelerate (get it done) or decelerate (reduce impact)\n\nThink of this as having a smart trader who constantly adjusts the plan based on what's actually happening. Start the day planning to spread trades evenly, but then liquidity surges unexpectedly - the algorithm pounces and executes more aggressively while conditions are good. Later, spreads widen and the market gets choppy - it backs off and waits for better conditions. It's like driving with GPS that reroutes based on real-time traffic, not just following a preset route. You get the benefit of an optimal plan but with the flexibility to adapt when reality doesn't match expectations, which is always.","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Adaptive_Shortfall_Algorithm.txt","hasFullInfo":true},{"id":382,"title":"Approximate Entropy (ApEn)","filename":"Approximate_Entropy_ApEn.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Regularity measure","overview":"A regularity statistic that quantifies the unpredictability of fluctuations in a time series by measuring the likelihood that similar patterns of observations will remain similar on the next comparison. High ApEn indicates high irregularity or complexity, while low ApEn indicates high regularity or predictability in the time series structure.","formula":"ApEn was developed for analyzing physiological data (like heart rate variability) but has powerful applications in financial markets. It measures how \"self-similar\" a time series is at different scales: if knowing a pattern tells you what comes next with high confidence, ApEn is low (predictable). If patterns don't repeat reliably, ApEn is high (random or chaotic). This is more sophisticated than variance because it captures pattern complexity, not just magnitude of fluctuations.","parameters":"","intuition":"Trading applications include: regime detection (trending markets have lower ApEn, ranging markets higher), complexity-based filtering (filter out noise when ApEn is too high), adaptive parameter selection (use longer lookbacks when ApEn is low, shorter when high), and market efficiency measurement (efficient markets should have high ApEn, approaching random walk).\n\nCalculation:\nParameters:\n- m = pattern length (typically 2)\n- r = tolerance (typically 0.1-0.2 × SD)\n- N = time series length\n\nAlgorithm:\n1. Form m-length patterns: X(i) = [x_i, x_{i+1}, ..., x_{i+m-1}]\n2. For each pattern i, count matches:\n   C_i^m(r) = (# of j where d[X(i), X(j)] ≤ r) / (N-m+1)\n3. Compute: Φ^m(r) = (1/(N-m+1)) Σ_i log(C_i^m(r))\n4. Repeat for m+1\n5. ApEn(m,r,N) = Φ^m(r) - Φ^{m+1}(r)\n\nInterpretation:\nApEn ≈ 0: highly regular, predictable\nApEn ≈ 2: irregular, unpredictable (random)\n\nThink of ApEn as measuring \"if I see this pattern now, will I see a similar pattern continue?\" Low ApEn means yes - the market is structured and patterns repeat (trending, persistent). High ApEn means no - patterns don't repeat, each moment is independent (random walk, choppy). It's like the difference between classical music (low ApEn, structured, predictable progressions) and white noise (high ApEn, totally random). Traders can use this to adapt: trade trend-following when ApEn is low (patterns persist), trade mean-reversion or sit out when ApEn is high (no reliable patterns).","rawContent":"A regularity statistic that quantifies the unpredictability of fluctuations in a time series by measuring the likelihood that similar patterns of observations will remain similar on the next comparison. High ApEn indicates high irregularity or complexity, while low ApEn indicates high regularity or predictability in the time series structure.\n\nApEn was developed for analyzing physiological data (like heart rate variability) but has powerful applications in financial markets. It measures how \"self-similar\" a time series is at different scales: if knowing a pattern tells you what comes next with high confidence, ApEn is low (predictable). If patterns don't repeat reliably, ApEn is high (random or chaotic). This is more sophisticated than variance because it captures pattern complexity, not just magnitude of fluctuations.\n\nTrading applications include: regime detection (trending markets have lower ApEn, ranging markets higher), complexity-based filtering (filter out noise when ApEn is too high), adaptive parameter selection (use longer lookbacks when ApEn is low, shorter when high), and market efficiency measurement (efficient markets should have high ApEn, approaching random walk).\n\nCalculation:\nParameters:\n- m = pattern length (typically 2)\n- r = tolerance (typically 0.1-0.2 × SD)\n- N = time series length\n\nAlgorithm:\n1. Form m-length patterns: X(i) = [x_i, x_{i+1}, ..., x_{i+m-1}]\n2. For each pattern i, count matches:\n   C_i^m(r) = (# of j where d[X(i), X(j)] ≤ r) / (N-m+1)\n3. Compute: Φ^m(r) = (1/(N-m+1)) Σ_i log(C_i^m(r))\n4. Repeat for m+1\n5. ApEn(m,r,N) = Φ^m(r) - Φ^{m+1}(r)\n\nInterpretation:\nApEn ≈ 0: highly regular, predictable\nApEn ≈ 2: irregular, unpredictable (random)\n\nThink of ApEn as measuring \"if I see this pattern now, will I see a similar pattern continue?\" Low ApEn means yes - the market is structured and patterns repeat (trending, persistent). High ApEn means no - patterns don't repeat, each moment is independent (random walk, choppy). It's like the difference between classical music (low ApEn, structured, predictable progressions) and white noise (high ApEn, totally random). Traders can use this to adapt: trade trend-following when ApEn is low (patterns persist), trade mean-reversion or sit out when ApEn is high (no reliable patterns).","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Approximate_Entropy_ApEn.txt","hasFullInfo":true},{"id":383,"title":"Arrival Price Algorithm","filename":"Arrival_Price_Algorithm.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Market-on-close execution","overview":"An aggressive execution strategy that prioritizes completing the order quickly to minimize exposure to adverse price movements, accepting higher market impact in exchange for lower opportunity cost. Also called \"market-on-close\" or \"strike\" algorithms, these strategies front-load execution to lock in current prices at the moment the trading decision was made.","formula":"The arrival price (or decision price) is the market price at the moment you decide to trade. An arrival price algorithm aims to minimize the difference between this price and your average execution price by trading aggressively upfront. The logic: if you have conviction that you should trade now, delaying just exposes you to the risk that prices move against you, which could cost more than the market impact of aggressive execution.\n\nThis approach is optimal when: (1) you have strong directional conviction and expect adverse drift, (2) the order size is small relative to liquidity (low impact), (3) opportunity cost dominates market impact, or (4) you're executing time-sensitive alpha signals. The trade-off is higher permanent price impact from aggressive trading versus lower risk of prices running away.\n\nCalculation:\nObjective: minimize E[P_avg - P_arrival]² \nsubject to: completing within time T\n\nTypical strategy:\nFront-load: 40-60% in first 10% of time\nModerate pace: 30-40% in next 40% of time\nPassive completion: remaining 10-20% at end\n\nAggressiveness parameter α:\nα = 1: immediate market order (extreme arrival price)\nα = 0.5: moderate arrival price strategy\nα = 0: passive strategy (approaches VWAP)\n\nTrading rate:\nτ(t) = Q × [aggressive function of remaining time]\nOften exponential decay from high initial rate","parameters":"","intuition":"Think of this as the \"do it now\" execution strategy. You've decided to trade, so you hit it hard right away to lock in current prices before the market moves against you. It's like running to catch a bus that's about to leave versus walking slowly and hoping it waits - you might attract attention (market impact) but you definitely get on board (avoid opportunity cost). Use this when you have alpha that decays quickly, when you expect the market to move against you, or when your order is small enough that the impact of aggressive trading is less than the risk of waiting. The opposite of patient, sneaky execution strategies.","rawContent":"An aggressive execution strategy that prioritizes completing the order quickly to minimize exposure to adverse price movements, accepting higher market impact in exchange for lower opportunity cost. Also called \"market-on-close\" or \"strike\" algorithms, these strategies front-load execution to lock in current prices at the moment the trading decision was made.\n\nThe arrival price (or decision price) is the market price at the moment you decide to trade. An arrival price algorithm aims to minimize the difference between this price and your average execution price by trading aggressively upfront. The logic: if you have conviction that you should trade now, delaying just exposes you to the risk that prices move against you, which could cost more than the market impact of aggressive execution.\n\nThis approach is optimal when: (1) you have strong directional conviction and expect adverse drift, (2) the order size is small relative to liquidity (low impact), (3) opportunity cost dominates market impact, or (4) you're executing time-sensitive alpha signals. The trade-off is higher permanent price impact from aggressive trading versus lower risk of prices running away.\n\nCalculation:\nObjective: minimize E[P_avg - P_arrival]² \nsubject to: completing within time T\n\nTypical strategy:\nFront-load: 40-60% in first 10% of time\nModerate pace: 30-40% in next 40% of time\nPassive completion: remaining 10-20% at end\n\nAggressiveness parameter α:\nα = 1: immediate market order (extreme arrival price)\nα = 0.5: moderate arrival price strategy\nα = 0: passive strategy (approaches VWAP)\n\nTrading rate:\nτ(t) = Q × [aggressive function of remaining time]\nOften exponential decay from high initial rate\n\nThink of this as the \"do it now\" execution strategy. You've decided to trade, so you hit it hard right away to lock in current prices before the market moves against you. It's like running to catch a bus that's about to leave versus walking slowly and hoping it waits - you might attract attention (market impact) but you definitely get on board (avoid opportunity cost). Use this when you have alpha that decays quickly, when you expect the market to move against you, or when your order is small enough that the impact of aggressive trading is less than the risk of waiting. The opposite of patient, sneaky execution strategies.","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Arrival_Price_Algorithm.txt","hasFullInfo":true},{"id":384,"title":"Black-Litterman Model","filename":"Black-Litterman_Model.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Bayesian asset allocation","overview":"A Bayesian portfolio optimization framework that combines market equilibrium returns (implied by market cap weights) with investor views to produce more stable and intuitive portfolio allocations than pure mean-variance optimization. It solves the problem of extreme sensitivity to return inputs by starting with a sensible prior and updating it with investor insights.","formula":"Traditional mean-variance optimization requires expected return inputs, but small errors in these estimates lead to unstable, extreme portfolios. Black-Litterman reverses this: it starts with implied equilibrium returns (what returns would justify current market weights given risk levels), then allows the investor to express views like \"Tech will outperform Utilities by 5%\" with a confidence level, and combines these using Bayes' theorem.\n\nThe result is a posterior distribution of expected returns that blends market wisdom (equilibrium) with investor insight (views). Portfolios based on these posterior returns are much more stable, diversified, and intuitive than those from pure mean-variance optimization. The model is widely used by institutional investors for tactical asset allocation and strategic tilts.\n\nCalculation:\nPrior (equilibrium returns):\nΠ = λ Σ w_mkt\nwhere λ = risk aversion, w_mkt = market cap weights\n\nViews expressed as:\nP μ = Q + ε, where ε ~ N(0, Ω)\nP = view matrix (pick vectors)\nQ = view return estimates\nΩ = uncertainty in views\n\nPosterior (combined):\nμ_BL = [(τΣ)^(-1) + P^T Ω^(-1) P]^(-1) [(τΣ)^(-1) Π + P^T Ω^(-1) Q]\nΣ_BL = Σ + [(τΣ)^(-1) + P^T Ω^(-1) P]^(-1)\n\nThen use μ_BL in standard mean-variance optimization","parameters":"","intuition":"Think of it this way: instead of pulling expected returns out of thin air (which leads to crazy portfolios), you start with what the market is currently \"voting for\" through prices, then adjust based on your specific insights. If you think tech will beat utilities, you say so with a confidence level, and the model blends your view with the market consensus. Strongly held, confident views move the portfolio more; weak hunches barely budge it. This gives you the benefit of active views without the instability of pure optimization, because you're anchored to a sensible starting point (what the market already thinks).","rawContent":"A Bayesian portfolio optimization framework that combines market equilibrium returns (implied by market cap weights) with investor views to produce more stable and intuitive portfolio allocations than pure mean-variance optimization. It solves the problem of extreme sensitivity to return inputs by starting with a sensible prior and updating it with investor insights.\n\nTraditional mean-variance optimization requires expected return inputs, but small errors in these estimates lead to unstable, extreme portfolios. Black-Litterman reverses this: it starts with implied equilibrium returns (what returns would justify current market weights given risk levels), then allows the investor to express views like \"Tech will outperform Utilities by 5%\" with a confidence level, and combines these using Bayes' theorem.\n\nThe result is a posterior distribution of expected returns that blends market wisdom (equilibrium) with investor insight (views). Portfolios based on these posterior returns are much more stable, diversified, and intuitive than those from pure mean-variance optimization. The model is widely used by institutional investors for tactical asset allocation and strategic tilts.\n\nCalculation:\nPrior (equilibrium returns):\nΠ = λ Σ w_mkt\nwhere λ = risk aversion, w_mkt = market cap weights\n\nViews expressed as:\nP μ = Q + ε, where ε ~ N(0, Ω)\nP = view matrix (pick vectors)\nQ = view return estimates\nΩ = uncertainty in views\n\nPosterior (combined):\nμ_BL = [(τΣ)^(-1) + P^T Ω^(-1) P]^(-1) [(τΣ)^(-1) Π + P^T Ω^(-1) Q]\nΣ_BL = Σ + [(τΣ)^(-1) + P^T Ω^(-1) P]^(-1)\n\nThen use μ_BL in standard mean-variance optimization\n\nThink of it this way: instead of pulling expected returns out of thin air (which leads to crazy portfolios), you start with what the market is currently \"voting for\" through prices, then adjust based on your specific insights. If you think tech will beat utilities, you say so with a confidence level, and the model blends your view with the market consensus. Strongly held, confident views move the portfolio more; weak hunches barely budge it. This gives you the benefit of active views without the instability of pure optimization, because you're anchored to a sensible starting point (what the market already thinks).","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Black-Litterman_Model.txt","hasFullInfo":true},{"id":385,"title":"Conditional Entropy","filename":"Conditional_Entropy.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Conditional uncertainty","overview":"A measure of the remaining uncertainty in a random variable Y after observing another random variable X, quantifying how much information about Y is still unknown given knowledge of X. It captures the reduction in uncertainty and is fundamental to measuring information gain, feature importance, and predictive relationships in trading systems.","formula":"Conditional entropy H(Y|X) equals zero if knowing X completely determines Y (perfect prediction), and equals H(Y) if X provides no information about Y (independence). The difference H(Y) - H(Y|X) is the mutual information I(X;Y), representing how much knowing X reduces uncertainty about Y. This makes conditional entropy central to feature selection: which indicators provide the most uncertainty reduction about future returns?","parameters":"","intuition":"Trading applications include: indicator selection (which technical indicators reduce price uncertainty most?), regime-conditional prediction (how predictable are returns given current regime?), optimal information aggregation (which combination of signals minimizes remaining uncertainty?), and strategy evaluation (how much alpha is left after accounting for known factors?).\n\nCalculation:\nDiscrete case:\nH(Y|X) = Σ_x p(x) H(Y|X=x)\n       = Σ_x p(x) Σ_y p(y|x) log(1/p(y|x))\n       = -Σ_x Σ_y p(x,y) log p(y|x)\n\nRelationship to mutual information:\nI(X;Y) = H(Y) - H(Y|X)\n       = uncertainty reduction from knowing X\n\nChain rule:\nH(Y,X) = H(X) + H(Y|X) = H(Y) + H(X|Y)\n\nContinuous case:\nh(Y|X) = -∫∫ f(x,y) log f(y|x) dx dy\n\nThink of conditional entropy as \"how much do I still not know about Y after I learn X?\" If X is a perfect predictor, the answer is \"nothing\" (conditional entropy = 0). If X is useless, the answer is \"everything\" (conditional entropy = full uncertainty). The difference between before and after learning X is how much information X provides. In trading: if knowing market regime (X) reduces your uncertainty about tomorrow's return (Y) from total randomness to \"probably up,\" that reduction is mutual information. The remaining uncertainty (maybe up a lot, maybe a little) is conditional entropy. Use this to rank which indicators actually reduce your uncertainty versus which just add noise.","rawContent":"A measure of the remaining uncertainty in a random variable Y after observing another random variable X, quantifying how much information about Y is still unknown given knowledge of X. It captures the reduction in uncertainty and is fundamental to measuring information gain, feature importance, and predictive relationships in trading systems.\n\nConditional entropy H(Y|X) equals zero if knowing X completely determines Y (perfect prediction), and equals H(Y) if X provides no information about Y (independence). The difference H(Y) - H(Y|X) is the mutual information I(X;Y), representing how much knowing X reduces uncertainty about Y. This makes conditional entropy central to feature selection: which indicators provide the most uncertainty reduction about future returns?\n\nTrading applications include: indicator selection (which technical indicators reduce price uncertainty most?), regime-conditional prediction (how predictable are returns given current regime?), optimal information aggregation (which combination of signals minimizes remaining uncertainty?), and strategy evaluation (how much alpha is left after accounting for known factors?).\n\nCalculation:\nDiscrete case:\nH(Y|X) = Σ_x p(x) H(Y|X=x)\n       = Σ_x p(x) Σ_y p(y|x) log(1/p(y|x))\n       = -Σ_x Σ_y p(x,y) log p(y|x)\n\nRelationship to mutual information:\nI(X;Y) = H(Y) - H(Y|X)\n       = uncertainty reduction from knowing X\n\nChain rule:\nH(Y,X) = H(X) + H(Y|X) = H(Y) + H(X|Y)\n\nContinuous case:\nh(Y|X) = -∫∫ f(x,y) log f(y|x) dx dy\n\nThink of conditional entropy as \"how much do I still not know about Y after I learn X?\" If X is a perfect predictor, the answer is \"nothing\" (conditional entropy = 0). If X is useless, the answer is \"everything\" (conditional entropy = full uncertainty). The difference between before and after learning X is how much information X provides. In trading: if knowing market regime (X) reduces your uncertainty about tomorrow's return (Y) from total randomness to \"probably up,\" that reduction is mutual information. The remaining uncertainty (maybe up a lot, maybe a little) is conditional entropy. Use this to rank which indicators actually reduce your uncertainty versus which just add noise.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Conditional_Entropy.txt","hasFullInfo":true},{"id":386,"title":"Cross-Entropy Methods","filename":"Cross-Entropy_Methods.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Distribution comparison","overview":"An optimization and Monte Carlo simulation technique that measures the difference between two probability distributions and uses this to iteratively improve sampling or search strategies. In trading, cross-entropy is used for: distribution comparison (how different is actual from expected?), model evaluation (how well does forecast match reality?), and optimization (finding optimal parameters by evolving sampling distributions).","formula":"Cross-entropy between distributions p and q is defined as H(p,q) = -Σ p(x) log q(x), measuring the average number of bits needed to encode data from p using a code optimized for q. When p=q, cross-entropy equals entropy; otherwise it's larger. The Kullback-Leibler divergence D_KL(p||q) = H(p,q) - H(p) measures the excess cost from using q instead of p.\n\nThe cross-entropy method for optimization works by: (1) sample parameters from a distribution, (2) evaluate objective function, (3) select best samples, (4) fit a new distribution to best samples, (5) repeat. This is powerful for complex optimization landscapes where gradient methods fail, such as optimizing trading rule parameters, portfolio allocation with complex constraints, or strategy selection with discontinuous objectives.\n\nCalculation:\nCross-entropy:\nH(p,q) = -Σ_x p(x) log q(x)  [discrete]\nh(p,q) = -∫ p(x) log q(x) dx  [continuous]\n\nKL divergence:\nD_KL(p||q) = Σ_x p(x) log[p(x)/q(x)] = H(p,q) - H(p)\n\nCross-entropy optimization:\n1. Initialize: sampling distribution θ₀\n2. For iteration t:\n   - Sample N points from q(·;θₜ)\n   - Evaluate objective S(x) for each\n   - Select elite set: top ρN samples\n   - Update: θₜ₊₁ = argmax_θ Σ_{elite} log q(x;θ)\n3. Converge when θ stabilizes","parameters":"","intuition":"Think of cross-entropy as measuring \"how wrong is distribution q if the truth is p?\" If you forecast returns with one distribution but reality follows another, cross-entropy quantifies your forecast error. Low cross-entropy means your model is close to reality; high means you're way off. The optimization use is clever: instead of gradient descent, you sample possible solutions randomly, keep the best ones, then sample again from a distribution fit to those winners. Repeat until you converge. This works great when your objective function is nasty (discontinuous, noisy, multi-modal) and traditional optimization fails.","rawContent":"An optimization and Monte Carlo simulation technique that measures the difference between two probability distributions and uses this to iteratively improve sampling or search strategies. In trading, cross-entropy is used for: distribution comparison (how different is actual from expected?), model evaluation (how well does forecast match reality?), and optimization (finding optimal parameters by evolving sampling distributions).\n\nCross-entropy between distributions p and q is defined as H(p,q) = -Σ p(x) log q(x), measuring the average number of bits needed to encode data from p using a code optimized for q. When p=q, cross-entropy equals entropy; otherwise it's larger. The Kullback-Leibler divergence D_KL(p||q) = H(p,q) - H(p) measures the excess cost from using q instead of p.\n\nThe cross-entropy method for optimization works by: (1) sample parameters from a distribution, (2) evaluate objective function, (3) select best samples, (4) fit a new distribution to best samples, (5) repeat. This is powerful for complex optimization landscapes where gradient methods fail, such as optimizing trading rule parameters, portfolio allocation with complex constraints, or strategy selection with discontinuous objectives.\n\nCalculation:\nCross-entropy:\nH(p,q) = -Σ_x p(x) log q(x)  [discrete]\nh(p,q) = -∫ p(x) log q(x) dx  [continuous]\n\nKL divergence:\nD_KL(p||q) = Σ_x p(x) log[p(x)/q(x)] = H(p,q) - H(p)\n\nCross-entropy optimization:\n1. Initialize: sampling distribution θ₀\n2. For iteration t:\n   - Sample N points from q(·;θₜ)\n   - Evaluate objective S(x) for each\n   - Select elite set: top ρN samples\n   - Update: θₜ₊₁ = argmax_θ Σ_{elite} log q(x;θ)\n3. Converge when θ stabilizes\n\nThink of cross-entropy as measuring \"how wrong is distribution q if the truth is p?\" If you forecast returns with one distribution but reality follows another, cross-entropy quantifies your forecast error. Low cross-entropy means your model is close to reality; high means you're way off. The optimization use is clever: instead of gradient descent, you sample possible solutions randomly, keep the best ones, then sample again from a distribution fit to those winners. Repeat until you converge. This works great when your objective function is nasty (discontinuous, noisy, multi-modal) and traditional optimization fails.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Cross-Entropy_Methods.txt","hasFullInfo":true},{"id":387,"title":"Differential Entropy","filename":"Differential_Entropy.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Continuous entropy","overview":"The continuous analog of Shannon entropy for continuous probability distributions, measuring the average information content or uncertainty in a continuous random variable. Unlike discrete entropy which is always non-negative, differential entropy can be negative and is not invariant to coordinate transformations, requiring careful interpretation in trading applications.","formula":"Differential entropy is defined as h(X) = -∫ f(x) log f(x) dx, where f(x) is the probability density function. For a Gaussian distribution, h = ½ log(2πe σ²), showing that higher variance means higher entropy (more uncertainty). This makes differential entropy useful for comparing uncertainty across different return distributions, volatility regimes, or market conditions.\n\nIn trading, differential entropy applications include: comparing complexity of different assets (which has more unpredictable returns?), regime detection (shifts in entropy signal changing market dynamics), optimal portfolio diversification (maximize total entropy subject to return constraints), and information-theoretic volatility measurement (entropy rate as alternative to variance).\n\nCalculation:\nFor continuous distribution f(x):\nh(X) = -∫_{-∞}^{∞} f(x) log f(x) dx\n\nCommon distributions:\nGaussian: h = ½ log(2πe σ²)\nUniform on [a,b]: h = log(b-a)\nExponential(λ): h = 1 - log(λ)\nLaplace(μ,b): h = 1 + log(2b)\n\nEstimation from data:\n- Kernel density estimation → numerical integration\n- Nearest-neighbor methods (Kozachenko-Leonenko)\n- Histogram approximation (biased)\n\nRelationship to variance:\nFor Gaussian: h ∝ log(σ)\nMaximum entropy for given variance is Gaussian","parameters":"","intuition":"Think of differential entropy like asking \"how spread out is this distribution?\" but in information terms rather than variance terms. A tight distribution (prices clustered near mean) has low entropy - you're fairly certain about outcomes. A wide distribution (prices scattered) has high entropy - high uncertainty. The key difference from variance: entropy cares about the whole shape of the distribution, not just the spread. Two distributions can have the same variance but different entropy if their shapes differ. Use it to measure which assets or regimes have genuinely more uncertain outcomes, even controlling for volatility.","rawContent":"The continuous analog of Shannon entropy for continuous probability distributions, measuring the average information content or uncertainty in a continuous random variable. Unlike discrete entropy which is always non-negative, differential entropy can be negative and is not invariant to coordinate transformations, requiring careful interpretation in trading applications.\n\nDifferential entropy is defined as h(X) = -∫ f(x) log f(x) dx, where f(x) is the probability density function. For a Gaussian distribution, h = ½ log(2πe σ²), showing that higher variance means higher entropy (more uncertainty). This makes differential entropy useful for comparing uncertainty across different return distributions, volatility regimes, or market conditions.\n\nIn trading, differential entropy applications include: comparing complexity of different assets (which has more unpredictable returns?), regime detection (shifts in entropy signal changing market dynamics), optimal portfolio diversification (maximize total entropy subject to return constraints), and information-theoretic volatility measurement (entropy rate as alternative to variance).\n\nCalculation:\nFor continuous distribution f(x):\nh(X) = -∫_{-∞}^{∞} f(x) log f(x) dx\n\nCommon distributions:\nGaussian: h = ½ log(2πe σ²)\nUniform on [a,b]: h = log(b-a)\nExponential(λ): h = 1 - log(λ)\nLaplace(μ,b): h = 1 + log(2b)\n\nEstimation from data:\n- Kernel density estimation → numerical integration\n- Nearest-neighbor methods (Kozachenko-Leonenko)\n- Histogram approximation (biased)\n\nRelationship to variance:\nFor Gaussian: h ∝ log(σ)\nMaximum entropy for given variance is Gaussian\n\nThink of differential entropy like asking \"how spread out is this distribution?\" but in information terms rather than variance terms. A tight distribution (prices clustered near mean) has low entropy - you're fairly certain about outcomes. A wide distribution (prices scattered) has high entropy - high uncertainty. The key difference from variance: entropy cares about the whole shape of the distribution, not just the spread. Two distributions can have the same variance but different entropy if their shapes differ. Use it to measure which assets or regimes have genuinely more uncertain outcomes, even controlling for volatility.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Differential_Entropy.txt","hasFullInfo":true},{"id":388,"title":"Dyadic Wavelet Decomposition","filename":"Dyadic_Wavelet_Decomposition.txt","group":"group 18","groupNum":18,"categoryId":36,"categoryTitle":"36. MULTIRESOLUTION & MULTISCALE ANALYSIS","subcategory":"General","summary":"Powers-of-two scaling","overview":"A multiresolution decomposition using scales that increase by powers of two (1, 2, 4, 8, 16, 32...), providing computationally efficient analysis of signals at exponentially spaced timescales. The dyadic structure enables fast algorithms and orthogonal decompositions while covering the full frequency spectrum with logarithmically distributed resolution.","formula":"The dyadic (powers of two) scaling is fundamental to the discrete wavelet transform and filter bank theory. Each level of decomposition splits the signal into two components: approximation (low frequency, 0 to fs/2) and detail (high frequency, fs/2 to fs), where fs is the sampling frequency at that level. Recursively applying this to the approximation creates a tree structure with octave-spaced frequency bands.\n\nIn trading, dyadic scales roughly correspond to: 1-bar (noise), 2-bar (very short-term), 4-bar (short-term), 8-bar (swing), 16-bar (intermediate), 32-bar (trend), etc. While not perfect for market periodicities (which prefer 5, 10, 20, 60), the computational efficiency and mathematical properties make dyadic decomposition the foundation for many real-time trading indicators and automated pattern recognition systems.\n\nCalculation:\nForward decomposition:\na₀ = x(t)  [original signal]\nFor j = 1 to J:\n  aⱼ[n] = (h * aⱼ₋₁)[2n]  [low-pass + downsample by 2]\n  dⱼ[n] = (g * aⱼ₋₁)[2n]  [high-pass + downsample by 2]\n\nReconstruction:\naⱼ₋₁[n] = (h̃ * upsample(aⱼ))[n] + (g̃ * upsample(dⱼ))[n]\n\nProperties:\n- Scales: 2⁰, 2¹, 2², ..., 2^J\n- Perfect reconstruction (if filters chosen properly)\n- Fast O(N) algorithm via filter banks\n- Frequency bands: [0, π/2^j] per level","parameters":"","intuition":"Think of this as repeatedly splitting your price data in half by frequency: first separate the slow stuff from the fast stuff, then split the slow stuff into medium-slow and very-slow, and keep going. Each split doubles the timescale you're looking at. If you start with 1-minute bars, you get components at 1, 2, 4, 8, 16, 32 minutes and so on. It's not perfect for trading (we'd prefer 5, 15, 30, 60 minute intervals), but it's blazing fast to compute and the math works out cleanly, making it the engine under the hood of many real-time wavelet indicators.","rawContent":"A multiresolution decomposition using scales that increase by powers of two (1, 2, 4, 8, 16, 32...), providing computationally efficient analysis of signals at exponentially spaced timescales. The dyadic structure enables fast algorithms and orthogonal decompositions while covering the full frequency spectrum with logarithmically distributed resolution.\n\nThe dyadic (powers of two) scaling is fundamental to the discrete wavelet transform and filter bank theory. Each level of decomposition splits the signal into two components: approximation (low frequency, 0 to fs/2) and detail (high frequency, fs/2 to fs), where fs is the sampling frequency at that level. Recursively applying this to the approximation creates a tree structure with octave-spaced frequency bands.\n\nIn trading, dyadic scales roughly correspond to: 1-bar (noise), 2-bar (very short-term), 4-bar (short-term), 8-bar (swing), 16-bar (intermediate), 32-bar (trend), etc. While not perfect for market periodicities (which prefer 5, 10, 20, 60), the computational efficiency and mathematical properties make dyadic decomposition the foundation for many real-time trading indicators and automated pattern recognition systems.\n\nCalculation:\nForward decomposition:\na₀ = x(t)  [original signal]\nFor j = 1 to J:\n  aⱼ[n] = (h * aⱼ₋₁)[2n]  [low-pass + downsample by 2]\n  dⱼ[n] = (g * aⱼ₋₁)[2n]  [high-pass + downsample by 2]\n\nReconstruction:\naⱼ₋₁[n] = (h̃ * upsample(aⱼ))[n] + (g̃ * upsample(dⱼ))[n]\n\nProperties:\n- Scales: 2⁰, 2¹, 2², ..., 2^J\n- Perfect reconstruction (if filters chosen properly)\n- Fast O(N) algorithm via filter banks\n- Frequency bands: [0, π/2^j] per level\n\nThink of this as repeatedly splitting your price data in half by frequency: first separate the slow stuff from the fast stuff, then split the slow stuff into medium-slow and very-slow, and keep going. Each split doubles the timescale you're looking at. If you start with 1-minute bars, you get components at 1, 2, 4, 8, 16, 32 minutes and so on. It's not perfect for trading (we'd prefer 5, 15, 30, 60 minute intervals), but it's blazing fast to compute and the math works out cleanly, making it the engine under the hood of many real-time wavelet indicators.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Dyadic_Wavelet_Decomposition.txt","hasFullInfo":true},{"id":389,"title":"Dynamic Portfolio Rebalancing Filters","filename":"Dynamic_Portfolio_Rebalancing_Filters.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Time-varying allocation","overview":"Adaptive strategies that adjust portfolio weights over time in response to changing market conditions, asset characteristics, or risk levels, rather than maintaining fixed allocations. These filters determine when and how much to rebalance based on triggers like volatility regimes, momentum signals, valuation metrics, or risk budget violations.","formula":"Static portfolios (rebalanced only periodically like quarterly) can drift significantly from target allocations due to differential returns, leading to unintended risk concentrations. Dynamic rebalancing filters continuously monitor portfolio characteristics and adjust weights to maintain desired properties - whether that's constant risk exposure, optimal factor loadings, or alignment with changing opportunity sets.\n\nCommon approaches include: volatility-targeting (adjust leverage to maintain constant portfolio volatility), momentum-based rebalancing (tilt toward recent winners), mean-reversion rebalancing (buy losers, sell winners), risk budget rebalancing (restore equal risk contributions), and regime-dependent allocation (defensive in high-vol regimes, aggressive in low-vol). The key is balancing responsiveness with transaction costs.\n\nCalculation:\nVolatility targeting:\nTarget: σ_target\nCurrent: σ_p = √(w^T Σ w)\nNew weights: w_new = (σ_target/σ_p) × w\n\nRisk budget rebalancing:\nRC_i = w_i × (Σw)_i  [current risk contribution]\nTarget: RC_target = σ²_p / N\nAdjustment: w_i ← w_i × (RC_target/RC_i)\n\nMomentum rebalancing:\nScore_i = momentum(asset_i, lookback)\nw_i = w_i × (1 + α × Score_i)  [tilt toward momentum]\n\nThreshold rebalancing:\nif |w_i - w_target,i| > threshold:\n  rebalance asset i\nelse:\n  do nothing","parameters":"","intuition":"Think of this as having an autopilot for your portfolio that doesn't just maintain fixed percentages, but adapts to changing conditions. When markets get volatile, it might reduce exposure to keep your risk level constant. When one sector gets too large from price appreciation, it trims and reallocates. When risk patterns shift, it restores balance. It's like cruise control that not only maintains speed but also adjusts for hills, traffic, and road conditions. The trick is being responsive enough to adapt to real changes while not trading frantically on every little wiggle (which would waste money on transaction costs).","rawContent":"Adaptive strategies that adjust portfolio weights over time in response to changing market conditions, asset characteristics, or risk levels, rather than maintaining fixed allocations. These filters determine when and how much to rebalance based on triggers like volatility regimes, momentum signals, valuation metrics, or risk budget violations.\n\nStatic portfolios (rebalanced only periodically like quarterly) can drift significantly from target allocations due to differential returns, leading to unintended risk concentrations. Dynamic rebalancing filters continuously monitor portfolio characteristics and adjust weights to maintain desired properties - whether that's constant risk exposure, optimal factor loadings, or alignment with changing opportunity sets.\n\nCommon approaches include: volatility-targeting (adjust leverage to maintain constant portfolio volatility), momentum-based rebalancing (tilt toward recent winners), mean-reversion rebalancing (buy losers, sell winners), risk budget rebalancing (restore equal risk contributions), and regime-dependent allocation (defensive in high-vol regimes, aggressive in low-vol). The key is balancing responsiveness with transaction costs.\n\nCalculation:\nVolatility targeting:\nTarget: σ_target\nCurrent: σ_p = √(w^T Σ w)\nNew weights: w_new = (σ_target/σ_p) × w\n\nRisk budget rebalancing:\nRC_i = w_i × (Σw)_i  [current risk contribution]\nTarget: RC_target = σ²_p / N\nAdjustment: w_i ← w_i × (RC_target/RC_i)\n\nMomentum rebalancing:\nScore_i = momentum(asset_i, lookback)\nw_i = w_i × (1 + α × Score_i)  [tilt toward momentum]\n\nThreshold rebalancing:\nif |w_i - w_target,i| > threshold:\n  rebalance asset i\nelse:\n  do nothing\n\nThink of this as having an autopilot for your portfolio that doesn't just maintain fixed percentages, but adapts to changing conditions. When markets get volatile, it might reduce exposure to keep your risk level constant. When one sector gets too large from price appreciation, it trims and reallocates. When risk patterns shift, it restores balance. It's like cruise control that not only maintains speed but also adjusts for hills, traffic, and road conditions. The trick is being responsive enough to adapt to real changes while not trading frantically on every little wiggle (which would waste money on transaction costs).","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Dynamic_Portfolio_Rebalancing_Filters.txt","hasFullInfo":true},{"id":390,"title":"Generalized Robust Shrinkage Estimator","filename":"Generalized_Robust_Shrinkage_Estimator.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Regularized robust estimation","overview":"A statistical method that combines robust estimation principles with shrinkage regularization to estimate covariance matrices in the presence of outliers and high-dimensional settings. It generalizes classical shrinkage by incorporating robust M-estimation and adaptive shrinkage targets based on the data structure.","formula":"The core challenge in covariance estimation is that sample covariance matrices are unreliable when: (1) outliers contaminate the data, (2) the number of variables approaches or exceeds the number of observations, or (3) variables have vastly different scales. The generalized robust shrinkage estimator addresses all three issues simultaneously by robustly estimating the covariance structure while shrinking toward multiple possible targets.\n\nUnlike simple shrinkage that pulls all estimates toward a single target (like the identity matrix), the generalized approach uses data-driven selection among multiple candidate targets. It might shrink toward the identity for uncorrelated assets, toward a one-factor model for market-driven portfolios, or toward a diagonal matrix for sector-specific structures. The robust component ensures that extreme observations don't corrupt the shrinkage process itself.\n\nCalculation:\nΣ_GRS = (1 - α) Σ_robust + α Σ_target","parameters":"where:\n- Σ_robust is computed using M-estimation with weight function w(d_i)\n- α ∈ [0,1] is the optimal shrinkage intensity\n- Σ_target is selected from candidate structures {I, diag(Σ), one-factor, etc.}\n- α* = argmin CV-risk or analytical formula (e.g., Ledoit-Wolf type)\n- w(d_i) = min(1, c/d_i) for Huber-type robustness\n\nImagine you're trying to figure out how a group of stocks move together, but some days have crazy price spikes that aren't representative. This method does two clever things: it automatically ignores those weird outlier days (robust part), and it blends your estimate with a simpler, more stable pattern (shrinkage part). It's like averaging what you see in the data with what you know tends to work well in general, while wearing blinders to protect against bad data.","intuition":"","rawContent":"A statistical method that combines robust estimation principles with shrinkage regularization to estimate covariance matrices in the presence of outliers and high-dimensional settings. It generalizes classical shrinkage by incorporating robust M-estimation and adaptive shrinkage targets based on the data structure.\n\nThe core challenge in covariance estimation is that sample covariance matrices are unreliable when: (1) outliers contaminate the data, (2) the number of variables approaches or exceeds the number of observations, or (3) variables have vastly different scales. The generalized robust shrinkage estimator addresses all three issues simultaneously by robustly estimating the covariance structure while shrinking toward multiple possible targets.\n\nUnlike simple shrinkage that pulls all estimates toward a single target (like the identity matrix), the generalized approach uses data-driven selection among multiple candidate targets. It might shrink toward the identity for uncorrelated assets, toward a one-factor model for market-driven portfolios, or toward a diagonal matrix for sector-specific structures. The robust component ensures that extreme observations don't corrupt the shrinkage process itself.\n\nCalculation:\nΣ_GRS = (1 - α) Σ_robust + α Σ_target\nwhere:\n- Σ_robust is computed using M-estimation with weight function w(d_i)\n- α ∈ [0,1] is the optimal shrinkage intensity\n- Σ_target is selected from candidate structures {I, diag(Σ), one-factor, etc.}\n- α* = argmin CV-risk or analytical formula (e.g., Ledoit-Wolf type)\n- w(d_i) = min(1, c/d_i) for Huber-type robustness\n\nImagine you're trying to figure out how a group of stocks move together, but some days have crazy price spikes that aren't representative. This method does two clever things: it automatically ignores those weird outlier days (robust part), and it blends your estimate with a simpler, more stable pattern (shrinkage part). It's like averaging what you see in the data with what you know tends to work well in general, while wearing blinders to protect against bad data.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Generalized_Robust_Shrinkage_Estimator.txt","hasFullInfo":true},{"id":391,"title":"Hampel Estimator","filename":"Hampel_Estimator.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Three-part M-estimator","overview":"A three-part robust M-estimator that provides granular control over outlier treatment through three threshold parameters. It combines quadratic loss for small residuals, linear loss for moderate outliers, and complete rejection for extreme outliers, offering a flexible framework that adapts influence based on the severity of deviation.","formula":"The Hampel estimator's influence function has three distinct zones defined by parameters (a, b, c): fully efficient quadratic weighting for |r| ≤ a, linear downweighting for a < |r| ≤ b, gradual rejection for b < |r| ≤ c, and complete rejection for |r| > c. This multi-stage approach allows fine-tuned robustness - you can be gentle with small outliers while aggressively rejecting large ones.\n\nCommon parameterizations include (a=2, b=4, c=8) times the median absolute deviation (MAD), which provides strong robustness while maintaining reasonable efficiency. The Hampel estimator is particularly useful when outliers have different severities requiring different treatments - minor deviations might be legitimate extreme market moves worth keeping, while major deviations are data errors worth excluding entirely.\n\nCalculation:\nInfluence function ψ(r):\nψ(r) = {\n  r,                           for |r| ≤ a\n  a·sgn(r),                    for a < |r| ≤ b\n  a·sgn(r)·(c-|r|)/(c-b),     for b < |r| ≤ c\n  0,                           for |r| > c\n}\nWeight function:\nw(r) = ψ(r)/r for r ≠ 0\nCommon parameters:\n(a, b, c) = (2σ, 4σ, 8σ) or (1.5·MAD, 3.5·MAD, 8·MAD)\nIterative solution: x_new = Σ w(r_i) y_i / Σ w(r_i)\n\nImagine a smart filter for calculating averages that treats outliers with three levels of suspicion. Small weird moves get full credit (probably real volatility). Medium weird moves get reduced credit (might be real, might be noise). Large weird moves get gradually ignored (probably errors). Massive moves get completely blocked (definitely bad data). It's like having a security system with green/yellow/orange/red alert levels instead of just on/off, letting you fine-tune how paranoid to be about different sizes of crazy price moves.","parameters":"","intuition":"","rawContent":"A three-part robust M-estimator that provides granular control over outlier treatment through three threshold parameters. It combines quadratic loss for small residuals, linear loss for moderate outliers, and complete rejection for extreme outliers, offering a flexible framework that adapts influence based on the severity of deviation.\n\nThe Hampel estimator's influence function has three distinct zones defined by parameters (a, b, c): fully efficient quadratic weighting for |r| ≤ a, linear downweighting for a < |r| ≤ b, gradual rejection for b < |r| ≤ c, and complete rejection for |r| > c. This multi-stage approach allows fine-tuned robustness - you can be gentle with small outliers while aggressively rejecting large ones.\n\nCommon parameterizations include (a=2, b=4, c=8) times the median absolute deviation (MAD), which provides strong robustness while maintaining reasonable efficiency. The Hampel estimator is particularly useful when outliers have different severities requiring different treatments - minor deviations might be legitimate extreme market moves worth keeping, while major deviations are data errors worth excluding entirely.\n\nCalculation:\nInfluence function ψ(r):\nψ(r) = {\n  r,                           for |r| ≤ a\n  a·sgn(r),                    for a < |r| ≤ b\n  a·sgn(r)·(c-|r|)/(c-b),     for b < |r| ≤ c\n  0,                           for |r| > c\n}\nWeight function:\nw(r) = ψ(r)/r for r ≠ 0\nCommon parameters:\n(a, b, c) = (2σ, 4σ, 8σ) or (1.5·MAD, 3.5·MAD, 8·MAD)\nIterative solution: x_new = Σ w(r_i) y_i / Σ w(r_i)\n\nImagine a smart filter for calculating averages that treats outliers with three levels of suspicion. Small weird moves get full credit (probably real volatility). Medium weird moves get reduced credit (might be real, might be noise). Large weird moves get gradually ignored (probably errors). Massive moves get completely blocked (definitely bad data). It's like having a security system with green/yellow/orange/red alert levels instead of just on/off, letting you fine-tune how paranoid to be about different sizes of crazy price moves.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Hampel_Estimator.txt","hasFullInfo":true},{"id":392,"title":"Hierarchical Risk Parity (HRP)","filename":"Hierarchical_Risk_Parity_HRP.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Tree-based allocation","overview":"A machine learning-based portfolio allocation method that combines hierarchical clustering with risk parity principles to build portfolios that are more stable and less sensitive to estimation errors than traditional mean-variance optimization. It organizes assets into a tree structure based on correlation, then allocates capital recursively down the tree using risk-based weights.","formula":"The HRP algorithm has three stages: (1) cluster assets by correlation distance into a hierarchy tree, (2) use this tree to impose structure on allocation decisions, preventing over-concentration in correlated assets, (3) apply risk parity within and between clusters recursively. This approach exploits the quasi-diagonal structure of covariance matrices to reduce the impact of estimation noise, a major problem in traditional optimization.\n\nUnlike standard risk parity which treats all assets equally, HRP recognizes that highly correlated assets are substitutes and should compete for allocation within their cluster. It's particularly valuable for large universes (50+ assets) where covariance estimation becomes unreliable and traditional optimizers produce unstable, concentration-prone portfolios. The method requires no expected return estimates, only covariance.\n\nCalculation:\nStep 1 - Hierarchical clustering:\nDistance: d_ij = √(0.5(1 - ρ_ij))\nBuild tree using single-linkage clustering\n\nStep 2 - Quasi-diagonalization:\nReorder covariance matrix following tree structure\n\nStep 3 - Recursive bisection:\nfunction allocate(cluster):\n  if single asset: return weight = 1\n  split cluster into left/right\n  V_left = variance of left subportfolio\n  V_right = variance of right subportfolio\n  α = V_right / (V_left + V_right)  [inverse variance weight]\n  w_left = α × allocate(left)\n  w_right = (1-α) × allocate(right)\n  return [w_left, w_right]","parameters":"","intuition":"Think of organizing your investment universe like a family tree based on how similar assets behave, then allocating money by traveling down the tree making fair splits at each fork. Assets that move together get grouped and have to share allocation within their group, while independent assets get separate allocations. It's like dividing inheritance fairly through a family tree - you first split between branches, then within each branch, and so on. This prevents putting too much money in things that are secretly the same bet (like having 10 different tech stocks that all move together), and it's much more stable than traditional optimization which often goes haywire from estimation noise.","rawContent":"A machine learning-based portfolio allocation method that combines hierarchical clustering with risk parity principles to build portfolios that are more stable and less sensitive to estimation errors than traditional mean-variance optimization. It organizes assets into a tree structure based on correlation, then allocates capital recursively down the tree using risk-based weights.\n\nThe HRP algorithm has three stages: (1) cluster assets by correlation distance into a hierarchy tree, (2) use this tree to impose structure on allocation decisions, preventing over-concentration in correlated assets, (3) apply risk parity within and between clusters recursively. This approach exploits the quasi-diagonal structure of covariance matrices to reduce the impact of estimation noise, a major problem in traditional optimization.\n\nUnlike standard risk parity which treats all assets equally, HRP recognizes that highly correlated assets are substitutes and should compete for allocation within their cluster. It's particularly valuable for large universes (50+ assets) where covariance estimation becomes unreliable and traditional optimizers produce unstable, concentration-prone portfolios. The method requires no expected return estimates, only covariance.\n\nCalculation:\nStep 1 - Hierarchical clustering:\nDistance: d_ij = √(0.5(1 - ρ_ij))\nBuild tree using single-linkage clustering\n\nStep 2 - Quasi-diagonalization:\nReorder covariance matrix following tree structure\n\nStep 3 - Recursive bisection:\nfunction allocate(cluster):\n  if single asset: return weight = 1\n  split cluster into left/right\n  V_left = variance of left subportfolio\n  V_right = variance of right subportfolio\n  α = V_right / (V_left + V_right)  [inverse variance weight]\n  w_left = α × allocate(left)\n  w_right = (1-α) × allocate(right)\n  return [w_left, w_right]\n\nThink of organizing your investment universe like a family tree based on how similar assets behave, then allocating money by traveling down the tree making fair splits at each fork. Assets that move together get grouped and have to share allocation within their group, while independent assets get separate allocations. It's like dividing inheritance fairly through a family tree - you first split between branches, then within each branch, and so on. This prevents putting too much money in things that are secretly the same bet (like having 10 different tech stocks that all move together), and it's much more stable than traditional optimization which often goes haywire from estimation noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Hierarchical_Risk_Parity_HRP.txt","hasFullInfo":true},{"id":393,"title":"Huber M-Estimator","filename":"Huber_M-Estimator.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Outlier-resistant estimation","overview":"A robust statistical estimator that combines the efficiency of least squares for good data with resistance to outliers by using a hybrid loss function. It behaves like ordinary least squares for small residuals but switches to absolute deviation for large residuals, providing a smooth compromise between mean (sensitive to outliers) and median (robust but inefficient).","formula":"The Huber estimator was designed to achieve high statistical efficiency under the normal distribution (95% as efficient as the mean) while maintaining robustness when outliers contaminate the data. The key parameter 'k' controls the transition point between quadratic and linear loss. Common choices are k=1.345 for 95% efficiency at the normal distribution, or k can be adapted based on the scale of residuals.\n\nIn trading applications, Huber estimation is valuable for trend fitting, volatility modeling, and regression-based indicators where occasional price spikes or gaps should have bounded influence rather than completely dominating the estimate. It provides a principled middle ground between ignoring outliers entirely (median-based methods) and being heavily influenced by them (mean-based methods).\n\nCalculation:\nminimize Σ_i ρ(r_i)\nwhere ρ(r) = {\n  (1/2) r^2,        for |r| ≤ k\n  k|r| - (1/2)k^2,  for |r| > k\n}\nDerivative (ψ function):\nψ(r) = {\n  r,     for |r| ≤ k\n  k·sgn(r), for |r| > k\n}\nWeight function:\nw(r) = min(1, k/|r|)\nSolved iteratively: x_new = Σ w(r_i) y_i / Σ w(r_i)\nCommon k values: 1.345 (95% efficiency), 2.0 (99% efficiency)\n\nImagine you're calculating the average price of a stock over time. Normally, one crazy spike day (flash crash or fat-finger trade) would pull your average way off. Huber says: for normal price moves, use the regular average formula, but when you hit an extreme day, limit how much that day can influence the result. It's like having a built-in shock absorber that activates only when prices get wild, giving you an average that's both accurate on calm days and sensible on crazy days.","parameters":"","intuition":"","rawContent":"A robust statistical estimator that combines the efficiency of least squares for good data with resistance to outliers by using a hybrid loss function. It behaves like ordinary least squares for small residuals but switches to absolute deviation for large residuals, providing a smooth compromise between mean (sensitive to outliers) and median (robust but inefficient).\n\nThe Huber estimator was designed to achieve high statistical efficiency under the normal distribution (95% as efficient as the mean) while maintaining robustness when outliers contaminate the data. The key parameter 'k' controls the transition point between quadratic and linear loss. Common choices are k=1.345 for 95% efficiency at the normal distribution, or k can be adapted based on the scale of residuals.\n\nIn trading applications, Huber estimation is valuable for trend fitting, volatility modeling, and regression-based indicators where occasional price spikes or gaps should have bounded influence rather than completely dominating the estimate. It provides a principled middle ground between ignoring outliers entirely (median-based methods) and being heavily influenced by them (mean-based methods).\n\nCalculation:\nminimize Σ_i ρ(r_i)\nwhere ρ(r) = {\n  (1/2) r^2,        for |r| ≤ k\n  k|r| - (1/2)k^2,  for |r| > k\n}\nDerivative (ψ function):\nψ(r) = {\n  r,     for |r| ≤ k\n  k·sgn(r), for |r| > k\n}\nWeight function:\nw(r) = min(1, k/|r|)\nSolved iteratively: x_new = Σ w(r_i) y_i / Σ w(r_i)\nCommon k values: 1.345 (95% efficiency), 2.0 (99% efficiency)\n\nImagine you're calculating the average price of a stock over time. Normally, one crazy spike day (flash crash or fat-finger trade) would pull your average way off. Huber says: for normal price moves, use the regular average formula, but when you hit an extreme day, limit how much that day can influence the result. It's like having a built-in shock absorber that activates only when prices get wild, giving you an average that's both accurate on calm days and sensible on crazy days.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Huber_M-Estimator.txt","hasFullInfo":true},{"id":394,"title":"Implementation Shortfall Minimization","filename":"Implementation_Shortfall_Minimization.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Optimal execution","overview":"An optimal execution strategy that minimizes the total cost of trading, defined as the difference between the theoretical value of a trade (based on the decision price when you decided to trade) and the actual execution value including market impact and opportunity cost. It balances the trade-off between executing quickly (low opportunity cost but high market impact) and executing slowly (low impact but high opportunity cost).","formula":"Implementation shortfall captures the real cost of trading: if you decide to buy 10,000 shares at $100 but only manage to buy 8,000 shares at an average of $100.50 before prices run up to $101, your shortfall includes both the $0.50/share you overpaid on executed shares and the $1.00/share opportunity cost on the 2,000 shares you missed. This is more comprehensive than simple slippage metrics.\n\nThe optimal execution trajectory trades off permanent impact (price moves proportional to total quantity traded) against temporary impact (price pressure from trading rate) and adverse drift (expected price movement against you while trading). Faster execution reduces exposure to drift but increases temporary impact; slower execution does the reverse. The optimal solution is typically a smooth trajectory between aggressive and passive extremes.\n\nCalculation:\nComponents of implementation shortfall:\nIS = Delay Cost + Trading Cost + Opportunity Cost\n\nDelay Cost = (P_benchmark - P_decision) × Total Quantity\nTrading Cost = Σ (P_i - P_benchmark) × Q_i\nOpportunity Cost = (P_end - P_benchmark) × Unfilled Quantity\n\nOptimal execution (Almgren-Chriss model):\nTrade rate: τ(t) = X(T-t)/T + sinh(κ(T-t)) / sinh(κT) × [X - XT]","parameters":"where:\n- κ = √(λ/η) [urgency parameter]\n- λ = permanent impact coefficient\n- η = temporary impact coefficient\n- X = remaining quantity\n\nTypically follows power-law: aggressive at start, fade toward end\n\nImagine you need to buy a large position but your order itself pushes the price up. Implementation shortfall asks: compared to the moment you decided to trade, how much did you lose from the actual execution? This includes what you overpaid on shares you bought AND the profit you missed on shares you didn't get before prices ran away. The optimal strategy trades carefully to minimize total loss: go too fast and you'll spike the price (expensive market impact), go too slow and the price might run away from you (expensive opportunity cost). The sweet spot is usually somewhere in the middle, trading faster when urgency is high or impact is low.","intuition":"","rawContent":"An optimal execution strategy that minimizes the total cost of trading, defined as the difference between the theoretical value of a trade (based on the decision price when you decided to trade) and the actual execution value including market impact and opportunity cost. It balances the trade-off between executing quickly (low opportunity cost but high market impact) and executing slowly (low impact but high opportunity cost).\n\nImplementation shortfall captures the real cost of trading: if you decide to buy 10,000 shares at $100 but only manage to buy 8,000 shares at an average of $100.50 before prices run up to $101, your shortfall includes both the $0.50/share you overpaid on executed shares and the $1.00/share opportunity cost on the 2,000 shares you missed. This is more comprehensive than simple slippage metrics.\n\nThe optimal execution trajectory trades off permanent impact (price moves proportional to total quantity traded) against temporary impact (price pressure from trading rate) and adverse drift (expected price movement against you while trading). Faster execution reduces exposure to drift but increases temporary impact; slower execution does the reverse. The optimal solution is typically a smooth trajectory between aggressive and passive extremes.\n\nCalculation:\nComponents of implementation shortfall:\nIS = Delay Cost + Trading Cost + Opportunity Cost\n\nDelay Cost = (P_benchmark - P_decision) × Total Quantity\nTrading Cost = Σ (P_i - P_benchmark) × Q_i\nOpportunity Cost = (P_end - P_benchmark) × Unfilled Quantity\n\nOptimal execution (Almgren-Chriss model):\nTrade rate: τ(t) = X(T-t)/T + sinh(κ(T-t)) / sinh(κT) × [X - XT]\nwhere:\n- κ = √(λ/η) [urgency parameter]\n- λ = permanent impact coefficient\n- η = temporary impact coefficient\n- X = remaining quantity\n\nTypically follows power-law: aggressive at start, fade toward end\n\nImagine you need to buy a large position but your order itself pushes the price up. Implementation shortfall asks: compared to the moment you decided to trade, how much did you lose from the actual execution? This includes what you overpaid on shares you bought AND the profit you missed on shares you didn't get before prices ran away. The optimal strategy trades carefully to minimize total loss: go too fast and you'll spike the price (expensive market impact), go too slow and the price might run away from you (expensive opportunity cost). The sweet spot is usually somewhere in the middle, trading faster when urgency is high or impact is low.","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Implementation_Shortfall_Minimization.txt","hasFullInfo":true},{"id":395,"title":"Lead-Lag Relationship Detection","filename":"Lead-Lag_Relationship_Detection.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Cross-asset timing","overview":"A cross-asset analysis technique that identifies temporal precedence relationships where price movements in one instrument systematically predict movements in another with a time delay. These lead-lag relationships arise from differences in information incorporation speeds, liquidity, trading venue, or market participant composition across related assets.","formula":"Common lead-lag relationships include: futures leading spot markets (futures traders are more informed), large-cap stocks leading small-cap stocks (information flows down), ADRs leading/lagging their home market listings (timezone effects), and ETFs vs their components (arbitrage creates temporary leads). Detecting these relationships enables profitable trading: buy the lagging asset when the leading asset moves, betting on mean-reversion or continuation.\n\nThe key challenge is distinguishing true lead-lag (one asset contains information before another) from spurious correlation or mechanical relationships. Robust detection uses high-frequency data, controls for microstructure noise, accounts for feedback effects, and validates out-of-sample. Lead-lag relationships are most exploitable at high frequencies where the lag is predictable and execution is fast enough to capitalize.\n\nCalculation:\nCross-correlation function:\nρ(τ) = Corr[r_X(t), r_Y(t-τ)]\nwhere r = returns, τ = time lag\n\nIf ρ(τ) peaks at τ* > 0: X leads Y by τ*\nIf ρ(τ) peaks at τ* < 0: Y leads X by |τ*|\n\nGranger causality test:\nY_t = Σ α_i Y_{t-i} + Σ β_i X_{t-i} + ε_t\nTest: H0: β_i = 0 for all i\nIf rejected: X Granger-causes Y\n\nImpulse response (VAR):\nΔY_{t+k} = response to shock in X_t\nPlot response over horizons k=1,2,...\n\nTrading strategy:\nif X moves significantly at t:\n  predict Y will move similarly at t+τ*\n  trade Y accordingly","parameters":"","intuition":"Think of this like finding which domino falls first in a chain reaction. Maybe S&P futures always move 2 seconds before SPY ETF, or maybe Tesla stock moves before the EV sector ETF updates. If you can reliably identify these patterns, you get a crystal ball: when the leading asset moves, you know the lagging asset will follow soon, so you can trade ahead of it. The trick is finding relationships that are: (1) real and causal, not just coincidence, (2) stable enough to persist, and (3) fast enough that you can act before they close. High-frequency traders live for these patterns, but they also exist at slower timescales (like international markets following US markets).","rawContent":"A cross-asset analysis technique that identifies temporal precedence relationships where price movements in one instrument systematically predict movements in another with a time delay. These lead-lag relationships arise from differences in information incorporation speeds, liquidity, trading venue, or market participant composition across related assets.\n\nCommon lead-lag relationships include: futures leading spot markets (futures traders are more informed), large-cap stocks leading small-cap stocks (information flows down), ADRs leading/lagging their home market listings (timezone effects), and ETFs vs their components (arbitrage creates temporary leads). Detecting these relationships enables profitable trading: buy the lagging asset when the leading asset moves, betting on mean-reversion or continuation.\n\nThe key challenge is distinguishing true lead-lag (one asset contains information before another) from spurious correlation or mechanical relationships. Robust detection uses high-frequency data, controls for microstructure noise, accounts for feedback effects, and validates out-of-sample. Lead-lag relationships are most exploitable at high frequencies where the lag is predictable and execution is fast enough to capitalize.\n\nCalculation:\nCross-correlation function:\nρ(τ) = Corr[r_X(t), r_Y(t-τ)]\nwhere r = returns, τ = time lag\n\nIf ρ(τ) peaks at τ* > 0: X leads Y by τ*\nIf ρ(τ) peaks at τ* < 0: Y leads X by |τ*|\n\nGranger causality test:\nY_t = Σ α_i Y_{t-i} + Σ β_i X_{t-i} + ε_t\nTest: H0: β_i = 0 for all i\nIf rejected: X Granger-causes Y\n\nImpulse response (VAR):\nΔY_{t+k} = response to shock in X_t\nPlot response over horizons k=1,2,...\n\nTrading strategy:\nif X moves significantly at t:\n  predict Y will move similarly at t+τ*\n  trade Y accordingly\n\nThink of this like finding which domino falls first in a chain reaction. Maybe S&P futures always move 2 seconds before SPY ETF, or maybe Tesla stock moves before the EV sector ETF updates. If you can reliably identify these patterns, you get a crystal ball: when the leading asset moves, you know the lagging asset will follow soon, so you can trade ahead of it. The trick is finding relationships that are: (1) real and causal, not just coincidence, (2) stable enough to persist, and (3) fast enough that you can act before they close. High-frequency traders live for these patterns, but they also exist at slower timescales (like international markets following US markets).","tags":["Zero-Lag","Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Lead-Lag_Relationship_Detection.txt","hasFullInfo":true},{"id":396,"title":"Least Trimmed Squares (LTS)","filename":"Least_Trimmed_Squares_LTS.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"High-breakdown regression","overview":"A high-breakdown regression estimator that fits a model by minimizing the sum of the smallest squared residuals, effectively discarding the largest residuals as outliers. It can resist up to 50% contamination in the data, making it one of the most robust regression methods available for severely corrupted datasets.","formula":"The breakdown point of an estimator is the maximum fraction of outliers it can handle before giving arbitrary results. Classical least squares has a 0% breakdown point - a single extreme outlier can pull the regression line arbitrarily far. LTS achieves a breakdown point of approximately 50% by sorting residuals and only summing the smallest h of them, where h is typically chosen as (n+p+1)/2 for n observations and p predictors.\n\nIn trading applications, LTS is valuable when fitting trendlines or support/resistance levels in the presence of price spikes, gaps, or data corruption. It automatically identifies and excludes outliers without requiring prior knowledge of their locations. The trade-off is lower statistical efficiency on clean data and higher computational cost due to the combinatorial optimization problem.\n\nCalculation:\nβ_LTS = argmin_β Σ_{i=1}^h r²_{(i)}","parameters":"where:\n- r_{(1)}² ≤ r_{(2)}² ≤ ... ≤ r_{(n)}² are sorted squared residuals\n- h = trimming parameter, typically h = ⌊(n+p+1)/2⌋\n- r_i = y_i - x_i^T β\n- Breakdown point ≈ (n-h)/n ≈ 0.5 for optimal h\nRequires combinatorial optimization or approximate algorithms:\n- FAST-LTS algorithm for computational efficiency\n- C-step iterations for refinement","intuition":"Think of fitting a trendline to price data, but you suspect half the points might be garbage (bad ticks, gaps, manipulation). Regular regression would try to please all points and end up twisted. LTS says \"I'll find the best line through the cleanest-looking half of the data and ignore the rest.\" It literally sorts all the errors, keeps the smallest ones, and throws out the biggest ones. If you've got serious data quality issues or want to find the true underlying trend despite massive noise, this is your method. The downside: it's slower and less precise when your data is actually clean.","rawContent":"A high-breakdown regression estimator that fits a model by minimizing the sum of the smallest squared residuals, effectively discarding the largest residuals as outliers. It can resist up to 50% contamination in the data, making it one of the most robust regression methods available for severely corrupted datasets.\n\nThe breakdown point of an estimator is the maximum fraction of outliers it can handle before giving arbitrary results. Classical least squares has a 0% breakdown point - a single extreme outlier can pull the regression line arbitrarily far. LTS achieves a breakdown point of approximately 50% by sorting residuals and only summing the smallest h of them, where h is typically chosen as (n+p+1)/2 for n observations and p predictors.\n\nIn trading applications, LTS is valuable when fitting trendlines or support/resistance levels in the presence of price spikes, gaps, or data corruption. It automatically identifies and excludes outliers without requiring prior knowledge of their locations. The trade-off is lower statistical efficiency on clean data and higher computational cost due to the combinatorial optimization problem.\n\nCalculation:\nβ_LTS = argmin_β Σ_{i=1}^h r²_{(i)}\nwhere:\n- r_{(1)}² ≤ r_{(2)}² ≤ ... ≤ r_{(n)}² are sorted squared residuals\n- h = trimming parameter, typically h = ⌊(n+p+1)/2⌋\n- r_i = y_i - x_i^T β\n- Breakdown point ≈ (n-h)/n ≈ 0.5 for optimal h\nRequires combinatorial optimization or approximate algorithms:\n- FAST-LTS algorithm for computational efficiency\n- C-step iterations for refinement\n\nThink of fitting a trendline to price data, but you suspect half the points might be garbage (bad ticks, gaps, manipulation). Regular regression would try to please all points and end up twisted. LTS says \"I'll find the best line through the cleanest-looking half of the data and ignore the rest.\" It literally sorts all the errors, keeps the smallest ones, and throws out the biggest ones. If you've got serious data quality issues or want to find the true underlying trend despite massive noise, this is your method. The downside: it's slower and less precise when your data is actually clean.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Least_Trimmed_Squares_LTS.txt","hasFullInfo":true},{"id":397,"title":"Limit Order Book (LOB) Dynamics Filtering","filename":"Limit_Order_Book_LOB_Dynamics_Filtering.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Order book modeling","overview":"A real-time analysis framework that processes the continuous stream of limit order book updates (orders added, modified, cancelled, executed) to extract signals about short-term price pressure, liquidity conditions, and informed trading activity. These filters identify patterns in the order book microstructure that predict near-term price movements.","formula":"The limit order book is a dynamic system where the visible orders (bid/ask levels with size) constantly change as traders add liquidity (place limit orders), remove liquidity (cancel orders), and consume liquidity (execute market orders). By filtering this high-frequency message flow, you can detect: order book imbalances predicting directional pressure, liquidity withdrawals signaling informed trading, spoofing patterns indicating manipulation, and regime shifts in market quality.\n\nAdvanced LOB filters use techniques like: intensity modeling of order arrivals/cancellations, queue position tracking to estimate fill probability, spread decomposition to separate adverse selection from inventory costs, and machine learning to classify order flow patterns. These are the foundation of market making, short-term alpha strategies, and optimal execution algorithms.\n\nCalculation:\nBasic imbalance:\nOBI_t = (V_bid - V_ask) / (V_bid + V_ask)\nwhere V_bid = volume at best bid (or several levels)\n\nWeighted imbalance (depth):\nOBI_t = Σ_i w_i(V_bid,i - V_ask,i) / Σ_i w_i(V_bid,i + V_ask,i)\nwith w_i = 1/i or exponential decay from best price\n\nOrder flow toxicity (VPIN):\nVPIN_t = |ΣBuys_t - ΣSells_t| / Total Volume_t\n\nMicroprice (inside spread):\nP_micro = (P_bid × V_ask + P_ask × V_bid) / (V_bid + V_ask)\n[better price estimate than midpoint]\n\nQueue position evolution:\nPosition_t+1 = Position_t + New Orders - Executions - Cancels","parameters":"","intuition":"Think of the order book like a live auction where you can see all the bids and offers constantly changing. LOB filtering is watching that flow for clues: if big orders on the bid side suddenly disappear, maybe someone knows bad news is coming. If the book gets really thick on one side, that's support/resistance. If someone keeps placing and canceling large orders (spoofing), that's manipulation. These filters turn the chaos of thousands of order book updates per second into actionable signals about where price is likely to go in the next few seconds or minutes. Essential for high-frequency trading, market making, and smart execution.","rawContent":"A real-time analysis framework that processes the continuous stream of limit order book updates (orders added, modified, cancelled, executed) to extract signals about short-term price pressure, liquidity conditions, and informed trading activity. These filters identify patterns in the order book microstructure that predict near-term price movements.\n\nThe limit order book is a dynamic system where the visible orders (bid/ask levels with size) constantly change as traders add liquidity (place limit orders), remove liquidity (cancel orders), and consume liquidity (execute market orders). By filtering this high-frequency message flow, you can detect: order book imbalances predicting directional pressure, liquidity withdrawals signaling informed trading, spoofing patterns indicating manipulation, and regime shifts in market quality.\n\nAdvanced LOB filters use techniques like: intensity modeling of order arrivals/cancellations, queue position tracking to estimate fill probability, spread decomposition to separate adverse selection from inventory costs, and machine learning to classify order flow patterns. These are the foundation of market making, short-term alpha strategies, and optimal execution algorithms.\n\nCalculation:\nBasic imbalance:\nOBI_t = (V_bid - V_ask) / (V_bid + V_ask)\nwhere V_bid = volume at best bid (or several levels)\n\nWeighted imbalance (depth):\nOBI_t = Σ_i w_i(V_bid,i - V_ask,i) / Σ_i w_i(V_bid,i + V_ask,i)\nwith w_i = 1/i or exponential decay from best price\n\nOrder flow toxicity (VPIN):\nVPIN_t = |ΣBuys_t - ΣSells_t| / Total Volume_t\n\nMicroprice (inside spread):\nP_micro = (P_bid × V_ask + P_ask × V_bid) / (V_bid + V_ask)\n[better price estimate than midpoint]\n\nQueue position evolution:\nPosition_t+1 = Position_t + New Orders - Executions - Cancels\n\nThink of the order book like a live auction where you can see all the bids and offers constantly changing. LOB filtering is watching that flow for clues: if big orders on the bid side suddenly disappear, maybe someone knows bad news is coming. If the book gets really thick on one side, that's support/resistance. If someone keeps placing and canceling large orders (spoofing), that's manipulation. These filters turn the chaos of thousands of order book updates per second into actionable signals about where price is likely to go in the next few seconds or minutes. Essential for high-frequency trading, market making, and smart execution.","tags":["DSP Filtering","Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Limit_Order_Book_LOB_Dynamics_Filtering.txt","hasFullInfo":true},{"id":398,"title":"Maximum Sharpe Ratio Filter","filename":"Maximum_Sharpe_Ratio_Filter.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Risk-adjusted return optimization","overview":"A portfolio optimization approach that maximizes the risk-adjusted return, measured as excess return per unit of volatility. The resulting portfolio represents the tangency point where a line from the risk-free rate touches the efficient frontier, theoretically offering the best trade-off between risk and reward for a given investment universe.","formula":"The Sharpe ratio measures return per unit of risk: (μ_p - r_f)/σ_p, where μ_p is expected portfolio return, r_f is the risk-free rate, and σ_p is portfolio volatility. Maximizing this ratio finds the portfolio with the steepest slope from the risk-free rate in return-risk space. This portfolio is the optimal choice for any investor who can combine it with cash borrowing/lending, regardless of their risk preferences.\n\nThe challenge with maximum Sharpe ratio portfolios is their extreme sensitivity to expected return estimates, which are difficult to estimate accurately. Small errors in return forecasts can lead to wildly different allocations and poor out-of-sample performance. This has led to the development of robust and regularized variants that constrain the solution to prevent over-concentration in optimistic forecasts.\n\nCalculation:\nObjective: maximize (w^T μ - r_f) / √(w^T Σ w)\nSubject to: w^T 1 = 1\n\nEquivalent formulation (easier to solve):\nmaximize w^T (μ - r_f 1) - (λ/2) w^T Σ w\nThis is mean-variance with λ chosen such that Sharpe is maximized\n\nAnalytical solution (unconstrained):\nw_MSR = Σ^(-1) (μ - r_f 1) / (1^T Σ^(-1) (μ - r_f 1))\n\nIn practice, regularize:\nw_MSR = (Σ + λI)^(-1) (μ - r_f 1)\nor constrain: ||w|| ≤ budget, sector limits, turnover limits","parameters":"","intuition":"Think of this as finding the portfolio that gives you the most \"bang for your buck\" in risk-adjusted terms - the most extra return for each unit of extra volatility you take on. It's like finding the steepest hill to climb: for every step up (risk), you want maximum elevation gain (return). The problem is it's super sensitive to your estimates of future returns, which are basically guesses. If you're slightly too optimistic about one stock, the optimizer will want to bet the farm on it. So in practice, you need to add guardrails (constraints, regularization) to keep it from going crazy based on overconfident forecasts.","rawContent":"A portfolio optimization approach that maximizes the risk-adjusted return, measured as excess return per unit of volatility. The resulting portfolio represents the tangency point where a line from the risk-free rate touches the efficient frontier, theoretically offering the best trade-off between risk and reward for a given investment universe.\n\nThe Sharpe ratio measures return per unit of risk: (μ_p - r_f)/σ_p, where μ_p is expected portfolio return, r_f is the risk-free rate, and σ_p is portfolio volatility. Maximizing this ratio finds the portfolio with the steepest slope from the risk-free rate in return-risk space. This portfolio is the optimal choice for any investor who can combine it with cash borrowing/lending, regardless of their risk preferences.\n\nThe challenge with maximum Sharpe ratio portfolios is their extreme sensitivity to expected return estimates, which are difficult to estimate accurately. Small errors in return forecasts can lead to wildly different allocations and poor out-of-sample performance. This has led to the development of robust and regularized variants that constrain the solution to prevent over-concentration in optimistic forecasts.\n\nCalculation:\nObjective: maximize (w^T μ - r_f) / √(w^T Σ w)\nSubject to: w^T 1 = 1\n\nEquivalent formulation (easier to solve):\nmaximize w^T (μ - r_f 1) - (λ/2) w^T Σ w\nThis is mean-variance with λ chosen such that Sharpe is maximized\n\nAnalytical solution (unconstrained):\nw_MSR = Σ^(-1) (μ - r_f 1) / (1^T Σ^(-1) (μ - r_f 1))\n\nIn practice, regularize:\nw_MSR = (Σ + λI)^(-1) (μ - r_f 1)\nor constrain: ||w|| ≤ budget, sector limits, turnover limits\n\nThink of this as finding the portfolio that gives you the most \"bang for your buck\" in risk-adjusted terms - the most extra return for each unit of extra volatility you take on. It's like finding the steepest hill to climb: for every step up (risk), you want maximum elevation gain (return). The problem is it's super sensitive to your estimates of future returns, which are basically guesses. If you're slightly too optimistic about one stock, the optimizer will want to bet the farm on it. So in practice, you need to add guardrails (constraints, regularization) to keep it from going crazy based on overconfident forecasts.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Maximum_Sharpe_Ratio_Filter.txt","hasFullInfo":true},{"id":399,"title":"Mean-Variance Optimization with Regularization","filename":"Mean-Variance_Optimization_with_Regularization.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Constrained optimization","overview":"An enhanced version of Markowitz mean-variance optimization that adds penalty terms or constraints to prevent extreme, unstable portfolio weights caused by estimation errors in returns and covariances. Regularization techniques trade off a small amount of theoretical optimality for substantial improvements in real-world robustness and performance.","formula":"Pure mean-variance optimization is notoriously unstable: tiny changes in expected return estimates can flip portfolio weights from maximum long to maximum short. This happens because the optimization exploits estimation noise, finding \"optimal\" portfolios based on spurious patterns in forecasts. Regularization adds penalties for extreme positions, concentration, or turnover, effectively constraining the optimizer to stay within reasonable bounds.\n\nCommon regularization approaches include: L1 penalties (LASSO) that induce sparsity, L2 penalties (ridge) that limit position sizes, gross exposure constraints, turnover penalties that reduce trading, and norm constraints that prevent concentration. These methods dramatically improve out-of-sample performance by preventing overfitting to in-sample data and estimation noise.\n\nCalculation:\nStandard mean-variance:\nmaximize w^T μ - (λ/2) w^T Σ w\nsubject to: w^T 1 = 1\n\nRegularized versions:\n\nL2 (Ridge): Add penalty (γ/2)||w||²\n→ shrinks weights toward zero\n\nL1 (LASSO): Add penalty γ||w||₁\n→ induces sparse portfolios (many zero weights)\n\nElastic Net: γ₁||w||₁ + (γ₂/2)||w||²\n→ sparsity + moderate all weights\n\nTurnover: Add γ||w - w_prev||₁\n→ reduces trading costs\n\nGross exposure: ||w||₁ ≤ B\n→ limits total long+short exposure","parameters":"","intuition":"Think of regularization as adding guardrails to prevent the optimizer from doing something stupid. Pure optimization looks at your return forecasts and says \"bet everything on the highest expected return!\" even if that forecast is barely different from others or likely wrong. Regularization says \"okay, optimize, but don't get crazy - keep positions moderate, don't concentrate too much, don't trade like a maniac.\" You sacrifice a tiny bit of theoretical optimality but gain portfolios that actually work in practice because they're not overfitted to noisy estimates. It's the difference between a perfectly tuned race car (fast but fragile) and a robust daily driver (slightly slower but actually reliable).","rawContent":"An enhanced version of Markowitz mean-variance optimization that adds penalty terms or constraints to prevent extreme, unstable portfolio weights caused by estimation errors in returns and covariances. Regularization techniques trade off a small amount of theoretical optimality for substantial improvements in real-world robustness and performance.\n\nPure mean-variance optimization is notoriously unstable: tiny changes in expected return estimates can flip portfolio weights from maximum long to maximum short. This happens because the optimization exploits estimation noise, finding \"optimal\" portfolios based on spurious patterns in forecasts. Regularization adds penalties for extreme positions, concentration, or turnover, effectively constraining the optimizer to stay within reasonable bounds.\n\nCommon regularization approaches include: L1 penalties (LASSO) that induce sparsity, L2 penalties (ridge) that limit position sizes, gross exposure constraints, turnover penalties that reduce trading, and norm constraints that prevent concentration. These methods dramatically improve out-of-sample performance by preventing overfitting to in-sample data and estimation noise.\n\nCalculation:\nStandard mean-variance:\nmaximize w^T μ - (λ/2) w^T Σ w\nsubject to: w^T 1 = 1\n\nRegularized versions:\n\nL2 (Ridge): Add penalty (γ/2)||w||²\n→ shrinks weights toward zero\n\nL1 (LASSO): Add penalty γ||w||₁\n→ induces sparse portfolios (many zero weights)\n\nElastic Net: γ₁||w||₁ + (γ₂/2)||w||²\n→ sparsity + moderate all weights\n\nTurnover: Add γ||w - w_prev||₁\n→ reduces trading costs\n\nGross exposure: ||w||₁ ≤ B\n→ limits total long+short exposure\n\nThink of regularization as adding guardrails to prevent the optimizer from doing something stupid. Pure optimization looks at your return forecasts and says \"bet everything on the highest expected return!\" even if that forecast is barely different from others or likely wrong. Regularization says \"okay, optimize, but don't get crazy - keep positions moderate, don't concentrate too much, don't trade like a maniac.\" You sacrifice a tiny bit of theoretical optimality but gain portfolios that actually work in practice because they're not overfitted to noisy estimates. It's the difference between a perfectly tuned race car (fast but fragile) and a robust daily driver (slightly slower but actually reliable).","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Mean-Variance_Optimization_with_Regularization.txt","hasFullInfo":true},{"id":400,"title":"Minimum Covariance Determinant (MCD)","filename":"Minimum_Covariance_Determinant_MCD.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Robust covariance","overview":"A robust estimator of multivariate location and scatter that identifies the most concentrated subset of observations and computes the mean and covariance from that subset. It achieves a 50% breakdown point by finding the h observations (typically h=⌈(n+p+1)/2⌉) whose covariance matrix has the smallest determinant, effectively excluding outliers automatically.","formula":"The MCD estimator is based on the principle that outliers inflate the covariance determinant, which measures the generalized variance or \"volume\" of the data cloud. By searching for the subset with minimal determinant, MCD identifies the core of the data distribution while automatically detecting and excluding outlying observations. The resulting estimate is then used to compute robust Mahalanobis distances for outlier detection.\n\nIn financial applications, MCD is powerful for portfolio risk estimation when returns contain outliers from market stress, fat-finger trades, or data errors. It provides robust correlation estimates for pairs trading, factor model estimation, and risk parity calculations. The FAST-MCD algorithm makes computation feasible for dimensions up to several hundred variables.\n\nCalculation:\n(μ_MCD, Σ_MCD) = argmin_{μ,Σ} |Σ|\nsubject to: subset size = h observations","parameters":"where:\n- h = ⌈(n+p+1)/2⌉ for 50% breakdown point\n- |Σ| is the determinant of covariance matrix\n- Search over C(n,h) possible subsets\nRobust distances:\nRD_i = √[(x_i - μ_MCD)^T Σ_MCD^(-1) (x_i - μ_MCD)]\nOutliers: RD_i > √χ²_{p,0.975}\nFAST-MCD algorithm: approximate solution in O(n p²) time\n\nImagine you have a cluster of stock returns, but some days are total outliers (crashes, glitches). MCD says \"find me the tightest cluster of about half the data points\" - these are your good observations. It measures how spread out each possible subset is and picks the most concentrated one. Then it uses that clean subset to estimate correlations and volatilities. It's like automatically identifying and using only the normal trading days while ignoring the crazy ones. Great for getting reliable correlation estimates when your data has occasional garbage mixed in with legitimate returns.","intuition":"","rawContent":"A robust estimator of multivariate location and scatter that identifies the most concentrated subset of observations and computes the mean and covariance from that subset. It achieves a 50% breakdown point by finding the h observations (typically h=⌈(n+p+1)/2⌉) whose covariance matrix has the smallest determinant, effectively excluding outliers automatically.\n\nThe MCD estimator is based on the principle that outliers inflate the covariance determinant, which measures the generalized variance or \"volume\" of the data cloud. By searching for the subset with minimal determinant, MCD identifies the core of the data distribution while automatically detecting and excluding outlying observations. The resulting estimate is then used to compute robust Mahalanobis distances for outlier detection.\n\nIn financial applications, MCD is powerful for portfolio risk estimation when returns contain outliers from market stress, fat-finger trades, or data errors. It provides robust correlation estimates for pairs trading, factor model estimation, and risk parity calculations. The FAST-MCD algorithm makes computation feasible for dimensions up to several hundred variables.\n\nCalculation:\n(μ_MCD, Σ_MCD) = argmin_{μ,Σ} |Σ|\nsubject to: subset size = h observations\nwhere:\n- h = ⌈(n+p+1)/2⌉ for 50% breakdown point\n- |Σ| is the determinant of covariance matrix\n- Search over C(n,h) possible subsets\nRobust distances:\nRD_i = √[(x_i - μ_MCD)^T Σ_MCD^(-1) (x_i - μ_MCD)]\nOutliers: RD_i > √χ²_{p,0.975}\nFAST-MCD algorithm: approximate solution in O(n p²) time\n\nImagine you have a cluster of stock returns, but some days are total outliers (crashes, glitches). MCD says \"find me the tightest cluster of about half the data points\" - these are your good observations. It measures how spread out each possible subset is and picks the most concentrated one. Then it uses that clean subset to estimate correlations and volatilities. It's like automatically identifying and using only the normal trading days while ignoring the crazy ones. Great for getting reliable correlation estimates when your data has occasional garbage mixed in with legitimate returns.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Minimum_Covariance_Determinant_MCD.txt","hasFullInfo":true},{"id":401,"title":"Minimum Variance Portfolio Filter","filename":"Minimum_Variance_Portfolio_Filter.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Variance minimization","overview":"A portfolio optimization objective that seeks the allocation with the lowest possible volatility, ignoring expected returns entirely and focusing solely on risk minimization through diversification. The resulting portfolio is the corner point of the efficient frontier with minimum risk, often used as a defensive or benchmark portfolio construction approach.","formula":"The minimum variance portfolio (MVP) solves for weights that minimize σ²_p = w^T Σ w subject to weights summing to one (and potentially other constraints like long-only or sector limits). Because it requires no expected return estimates - which are notoriously difficult to estimate accurately - the MVP is more stable and reliable than mean-variance portfolios that depend on return forecasts.\n\nEmpirically, minimum variance portfolios have often outperformed market-cap weighted and equal-weighted portfolios on a risk-adjusted basis, particularly during volatile periods. They naturally overweight low-volatility, low-correlation assets, creating a defensive tilt. The \"low-volatility anomaly\" (low-vol stocks outperforming high-vol stocks) makes this approach attractive as both a risk-reduction and return-enhancement strategy.\n\nCalculation:\nObjective: minimize σ²_p = w^T Σ w\nSubject to: w^T 1 = 1  (weights sum to 1)\nOptional: w ≥ 0  (long-only), Aw ≤ b  (other constraints)\n\nAnalytical solution (unconstrained):\nw_MVP = Σ^(-1) 1 / (1^T Σ^(-1) 1)\n\nConstrained solution:\nUse quadratic programming solver\nLagrangian: L = w^T Σ w + λ(w^T 1 - 1)\n\nProperties:\n- Expected return: μ_p = w^T μ\n- Variance: σ²_p = minimum achievable\n- Typically heavy weights in low-vol, defensive assets","parameters":"","intuition":"Think of this as building a portfolio by asking only \"what combination gives me the smoothest ride?\" without worrying about returns at all. You're looking for the mix of assets that, because of their individual volatilities and how they move together (or don't), produces the least bumpy portfolio possible. Counterintuitively, this often beats strategies that try to maximize returns, because avoiding big drops is more powerful than chasing big gains, and because low-volatility stocks tend to be persistently undervalued by risk-seeking markets. It's a defensive, sleep-well-at-night approach that historically has held up surprisingly well.","rawContent":"A portfolio optimization objective that seeks the allocation with the lowest possible volatility, ignoring expected returns entirely and focusing solely on risk minimization through diversification. The resulting portfolio is the corner point of the efficient frontier with minimum risk, often used as a defensive or benchmark portfolio construction approach.\n\nThe minimum variance portfolio (MVP) solves for weights that minimize σ²_p = w^T Σ w subject to weights summing to one (and potentially other constraints like long-only or sector limits). Because it requires no expected return estimates - which are notoriously difficult to estimate accurately - the MVP is more stable and reliable than mean-variance portfolios that depend on return forecasts.\n\nEmpirically, minimum variance portfolios have often outperformed market-cap weighted and equal-weighted portfolios on a risk-adjusted basis, particularly during volatile periods. They naturally overweight low-volatility, low-correlation assets, creating a defensive tilt. The \"low-volatility anomaly\" (low-vol stocks outperforming high-vol stocks) makes this approach attractive as both a risk-reduction and return-enhancement strategy.\n\nCalculation:\nObjective: minimize σ²_p = w^T Σ w\nSubject to: w^T 1 = 1  (weights sum to 1)\nOptional: w ≥ 0  (long-only), Aw ≤ b  (other constraints)\n\nAnalytical solution (unconstrained):\nw_MVP = Σ^(-1) 1 / (1^T Σ^(-1) 1)\n\nConstrained solution:\nUse quadratic programming solver\nLagrangian: L = w^T Σ w + λ(w^T 1 - 1)\n\nProperties:\n- Expected return: μ_p = w^T μ\n- Variance: σ²_p = minimum achievable\n- Typically heavy weights in low-vol, defensive assets\n\nThink of this as building a portfolio by asking only \"what combination gives me the smoothest ride?\" without worrying about returns at all. You're looking for the mix of assets that, because of their individual volatilities and how they move together (or don't), produces the least bumpy portfolio possible. Counterintuitively, this often beats strategies that try to maximize returns, because avoiding big drops is more powerful than chasing big gains, and because low-volatility stocks tend to be persistently undervalued by risk-seeking markets. It's a defensive, sleep-well-at-night approach that historically has held up surprisingly well.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Minimum_Variance_Portfolio_Filter.txt","hasFullInfo":true},{"id":402,"title":"MM-Estimators","filename":"MM-Estimators.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"High-efficiency robust estimators","overview":"A two-stage robust regression method combining high breakdown point (from an initial S-estimator) with high statistical efficiency (from an M-estimator refinement). The name \"MM\" reflects that both stages use M-estimation principles, creating an estimator that achieves both excellent robustness and near-optimal efficiency simultaneously.","formula":"The MM procedure works in three steps: (1) compute an initial robust estimate with high breakdown point (typically using S-estimation or LTS), (2) compute a robust scale estimate from the residuals of this initial fit, (3) refine the estimate using M-estimation with this fixed scale, using a ρ function tuned for high efficiency. This separation allows the breakdown point to be determined by the initial estimator while the efficiency is controlled by the final M-step.\n\nMM-estimators solve a long-standing challenge in robust statistics: achieving both high breakdown point (50%) and high efficiency (95%+) simultaneously, which is impossible with a single-stage M-estimator. In trading applications, this means you can fit trends, estimate volatility relationships, or build regression models that resist severe contamination while still extracting maximum information from clean data.\n\nCalculation:\nStage 1 - Initial estimate:\nβ_init = S-estimator or LTS estimate (50% breakdown)\n\nStage 2 - Robust scale:\ns = s(r₁,...,rₙ) based on β_init residuals\n\nStage 3 - Efficient M-estimate:\nβ_MM = argmin_β Σᵢ ρ(rᵢ/s)\nwhere ρ is tuned for high efficiency (e.g., Tukey c=4.685)\n\nProperties:\n- Breakdown point: 50% (inherited from initial estimator)\n- Efficiency: 95%+ (from final M-step tuning)\n- Best of both worlds","parameters":"","intuition":"Think of MM-estimators as a two-step process: first, use a super-robust method to get in the ballpark and identify the outliers (even if this rough estimate isn't very precise), then use a more efficient method to fine-tune the answer while keeping the same understanding of what's an outlier. It's like first using a metal detector to find where treasure is buried (works even in trashy areas), then using precise tools to excavate it carefully. You get both extreme robustness to bad data AND high accuracy on good data - the best of both worlds, which is why MM-estimators are often the default choice in modern robust regression.","rawContent":"A two-stage robust regression method combining high breakdown point (from an initial S-estimator) with high statistical efficiency (from an M-estimator refinement). The name \"MM\" reflects that both stages use M-estimation principles, creating an estimator that achieves both excellent robustness and near-optimal efficiency simultaneously.\n\nThe MM procedure works in three steps: (1) compute an initial robust estimate with high breakdown point (typically using S-estimation or LTS), (2) compute a robust scale estimate from the residuals of this initial fit, (3) refine the estimate using M-estimation with this fixed scale, using a ρ function tuned for high efficiency. This separation allows the breakdown point to be determined by the initial estimator while the efficiency is controlled by the final M-step.\n\nMM-estimators solve a long-standing challenge in robust statistics: achieving both high breakdown point (50%) and high efficiency (95%+) simultaneously, which is impossible with a single-stage M-estimator. In trading applications, this means you can fit trends, estimate volatility relationships, or build regression models that resist severe contamination while still extracting maximum information from clean data.\n\nCalculation:\nStage 1 - Initial estimate:\nβ_init = S-estimator or LTS estimate (50% breakdown)\n\nStage 2 - Robust scale:\ns = s(r₁,...,rₙ) based on β_init residuals\n\nStage 3 - Efficient M-estimate:\nβ_MM = argmin_β Σᵢ ρ(rᵢ/s)\nwhere ρ is tuned for high efficiency (e.g., Tukey c=4.685)\n\nProperties:\n- Breakdown point: 50% (inherited from initial estimator)\n- Efficiency: 95%+ (from final M-step tuning)\n- Best of both worlds\n\nThink of MM-estimators as a two-step process: first, use a super-robust method to get in the ballpark and identify the outliers (even if this rough estimate isn't very precise), then use a more efficient method to fine-tune the answer while keeping the same understanding of what's an outlier. It's like first using a metal detector to find where treasure is buried (works even in trashy areas), then using precise tools to excavate it carefully. You get both extreme robustness to bad data AND high accuracy on good data - the best of both worlds, which is why MM-estimators are often the default choice in modern robust regression.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/MM-Estimators.txt","hasFullInfo":true},{"id":403,"title":"Multiresolution Signal Processing","filename":"Multiresolution_Signal_Processing.txt","group":"group 18","groupNum":18,"categoryId":36,"categoryTitle":"36. MULTIRESOLUTION & MULTISCALE ANALYSIS","subcategory":"General","summary":"Scale-based decomposition","overview":"A framework for analyzing signals at multiple scales or resolutions simultaneously, decomposing data into components that capture patterns at different time horizons. This allows extraction of both short-term fluctuations and long-term trends from the same dataset, providing a comprehensive view of market dynamics across timeframes.","formula":"The core principle is that financial markets contain information at multiple scales: high-frequency noise, intraday patterns, daily trends, weekly cycles, and long-term structural movements. Traditional single-scale analysis (like a simple moving average) captures only one timescale. Multiresolution analysis uses wavelets, filter banks, or pyramid decompositions to separate these scales, enabling targeted analysis or filtering at each level.\n\nApplications in trading include: separating noise from signal at different timeframes, identifying regime changes that appear at specific scales, constructing indicators that adapt based on the dominant scale of price movement, and building multi-timeframe confirmation systems. The approach mirrors how traders naturally think about markets: \"what's the long-term trend, medium-term cycle, and short-term noise?\"\n\nCalculation:\nWavelet decomposition:\nx(t) = Σⱼ dⱼ(t) + aⱼ₍ₘₐₓ₎(t)","parameters":"where:\n- dⱼ(t) = detail coefficients at scale j (high frequency)\n- aⱼ(t) = approximation coefficients at scale j (low frequency)\n- j = 1,2,...,J scale levels\n\nFilter bank approach:\nH₀ = low-pass filter (approximation)\nH₁ = high-pass filter (detail)\nRecursive: aⱼ = H₀[aⱼ₋₁], dⱼ = H₁[aⱼ₋₁]\n\nScale factor: 2ʲ (dyadic) or custom\n\nImagine looking at a stock chart with multiple layers like a transparency stack: one layer shows only long-term trends (monthly/yearly), another shows medium swings (weekly), another shows daily moves, and the top layer has intraday noise. Multiresolution analysis automatically separates the price into these layers. You can then analyze each layer independently - maybe the long-term trend is up, the medium-term is sideways, and the short-term is noisy. This lets you match your trading style to your timeframe or require alignment across scales for higher-confidence signals.","intuition":"","rawContent":"A framework for analyzing signals at multiple scales or resolutions simultaneously, decomposing data into components that capture patterns at different time horizons. This allows extraction of both short-term fluctuations and long-term trends from the same dataset, providing a comprehensive view of market dynamics across timeframes.\n\nThe core principle is that financial markets contain information at multiple scales: high-frequency noise, intraday patterns, daily trends, weekly cycles, and long-term structural movements. Traditional single-scale analysis (like a simple moving average) captures only one timescale. Multiresolution analysis uses wavelets, filter banks, or pyramid decompositions to separate these scales, enabling targeted analysis or filtering at each level.\n\nApplications in trading include: separating noise from signal at different timeframes, identifying regime changes that appear at specific scales, constructing indicators that adapt based on the dominant scale of price movement, and building multi-timeframe confirmation systems. The approach mirrors how traders naturally think about markets: \"what's the long-term trend, medium-term cycle, and short-term noise?\"\n\nCalculation:\nWavelet decomposition:\nx(t) = Σⱼ dⱼ(t) + aⱼ₍ₘₐₓ₎(t)\nwhere:\n- dⱼ(t) = detail coefficients at scale j (high frequency)\n- aⱼ(t) = approximation coefficients at scale j (low frequency)\n- j = 1,2,...,J scale levels\n\nFilter bank approach:\nH₀ = low-pass filter (approximation)\nH₁ = high-pass filter (detail)\nRecursive: aⱼ = H₀[aⱼ₋₁], dⱼ = H₁[aⱼ₋₁]\n\nScale factor: 2ʲ (dyadic) or custom\n\nImagine looking at a stock chart with multiple layers like a transparency stack: one layer shows only long-term trends (monthly/yearly), another shows medium swings (weekly), another shows daily moves, and the top layer has intraday noise. Multiresolution analysis automatically separates the price into these layers. You can then analyze each layer independently - maybe the long-term trend is up, the medium-term is sideways, and the short-term is noisy. This lets you match your trading style to your timeframe or require alignment across scales for higher-confidence signals.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Multiresolution_Signal_Processing.txt","hasFullInfo":true},{"id":404,"title":"Multiscale Entropy Analysis","filename":"Multiscale_Entropy_Analysis.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Scale-dependent complexity","overview":"A framework that computes entropy measures across multiple timescales by progressively coarse-graining the time series, revealing how complexity and predictability vary from short-term to long-term horizons. This multi-resolution approach distinguishes between different types of randomness: true noise (high entropy at all scales) versus complex structured dynamics (scale-dependent entropy).","formula":"The method works by creating multiple time series at different scales: scale 1 is the original data, scale 2 averages consecutive pairs, scale 3 averages consecutive triplets, and so on. Then entropy (typically Sample Entropy) is computed at each scale. Random noise shows high entropy at all scales, while complex structured systems show scale-dependent entropy patterns - lower at some scales (where patterns exist) and higher at others.\n\nIn trading, multiscale entropy reveals: whether apparent randomness is true noise or hidden structure, which timeframes contain the most predictable patterns, how market complexity changes across scales (micro vs macro structure), and whether current behavior is scale-appropriate for your strategy (day trading during a long-term trend might have different entropy profile than mean-reversion at that scale).\n\nCalculation:\nOriginal series: {x₁, x₂, ..., x_N}\n\nCoarse-graining at scale τ:\ny_j^(τ) = (1/τ) Σᵢ₌₍ⱼ₋₁₎τ₊₁^(jτ) x_i\nfor j = 1, 2, ..., floor(N/τ)\n\nFor each scale τ:\nCompute SampEn(y^(τ), m, r)\n\nResult: MSE curve\nPlot: SampEn vs scale τ\n\nInterpretation:\n- Flat high curve: uncorrelated noise\n- Increasing curve: long-range correlations\n- Decreasing curve: short-range correlations only\n- Complex curves: multi-scale structure\n\nTypical: 15-20 scales","parameters":"","intuition":"Think of this as checking whether your data is \"interesting random\" or \"boring random\" by looking at it through different zoom levels. True random noise (like coin flips) stays equally unpredictable whether you look at individual flips or groups of 10 flips - high entropy at all scales. But interesting systems (like financial markets) might be noisy at tick level (high entropy), structured at 5-minute level (low entropy, patterns exist), and noisy again at monthly level (high entropy). This tells you which timeframes have actual tradeable structure versus which are just noise, helping you match your trading frequency to where the actual signal lives.","rawContent":"A framework that computes entropy measures across multiple timescales by progressively coarse-graining the time series, revealing how complexity and predictability vary from short-term to long-term horizons. This multi-resolution approach distinguishes between different types of randomness: true noise (high entropy at all scales) versus complex structured dynamics (scale-dependent entropy).\n\nThe method works by creating multiple time series at different scales: scale 1 is the original data, scale 2 averages consecutive pairs, scale 3 averages consecutive triplets, and so on. Then entropy (typically Sample Entropy) is computed at each scale. Random noise shows high entropy at all scales, while complex structured systems show scale-dependent entropy patterns - lower at some scales (where patterns exist) and higher at others.\n\nIn trading, multiscale entropy reveals: whether apparent randomness is true noise or hidden structure, which timeframes contain the most predictable patterns, how market complexity changes across scales (micro vs macro structure), and whether current behavior is scale-appropriate for your strategy (day trading during a long-term trend might have different entropy profile than mean-reversion at that scale).\n\nCalculation:\nOriginal series: {x₁, x₂, ..., x_N}\n\nCoarse-graining at scale τ:\ny_j^(τ) = (1/τ) Σᵢ₌₍ⱼ₋₁₎τ₊₁^(jτ) x_i\nfor j = 1, 2, ..., floor(N/τ)\n\nFor each scale τ:\nCompute SampEn(y^(τ), m, r)\n\nResult: MSE curve\nPlot: SampEn vs scale τ\n\nInterpretation:\n- Flat high curve: uncorrelated noise\n- Increasing curve: long-range correlations\n- Decreasing curve: short-range correlations only\n- Complex curves: multi-scale structure\n\nTypical: 15-20 scales\n\nThink of this as checking whether your data is \"interesting random\" or \"boring random\" by looking at it through different zoom levels. True random noise (like coin flips) stays equally unpredictable whether you look at individual flips or groups of 10 flips - high entropy at all scales. But interesting systems (like financial markets) might be noisy at tick level (high entropy), structured at 5-minute level (low entropy, patterns exist), and noisy again at monthly level (high entropy). This tells you which timeframes have actual tradeable structure versus which are just noise, helping you match your trading frequency to where the actual signal lives.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Multiscale_Entropy_Analysis.txt","hasFullInfo":true},{"id":405,"title":"Mutual Information Filter","filename":"Mutual_Information_Filter.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Dependence measure","overview":"A nonlinear dependence measure that quantifies the amount of information shared between two random variables, detecting both linear and nonlinear relationships that correlation would miss. Mutual information measures how much knowing one variable reduces uncertainty about another, making it a more general and robust dependence measure than correlation.","formula":"Mutual information I(X;Y) equals zero if and only if X and Y are statistically independent, and increases with the strength of dependence regardless of whether that dependence is linear, monotonic, or more complex. Unlike correlation which only detects linear relationships and can be zero even when strong nonlinear dependence exists, MI captures all forms of statistical association.\n\nIn trading, MI is valuable for: feature selection (which indicators contain unique information about returns?), portfolio construction (find truly independent diversifiers, not just uncorrelated ones), regime detection (identify which variables predict regime shifts), and lead-lag analysis (measure information overlap between markets at different lags). It's particularly powerful for detecting complex dependencies in high-dimensional data.\n\nCalculation:\nContinuous variables:\nI(X;Y) = ∫∫ p(x,y) log [p(x,y) / (p(x)p(y))] dx dy\n\nDiscrete variables:\nI(X;Y) = Σ_x Σ_y p(x,y) log [p(x,y) / (p(x)p(y))]\n\nRelationship to entropy:\nI(X;Y) = H(X) + H(Y) - H(X,Y)\n      = H(X) - H(X|Y)\n      = reduction in uncertainty about X from knowing Y\n\nNormalized MI:\nNMI = I(X;Y) / min(H(X), H(Y)) ∈ [0,1]\n\nEstimation methods:\n- Histogram binning (simple but biased)\n- Kernel density estimation\n- k-nearest neighbors (Kraskov estimator)","parameters":"","intuition":"Think of mutual information as \"how much does knowing one thing tell you about another?\" If two variables are completely independent, knowing one tells you nothing (MI=0). If they're perfectly dependent, knowing one completely determines the other (MI=max). Critically, MI catches relationships that correlation misses: imagine returns that have zero correlation but a strong quadratic relationship (large moves always pair with large moves in either direction) - correlation is zero but MI is high. This makes MI the gold standard for finding which variables actually contain information about each other, regardless of how weird or nonlinear the relationship is.","rawContent":"A nonlinear dependence measure that quantifies the amount of information shared between two random variables, detecting both linear and nonlinear relationships that correlation would miss. Mutual information measures how much knowing one variable reduces uncertainty about another, making it a more general and robust dependence measure than correlation.\n\nMutual information I(X;Y) equals zero if and only if X and Y are statistically independent, and increases with the strength of dependence regardless of whether that dependence is linear, monotonic, or more complex. Unlike correlation which only detects linear relationships and can be zero even when strong nonlinear dependence exists, MI captures all forms of statistical association.\n\nIn trading, MI is valuable for: feature selection (which indicators contain unique information about returns?), portfolio construction (find truly independent diversifiers, not just uncorrelated ones), regime detection (identify which variables predict regime shifts), and lead-lag analysis (measure information overlap between markets at different lags). It's particularly powerful for detecting complex dependencies in high-dimensional data.\n\nCalculation:\nContinuous variables:\nI(X;Y) = ∫∫ p(x,y) log [p(x,y) / (p(x)p(y))] dx dy\n\nDiscrete variables:\nI(X;Y) = Σ_x Σ_y p(x,y) log [p(x,y) / (p(x)p(y))]\n\nRelationship to entropy:\nI(X;Y) = H(X) + H(Y) - H(X,Y)\n      = H(X) - H(X|Y)\n      = reduction in uncertainty about X from knowing Y\n\nNormalized MI:\nNMI = I(X;Y) / min(H(X), H(Y)) ∈ [0,1]\n\nEstimation methods:\n- Histogram binning (simple but biased)\n- Kernel density estimation\n- k-nearest neighbors (Kraskov estimator)\n\nThink of mutual information as \"how much does knowing one thing tell you about another?\" If two variables are completely independent, knowing one tells you nothing (MI=0). If they're perfectly dependent, knowing one completely determines the other (MI=max). Critically, MI catches relationships that correlation misses: imagine returns that have zero correlation but a strong quadratic relationship (large moves always pair with large moves in either direction) - correlation is zero but MI is high. This makes MI the gold standard for finding which variables actually contain information about each other, regardless of how weird or nonlinear the relationship is.","tags":["DSP Filtering","Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Mutual_Information_Filter.txt","hasFullInfo":true},{"id":406,"title":"Order Flow Imbalance (OFI) Filter","filename":"Order_Flow_Imbalance_OFI_Filter.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Buy/sell pressure","overview":"A microstructure-based predictor that measures the net change in liquidity at the best bid and ask levels over a time interval, capturing the relative aggressiveness of buyers versus sellers. OFI quantifies whether more liquidity is being added on the buy side or sell side, providing a direct measure of short-term supply/demand pressure.","formula":"Order Flow Imbalance is calculated by tracking every change to the limit order book and recording whether it represents buying pressure (new bid orders, cancelled ask orders) or selling pressure (new ask orders, cancelled bid orders). The net difference over an interval reveals which side is more aggressive in adding liquidity, which is predictive of near-term price movement in the direction of the imbalance.\n\nThis is more sophisticated than simple volume imbalance because it accounts for the limit order book dynamics: a large bid order appearing is buying pressure even before execution, while a large ask order being cancelled is also buying pressure (liquidity removed from the sell side). OFI is widely used in short-term price prediction models, optimal execution, and market making strategies.\n\nCalculation:\nFor each event e at time t:\n- Bid arrival at P_bid: +V_bid\n- Ask arrival at P_ask: -V_ask\n- Bid cancellation at P_bid: -V_bid\n- Ask cancellation at P_ask: +V_ask\n\nOFI over interval [t, t+Δt]:\nOFI_Δt = Σ_{events} signed volume changes\n\nNormalized OFI:\nOFI_norm = OFI_Δt / Total LOB depth\n\nPrice impact regression:\nΔP_{t,t+Δt} = β × OFI_Δt + ε\n\nTypically: β > 0, meaning positive OFI (buy pressure) → price increase\n\nExtensions:\n- Multi-level OFI (beyond best bid/ask)\n- Volume-weighted OFI\n- Decay-weighted (recent > distant)","parameters":"","intuition":"Think of OFI as measuring \"which side wants it more\" by watching the order book. If buyers keep adding big limit orders while sellers are canceling theirs, that's strong buying pressure even if no trades execute yet - the order book is tilting toward buyers. OFI captures this tilt. It's more predictive than just looking at executed trades because it sees the liquidity positioning before trades happen. If OFI is strongly positive (lots of buying pressure building up), price is likely to rise soon as that pressure gets relieved through trades. This is the raw material for short-term prediction in modern market microstructure.","rawContent":"A microstructure-based predictor that measures the net change in liquidity at the best bid and ask levels over a time interval, capturing the relative aggressiveness of buyers versus sellers. OFI quantifies whether more liquidity is being added on the buy side or sell side, providing a direct measure of short-term supply/demand pressure.\n\nOrder Flow Imbalance is calculated by tracking every change to the limit order book and recording whether it represents buying pressure (new bid orders, cancelled ask orders) or selling pressure (new ask orders, cancelled bid orders). The net difference over an interval reveals which side is more aggressive in adding liquidity, which is predictive of near-term price movement in the direction of the imbalance.\n\nThis is more sophisticated than simple volume imbalance because it accounts for the limit order book dynamics: a large bid order appearing is buying pressure even before execution, while a large ask order being cancelled is also buying pressure (liquidity removed from the sell side). OFI is widely used in short-term price prediction models, optimal execution, and market making strategies.\n\nCalculation:\nFor each event e at time t:\n- Bid arrival at P_bid: +V_bid\n- Ask arrival at P_ask: -V_ask\n- Bid cancellation at P_bid: -V_bid\n- Ask cancellation at P_ask: +V_ask\n\nOFI over interval [t, t+Δt]:\nOFI_Δt = Σ_{events} signed volume changes\n\nNormalized OFI:\nOFI_norm = OFI_Δt / Total LOB depth\n\nPrice impact regression:\nΔP_{t,t+Δt} = β × OFI_Δt + ε\n\nTypically: β > 0, meaning positive OFI (buy pressure) → price increase\n\nExtensions:\n- Multi-level OFI (beyond best bid/ask)\n- Volume-weighted OFI\n- Decay-weighted (recent > distant)\n\nThink of OFI as measuring \"which side wants it more\" by watching the order book. If buyers keep adding big limit orders while sellers are canceling theirs, that's strong buying pressure even if no trades execute yet - the order book is tilting toward buyers. OFI captures this tilt. It's more predictive than just looking at executed trades because it sees the liquidity positioning before trades happen. If OFI is strongly positive (lots of buying pressure building up), price is likely to rise soon as that pressure gets relieved through trades. This is the raw material for short-term prediction in modern market microstructure.","tags":["DSP Filtering","Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Order_Flow_Imbalance_OFI_Filter.txt","hasFullInfo":true},{"id":407,"title":"Packet Decomposition","filename":"Packet_Decomposition.txt","group":"group 18","groupNum":18,"categoryId":5,"categoryTitle":"5. WAVELET & MULTIRESOLUTION ANALYSIS","subcategory":"Decomposition Methods","summary":"Complete frequency decomposition","overview":"A complete binary tree decomposition that analyzes both approximation and detail coefficients at each level, providing a full frequency partition of the signal rather than just octave bands. This creates 2^J equal-width frequency bands at level J, offering much finer frequency resolution than standard wavelet decomposition which only splits the low-frequency portion.","formula":"Standard wavelet decomposition recursively splits only the approximation (low-frequency) component, creating octave-spaced frequency bands that have high resolution at low frequencies and low resolution at high frequencies. Wavelet packet decomposition instead splits both branches at each level, creating a complete binary tree where the leaves represent a full partition of the frequency domain into equal-bandwidth channels.\n\nFor trading, this enables precise frequency-domain analysis: identifying the exact frequency band of market cycles, detecting regime shifts visible only in specific narrow frequency ranges, or building adaptive filters that target particular cycle periods. It's especially powerful for cycle analysis in markets with multiple competing periodicities (intraday patterns, daily cycles, weekly effects).\n\nCalculation:\nStandard wavelet tree (only split approximation):\nLevel 1: [A₁, D₁]\nLevel 2: [A₂, D₂, D₁]\nLevel 3: [A₃, D₃, D₂, D₁]\n\nPacket tree (split both branches):\nLevel 1: [A₁, D₁]\nLevel 2: [AA₂, DA₂, AD₂, DD₂]\nLevel 3: [AAA₃, DAA₃, ADA₃, DDA₃, AAD₃, DAD₃, ADD₃, DDD₃]\n\nAt level J: 2^J nodes, each covering frequency band:\n[k·fs/2^(J+1), (k+1)·fs/2^(J+1)] for k=0,1,...,2^J-1\n\nShannon entropy selection for best basis:\nCost = -Σ p_i log(p_i) where p_i = |c_i|²/||c||²","parameters":"","intuition":"Think of standard wavelets as repeatedly zooming in on the slow-moving parts of your data (like focusing only on longer-term trends), while packet decomposition zooms in everywhere equally, giving you a complete frequency spectrum divided into equal slices. If market cycles could be at 7 bars, 12 bars, or 19 bars, standard wavelets might lump them together, but packet decomposition can isolate each precisely. It's like having a spectrum analyzer for your trading data - you can see exactly which frequencies (cycle lengths) contain the real patterns and which ones are just noise.","rawContent":"A complete binary tree decomposition that analyzes both approximation and detail coefficients at each level, providing a full frequency partition of the signal rather than just octave bands. This creates 2^J equal-width frequency bands at level J, offering much finer frequency resolution than standard wavelet decomposition which only splits the low-frequency portion.\n\nStandard wavelet decomposition recursively splits only the approximation (low-frequency) component, creating octave-spaced frequency bands that have high resolution at low frequencies and low resolution at high frequencies. Wavelet packet decomposition instead splits both branches at each level, creating a complete binary tree where the leaves represent a full partition of the frequency domain into equal-bandwidth channels.\n\nFor trading, this enables precise frequency-domain analysis: identifying the exact frequency band of market cycles, detecting regime shifts visible only in specific narrow frequency ranges, or building adaptive filters that target particular cycle periods. It's especially powerful for cycle analysis in markets with multiple competing periodicities (intraday patterns, daily cycles, weekly effects).\n\nCalculation:\nStandard wavelet tree (only split approximation):\nLevel 1: [A₁, D₁]\nLevel 2: [A₂, D₂, D₁]\nLevel 3: [A₃, D₃, D₂, D₁]\n\nPacket tree (split both branches):\nLevel 1: [A₁, D₁]\nLevel 2: [AA₂, DA₂, AD₂, DD₂]\nLevel 3: [AAA₃, DAA₃, ADA₃, DDA₃, AAD₃, DAD₃, ADD₃, DDD₃]\n\nAt level J: 2^J nodes, each covering frequency band:\n[k·fs/2^(J+1), (k+1)·fs/2^(J+1)] for k=0,1,...,2^J-1\n\nShannon entropy selection for best basis:\nCost = -Σ p_i log(p_i) where p_i = |c_i|²/||c||²\n\nThink of standard wavelets as repeatedly zooming in on the slow-moving parts of your data (like focusing only on longer-term trends), while packet decomposition zooms in everywhere equally, giving you a complete frequency spectrum divided into equal slices. If market cycles could be at 7 bars, 12 bars, or 19 bars, standard wavelets might lump them together, but packet decomposition can isolate each precisely. It's like having a spectrum analyzer for your trading data - you can see exactly which frequencies (cycle lengths) contain the real patterns and which ones are just noise.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Packet_Decomposition.txt","hasFullInfo":true},{"id":408,"title":"Percentage of Volume (POV) Algorithm","filename":"Percentage_of_Volume_POV_Algorithm.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Participation rate strategy","overview":"An execution strategy that maintains a target participation rate in the market by trading a fixed percentage of observed market volume in real-time. If market volume increases, the algorithm trades more aggressively; if volume decreases, it backs off, creating an adaptive execution that scales with market liquidity.","formula":"POV algorithms set a target participation rate (e.g., 10% of volume) and continuously adjust trading to maintain this rate. If the market trades 1,000 shares in the last interval and your target is 10%, you trade 100 shares. This creates natural adaptation: you trade more during high-volume periods (when impact is lower) and less during thin periods (when impact would be higher), while maintaining consistent market presence.\n\nThe key advantage is liquidity matching - you're never trading too aggressively for market conditions because your trading scales with actual liquidity. The challenge is uncertain completion time: if volume is lower than expected, you may not complete your order. POV is ideal when completion time is flexible but minimizing market impact is critical, or when volume is highly variable and unpredictable.\n\nCalculation:\nTarget participation rate: r (e.g., 0.10 for 10%)\nMarket volume in interval t: V_t\nYour trade size in interval t: Q_t = r × V_t\n\nConstraints:\nQ_t ≤ Q_remaining  [can't trade more than you need]\nQ_t ≤ Q_max  [max order size per interval]\n\nAdaptive participation:\nif falling behind schedule: r_t = r × (1 + urgency adjustment)\nif ahead of schedule: r_t = r × (1 - urgency adjustment)\n\nTotal volume uncertainty:\nE[Completion time] = Q_total / (r × E[daily volume])\nBut actual completion time is random","parameters":"","intuition":"Think of POV as cruise control for trading that adapts to traffic: you set a target like \"I want to be 10% of the market\" and then you automatically speed up when the market is active and slow down when it's quiet. Heavy volume morning? You trade more. Slow lunchtime? You ease off. This keeps your market impact roughly constant because you're always the same fraction of what's happening, never overwhelming the available liquidity. The downside is you don't know exactly when you'll finish - if the market is quieter than expected, you might take longer than planned. Great for patient traders who want to blend in with the flow.","rawContent":"An execution strategy that maintains a target participation rate in the market by trading a fixed percentage of observed market volume in real-time. If market volume increases, the algorithm trades more aggressively; if volume decreases, it backs off, creating an adaptive execution that scales with market liquidity.\n\nPOV algorithms set a target participation rate (e.g., 10% of volume) and continuously adjust trading to maintain this rate. If the market trades 1,000 shares in the last interval and your target is 10%, you trade 100 shares. This creates natural adaptation: you trade more during high-volume periods (when impact is lower) and less during thin periods (when impact would be higher), while maintaining consistent market presence.\n\nThe key advantage is liquidity matching - you're never trading too aggressively for market conditions because your trading scales with actual liquidity. The challenge is uncertain completion time: if volume is lower than expected, you may not complete your order. POV is ideal when completion time is flexible but minimizing market impact is critical, or when volume is highly variable and unpredictable.\n\nCalculation:\nTarget participation rate: r (e.g., 0.10 for 10%)\nMarket volume in interval t: V_t\nYour trade size in interval t: Q_t = r × V_t\n\nConstraints:\nQ_t ≤ Q_remaining  [can't trade more than you need]\nQ_t ≤ Q_max  [max order size per interval]\n\nAdaptive participation:\nif falling behind schedule: r_t = r × (1 + urgency adjustment)\nif ahead of schedule: r_t = r × (1 - urgency adjustment)\n\nTotal volume uncertainty:\nE[Completion time] = Q_total / (r × E[daily volume])\nBut actual completion time is random\n\nThink of POV as cruise control for trading that adapts to traffic: you set a target like \"I want to be 10% of the market\" and then you automatically speed up when the market is active and slow down when it's quiet. Heavy volume morning? You trade more. Slow lunchtime? You ease off. This keeps your market impact roughly constant because you're always the same fraction of what's happening, never overwhelming the available liquidity. The downside is you don't know exactly when you'll finish - if the market is quieter than expected, you might take longer than planned. Great for patient traders who want to blend in with the flow.","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Percentage_of_Volume_POV_Algorithm.txt","hasFullInfo":true},{"id":409,"title":"Permutation Entropy","filename":"Permutation_Entropy.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Ordinal pattern entropy","overview":"A fast and robust complexity measure that analyzes the order patterns (permutations) in a time series rather than the actual values, making it insensitive to nonlinear monotonic transformations and outliers. It quantifies how many different ordinal patterns appear and how evenly they're distributed, providing a distribution-free measure of time series randomness.","formula":"Instead of looking at actual price values, permutation entropy looks at the order of consecutive values. For example, with embedding dimension 3, the pattern [1, 3, 2] means the second value is highest, first is lowest - that's one specific permutation. There are 3!=6 possible permutations for dimension 3. Permutation entropy measures whether all patterns appear equally (high entropy, random) or just a few dominate (low entropy, structured).\n\nThis approach is extremely robust to outliers, noise, and measurement errors because it only cares about relative ordering, not actual magnitudes. In trading, it's useful for: detecting regime changes (transitions from structured to random behavior), measuring market efficiency (efficient markets show higher permutation entropy), and adaptive strategy selection. It's also very fast to compute compared to other entropy measures.\n\nCalculation:","parameters":"Parameters:\n- m = embedding dimension (typically 3-7)\n- τ = time delay (typically 1)\n\nAlgorithm:\n1. Form embedded vectors: X_i = [x_i, x_{i+τ}, ..., x_{i+(m-1)τ}]\n2. Determine ordinal pattern (rank order) of each vector\n3. Count frequency of each permutation pattern: p_π\n4. Compute: H_p = -Σ p_π log(p_π)\n\nNormalization:\nH_p,norm = H_p / log(m!) ∈ [0,1]\n\nExample (m=3):\nPattern [10, 15, 12] → ranks [0,2,1] → permutation type \"small-large-medium\"\n\nInterpretation:\nH_p ≈ 0: one or few patterns dominate (highly structured)\nH_p ≈ 1: all patterns appear equally (random)","intuition":"Think of permutation entropy as only caring about \"what's the order of these moves?\" not \"how big are they?\" A sequence like \"up, down, up, down, up, down\" has low permutation entropy (one pattern repeating), even if the sizes vary wildly. A sequence like \"up, up, down, down, up, down, up, up, down\" has higher entropy (mixed patterns). This is super robust because outliers don't matter - a +10% move and a +100% move both count as \"up.\" Use it to detect when markets shift from orderly (trending, cyclic) to chaotic (random walk), and it's way faster to calculate than other entropy measures.","rawContent":"A fast and robust complexity measure that analyzes the order patterns (permutations) in a time series rather than the actual values, making it insensitive to nonlinear monotonic transformations and outliers. It quantifies how many different ordinal patterns appear and how evenly they're distributed, providing a distribution-free measure of time series randomness.\n\nInstead of looking at actual price values, permutation entropy looks at the order of consecutive values. For example, with embedding dimension 3, the pattern [1, 3, 2] means the second value is highest, first is lowest - that's one specific permutation. There are 3!=6 possible permutations for dimension 3. Permutation entropy measures whether all patterns appear equally (high entropy, random) or just a few dominate (low entropy, structured).\n\nThis approach is extremely robust to outliers, noise, and measurement errors because it only cares about relative ordering, not actual magnitudes. In trading, it's useful for: detecting regime changes (transitions from structured to random behavior), measuring market efficiency (efficient markets show higher permutation entropy), and adaptive strategy selection. It's also very fast to compute compared to other entropy measures.\n\nCalculation:\nParameters:\n- m = embedding dimension (typically 3-7)\n- τ = time delay (typically 1)\n\nAlgorithm:\n1. Form embedded vectors: X_i = [x_i, x_{i+τ}, ..., x_{i+(m-1)τ}]\n2. Determine ordinal pattern (rank order) of each vector\n3. Count frequency of each permutation pattern: p_π\n4. Compute: H_p = -Σ p_π log(p_π)\n\nNormalization:\nH_p,norm = H_p / log(m!) ∈ [0,1]\n\nExample (m=3):\nPattern [10, 15, 12] → ranks [0,2,1] → permutation type \"small-large-medium\"\n\nInterpretation:\nH_p ≈ 0: one or few patterns dominate (highly structured)\nH_p ≈ 1: all patterns appear equally (random)\n\nThink of permutation entropy as only caring about \"what's the order of these moves?\" not \"how big are they?\" A sequence like \"up, down, up, down, up, down\" has low permutation entropy (one pattern repeating), even if the sizes vary wildly. A sequence like \"up, up, down, down, up, down, up, up, down\" has higher entropy (mixed patterns). This is super robust because outliers don't matter - a +10% move and a +100% move both count as \"up.\" Use it to detect when markets shift from orderly (trending, cyclic) to chaotic (random walk), and it's way faster to calculate than other entropy measures.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Permutation_Entropy.txt","hasFullInfo":true},{"id":410,"title":"Pyramid Decomposition","filename":"Pyramid_Decomposition.txt","group":"group 18","groupNum":18,"categoryId":36,"categoryTitle":"36. MULTIRESOLUTION & MULTISCALE ANALYSIS","subcategory":"General","summary":"Hierarchical decomposition","overview":"A hierarchical multi-scale representation that progressively reduces resolution at each level, creating a pyramid structure where each level contains a smoother, lower-resolution version of the signal. Unlike wavelets which explicitly separate scales, pyramids represent the signal at multiple resolutions simultaneously, useful for coarse-to-fine analysis and efficient computation.","formula":"The pyramid approach builds multiple representations of the same signal, each at different resolutions: the base contains the original signal, level 1 is smoothed and subsampled, level 2 is further smoothed and subsampled from level 1, and so on. The Gaussian pyramid uses Gaussian smoothing before subsampling, while the Laplacian pyramid stores the differences between levels (prediction errors), enabling perfect reconstruction.\n\nIn trading, pyramid decomposition enables multi-scale trend analysis where you can quickly assess whether short-term, medium-term, and long-term trends align. It's computationally efficient for real-time applications since you can stop at any level without computing the full decomposition, and it naturally handles non-stationary data where the dominant timescale changes over time.\n\nCalculation:\nGaussian Pyramid (smoothed subsampled versions):\nG₀ = x(t)  [original signal]\nGⱼ = downsample(blur(Gⱼ₋₁, h), 2)\nwhere h is Gaussian kernel: h = [1, 4, 6, 4, 1]/16\n\nLaplacian Pyramid (difference of Gaussians):\nLⱼ = Gⱼ - upsample(Gⱼ₊₁)\nReconstruction: G₀ = Σⱼ Lⱼ\n\nSize reduction: Each level is 1/4 the size (2D) or 1/2 (1D)\n\nApplications:\n- Multi-scale trend detection (align across pyramid)\n- Coarse-to-fine search (start at top, refine downward)\n- Feature extraction at multiple scales\n\nImagine taking a price chart and creating progressively blurrier and smaller copies: the original detailed chart, then a smoothed version at half resolution, then an even smoother quarter-resolution version, and so on, stacking them like a pyramid. Each level shows different timescale patterns: the top (smallest) shows only major trends, middle levels show intermediate swings, bottom (largest) shows all detail. You can quickly check if trends align by looking at corresponding points in different pyramid levels. It's computationally cheap and great for getting the \"big picture to fine detail\" view of market structure.","parameters":"","intuition":"","rawContent":"A hierarchical multi-scale representation that progressively reduces resolution at each level, creating a pyramid structure where each level contains a smoother, lower-resolution version of the signal. Unlike wavelets which explicitly separate scales, pyramids represent the signal at multiple resolutions simultaneously, useful for coarse-to-fine analysis and efficient computation.\n\nThe pyramid approach builds multiple representations of the same signal, each at different resolutions: the base contains the original signal, level 1 is smoothed and subsampled, level 2 is further smoothed and subsampled from level 1, and so on. The Gaussian pyramid uses Gaussian smoothing before subsampling, while the Laplacian pyramid stores the differences between levels (prediction errors), enabling perfect reconstruction.\n\nIn trading, pyramid decomposition enables multi-scale trend analysis where you can quickly assess whether short-term, medium-term, and long-term trends align. It's computationally efficient for real-time applications since you can stop at any level without computing the full decomposition, and it naturally handles non-stationary data where the dominant timescale changes over time.\n\nCalculation:\nGaussian Pyramid (smoothed subsampled versions):\nG₀ = x(t)  [original signal]\nGⱼ = downsample(blur(Gⱼ₋₁, h), 2)\nwhere h is Gaussian kernel: h = [1, 4, 6, 4, 1]/16\n\nLaplacian Pyramid (difference of Gaussians):\nLⱼ = Gⱼ - upsample(Gⱼ₊₁)\nReconstruction: G₀ = Σⱼ Lⱼ\n\nSize reduction: Each level is 1/4 the size (2D) or 1/2 (1D)\n\nApplications:\n- Multi-scale trend detection (align across pyramid)\n- Coarse-to-fine search (start at top, refine downward)\n- Feature extraction at multiple scales\n\nImagine taking a price chart and creating progressively blurrier and smaller copies: the original detailed chart, then a smoothed version at half resolution, then an even smoother quarter-resolution version, and so on, stacking them like a pyramid. Each level shows different timescale patterns: the top (smallest) shows only major trends, middle levels show intermediate swings, bottom (largest) shows all detail. You can quickly check if trends align by looking at corresponding points in different pyramid levels. It's computationally cheap and great for getting the \"big picture to fine detail\" view of market structure.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Pyramid_Decomposition.txt","hasFullInfo":true},{"id":411,"title":"Quantized Multiscale Decomposition","filename":"Quantized_Multiscale_Decomposition.txt","group":"group 18","groupNum":18,"categoryId":36,"categoryTitle":"36. MULTIRESOLUTION & MULTISCALE ANALYSIS","subcategory":"General","summary":"Market-calibrated scales","overview":"A practical adaptation of multiresolution analysis that uses discrete, market-calibrated time scales rather than continuous or purely mathematical scales. Instead of arbitrary dyadic scales (1, 2, 4, 8, 16...), it uses scales meaningful to traders like 5-minute, hourly, daily, weekly timeframes, making the decomposition directly interpretable for trading decisions.","formula":"Standard wavelet decompositions use powers of two for mathematical convenience, but traders think in terms of market-specific periods: a day has specific open/close times, a week has 5 trading days, a month has roughly 21 trading days. Quantized decomposition aligns scales with these natural market boundaries, and can even account for different liquidity regimes (e.g., separating overnight from RTH sessions, or handling 24/7 crypto markets).\n\nThis approach is particularly valuable for building multi-timeframe trading systems where you need daily trend alignment with hourly entry signals, or for risk models that decompose volatility into intraday, daily, and weekly components. The quantization also handles irregular spacing (weekends, holidays) better than pure mathematical wavelets.\n\nCalculation:\nDefine scale set Q = {s₁, s₂, ..., sₘ}\nExample: Q = {5min, 15min, 1h, 4h, 1d, 1w}\n\nFor each scale sⱼ:\nLⱼ = low-pass filter with cutoff ∝ 1/sⱼ\nDⱼ = bandpass between sⱼ and sⱼ₊₁\n\nDecomposition:\nx(t) = Σⱼ Dⱼ[x(t)] + L_M[x(t)]\n\nScale selection criteria:\n- Trading session boundaries (RTH vs overnight)\n- Market microstructure (bid-ask bounce period)\n- Liquidity cycles (opening hour, lunch, close)\n- Information arrival rates (news cycles)","parameters":"","intuition":"Imagine decomposing price movement into specific trading-relevant chunks: noise from bid-ask bounce (seconds), HFT activity (minutes), retail trader decisions (hours), institutional positioning (days), and fund flows (weeks). Instead of using mathematically clean but arbitrary scales, you use the actual periods that matter in markets. A daily trader can see the daily trend, the 4-hour swing, and the 15-minute entry signal as separate components. It's like having zoom levels on a map that snap to useful landmarks (city, neighborhood, street) rather than arbitrary mathematical intervals.","rawContent":"A practical adaptation of multiresolution analysis that uses discrete, market-calibrated time scales rather than continuous or purely mathematical scales. Instead of arbitrary dyadic scales (1, 2, 4, 8, 16...), it uses scales meaningful to traders like 5-minute, hourly, daily, weekly timeframes, making the decomposition directly interpretable for trading decisions.\n\nStandard wavelet decompositions use powers of two for mathematical convenience, but traders think in terms of market-specific periods: a day has specific open/close times, a week has 5 trading days, a month has roughly 21 trading days. Quantized decomposition aligns scales with these natural market boundaries, and can even account for different liquidity regimes (e.g., separating overnight from RTH sessions, or handling 24/7 crypto markets).\n\nThis approach is particularly valuable for building multi-timeframe trading systems where you need daily trend alignment with hourly entry signals, or for risk models that decompose volatility into intraday, daily, and weekly components. The quantization also handles irregular spacing (weekends, holidays) better than pure mathematical wavelets.\n\nCalculation:\nDefine scale set Q = {s₁, s₂, ..., sₘ}\nExample: Q = {5min, 15min, 1h, 4h, 1d, 1w}\n\nFor each scale sⱼ:\nLⱼ = low-pass filter with cutoff ∝ 1/sⱼ\nDⱼ = bandpass between sⱼ and sⱼ₊₁\n\nDecomposition:\nx(t) = Σⱼ Dⱼ[x(t)] + L_M[x(t)]\n\nScale selection criteria:\n- Trading session boundaries (RTH vs overnight)\n- Market microstructure (bid-ask bounce period)\n- Liquidity cycles (opening hour, lunch, close)\n- Information arrival rates (news cycles)\n\nImagine decomposing price movement into specific trading-relevant chunks: noise from bid-ask bounce (seconds), HFT activity (minutes), retail trader decisions (hours), institutional positioning (days), and fund flows (weeks). Instead of using mathematically clean but arbitrary scales, you use the actual periods that matter in markets. A daily trader can see the daily trend, the 4-hour swing, and the 15-minute entry signal as separate components. It's like having zoom levels on a map that snap to useful landmarks (city, neighborhood, street) rather than arbitrary mathematical intervals.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Quantized_Multiscale_Decomposition.txt","hasFullInfo":true},{"id":412,"title":"Regularized M-Estimators of Scatter Matrix","filename":"Regularized_M-Estimators_of_Scatter_Matrix.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Robust covariance","overview":"An M-estimator of scatter is a robust alternative to the sample covariance matrix that downweights the influence of outliers in multivariate data. The regularized version adds a shrinkage penalty to stabilize the estimation when dealing with high-dimensional data or limited sample sizes, preventing ill-conditioned or singular covariance matrices.","formula":"Traditional covariance matrices are highly sensitive to outliers - a single extreme observation can drastically distort the entire structure. M-estimators use a weight function that reduces the contribution of observations far from the center, making the scatter estimate more resistant to contamination. Regularization further improves the estimate by shrinking eigenvalues toward a target structure, typically the identity matrix or a diagonal matrix.\n\nThe regularized M-estimator solves an optimization problem that balances two objectives: fitting the data according to a robust loss function (the M-estimator criterion) and staying close to a regularization target. Common choices include Huber's loss function or Tukey's bisquare function combined with ridge-type or graphical lasso penalties.\n\nCalculation:\nΣ_M = argmin_Σ { Σ_i ρ(d_i^2) + λ ||Σ - Σ_0||^2 }","parameters":"where:\n- ρ(·) is a robust loss function (e.g., Huber or Tukey)\n- d_i^2 = (x_i - μ)^T Σ^(-1) (x_i - μ) is the Mahalanobis distance\n- λ is the regularization parameter\n- Σ_0 is the target matrix (often identity or diagonal)\n- Solved iteratively using reweighted least squares","intuition":"Think of this as calculating how variables move together (correlation structure), but with two smart protections: first, it ignores crazy outlier days that would normally throw off your calculations, and second, it prevents overfitting by gently pulling the estimates toward something stable and sensible. It's like measuring how stocks co-move, but wearing protective glasses against data contamination and using guardrails to keep estimates reasonable.","rawContent":"An M-estimator of scatter is a robust alternative to the sample covariance matrix that downweights the influence of outliers in multivariate data. The regularized version adds a shrinkage penalty to stabilize the estimation when dealing with high-dimensional data or limited sample sizes, preventing ill-conditioned or singular covariance matrices.\n\nTraditional covariance matrices are highly sensitive to outliers - a single extreme observation can drastically distort the entire structure. M-estimators use a weight function that reduces the contribution of observations far from the center, making the scatter estimate more resistant to contamination. Regularization further improves the estimate by shrinking eigenvalues toward a target structure, typically the identity matrix or a diagonal matrix.\n\nThe regularized M-estimator solves an optimization problem that balances two objectives: fitting the data according to a robust loss function (the M-estimator criterion) and staying close to a regularization target. Common choices include Huber's loss function or Tukey's bisquare function combined with ridge-type or graphical lasso penalties.\n\nCalculation:\nΣ_M = argmin_Σ { Σ_i ρ(d_i^2) + λ ||Σ - Σ_0||^2 }\nwhere:\n- ρ(·) is a robust loss function (e.g., Huber or Tukey)\n- d_i^2 = (x_i - μ)^T Σ^(-1) (x_i - μ) is the Mahalanobis distance\n- λ is the regularization parameter\n- Σ_0 is the target matrix (often identity or diagonal)\n- Solved iteratively using reweighted least squares\n\nThink of this as calculating how variables move together (correlation structure), but with two smart protections: first, it ignores crazy outlier days that would normally throw off your calculations, and second, it prevents overfitting by gently pulling the estimates toward something stable and sensible. It's like measuring how stocks co-move, but wearing protective glasses against data contamination and using guardrails to keep estimates reasonable.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 18/Regularized_M-Estimators_of_Scatter_Matrix.txt","hasFullInfo":true},{"id":413,"title":"Regularized Tyler's Scatter Estimator","filename":"Regularized_Tylers_Scatter_Estimator.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Heavy-tailed robust estimation","overview":"Tyler's M-estimator of scatter is a distribution-free robust estimator that is optimal for heavy-tailed elliptical distributions. The regularized version adds constraints to ensure well-conditioned estimates in high-dimensional or small-sample scenarios, making it practical for financial applications where fat tails and limited data are common.","formula":"Tyler's estimator achieves robustness by normalizing each observation to unit length before computing the scatter matrix, effectively removing the influence of extreme radial distances. This makes it particularly powerful against outliers with large magnitudes, which are common in financial returns during market stress. The estimator is defined only up to a scalar multiple, focusing purely on the shape of the distribution rather than its scale.\n\nRegularization is essential because Tyler's estimator can be unstable or undefined when the sample size is small relative to the dimension, or when variables are nearly collinear. Adding a ridge penalty or constraining the condition number ensures the estimator remains invertible and numerically stable, which is critical for portfolio optimization and risk management applications.\n\nCalculation:\nΣ_Tyler = (d/n) Σ_i (x_i - μ)(x_i - μ)^T / [(x_i - μ)^T Σ^(-1) (x_i - μ)]\nRegularized version:\nΣ_reg = argmin_Σ { -log|Σ| + tr(V Σ^(-1)) + λ ||Σ - γI||_F^2 }","parameters":"where:\n- V = (d/n) Σ_i (x_i x_i^T) / ||x_i||_Σ^2\n- d = number of dimensions\n- λ = regularization parameter\n- γ = scale parameter\n- Solved via fixed-point iteration with regularization step","intuition":"Think of this as measuring how stocks move together, but first stretching or shrinking each day's moves to the same size before comparing directions. This prevents single massive outlier days from dominating the calculation - a 50% crash and a 5% drop both get equal weight in determining the relationship pattern. The regularization part keeps the math stable when you don't have tons of data or when some stocks are highly correlated.","rawContent":"Tyler's M-estimator of scatter is a distribution-free robust estimator that is optimal for heavy-tailed elliptical distributions. The regularized version adds constraints to ensure well-conditioned estimates in high-dimensional or small-sample scenarios, making it practical for financial applications where fat tails and limited data are common.\n\nTyler's estimator achieves robustness by normalizing each observation to unit length before computing the scatter matrix, effectively removing the influence of extreme radial distances. This makes it particularly powerful against outliers with large magnitudes, which are common in financial returns during market stress. The estimator is defined only up to a scalar multiple, focusing purely on the shape of the distribution rather than its scale.\n\nRegularization is essential because Tyler's estimator can be unstable or undefined when the sample size is small relative to the dimension, or when variables are nearly collinear. Adding a ridge penalty or constraining the condition number ensures the estimator remains invertible and numerically stable, which is critical for portfolio optimization and risk management applications.\n\nCalculation:\nΣ_Tyler = (d/n) Σ_i (x_i - μ)(x_i - μ)^T / [(x_i - μ)^T Σ^(-1) (x_i - μ)]\nRegularized version:\nΣ_reg = argmin_Σ { -log|Σ| + tr(V Σ^(-1)) + λ ||Σ - γI||_F^2 }\nwhere:\n- V = (d/n) Σ_i (x_i x_i^T) / ||x_i||_Σ^2\n- d = number of dimensions\n- λ = regularization parameter\n- γ = scale parameter\n- Solved via fixed-point iteration with regularization step\n\nThink of this as measuring how stocks move together, but first stretching or shrinking each day's moves to the same size before comparing directions. This prevents single massive outlier days from dominating the calculation - a 50% crash and a 5% drop both get equal weight in determining the relationship pattern. The regularization part keeps the math stable when you don't have tons of data or when some stocks are highly correlated.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Regularized_Tylers_Scatter_Estimator.txt","hasFullInfo":true},{"id":414,"title":"Risk Parity Portfolio Optimization","filename":"Risk_Parity_Portfolio_Optimization.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Equal risk contribution","overview":"A portfolio construction approach that allocates capital such that each asset contributes equally to the total portfolio risk, rather than equalizing dollar amounts or expected returns. This ensures diversification at the risk level, preventing high-volatility assets from dominating the portfolio's risk profile regardless of their allocation weight.","formula":"Traditional portfolios often concentrate risk in a few volatile assets even when weights seem diversified - a portfolio with equal weights in stocks and bonds is actually ~90% equity risk because stocks are much more volatile. Risk parity solves this by inverse-weighting volatility: lower-volatility assets get larger allocations to equalize their risk contribution, often combined with leverage to achieve target return levels.\n\nThe core principle is that each asset i should contribute 1/N of the total portfolio variance, where N is the number of assets. This typically means large allocations to low-volatility assets (bonds, utilities) and small allocations to high-volatility assets (emerging markets, tech stocks). The approach has gained popularity in institutional investing as it provides more consistent risk exposure across market regimes than traditional mean-variance optimization.\n\nCalculation:\nRisk contribution of asset i:\nRC_i = w_i × (Σw)_i = w_i × Σⱼ w_j σ_ij\nwhere σ_ij is covariance between assets i and j\n\nRisk parity condition:\nRC_i = RC_j for all i, j\nEquivalently: w_i × (Σw)_i = σ²_p / N\n\nIterative solution:\nw_i^(k+1) = w_i^(k) × (σ²_p/N) / RC_i^(k)\nThen normalize: w = w / Σw\n\nAlternative: w_i ∝ 1/σ_i (approximation for uncorrelated assets)","parameters":"","intuition":"Think of building a portfolio where instead of giving each investment equal money, you give each one equal \"risk responsibility.\" If stocks are super volatile and bonds are calm, you'd hold way more bonds than stocks so that when things get crazy, both contribute equally to your sleepless nights. It's like balancing a seesaw not by equal weight on each side, but by adjusting positions so each side has equal leverage. This prevents your portfolio from being secretly dominated by just the risky stuff, giving you more stable and predictable risk exposure regardless of market conditions.","rawContent":"A portfolio construction approach that allocates capital such that each asset contributes equally to the total portfolio risk, rather than equalizing dollar amounts or expected returns. This ensures diversification at the risk level, preventing high-volatility assets from dominating the portfolio's risk profile regardless of their allocation weight.\n\nTraditional portfolios often concentrate risk in a few volatile assets even when weights seem diversified - a portfolio with equal weights in stocks and bonds is actually ~90% equity risk because stocks are much more volatile. Risk parity solves this by inverse-weighting volatility: lower-volatility assets get larger allocations to equalize their risk contribution, often combined with leverage to achieve target return levels.\n\nThe core principle is that each asset i should contribute 1/N of the total portfolio variance, where N is the number of assets. This typically means large allocations to low-volatility assets (bonds, utilities) and small allocations to high-volatility assets (emerging markets, tech stocks). The approach has gained popularity in institutional investing as it provides more consistent risk exposure across market regimes than traditional mean-variance optimization.\n\nCalculation:\nRisk contribution of asset i:\nRC_i = w_i × (Σw)_i = w_i × Σⱼ w_j σ_ij\nwhere σ_ij is covariance between assets i and j\n\nRisk parity condition:\nRC_i = RC_j for all i, j\nEquivalently: w_i × (Σw)_i = σ²_p / N\n\nIterative solution:\nw_i^(k+1) = w_i^(k) × (σ²_p/N) / RC_i^(k)\nThen normalize: w = w / Σw\n\nAlternative: w_i ∝ 1/σ_i (approximation for uncorrelated assets)\n\nThink of building a portfolio where instead of giving each investment equal money, you give each one equal \"risk responsibility.\" If stocks are super volatile and bonds are calm, you'd hold way more bonds than stocks so that when things get crazy, both contribute equally to your sleepless nights. It's like balancing a seesaw not by equal weight on each side, but by adjusting positions so each side has equal leverage. This prevents your portfolio from being secretly dominated by just the risky stuff, giving you more stable and predictable risk exposure regardless of market conditions.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Risk_Parity_Portfolio_Optimization.txt","hasFullInfo":true},{"id":415,"title":"Robust Portfolio Optimization","filename":"Robust_Portfolio_Optimization.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Uncertainty-robust allocation","overview":"A portfolio construction framework that explicitly accounts for uncertainty in parameter estimates (returns, covariances) by optimizing for the worst-case scenario within a range of plausible parameter values. Instead of assuming point estimates are correct, robust optimization protects against estimation errors by seeking portfolios that perform reasonably well even when estimates are wrong.","formula":"Traditional optimization treats parameter estimates as known with certainty, leading to portfolios that are optimal only if estimates are exactly correct - which they never are. Robust optimization defines uncertainty sets around parameter estimates (e.g., \"expected return of stock X is between 8-12% with 95% confidence\") and finds the portfolio that maximizes return or minimizes risk in the worst-case realization within these sets.\n\nThis approach leads to more diversified, stable portfolios that sacrifice some upside potential in the best-case scenario for protection against downside in the worst-case. The size of uncertainty sets controls the trade-off between robustness and performance: larger sets mean more conservative portfolios. Robust optimization is particularly valuable when estimation uncertainty is high or when downside protection is paramount.\n\nCalculation:\nUncertainty set for expected returns:\nU_μ = {μ : ||μ - μ̂||₂ ≤ ρ}  [ellipsoidal]\nor U_μ = {μ : ||μ - μ̂||_∞ ≤ ρ}  [box]\n\nRobust mean-variance:\nmaximize min_{μ ∈ U_μ} [w^T μ - (λ/2) w^T Σ w]\n\nWorst-case covariance:\nU_Σ = {Σ : ||Σ - Σ̂||_F ≤ δ}\n\nReformulation (ellipsoidal uncertainty):\nmaximize w^T μ̂ - κ√(w^T Θ w) - (λ/2) w^T Σ̂ w\nwhere κ controls robustness level, Θ captures uncertainty structure","parameters":"","intuition":"Think of this as portfolio optimization for pessimists - in a smart way. Instead of assuming your return forecasts are perfect (they're not), you say \"I think stock A will return 10%, but it could be anywhere from 7-13%.\" Then you find a portfolio that does okay even in the worst version of reality within those ranges. Yes, you might miss some upside if your best-case estimates are right, but you won't get destroyed if they're wrong. It's like packing an umbrella when there's a 30% chance of rain - you optimize for the worst case within reason. The result is portfolios that are more diversified and stable because they don't rely on your most optimistic (and likely overconfident) estimates being exactly right.","rawContent":"A portfolio construction framework that explicitly accounts for uncertainty in parameter estimates (returns, covariances) by optimizing for the worst-case scenario within a range of plausible parameter values. Instead of assuming point estimates are correct, robust optimization protects against estimation errors by seeking portfolios that perform reasonably well even when estimates are wrong.\n\nTraditional optimization treats parameter estimates as known with certainty, leading to portfolios that are optimal only if estimates are exactly correct - which they never are. Robust optimization defines uncertainty sets around parameter estimates (e.g., \"expected return of stock X is between 8-12% with 95% confidence\") and finds the portfolio that maximizes return or minimizes risk in the worst-case realization within these sets.\n\nThis approach leads to more diversified, stable portfolios that sacrifice some upside potential in the best-case scenario for protection against downside in the worst-case. The size of uncertainty sets controls the trade-off between robustness and performance: larger sets mean more conservative portfolios. Robust optimization is particularly valuable when estimation uncertainty is high or when downside protection is paramount.\n\nCalculation:\nUncertainty set for expected returns:\nU_μ = {μ : ||μ - μ̂||₂ ≤ ρ}  [ellipsoidal]\nor U_μ = {μ : ||μ - μ̂||_∞ ≤ ρ}  [box]\n\nRobust mean-variance:\nmaximize min_{μ ∈ U_μ} [w^T μ - (λ/2) w^T Σ w]\n\nWorst-case covariance:\nU_Σ = {Σ : ||Σ - Σ̂||_F ≤ δ}\n\nReformulation (ellipsoidal uncertainty):\nmaximize w^T μ̂ - κ√(w^T Θ w) - (λ/2) w^T Σ̂ w\nwhere κ controls robustness level, Θ captures uncertainty structure\n\nThink of this as portfolio optimization for pessimists - in a smart way. Instead of assuming your return forecasts are perfect (they're not), you say \"I think stock A will return 10%, but it could be anywhere from 7-13%.\" Then you find a portfolio that does okay even in the worst version of reality within those ranges. Yes, you might miss some upside if your best-case estimates are right, but you won't get destroyed if they're wrong. It's like packing an umbrella when there's a 30% chance of rain - you optimize for the worst case within reason. The result is portfolios that are more diversified and stable because they don't rely on your most optimistic (and likely overconfident) estimates being exactly right.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Robust_Portfolio_Optimization.txt","hasFullInfo":true},{"id":416,"title":"S-Estimators","filename":"S-Estimators.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Regression-scale equivariant","overview":"A class of robust regression estimators that achieve high breakdown points by minimizing a robust scale measure of the residuals rather than the sum of squared residuals. S-estimators balance robustness (resistance to outliers) with efficiency (performance on clean data) by choosing parameters that control the trade-off between these properties.","formula":"The \"S\" stands for \"scale\" because these estimators are defined by finding regression coefficients that minimize a robust scale statistic of the residuals, typically the M-estimate of scale. This approach ensures regression-scale equivariance: if you multiply the response variable by a constant, the scale estimate changes proportionally. S-estimators can achieve breakdown points up to 50% while maintaining relatively high efficiency (70-95%) under normal conditions.\n\nThe key feature distinguishing S-estimators from other robust methods is their use of a redescending ρ function (like Tukey's bisquare) in the scale estimation, which provides the high breakdown point, combined with careful tuning to maintain efficiency. This makes them particularly suitable for regression problems where both robustness and statistical efficiency matter.\n\nCalculation:\nβ_S = argmin_β s(r₁,...,rₙ)\nwhere s satisfies:\n(1/n) Σᵢ ρ(rᵢ/s) = δ\nCommon ρ functions:\n- Tukey's bisquare with c tuned for efficiency\n- Optimal ρ for 50% breakdown: ρ(r) = min(r², 3.25²)\nδ = E_Φ[ρ(Z)] ≈ 0.5 for 50% breakdown\nProperties:\n- Breakdown point: up to 50%\n- Efficiency: 70-95% depending on ρ\n- Equivariant under scale transformations","parameters":"","intuition":"Think of S-estimators as finding a regression line by asking \"which line makes the spread of errors as small as possible when measured robustly?\" instead of the usual \"which line makes the sum of squared errors smallest?\" The robust spread measurement automatically downweights or ignores outliers. It's like fitting a trendline by finding the one that keeps the typical error small, where \"typical\" means ignoring the crazy outliers. You get both strong outlier resistance (can handle up to 50% bad data) and decent accuracy on normal data - a good all-around choice when you need robustness but don't want to sacrifice too much precision.","rawContent":"A class of robust regression estimators that achieve high breakdown points by minimizing a robust scale measure of the residuals rather than the sum of squared residuals. S-estimators balance robustness (resistance to outliers) with efficiency (performance on clean data) by choosing parameters that control the trade-off between these properties.\n\nThe \"S\" stands for \"scale\" because these estimators are defined by finding regression coefficients that minimize a robust scale statistic of the residuals, typically the M-estimate of scale. This approach ensures regression-scale equivariance: if you multiply the response variable by a constant, the scale estimate changes proportionally. S-estimators can achieve breakdown points up to 50% while maintaining relatively high efficiency (70-95%) under normal conditions.\n\nThe key feature distinguishing S-estimators from other robust methods is their use of a redescending ρ function (like Tukey's bisquare) in the scale estimation, which provides the high breakdown point, combined with careful tuning to maintain efficiency. This makes them particularly suitable for regression problems where both robustness and statistical efficiency matter.\n\nCalculation:\nβ_S = argmin_β s(r₁,...,rₙ)\nwhere s satisfies:\n(1/n) Σᵢ ρ(rᵢ/s) = δ\nCommon ρ functions:\n- Tukey's bisquare with c tuned for efficiency\n- Optimal ρ for 50% breakdown: ρ(r) = min(r², 3.25²)\nδ = E_Φ[ρ(Z)] ≈ 0.5 for 50% breakdown\nProperties:\n- Breakdown point: up to 50%\n- Efficiency: 70-95% depending on ρ\n- Equivariant under scale transformations\n\nThink of S-estimators as finding a regression line by asking \"which line makes the spread of errors as small as possible when measured robustly?\" instead of the usual \"which line makes the sum of squared errors smallest?\" The robust spread measurement automatically downweights or ignores outliers. It's like fitting a trendline by finding the one that keeps the typical error small, where \"typical\" means ignoring the crazy outliers. You get both strong outlier resistance (can handle up to 50% bad data) and decent accuracy on normal data - a good all-around choice when you need robustness but don't want to sacrifice too much precision.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/S-Estimators.txt","hasFullInfo":true},{"id":417,"title":"Sample Entropy (SampEn)","filename":"Sample_Entropy_SampEn.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Improved ApEn","overview":"An improved version of Approximate Entropy that eliminates self-matching bias and provides more consistent estimates across different time series lengths. Sample Entropy measures pattern regularity by comparing the conditional probability that patterns of length m+1 remain similar given that patterns of length m are similar, without counting self-matches.","formula":"The key improvement over ApEn is that SampEn excludes self-comparisons (comparing a pattern to itself), which biased ApEn estimates. This makes SampEn more reliable for short time series and more consistent across different data lengths. Additionally, SampEn doesn't use logarithmic averaging, making it more robust and less sensitive to parameter choices, though this means SampEn values aren't directly comparable to ApEn values.\n\nLike ApEn, SampEn is valuable for regime detection, complexity measurement, and adaptive strategy selection in trading. However, SampEn's superior statistical properties make it the preferred choice for most applications, especially when comparing entropy across different market conditions, assets, or timeframes. It's particularly useful for detecting subtle regime changes that other measures miss.\n\nCalculation:","parameters":"Parameters:\n- m = pattern length (typically 2)\n- r = tolerance (typically 0.1-0.2 × SD)\n- N = time series length\n\nAlgorithm:\n1. Form m-length patterns (excluding last m+1 points)\n2. Count matches: B_i = # of j≠i where d[X_m(i), X_m(j)] ≤ r\n3. Form m+1-length patterns\n4. Count matches: A_i = # of j≠i where d[X_{m+1}(i), X_{m+1}(j)] ≤ r\n5. SampEn = -log(Σ A_i / Σ B_i)\n\nKey difference from ApEn:\n- No self-matches (j≠i condition)\n- Direct ratio instead of separate averages\n- More reliable for short series\n\nInterpretation same as ApEn:\nSampEn ≈ 0: very regular\nSampEn > 2: very irregular","intuition":"Think of Sample Entropy like Approximate Entropy but with better math - it measures the same thing (pattern predictability) but fixes some statistical quirks that made ApEn less reliable. The practical difference: SampEn gives you more trustworthy results, especially when comparing different markets or timeframes. Use it the same way: low SampEn means structured, predictable market where patterns repeat (good for trend-following), high SampEn means chaotic, random market where patterns don't persist (good for mean-reversion or staying out). It's the upgraded, more professional version of the same concept.","rawContent":"An improved version of Approximate Entropy that eliminates self-matching bias and provides more consistent estimates across different time series lengths. Sample Entropy measures pattern regularity by comparing the conditional probability that patterns of length m+1 remain similar given that patterns of length m are similar, without counting self-matches.\n\nThe key improvement over ApEn is that SampEn excludes self-comparisons (comparing a pattern to itself), which biased ApEn estimates. This makes SampEn more reliable for short time series and more consistent across different data lengths. Additionally, SampEn doesn't use logarithmic averaging, making it more robust and less sensitive to parameter choices, though this means SampEn values aren't directly comparable to ApEn values.\n\nLike ApEn, SampEn is valuable for regime detection, complexity measurement, and adaptive strategy selection in trading. However, SampEn's superior statistical properties make it the preferred choice for most applications, especially when comparing entropy across different market conditions, assets, or timeframes. It's particularly useful for detecting subtle regime changes that other measures miss.\n\nCalculation:\nParameters:\n- m = pattern length (typically 2)\n- r = tolerance (typically 0.1-0.2 × SD)\n- N = time series length\n\nAlgorithm:\n1. Form m-length patterns (excluding last m+1 points)\n2. Count matches: B_i = # of j≠i where d[X_m(i), X_m(j)] ≤ r\n3. Form m+1-length patterns\n4. Count matches: A_i = # of j≠i where d[X_{m+1}(i), X_{m+1}(j)] ≤ r\n5. SampEn = -log(Σ A_i / Σ B_i)\n\nKey difference from ApEn:\n- No self-matches (j≠i condition)\n- Direct ratio instead of separate averages\n- More reliable for short series\n\nInterpretation same as ApEn:\nSampEn ≈ 0: very regular\nSampEn > 2: very irregular\n\nThink of Sample Entropy like Approximate Entropy but with better math - it measures the same thing (pattern predictability) but fixes some statistical quirks that made ApEn less reliable. The practical difference: SampEn gives you more trustworthy results, especially when comparing different markets or timeframes. Use it the same way: low SampEn means structured, predictable market where patterns repeat (good for trend-following), high SampEn means chaotic, random market where patterns don't persist (good for mean-reversion or staying out). It's the upgraded, more professional version of the same concept.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Sample_Entropy_SampEn.txt","hasFullInfo":true},{"id":418,"title":"Scale-Space Representation","filename":"Scale-Space_Representation.txt","group":"group 18","groupNum":18,"categoryId":36,"categoryTitle":"36. MULTIRESOLUTION & MULTISCALE ANALYSIS","subcategory":"General","summary":"Continuous scale analysis","overview":"A continuous framework for analyzing signals across a continuum of scales by progressively smoothing the signal with Gaussian kernels of increasing width. Each scale parameter σ defines a different \"view\" of the signal, with small σ preserving detail and large σ revealing only major structure, creating a family of representations that evolve smoothly from fine to coarse.","formula":"Unlike discrete decompositions (wavelets, filter banks) that produce a fixed number of scales, scale-space creates an infinite family of smoothed versions parameterized by the scale σ. The Gaussian kernel is unique in satisfying the scale-space axioms: causality (no new features created by smoothing), linearity, shift-invariance, and semi-group property (smoothing at scale σ₁ then σ₂ equals smoothing at √(σ₁² + σ₂²)).\n\nFor trading, scale-space provides a principled way to analyze market structure across all timescales continuously, detecting the characteristic scales at which patterns emerge or disappear. Critical points (where the derivative is zero) can be tracked across scales to identify robust support/resistance levels that persist across multiple timeframes versus spurious levels that exist only at one scale.\n\nCalculation:\nScale-space family:\nL(x, σ) = G(x, σ) * f(x)\nwhere G(x, σ) = (1/√(2πσ²)) exp(-x²/(2σ²))\n\nDifferential scale-space (gradient evolution):\nL_σ = ∂L/∂σ = (σ²/2) ∇²L  [heat equation]\n\nFeature tracking across scales:\nCritical points: ∇L(x, σ) = 0\nScale-space fingerprint: plot (x, σ) where criticals occur\n\nNormalized derivatives for scale-invariance:\nL_norm = σ^γ L_x^n where γ·n matches physical units\n\nImagine slowly blurring a chart with progressively larger smoothing windows while watching which features (peaks, troughs, trends) survive at each blur level. Important features persist across many scales, while noise disappears quickly. You can track how a support level \"lives\" across scales: if it's visible from 1-bar smoothing all the way to 100-bar smoothing, it's a strong level. If it only shows up at one specific scale and vanishes with slight smoothing changes, it's probably not reliable. This gives you a continuous measure of feature importance based on scale persistence.","parameters":"","intuition":"","rawContent":"A continuous framework for analyzing signals across a continuum of scales by progressively smoothing the signal with Gaussian kernels of increasing width. Each scale parameter σ defines a different \"view\" of the signal, with small σ preserving detail and large σ revealing only major structure, creating a family of representations that evolve smoothly from fine to coarse.\n\nUnlike discrete decompositions (wavelets, filter banks) that produce a fixed number of scales, scale-space creates an infinite family of smoothed versions parameterized by the scale σ. The Gaussian kernel is unique in satisfying the scale-space axioms: causality (no new features created by smoothing), linearity, shift-invariance, and semi-group property (smoothing at scale σ₁ then σ₂ equals smoothing at √(σ₁² + σ₂²)).\n\nFor trading, scale-space provides a principled way to analyze market structure across all timescales continuously, detecting the characteristic scales at which patterns emerge or disappear. Critical points (where the derivative is zero) can be tracked across scales to identify robust support/resistance levels that persist across multiple timeframes versus spurious levels that exist only at one scale.\n\nCalculation:\nScale-space family:\nL(x, σ) = G(x, σ) * f(x)\nwhere G(x, σ) = (1/√(2πσ²)) exp(-x²/(2σ²))\n\nDifferential scale-space (gradient evolution):\nL_σ = ∂L/∂σ = (σ²/2) ∇²L  [heat equation]\n\nFeature tracking across scales:\nCritical points: ∇L(x, σ) = 0\nScale-space fingerprint: plot (x, σ) where criticals occur\n\nNormalized derivatives for scale-invariance:\nL_norm = σ^γ L_x^n where γ·n matches physical units\n\nImagine slowly blurring a chart with progressively larger smoothing windows while watching which features (peaks, troughs, trends) survive at each blur level. Important features persist across many scales, while noise disappears quickly. You can track how a support level \"lives\" across scales: if it's visible from 1-bar smoothing all the way to 100-bar smoothing, it's a strong level. If it only shows up at one specific scale and vanishes with slight smoothing changes, it's probably not reliable. This gives you a continuous measure of feature importance based on scale persistence.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Scale-Space_Representation.txt","hasFullInfo":true},{"id":419,"title":"Shannon Entropy Filter","filename":"Shannon_Entropy_Filter.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Information content measure","overview":"An information-theoretic measure that quantifies the uncertainty or randomness in a probability distribution of price returns or states. High entropy indicates high unpredictability (many outcomes are equally likely), while low entropy indicates concentration (few outcomes dominate), making it useful for regime detection, volatility measurement, and complexity analysis.","formula":"Shannon entropy is calculated as H = -Σ p_i log₂(p_i), where p_i is the probability of outcome i. In trading, you might bin returns into categories (large up, small up, flat, small down, large down) and compute their probability distribution over a rolling window. High entropy means returns are scattered across all categories (high uncertainty), low entropy means they're concentrated in one or two (predictable regime).\n\nApplications include: detecting regime transitions (entropy changes mark shifts between trending and ranging), measuring effective market randomness (high entropy = harder to predict), portfolio concentration assessment (position entropy indicates diversification), and adaptive parameter selection (use different strategies in high vs low entropy regimes). Entropy provides a distribution-free measure of uncertainty that doesn't assume normality.\n\nCalculation:\nDiscrete returns distribution:\nBin returns into K bins: B₁, B₂, ..., B_K\np_i = frequency of returns in bin i (over rolling window)\n\nShannon entropy:\nH = -Σᵢ₌₁ᴷ p_i log₂(p_i)\nUnits: bits\nRange: 0 (deterministic) to log₂(K) (uniform)\n\nNormalized entropy:\nH_norm = H / log₂(K) ∈ [0,1]\n\nFor continuous distribution (differential entropy):\nH = -∫ f(x) log f(x) dx\nGaussian: H = ½ log₂(2πe σ²)\n\nRegime interpretation:\nHigh H: high uncertainty, ranging/choppy market\nLow H: low uncertainty, trending market or low volatility","parameters":"","intuition":"Think of entropy as measuring \"how surprised you'd be by the next price move.\" If prices are all over the place (big ups, big downs, everything happening), entropy is high - you're very uncertain what comes next. If prices have been making small consistent moves in one direction, entropy is low - you have a good idea what's likely. It's like the difference between a random number generator (high entropy, totally unpredictable) versus counting 1,2,3,4,5... (low entropy, very predictable). Traders can use this to adapt: trade trend-following in low-entropy regimes (predictable), trade mean-reversion in high-entropy regimes (chaotic).","rawContent":"An information-theoretic measure that quantifies the uncertainty or randomness in a probability distribution of price returns or states. High entropy indicates high unpredictability (many outcomes are equally likely), while low entropy indicates concentration (few outcomes dominate), making it useful for regime detection, volatility measurement, and complexity analysis.\n\nShannon entropy is calculated as H = -Σ p_i log₂(p_i), where p_i is the probability of outcome i. In trading, you might bin returns into categories (large up, small up, flat, small down, large down) and compute their probability distribution over a rolling window. High entropy means returns are scattered across all categories (high uncertainty), low entropy means they're concentrated in one or two (predictable regime).\n\nApplications include: detecting regime transitions (entropy changes mark shifts between trending and ranging), measuring effective market randomness (high entropy = harder to predict), portfolio concentration assessment (position entropy indicates diversification), and adaptive parameter selection (use different strategies in high vs low entropy regimes). Entropy provides a distribution-free measure of uncertainty that doesn't assume normality.\n\nCalculation:\nDiscrete returns distribution:\nBin returns into K bins: B₁, B₂, ..., B_K\np_i = frequency of returns in bin i (over rolling window)\n\nShannon entropy:\nH = -Σᵢ₌₁ᴷ p_i log₂(p_i)\nUnits: bits\nRange: 0 (deterministic) to log₂(K) (uniform)\n\nNormalized entropy:\nH_norm = H / log₂(K) ∈ [0,1]\n\nFor continuous distribution (differential entropy):\nH = -∫ f(x) log f(x) dx\nGaussian: H = ½ log₂(2πe σ²)\n\nRegime interpretation:\nHigh H: high uncertainty, ranging/choppy market\nLow H: low uncertainty, trending market or low volatility\n\nThink of entropy as measuring \"how surprised you'd be by the next price move.\" If prices are all over the place (big ups, big downs, everything happening), entropy is high - you're very uncertain what comes next. If prices have been making small consistent moves in one direction, entropy is low - you have a good idea what's likely. It's like the difference between a random number generator (high entropy, totally unpredictable) versus counting 1,2,3,4,5... (low entropy, very predictable). Traders can use this to adapt: trade trend-following in low-entropy regimes (predictable), trade mean-reversion in high-entropy regimes (chaotic).","tags":["DSP Filtering","Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Shannon_Entropy_Filter.txt","hasFullInfo":true},{"id":420,"title":"Stationary Wavelet Decomposition","filename":"Stationary_Wavelet_Decomposition.txt","group":"group 18","groupNum":18,"categoryId":36,"categoryTitle":"36. MULTIRESOLUTION & MULTISCALE ANALYSIS","subcategory":"General","summary":"Translation-invariant","overview":"A translation-invariant version of the discrete wavelet transform that eliminates the shift-sensitivity problem of standard wavelet decomposition. By removing the downsampling step, it produces the same number of coefficients at each level as the original signal, ensuring that small shifts in the input don't cause large changes in the wavelet representation.","formula":"Standard wavelet transforms downsample at each level, which creates two problems for trading: (1) the transform output depends on where you start (shift variance), and (2) features can \"jump\" between scales as new data arrives. The stationary wavelet transform (SWT), also called à-trous algorithm or redundant wavelet transform, upsamples the filters instead of downsampling the signal, maintaining full resolution at all scales.\n\nThis translation invariance is crucial for real-time trading indicators. Without it, a single new bar can cause wavelet coefficients to completely reorganize, creating false signals. With SWT, the decomposition evolves smoothly as new data arrives, making it suitable for live trend detection, regime identification, and multi-scale support/resistance level tracking.\n\nCalculation:\nStandard DWT: convolve + downsample (loses shift invariance)\nSWT: convolve with upsampled filters (keeps shift invariance)\n\nLevel j decomposition:\nhⱼ[n] = upsample(h, 2^(j-1))  [filter upsampled by 2^(j-1)]\ngⱼ[n] = upsample(g, 2^(j-1))\n\naⱼ = hⱼ * aⱼ₋₁  [no downsampling]\ndⱼ = gⱼ * aⱼ₋₁  [no downsampling]\n\nResult: Each level has same length as original signal\nRedundancy factor: 2^J for J levels\nCost: More computation and storage vs standard DWT\n\nImagine you're tracking a trend using wavelets, and every time a new price bar appears, your entire trend structure flips around because of how the math downsamples the data. That's standard wavelets. Stationary wavelets fix this by keeping all the data at full resolution at every scale, so when a new bar arrives, the decomposition just smoothly updates - no sudden reorganization. You pay for this stability with higher memory and computation (storing full-length signals at each scale instead of progressively smaller ones), but for live trading where you need smooth, predictable indicator behavior, it's worth it.","parameters":"","intuition":"","rawContent":"A translation-invariant version of the discrete wavelet transform that eliminates the shift-sensitivity problem of standard wavelet decomposition. By removing the downsampling step, it produces the same number of coefficients at each level as the original signal, ensuring that small shifts in the input don't cause large changes in the wavelet representation.\n\nStandard wavelet transforms downsample at each level, which creates two problems for trading: (1) the transform output depends on where you start (shift variance), and (2) features can \"jump\" between scales as new data arrives. The stationary wavelet transform (SWT), also called à-trous algorithm or redundant wavelet transform, upsamples the filters instead of downsampling the signal, maintaining full resolution at all scales.\n\nThis translation invariance is crucial for real-time trading indicators. Without it, a single new bar can cause wavelet coefficients to completely reorganize, creating false signals. With SWT, the decomposition evolves smoothly as new data arrives, making it suitable for live trend detection, regime identification, and multi-scale support/resistance level tracking.\n\nCalculation:\nStandard DWT: convolve + downsample (loses shift invariance)\nSWT: convolve with upsampled filters (keeps shift invariance)\n\nLevel j decomposition:\nhⱼ[n] = upsample(h, 2^(j-1))  [filter upsampled by 2^(j-1)]\ngⱼ[n] = upsample(g, 2^(j-1))\n\naⱼ = hⱼ * aⱼ₋₁  [no downsampling]\ndⱼ = gⱼ * aⱼ₋₁  [no downsampling]\n\nResult: Each level has same length as original signal\nRedundancy factor: 2^J for J levels\nCost: More computation and storage vs standard DWT\n\nImagine you're tracking a trend using wavelets, and every time a new price bar appears, your entire trend structure flips around because of how the math downsamples the data. That's standard wavelets. Stationary wavelets fix this by keeping all the data at full resolution at every scale, so when a new bar arrives, the decomposition just smoothly updates - no sudden reorganization. You pay for this stability with higher memory and computation (storing full-length signals at each scale instead of progressively smaller ones), but for live trading where you need smooth, predictable indicator behavior, it's worth it.","tags":["Wavelets"],"relPath":"public/concept-list/list-concepts/group 18/Stationary_Wavelet_Decomposition.txt","hasFullInfo":true},{"id":421,"title":"Toxic Flow Detection","filename":"Toxic_Flow_Detection.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Informed trader detection","overview":"A microstructure technique that identifies informed or predatory order flow that is likely to result in adverse selection for liquidity providers. Toxic flow comes from traders with superior information or timing who consistently trade against market makers, causing them to lose money, while \"benign\" flow comes from uninformed noise traders that market makers profit from.","formula":"The toxicity of order flow affects market makers' profitability and optimal quotes. Against toxic flow, market makers widen spreads, reduce depth, and may withdraw entirely to avoid being picked off. Detecting toxicity in real-time allows dynamic adjustment of quoting strategy. Common signals include: volume-synchronized probability of informed trading (VPIN), adverse price movement following trades, order size patterns, and timing relative to information events.\n\nFor execution algorithms and alpha strategies, toxic flow detection is equally important: you want to avoid trading when the order book is dominated by informed traders (high adverse selection risk), and instead trade when benign flow provides liquidity at attractive prices. This is essentially distinguishing between \"smart money\" and \"dumb money\" in real-time.\n\nCalculation:\nVolume-Synchronized PIN (VPIN):\nBucket volume into equal-size bars V̄\nFor each bucket: classify as buyer-initiated (B) or seller-initiated (S)\nVPIN = E[|B - S|] / V̄  [over rolling window]\n\nHigh VPIN → toxic flow environment\n\nOrder flow toxicity (Easley et al.):\nTOX = Prob(Informed Trade) × E[Price Impact | Informed]\n\nEmpirical detection:\n- High fill-to-quote ratio (orders execute quickly → someone knows something)\n- Large price reversal after trades (market makers got picked off)\n- Abnormal order size distribution (informed traders optimize size)\n- Clustering around news/events\n\nMarket maker response:\nif TOX > threshold:\n  widen spread, reduce depth, or stop quoting","parameters":"","intuition":"Think of toxic flow like a poker tell - it's order flow that signals \"this trader knows something I don't, and I'm about to lose money.\" Maybe they're trading right before news breaks, or their orders always seem to catch the direction perfectly, or they're executing in a pattern that suggests superior information. Market makers learn to recognize this and protect themselves by widening spreads or pulling liquidity when toxic flow shows up. For other traders, detecting toxicity helps you avoid trading when informed insiders are active (you'll likely lose) and instead trade when the market is dominated by clueless flow (where you have an edge). It's basically a real-time \"is the game rigged right now?\" detector.","rawContent":"A microstructure technique that identifies informed or predatory order flow that is likely to result in adverse selection for liquidity providers. Toxic flow comes from traders with superior information or timing who consistently trade against market makers, causing them to lose money, while \"benign\" flow comes from uninformed noise traders that market makers profit from.\n\nThe toxicity of order flow affects market makers' profitability and optimal quotes. Against toxic flow, market makers widen spreads, reduce depth, and may withdraw entirely to avoid being picked off. Detecting toxicity in real-time allows dynamic adjustment of quoting strategy. Common signals include: volume-synchronized probability of informed trading (VPIN), adverse price movement following trades, order size patterns, and timing relative to information events.\n\nFor execution algorithms and alpha strategies, toxic flow detection is equally important: you want to avoid trading when the order book is dominated by informed traders (high adverse selection risk), and instead trade when benign flow provides liquidity at attractive prices. This is essentially distinguishing between \"smart money\" and \"dumb money\" in real-time.\n\nCalculation:\nVolume-Synchronized PIN (VPIN):\nBucket volume into equal-size bars V̄\nFor each bucket: classify as buyer-initiated (B) or seller-initiated (S)\nVPIN = E[|B - S|] / V̄  [over rolling window]\n\nHigh VPIN → toxic flow environment\n\nOrder flow toxicity (Easley et al.):\nTOX = Prob(Informed Trade) × E[Price Impact | Informed]\n\nEmpirical detection:\n- High fill-to-quote ratio (orders execute quickly → someone knows something)\n- Large price reversal after trades (market makers got picked off)\n- Abnormal order size distribution (informed traders optimize size)\n- Clustering around news/events\n\nMarket maker response:\nif TOX > threshold:\n  widen spread, reduce depth, or stop quoting\n\nThink of toxic flow like a poker tell - it's order flow that signals \"this trader knows something I don't, and I'm about to lose money.\" Maybe they're trading right before news breaks, or their orders always seem to catch the direction perfectly, or they're executing in a pattern that suggests superior information. Market makers learn to recognize this and protect themselves by widening spreads or pulling liquidity when toxic flow shows up. For other traders, detecting toxicity helps you avoid trading when informed insiders are active (you'll likely lose) and instead trade when the market is dominated by clueless flow (where you have an edge). It's basically a real-time \"is the game rigged right now?\" detector.","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/Toxic_Flow_Detection.txt","hasFullInfo":true},{"id":422,"title":"Transfer Entropy","filename":"Transfer_Entropy.txt","group":"group 18","groupNum":18,"categoryId":39,"categoryTitle":"39. INFORMATION THEORY & ENTROPY-BASED","subcategory":"General","summary":"Directed information transfer","overview":"An information-theoretic measure that quantifies the directed information flow from one time series to another, capturing how much knowing the past of series X reduces uncertainty about the future of series Y beyond what Y's own past tells you. It's a nonlinear, model-free alternative to Granger causality that can detect both linear and nonlinear predictive relationships.","formula":"Transfer entropy from X to Y is defined as: TE_{X→Y} = I(Y_{t+1}; X_t | Y_t), the mutual information between the next value of Y and the current value of X, conditioned on the current value of Y. If this is significantly positive, X provides information about Y's future beyond what Y's history provides - indicating X \"drives\" or \"leads\" Y.\n\nIn trading, transfer entropy identifies directional information flow between: assets (which stock leads the sector?), markets (does forex lead equities?), timeframes (does daily structure predict intraday?), and indicators (which technical signals provide unique information?). Unlike correlation which is symmetric, transfer entropy is asymmetric and can reveal causal structures.\n\nCalculation:\nDiscrete time series X_t, Y_t\n\nTransfer entropy X → Y:\nTE_{X→Y} = Σ p(y_{t+1}, y_t, x_t) log [p(y_{t+1} | y_t, x_t) / p(y_{t+1} | y_t)]\n\nComputational approach:\n1. Bin or discretize time series\n2. Estimate joint probabilities p(y_{t+1}, y_t, x_t)\n3. Estimate conditional probabilities\n4. Compute summation\n\nInterpretation:\nTE_{X→Y} > 0: X provides info about Y's future\nTE_{X→Y} ≈ 0: X doesn't help predict Y\nCompare: TE_{X→Y} vs TE_{Y→X} to determine direction\n\nSignificance: test against shuffled data or surrogate series","parameters":"","intuition":"Think of transfer entropy as asking: \"does knowing what's happening in asset X right now help me predict what asset Y will do next, beyond what Y's own history tells me?\" If yes, there's information flowing from X to Y. Unlike correlation (which just says they move together) or Granger causality (which is linear-only), transfer entropy catches any type of predictive relationship and tells you the direction. You might find that Bitcoin transfers high entropy to altcoins (Bitcoin leads) but altcoins transfer low entropy to Bitcoin (they don't lead). This reveals the actual information flow structure in your market.","rawContent":"An information-theoretic measure that quantifies the directed information flow from one time series to another, capturing how much knowing the past of series X reduces uncertainty about the future of series Y beyond what Y's own past tells you. It's a nonlinear, model-free alternative to Granger causality that can detect both linear and nonlinear predictive relationships.\n\nTransfer entropy from X to Y is defined as: TE_{X→Y} = I(Y_{t+1}; X_t | Y_t), the mutual information between the next value of Y and the current value of X, conditioned on the current value of Y. If this is significantly positive, X provides information about Y's future beyond what Y's history provides - indicating X \"drives\" or \"leads\" Y.\n\nIn trading, transfer entropy identifies directional information flow between: assets (which stock leads the sector?), markets (does forex lead equities?), timeframes (does daily structure predict intraday?), and indicators (which technical signals provide unique information?). Unlike correlation which is symmetric, transfer entropy is asymmetric and can reveal causal structures.\n\nCalculation:\nDiscrete time series X_t, Y_t\n\nTransfer entropy X → Y:\nTE_{X→Y} = Σ p(y_{t+1}, y_t, x_t) log [p(y_{t+1} | y_t, x_t) / p(y_{t+1} | y_t)]\n\nComputational approach:\n1. Bin or discretize time series\n2. Estimate joint probabilities p(y_{t+1}, y_t, x_t)\n3. Estimate conditional probabilities\n4. Compute summation\n\nInterpretation:\nTE_{X→Y} > 0: X provides info about Y's future\nTE_{X→Y} ≈ 0: X doesn't help predict Y\nCompare: TE_{X→Y} vs TE_{Y→X} to determine direction\n\nSignificance: test against shuffled data or surrogate series\n\nThink of transfer entropy as asking: \"does knowing what's happening in asset X right now help me predict what asset Y will do next, beyond what Y's own history tells me?\" If yes, there's information flowing from X to Y. Unlike correlation (which just says they move together) or Granger causality (which is linear-only), transfer entropy catches any type of predictive relationship and tells you the direction. You might find that Bitcoin transfers high entropy to altcoins (Bitcoin leads) but altcoins transfer low entropy to Bitcoin (they don't lead). This reveals the actual information flow structure in your market.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 18/Transfer_Entropy.txt","hasFullInfo":true},{"id":423,"title":"Tukey's Bisquare (Biweight) Estimator","filename":"Tukeys_Bisquare_Biweight_Estimator.txt","group":"group 18","groupNum":18,"categoryId":35,"categoryTitle":"35. ROBUST STATISTICAL ESTIMATORS","subcategory":"General","summary":"Redescending M-estimator","overview":"A robust M-estimator that completely rejects extreme outliers by using a redescending weight function. Unlike Huber's estimator which reduces influence of outliers, Tukey's bisquare gives zero weight to observations beyond a threshold, making it highly resistant to severe contamination while maintaining good efficiency for clean data.","formula":"The bisquare's \"redescending\" property means the weight function increases for small residuals, reaches a maximum, then decreases back to zero. This creates a sphere of influence: observations within the sphere contribute to the estimate with varying weights, while those outside are completely ignored. The tuning constant 'c' determines the radius of this sphere, with c=4.685 providing 95% efficiency at the normal distribution.\n\nThis complete rejection of extreme outliers makes Tukey's bisquare ideal for financial data with occasional corrupted values (bad ticks, data errors, flash crashes) that should have absolutely no influence on parameter estimates. However, the redescending property can cause convergence issues if the initial estimate starts far from the true value, requiring good initialization (often using Huber estimates first).\n\nCalculation:\nWeight function:\nw(r) = {\n  [1 - (r/c)^2]^2,  for |r| ≤ c\n  0,                for |r| > c\n}\nLoss function:\nρ(r) = {\n  (c^2/6)[1 - [1-(r/c)^2]^3],  for |r| ≤ c\n  c^2/6,                        for |r| > c\n}\nInfluence function:\nψ(r) = r[1 - (r/c)^2]^2  for |r| ≤ c, else 0\nCommon c values: 4.685 (95% efficiency), 6.0 (99% efficiency)\nIterative solution: x_new = Σ w(r_i) y_i / Σ w(r_i)","parameters":"","intuition":"Think of this as calculating an average with a strict \"no extreme values allowed\" policy. Instead of just reducing the influence of outliers like Huber does, Tukey's bisquare draws a boundary and says \"anything beyond this threshold contributes exactly zero to my calculation.\" It's like hiring a bouncer for your statistical calculation who kicks out the rowdy data points entirely. Great when you know some of your data is just plain wrong (bad trades, data glitches), but you need a decent starting guess or it can get confused.","rawContent":"A robust M-estimator that completely rejects extreme outliers by using a redescending weight function. Unlike Huber's estimator which reduces influence of outliers, Tukey's bisquare gives zero weight to observations beyond a threshold, making it highly resistant to severe contamination while maintaining good efficiency for clean data.\n\nThe bisquare's \"redescending\" property means the weight function increases for small residuals, reaches a maximum, then decreases back to zero. This creates a sphere of influence: observations within the sphere contribute to the estimate with varying weights, while those outside are completely ignored. The tuning constant 'c' determines the radius of this sphere, with c=4.685 providing 95% efficiency at the normal distribution.\n\nThis complete rejection of extreme outliers makes Tukey's bisquare ideal for financial data with occasional corrupted values (bad ticks, data errors, flash crashes) that should have absolutely no influence on parameter estimates. However, the redescending property can cause convergence issues if the initial estimate starts far from the true value, requiring good initialization (often using Huber estimates first).\n\nCalculation:\nWeight function:\nw(r) = {\n  [1 - (r/c)^2]^2,  for |r| ≤ c\n  0,                for |r| > c\n}\nLoss function:\nρ(r) = {\n  (c^2/6)[1 - [1-(r/c)^2]^3],  for |r| ≤ c\n  c^2/6,                        for |r| > c\n}\nInfluence function:\nψ(r) = r[1 - (r/c)^2]^2  for |r| ≤ c, else 0\nCommon c values: 4.685 (95% efficiency), 6.0 (99% efficiency)\nIterative solution: x_new = Σ w(r_i) y_i / Σ w(r_i)\n\nThink of this as calculating an average with a strict \"no extreme values allowed\" policy. Instead of just reducing the influence of outliers like Huber does, Tukey's bisquare draws a boundary and says \"anything beyond this threshold contributes exactly zero to my calculation.\" It's like hiring a bouncer for your statistical calculation who kicks out the rowdy data points entirely. Great when you know some of your data is just plain wrong (bad trades, data glitches), but you need a decent starting guess or it can get confused.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 18/Tukeys_Bisquare_Biweight_Estimator.txt","hasFullInfo":true},{"id":424,"title":"Turnover Regularization","filename":"Turnover_Regularization.txt","group":"group 18","groupNum":18,"categoryId":37,"categoryTitle":"37. PORTFOLIO & RISK MANAGEMENT FILTERS","subcategory":"General","summary":"Transaction cost control","overview":"A portfolio optimization constraint or penalty that limits trading activity by penalizing the sum of absolute changes in portfolio weights from one period to the next. This directly addresses transaction costs, market impact, and tax consequences by finding the optimal balance between improving the portfolio and minimizing trading.","formula":"High-turnover portfolios incur substantial costs: explicit transaction costs (commissions, spreads), implicit market impact (your trades move prices against you), and taxes on realized gains. Unconstrained optimization often produces excessive turnover because it chases small improvements in expected return or risk, ignoring that trading costs can easily exceed these benefits. Turnover regularization internalizes these costs into the optimization.\n\nThe turnover penalty can be implemented as a hard constraint (turnover ≤ T) or a soft penalty (add λ × turnover to the objective). The regularization parameter λ effectively represents the cost per dollar traded. Empirically, turnover regularization improves out-of-sample performance because it prevents overfitting and overreaction to noisy signals, while reducing costs improves net returns.\n\nCalculation:\nCurrent weights: w_old\nProposed weights: w_new\n\nTurnover measure:\nT = ||w_new - w_old||₁ = Σ_i |w_new,i - w_old,i|\n\nAs constraint:\nmaximize utility(w_new)\nsubject to: ||w_new - w_old||₁ ≤ T_max\n\nAs penalty (soft constraint):\nmaximize utility(w_new) - λ||w_new - w_old||₁\nwhere λ = implicit cost per dollar traded\n\nTwo-sided decomposition:\nTurnover = Buys + Sells\nBuys = Σ_i max(0, w_new,i - w_old,i)\nSells = Σ_i max(0, w_old,i - w_new,i)\nCan penalize asymmetrically if costs differ","parameters":"","intuition":"Think of this as telling your portfolio optimizer \"hey, every time you want to trade, you're burning money on commissions and moving the market against yourself, so make it count.\" Without turnover limits, an optimizer might say \"let's shift 2% from stock A to stock B for a 0.1% expected improvement\" - but after trading costs, you'd lose money. Turnover regularization forces the optimizer to only trade when the improvement is large enough to justify the costs. It's like adding a \"laziness tax\" that makes the optimizer reluctant to trade unless there's a really good reason, which paradoxically often leads to better results because it avoids chasing noise.","rawContent":"A portfolio optimization constraint or penalty that limits trading activity by penalizing the sum of absolute changes in portfolio weights from one period to the next. This directly addresses transaction costs, market impact, and tax consequences by finding the optimal balance between improving the portfolio and minimizing trading.\n\nHigh-turnover portfolios incur substantial costs: explicit transaction costs (commissions, spreads), implicit market impact (your trades move prices against you), and taxes on realized gains. Unconstrained optimization often produces excessive turnover because it chases small improvements in expected return or risk, ignoring that trading costs can easily exceed these benefits. Turnover regularization internalizes these costs into the optimization.\n\nThe turnover penalty can be implemented as a hard constraint (turnover ≤ T) or a soft penalty (add λ × turnover to the objective). The regularization parameter λ effectively represents the cost per dollar traded. Empirically, turnover regularization improves out-of-sample performance because it prevents overfitting and overreaction to noisy signals, while reducing costs improves net returns.\n\nCalculation:\nCurrent weights: w_old\nProposed weights: w_new\n\nTurnover measure:\nT = ||w_new - w_old||₁ = Σ_i |w_new,i - w_old,i|\n\nAs constraint:\nmaximize utility(w_new)\nsubject to: ||w_new - w_old||₁ ≤ T_max\n\nAs penalty (soft constraint):\nmaximize utility(w_new) - λ||w_new - w_old||₁\nwhere λ = implicit cost per dollar traded\n\nTwo-sided decomposition:\nTurnover = Buys + Sells\nBuys = Σ_i max(0, w_new,i - w_old,i)\nSells = Σ_i max(0, w_old,i - w_new,i)\nCan penalize asymmetrically if costs differ\n\nThink of this as telling your portfolio optimizer \"hey, every time you want to trade, you're burning money on commissions and moving the market against yourself, so make it count.\" Without turnover limits, an optimizer might say \"let's shift 2% from stock A to stock B for a 0.1% expected improvement\" - but after trading costs, you'd lose money. Turnover regularization forces the optimizer to only trade when the improvement is large enough to justify the costs. It's like adding a \"laziness tax\" that makes the optimizer reluctant to trade unless there's a really good reason, which paradoxically often leads to better results because it avoids chasing noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 18/Turnover_Regularization.txt","hasFullInfo":true},{"id":425,"title":"TWAP (Time-Weighted Average Price) Algorithm","filename":"TWAP_Algorithm.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Time-distributed execution","overview":"An execution strategy that distributes a large order evenly across a specified time interval, trading at a constant rate regardless of market volume patterns. TWAP aims for consistent market participation over time, making it simple, predictable, and effective when volume patterns are uncertain or when minimal market impact is desired.","formula":"Unlike VWAP which matches volume patterns, TWAP simply divides the total quantity by the time window and trades at a constant rate: if you need to buy 10,000 shares over 2 hours, you'd buy approximately 83 shares per minute. This uniformity provides predictable execution and limits information leakage, though it may miss opportunities when volume is concentrated at specific times.\n\nTWAP is preferred when: (1) volume patterns are unreliable or unstable, (2) trading in illiquid securities where participation rate matters more than volume-matching, (3) regulatory or compliance reasons require time-distributed execution, or (4) simplicity and explainability are valued. It's less sophisticated than other algorithms but often more robust in difficult market conditions.\n\nCalculation:\nTotal quantity: Q\nTime window: [t_start, t_end], duration T\nNumber of slices: N\n\nSimple TWAP:\nSlice size: q = Q / N\nTime between slices: Δt = T / N\nSubmit q shares every Δt\n\nWith randomization (to prevent gaming):\nSlice time: t_i = t_start + iΔt + U(-Δt/2, Δt/2)\nSlice size: q_i = q × (1 + U(-α, α))\nwhere U is uniform random, α controls randomness (e.g., 0.2)\n\nExecution target:\nAverage price ≈ arithmetic average of prices over interval\n(not volume-weighted)","parameters":"","intuition":"Think of TWAP as the simplest possible execution strategy: just spread your trades evenly over time like clockwork. If you need to buy 1,000 shares in an hour, you buy ~17 shares every minute, no matter what the market is doing. No fancy volume predictions, no adaptive algorithms, just steady, predictable execution. This is great when you want simplicity and consistency, or when you're trading something illiquid where trying to match volume patterns would just make you stand out. The downside is you might trade more when the market is thin (higher impact) and less when it's thick (missing liquidity), but the simplicity often makes up for it.","rawContent":"An execution strategy that distributes a large order evenly across a specified time interval, trading at a constant rate regardless of market volume patterns. TWAP aims for consistent market participation over time, making it simple, predictable, and effective when volume patterns are uncertain or when minimal market impact is desired.\n\nUnlike VWAP which matches volume patterns, TWAP simply divides the total quantity by the time window and trades at a constant rate: if you need to buy 10,000 shares over 2 hours, you'd buy approximately 83 shares per minute. This uniformity provides predictable execution and limits information leakage, though it may miss opportunities when volume is concentrated at specific times.\n\nTWAP is preferred when: (1) volume patterns are unreliable or unstable, (2) trading in illiquid securities where participation rate matters more than volume-matching, (3) regulatory or compliance reasons require time-distributed execution, or (4) simplicity and explainability are valued. It's less sophisticated than other algorithms but often more robust in difficult market conditions.\n\nCalculation:\nTotal quantity: Q\nTime window: [t_start, t_end], duration T\nNumber of slices: N\n\nSimple TWAP:\nSlice size: q = Q / N\nTime between slices: Δt = T / N\nSubmit q shares every Δt\n\nWith randomization (to prevent gaming):\nSlice time: t_i = t_start + iΔt + U(-Δt/2, Δt/2)\nSlice size: q_i = q × (1 + U(-α, α))\nwhere U is uniform random, α controls randomness (e.g., 0.2)\n\nExecution target:\nAverage price ≈ arithmetic average of prices over interval\n(not volume-weighted)\n\nThink of TWAP as the simplest possible execution strategy: just spread your trades evenly over time like clockwork. If you need to buy 1,000 shares in an hour, you buy ~17 shares every minute, no matter what the market is doing. No fancy volume predictions, no adaptive algorithms, just steady, predictable execution. This is great when you want simplicity and consistency, or when you're trading something illiquid where trying to match volume patterns would just make you stand out. The downside is you might trade more when the market is thin (higher impact) and less when it's thick (missing liquidity), but the simplicity often makes up for it.","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/TWAP_Algorithm.txt","hasFullInfo":true},{"id":426,"title":"VWAP (Volume-Weighted Average Price) Algorithm","filename":"VWAP_Algorithm.txt","group":"group 18","groupNum":18,"categoryId":38,"categoryTitle":"38. EXECUTION & MARKET MICROSTRUCTURE","subcategory":"General","summary":"Volume-matched execution","overview":"An execution strategy that aims to match or beat the volume-weighted average price over a specified time period by distributing trades proportionally to expected volume patterns. The goal is to achieve an average execution price close to the market's natural VWAP, minimizing information leakage and market impact by blending with organic flow.","formula":"VWAP represents the average price at which a security traded throughout the day, weighted by volume at each price level. It's a natural execution benchmark because it represents the \"fair\" price experienced by the overall market. A VWAP algorithm slices a large order into smaller child orders and submits them in proportion to historical volume patterns (e.g., more volume in first/last hour, less during lunch).\n\nThe strategy is most appropriate when execution price relative to average market activity matters more than minimizing market impact or shortfall. It works best in liquid markets with predictable intraday volume patterns. Traders use it to reduce information leakage (hiding intentions) and to satisfy best-execution requirements, though it can underperform in trending markets.\n\nCalculation:\nTarget VWAP over period [0,T]:\nVWAP = Σ(P_i × V_i) / Σ V_i\n\nHistorical volume curve:\nV(t) = expected volume at time t (from historical patterns)\n\nOrder schedule:\nQ(t) = Total Quantity × [V(t) / Σ_s V(s)]\n\nAdjustment for realized volume:\nif actual volume > forecast: trade more aggressively\nif actual volume < forecast: trade less aggressively\n\nParticipation rate:\nr(t) = Your Volume / Market Volume ≈ constant (typically 5-20%)\n\nExecution:\nSubmit orders continuously to maintain participation rate","parameters":"","intuition":"Think of VWAP as \"trade like the market trades\" - if the market typically does 30% of its daily volume in the first hour, you do 30% of your order in the first hour. If volume picks up, you pick up. If it slows down, you slow down. This makes your trading invisible in the aggregate flow and gets you close to the average price everyone else got. It's like swimming with the current instead of against it. Great when you just want a fair average price without moving the market, but not ideal if prices are trending strongly (you might want to front-run a rally or delay in a selloff, which VWAP doesn't do).","rawContent":"An execution strategy that aims to match or beat the volume-weighted average price over a specified time period by distributing trades proportionally to expected volume patterns. The goal is to achieve an average execution price close to the market's natural VWAP, minimizing information leakage and market impact by blending with organic flow.\n\nVWAP represents the average price at which a security traded throughout the day, weighted by volume at each price level. It's a natural execution benchmark because it represents the \"fair\" price experienced by the overall market. A VWAP algorithm slices a large order into smaller child orders and submits them in proportion to historical volume patterns (e.g., more volume in first/last hour, less during lunch).\n\nThe strategy is most appropriate when execution price relative to average market activity matters more than minimizing market impact or shortfall. It works best in liquid markets with predictable intraday volume patterns. Traders use it to reduce information leakage (hiding intentions) and to satisfy best-execution requirements, though it can underperform in trending markets.\n\nCalculation:\nTarget VWAP over period [0,T]:\nVWAP = Σ(P_i × V_i) / Σ V_i\n\nHistorical volume curve:\nV(t) = expected volume at time t (from historical patterns)\n\nOrder schedule:\nQ(t) = Total Quantity × [V(t) / Σ_s V(s)]\n\nAdjustment for realized volume:\nif actual volume > forecast: trade more aggressively\nif actual volume < forecast: trade less aggressively\n\nParticipation rate:\nr(t) = Your Volume / Market Volume ≈ constant (typically 5-20%)\n\nExecution:\nSubmit orders continuously to maintain participation rate\n\nThink of VWAP as \"trade like the market trades\" - if the market typically does 30% of its daily volume in the first hour, you do 30% of your order in the first hour. If volume picks up, you pick up. If it slows down, you slow down. This makes your trading invisible in the aggregate flow and gets you close to the average price everyone else got. It's like swimming with the current instead of against it. Great when you just want a fair average price without moving the market, but not ideal if prices are trending strongly (you might want to front-run a rally or delay in a selloff, which VWAP doesn't do).","tags":["Microstructure"],"relPath":"public/concept-list/list-concepts/group 18/VWAP_Algorithm.txt","hasFullInfo":true},{"id":427,"title":"Andersen-Dobrev-Schaumburg Test","filename":"andersen_dobrev_schaumburg_test.txt","group":"group 19","groupNum":19,"categoryId":46,"categoryTitle":"46. JUMP DETECTION & DISCONTINUITY","subcategory":"General","summary":"Return/volatility ratio test","overview":"The Andersen-Dobrev-Schaumburg (ADS) Test is a nonparametric jump detection method that compares the maximum absolute return over a period to the sum of squared returns, exploiting the fact that these quantities scale differently under diffusion versus jump processes. Unlike variance-ratio tests (like BNS), the ADS test is specifically designed to detect even a single large jump in a sample, making it particularly powerful for identifying isolated jumps such as those caused by major news announcements, flash crashes, or other discrete information events. The test has better finite-sample power than BNS when jumps are rare but large.","formula":"The intuition is straightforward: under continuous diffusion, the maximum return scales like √(variance), but under jumps, a single large jump can make the maximum much larger than √(variance) would predict. The test statistic compares the squared maximum return to the sum of squared returns (realized variance), creating a ratio that should be small under diffusion but large under jumps. Critical values come from extreme value theory for the maximum of Brownian motion, enabling formal hypothesis testing.\n\nMathematical formulation:\n\nTest statistic:\nξ_n = (max_i |r_i|²) / RV = max_i |r_i|² / Σ r_i²\n\nAlternative formulation:\nξ*_n = max_i |r_i| / √(RV)\n\nUnder H₀ (no jumps, continuous diffusion):\nξ_n →^d max(B_s²) where B is Brownian bridge on [0,1]\n\nCritical values from simulation/theory:\nFor n large, critical value c_α such that P(ξ_n > c_α | H₀) = α\n\nTypical values:\nc_0.05 ≈ 0.04-0.05\nc_0.01 ≈ 0.06-0.08\n\nNormalized version:\nz = (ξ_n - μ_ξ) / σ_ξ\n\nWhere μ_ξ and σ_ξ are moments of the null distribution\n\nDecision rule:\nReject H₀ (declare jump) if ξ_n > c_α\n\nJump identification:\nIf reject H₀, the jump occurred at i* = arg max_i |r_i|\n\nPower characteristics:\n- High power against single large jump\n- Moderate power against multiple small jumps\n- Complements BNS test (use both)\n\nExtensions:\n- Subsampling for critical values\n- Block-wise application for jump localization\n- Multivariate version\n\nRobustness:\n- Requires fewer distributional assumptions than parametric tests\n- Works well with finite samples\n- Less sensitive to volatility estimation than Lee-Mykland","parameters":"","intuition":"Andersen-Dobrev-Schaumburg Test is like checking if a city's tallest building is suspiciously tall compared to total building height. Under normal growth (continuous), the tallest building should be roughly √n times the average height. But if there's a freak \"jump\" - like someone built the Burj Khalifa in a town of normal houses - the max height² will be a huge fraction of total height². The test asks: \"Is the tallest building so extreme that it indicates a discrete 'jump event' rather than normal urban development?\" If one building accounts for 10% of total squared heights when it should only be 1-2%, you've detected a jump.","rawContent":"The Andersen-Dobrev-Schaumburg (ADS) Test is a nonparametric jump detection method that compares the maximum absolute return over a period to the sum of squared returns, exploiting the fact that these quantities scale differently under diffusion versus jump processes. Unlike variance-ratio tests (like BNS), the ADS test is specifically designed to detect even a single large jump in a sample, making it particularly powerful for identifying isolated jumps such as those caused by major news announcements, flash crashes, or other discrete information events. The test has better finite-sample power than BNS when jumps are rare but large.\n\nThe intuition is straightforward: under continuous diffusion, the maximum return scales like √(variance), but under jumps, a single large jump can make the maximum much larger than √(variance) would predict. The test statistic compares the squared maximum return to the sum of squared returns (realized variance), creating a ratio that should be small under diffusion but large under jumps. Critical values come from extreme value theory for the maximum of Brownian motion, enabling formal hypothesis testing.\n\nMathematical formulation:\n\nTest statistic:\nξ_n = (max_i |r_i|²) / RV = max_i |r_i|² / Σ r_i²\n\nAlternative formulation:\nξ*_n = max_i |r_i| / √(RV)\n\nUnder H₀ (no jumps, continuous diffusion):\nξ_n →^d max(B_s²) where B is Brownian bridge on [0,1]\n\nCritical values from simulation/theory:\nFor n large, critical value c_α such that P(ξ_n > c_α | H₀) = α\n\nTypical values:\nc_0.05 ≈ 0.04-0.05\nc_0.01 ≈ 0.06-0.08\n\nNormalized version:\nz = (ξ_n - μ_ξ) / σ_ξ\n\nWhere μ_ξ and σ_ξ are moments of the null distribution\n\nDecision rule:\nReject H₀ (declare jump) if ξ_n > c_α\n\nJump identification:\nIf reject H₀, the jump occurred at i* = arg max_i |r_i|\n\nPower characteristics:\n- High power against single large jump\n- Moderate power against multiple small jumps\n- Complements BNS test (use both)\n\nExtensions:\n- Subsampling for critical values\n- Block-wise application for jump localization\n- Multivariate version\n\nRobustness:\n- Requires fewer distributional assumptions than parametric tests\n- Works well with finite samples\n- Less sensitive to volatility estimation than Lee-Mykland\n\nAndersen-Dobrev-Schaumburg Test is like checking if a city's tallest building is suspiciously tall compared to total building height. Under normal growth (continuous), the tallest building should be roughly √n times the average height. But if there's a freak \"jump\" - like someone built the Burj Khalifa in a town of normal houses - the max height² will be a huge fraction of total height². The test asks: \"Is the tallest building so extreme that it indicates a discrete 'jump event' rather than normal urban development?\" If one building accounts for 10% of total squared heights when it should only be 1-2%, you've detected a jump.","tags":["Jump Detection"],"relPath":"public/concept-list/list-concepts/group 19/andersen_dobrev_schaumburg_test.txt","hasFullInfo":true},{"id":428,"title":"Archimedean Copulas (Clayton, Gumbel, Frank)","filename":"archimedean_copulas.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"One-parameter families","overview":"Archimedean Copulas are a family of copulas constructed using a generator function φ that creates dependence structure through a simple, elegant mathematical relationship. The three most common Archimedean copulas - Clayton, Gumbel, and Frank - each capture different types of asymmetric tail dependence patterns observed in financial markets. Unlike elliptical copulas (Gaussian, t), Archimedean copulas can model asymmetric dependence where correlation differs between upper and lower tails, making them valuable for capturing the empirical fact that asset crashes are more correlated than rallies.","formula":"Each copula is characterized by a single parameter θ that controls dependence strength:\n\n**Clayton Copula**: Emphasizes lower tail dependence (joint crashes) with no upper tail dependence. Useful for modeling scenarios where assets fall together but rise independently. Parameter θ ∈ (-1,∞), with θ=0 giving independence.\n\n**Gumbel Copula**: Emphasizes upper tail dependence (joint booms) with no lower tail dependence. Less common in finance since crashes typically show stronger correlation than rallies. Parameter θ ∈ [1,∞).\n\n**Frank Copula**: Symmetric dependence with no tail dependence, similar to Gaussian but allows for negative dependence. Parameter θ ∈ (-∞,∞) with θ=0 giving independence.\n\nMathematical formulations:\n\nClayton Copula:\nC(u,v) = (u^(-θ) + v^(-θ) - 1)^(-1/θ)\nGenerator: φ(t) = (t^(-θ) - 1)/θ\nTail dependence: λ_lower = 2^(-1/θ), λ_upper = 0\n\nGumbel Copula:\nC(u,v) = exp(-((-ln u)^θ + (-ln v)^θ)^(1/θ))\nGenerator: φ(t) = (-ln t)^θ\nTail dependence: λ_upper = 2 - 2^(1/θ), λ_lower = 0\n\nFrank Copula:\nC(u,v) = -1/θ · ln(1 + (e^(-θu) - 1)(e^(-θv) - 1)/(e^(-θ) - 1))\nGenerator: φ(t) = -ln((e^(-θt) - 1)/(e^(-θ) - 1))\nTail dependence: λ_upper = λ_lower = 0\n\nKendall's tau relationships:\nClayton: τ = θ/(θ+2)\nGumbel: τ = 1 - 1/θ\nFrank: τ = 1 - 4/θ · (D₁(θ) - 1) where D₁ is Debye function","parameters":"","intuition":"Archimedean Copulas are like different ways two people's moods might be connected. Clayton is like a couple where if one person gets depressed, the other usually does too (lower tail dependence), but when one is happy, the other might or might not be (no upper tail). Gumbel is the opposite - they celebrate together but suffer separately. Frank is like roommates who have some general mood connection but don't particularly sync up during extreme good or bad times. Each captures a different \"correlation personality.\"","rawContent":"Archimedean Copulas are a family of copulas constructed using a generator function φ that creates dependence structure through a simple, elegant mathematical relationship. The three most common Archimedean copulas - Clayton, Gumbel, and Frank - each capture different types of asymmetric tail dependence patterns observed in financial markets. Unlike elliptical copulas (Gaussian, t), Archimedean copulas can model asymmetric dependence where correlation differs between upper and lower tails, making them valuable for capturing the empirical fact that asset crashes are more correlated than rallies.\n\nEach copula is characterized by a single parameter θ that controls dependence strength:\n\n**Clayton Copula**: Emphasizes lower tail dependence (joint crashes) with no upper tail dependence. Useful for modeling scenarios where assets fall together but rise independently. Parameter θ ∈ (-1,∞), with θ=0 giving independence.\n\n**Gumbel Copula**: Emphasizes upper tail dependence (joint booms) with no lower tail dependence. Less common in finance since crashes typically show stronger correlation than rallies. Parameter θ ∈ [1,∞).\n\n**Frank Copula**: Symmetric dependence with no tail dependence, similar to Gaussian but allows for negative dependence. Parameter θ ∈ (-∞,∞) with θ=0 giving independence.\n\nMathematical formulations:\n\nClayton Copula:\nC(u,v) = (u^(-θ) + v^(-θ) - 1)^(-1/θ)\nGenerator: φ(t) = (t^(-θ) - 1)/θ\nTail dependence: λ_lower = 2^(-1/θ), λ_upper = 0\n\nGumbel Copula:\nC(u,v) = exp(-((-ln u)^θ + (-ln v)^θ)^(1/θ))\nGenerator: φ(t) = (-ln t)^θ\nTail dependence: λ_upper = 2 - 2^(1/θ), λ_lower = 0\n\nFrank Copula:\nC(u,v) = -1/θ · ln(1 + (e^(-θu) - 1)(e^(-θv) - 1)/(e^(-θ) - 1))\nGenerator: φ(t) = -ln((e^(-θt) - 1)/(e^(-θ) - 1))\nTail dependence: λ_upper = λ_lower = 0\n\nKendall's tau relationships:\nClayton: τ = θ/(θ+2)\nGumbel: τ = 1 - 1/θ\nFrank: τ = 1 - 4/θ · (D₁(θ) - 1) where D₁ is Debye function\n\nArchimedean Copulas are like different ways two people's moods might be connected. Clayton is like a couple where if one person gets depressed, the other usually does too (lower tail dependence), but when one is happy, the other might or might not be (no upper tail). Gumbel is the opposite - they celebrate together but suffer separately. Frank is like roommates who have some general mood connection but don't particularly sync up during extreme good or bad times. Each captures a different \"correlation personality.\"","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/archimedean_copulas.txt","hasFullInfo":true},{"id":429,"title":"Autoregressive Fractionally Integrated Moving Average (ARFIMA)","filename":"arfima.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Long memory ARMA","overview":"ARFIMA models extend the classical ARIMA framework by allowing fractional differencing, enabling the representation of long-memory processes where shocks decay hyperbolically rather than exponentially. Traditional ARIMA models can only capture short memory (exponential decay with differencing order d=0) or unit roots (no decay with d=1), missing the intermediate regime where autocorrelations decay slowly but eventually vanish. ARFIMA fills this gap with fractional d ∈ (0,1), perfectly suited for financial series like volatility, trading volume, and order flow that exhibit persistent but stationary dependencies extending over long horizons.","formula":"The fractional differencing operator (1-L)^d is defined through binomial expansion, creating a filter with weights that decay at rate k^(-d-1). When 0 < d < 0.5, the process is stationary and mean-reverting but highly persistent; when 0.5 ≤ d < 1, it's nonstationary but still mean-reverting in differences. This flexibility captures empirical features of financial data that puzzled researchers for decades: volatility shocks that persist for weeks but eventually fade, order imbalances that slowly dissipate, and price impact that decays gradually rather than instantly.\n\nMathematical formulation:\n\nARFIMA(p,d,q) model:\nΦ(L)(1-L)^d (X_t - μ) = Θ(L)ε_t","parameters":"Where:\n- Φ(L) = 1 - φ₁L - φ₂L² - ... - φ_pL^p (AR polynomial)\n- Θ(L) = 1 + θ₁L + θ₂L² + ... + θ_qL^q (MA polynomial)\n- (1-L)^d is fractional differencing operator\n- ε_t ~ WN(0, σ²)\n\nFractional differencing:\n(1-L)^d = Σ_{k=0}^∞ π_k L^k\n\nWhere:\nπ_k = Γ(k-d)/(Γ(-d)Γ(k+1)) = (-d choose k)\n\nFor small k: π_k ≈ (-d/k) · π_{k-1}\nFor large k: π_k ~ k^(-d-1)\n\nAutocorrelation function:\nρ(k) ~ C · k^(2d-1) as k→∞\n\nLong memory condition:\nΣ_{k=1}^∞ ρ(k) = ∞ when d > 0\n\nSpectral density near zero frequency:\nf(ω) ~ C · ω^(-2d) as ω→0\n\nStationarity: -0.5 < d < 0.5\nInvertibility: -0.5 < d < 0.5 with MA roots outside unit circle\n\nCommon ranges:\n- d ≈ 0.3-0.4 for volatility\n- d ≈ 0.2-0.3 for volume\n- d ≈ 0.4-0.5 for absolute returns\n\nEstimation methods:\n- Geweke-Porter-Hudak (GPH): regression in spectral domain\n- Modified GPH: improved finite-sample properties  \n- Whittle MLE: frequency-domain likelihood\n- Exact MLE: time-domain with Kalman filter\n- Wavelet: multiresolution estimation","intuition":"ARFIMA is like modeling how long a rumor persists in a social network. Simple models say rumors either die out immediately (short memory) or never die (unit root). But real rumors show \"long memory\" - they persist for days or weeks, gradually fading but taking surprisingly long to fully disappear. ARFIMA with d=0.3 says: \"Today's rumor strength depends on ALL past days, with yesterday having most influence, but even rumors from 10 days ago still have a small effect.\" The fractional d captures this \"long fade\" property perfectly.","rawContent":"ARFIMA models extend the classical ARIMA framework by allowing fractional differencing, enabling the representation of long-memory processes where shocks decay hyperbolically rather than exponentially. Traditional ARIMA models can only capture short memory (exponential decay with differencing order d=0) or unit roots (no decay with d=1), missing the intermediate regime where autocorrelations decay slowly but eventually vanish. ARFIMA fills this gap with fractional d ∈ (0,1), perfectly suited for financial series like volatility, trading volume, and order flow that exhibit persistent but stationary dependencies extending over long horizons.\n\nThe fractional differencing operator (1-L)^d is defined through binomial expansion, creating a filter with weights that decay at rate k^(-d-1). When 0 < d < 0.5, the process is stationary and mean-reverting but highly persistent; when 0.5 ≤ d < 1, it's nonstationary but still mean-reverting in differences. This flexibility captures empirical features of financial data that puzzled researchers for decades: volatility shocks that persist for weeks but eventually fade, order imbalances that slowly dissipate, and price impact that decays gradually rather than instantly.\n\nMathematical formulation:\n\nARFIMA(p,d,q) model:\nΦ(L)(1-L)^d (X_t - μ) = Θ(L)ε_t\n\nWhere:\n- Φ(L) = 1 - φ₁L - φ₂L² - ... - φ_pL^p (AR polynomial)\n- Θ(L) = 1 + θ₁L + θ₂L² + ... + θ_qL^q (MA polynomial)\n- (1-L)^d is fractional differencing operator\n- ε_t ~ WN(0, σ²)\n\nFractional differencing:\n(1-L)^d = Σ_{k=0}^∞ π_k L^k\n\nWhere:\nπ_k = Γ(k-d)/(Γ(-d)Γ(k+1)) = (-d choose k)\n\nFor small k: π_k ≈ (-d/k) · π_{k-1}\nFor large k: π_k ~ k^(-d-1)\n\nAutocorrelation function:\nρ(k) ~ C · k^(2d-1) as k→∞\n\nLong memory condition:\nΣ_{k=1}^∞ ρ(k) = ∞ when d > 0\n\nSpectral density near zero frequency:\nf(ω) ~ C · ω^(-2d) as ω→0\n\nStationarity: -0.5 < d < 0.5\nInvertibility: -0.5 < d < 0.5 with MA roots outside unit circle\n\nCommon ranges:\n- d ≈ 0.3-0.4 for volatility\n- d ≈ 0.2-0.3 for volume\n- d ≈ 0.4-0.5 for absolute returns\n\nEstimation methods:\n- Geweke-Porter-Hudak (GPH): regression in spectral domain\n- Modified GPH: improved finite-sample properties  \n- Whittle MLE: frequency-domain likelihood\n- Exact MLE: time-domain with Kalman filter\n- Wavelet: multiresolution estimation\n\nARFIMA is like modeling how long a rumor persists in a social network. Simple models say rumors either die out immediately (short memory) or never die (unit root). But real rumors show \"long memory\" - they persist for days or weeks, gradually fading but taking surprisingly long to fully disappear. ARFIMA with d=0.3 says: \"Today's rumor strength depends on ALL past days, with yesterday having most influence, but even rumors from 10 days ago still have a small effect.\" The fractional d captures this \"long fade\" property perfectly.","tags":["Moving Averages"],"relPath":"public/concept-list/list-concepts/group 19/arfima.txt","hasFullInfo":true},{"id":430,"title":"Barndorff-Nielsen-Shephard Test","filename":"barndorff_nielsen_shephard_test.txt","group":"group 19","groupNum":19,"categoryId":46,"categoryTitle":"46. JUMP DETECTION & DISCONTINUITY","subcategory":"General","summary":"Bipower-based test","overview":"The Barndorff-Nielsen-Shephard (BNS) Test is a formal statistical test for the presence of jumps in asset prices that compares realized variance to bipower variation and uses their difference as a test statistic. Unlike the Lee-Mykland test which detects individual jumps observation-by-observation, the BNS test evaluates whether jumps contributed significantly to total variation over a full day or period, providing an aggregate measure of jump activity. The test has a known asymptotic distribution, enabling rigorous hypothesis testing about whether the observed price path contains significant jump components or is consistent with pure continuous diffusion.","formula":"The key insight is that under the null hypothesis of no jumps, realized variance and bipower variation converge to the same limit (integrated variance), so their difference should be negligible. Under the alternative of jumps present, realized variance exceeds bipower variation by the jump contribution. The test statistic standardizes this difference using a consistent estimator of its asymptotic variance (based on tripower quarticity), yielding a statistic that is asymptotically standard normal under the null. This enables standard hypothesis testing with known Type I error rates.\n\nMathematical formulation:\n\nTest statistic:\nz = (RV - BV) / √(θ · TQ)","parameters":"Where:\nRV = Σ r_i² (Realized Variance)\nBV = μ₁⁻² Σ|r_i||r_{i+1}| (Bipower Variation)\nTQ = n · Σ r_i⁴ (Tripower Quarticity, variance estimator)\nθ = (π²/4 + π - 5) ≈ 0.609 (theoretical constant)\n\nUnder H₀ (no jumps): z ~ N(0,1) asymptotically\n\nModified version (max operator for robustness):\nz_max = max(RV - BV, 0) / √(θ · TQ)\n\nRelative jump contribution:\nRJ = max(0, (RV - BV)/RV)\n\nThis measures fraction of total variance from jumps\n\nTripower Quarticity (consistent under jumps):\nTQ = n · μ_(4/3)⁻³ Σ|r_i|^(4/3)|r_{i+1}|^(4/3)|r_{i+2}|^(4/3)\n\nWhere μ_(4/3) = 2^(2/3)Γ(5/6)/√π ≈ 0.831\n\nAlternative variance estimator:\nQV = (n/3) · Σ r_i⁴ (Quad Power Variation)\n\nDecision rule:\nReject H₀ if z > z_α (e.g., z > 1.96 for α = 0.05)\n\nExtensions:\n- Ratio statistic: (RV-BV)/BV\n- Log-ratio: log(RV/BV)\n- Multivariate version for cojumps","intuition":"Barndorff-Nielsen-Shephard Test is like testing whether a hiking trail gained elevation smoothly (continuous) or had steep stairs/cliffs (jumps). You measure total elevation gain (RV) and also measure it using a method that filters out steep sections (BV). If total gain is 1000ft and filtered gain is 950ft, the 50ft difference suggests 5% came from steep jumps rather than gradual slope. The test asks: \"Is 50ft large enough to conclude there were real stairs/cliffs, or could this difference just be measurement noise from a purely smooth trail?\" The z-score tells you how many standard deviations away from \"smooth trail\" you are.","rawContent":"The Barndorff-Nielsen-Shephard (BNS) Test is a formal statistical test for the presence of jumps in asset prices that compares realized variance to bipower variation and uses their difference as a test statistic. Unlike the Lee-Mykland test which detects individual jumps observation-by-observation, the BNS test evaluates whether jumps contributed significantly to total variation over a full day or period, providing an aggregate measure of jump activity. The test has a known asymptotic distribution, enabling rigorous hypothesis testing about whether the observed price path contains significant jump components or is consistent with pure continuous diffusion.\n\nThe key insight is that under the null hypothesis of no jumps, realized variance and bipower variation converge to the same limit (integrated variance), so their difference should be negligible. Under the alternative of jumps present, realized variance exceeds bipower variation by the jump contribution. The test statistic standardizes this difference using a consistent estimator of its asymptotic variance (based on tripower quarticity), yielding a statistic that is asymptotically standard normal under the null. This enables standard hypothesis testing with known Type I error rates.\n\nMathematical formulation:\n\nTest statistic:\nz = (RV - BV) / √(θ · TQ)\n\nWhere:\nRV = Σ r_i² (Realized Variance)\nBV = μ₁⁻² Σ|r_i||r_{i+1}| (Bipower Variation)\nTQ = n · Σ r_i⁴ (Tripower Quarticity, variance estimator)\nθ = (π²/4 + π - 5) ≈ 0.609 (theoretical constant)\n\nUnder H₀ (no jumps): z ~ N(0,1) asymptotically\n\nModified version (max operator for robustness):\nz_max = max(RV - BV, 0) / √(θ · TQ)\n\nRelative jump contribution:\nRJ = max(0, (RV - BV)/RV)\n\nThis measures fraction of total variance from jumps\n\nTripower Quarticity (consistent under jumps):\nTQ = n · μ_(4/3)⁻³ Σ|r_i|^(4/3)|r_{i+1}|^(4/3)|r_{i+2}|^(4/3)\n\nWhere μ_(4/3) = 2^(2/3)Γ(5/6)/√π ≈ 0.831\n\nAlternative variance estimator:\nQV = (n/3) · Σ r_i⁴ (Quad Power Variation)\n\nDecision rule:\nReject H₀ if z > z_α (e.g., z > 1.96 for α = 0.05)\n\nExtensions:\n- Ratio statistic: (RV-BV)/BV\n- Log-ratio: log(RV/BV)\n- Multivariate version for cojumps\n\nBarndorff-Nielsen-Shephard Test is like testing whether a hiking trail gained elevation smoothly (continuous) or had steep stairs/cliffs (jumps). You measure total elevation gain (RV) and also measure it using a method that filters out steep sections (BV). If total gain is 1000ft and filtered gain is 950ft, the 50ft difference suggests 5% came from steep jumps rather than gradual slope. The test asks: \"Is 50ft large enough to conclude there were real stairs/cliffs, or could this difference just be measurement noise from a purely smooth trail?\" The z-score tells you how many standard deviations away from \"smooth trail\" you are.","tags":["Jump Detection"],"relPath":"public/concept-list/list-concepts/group 19/barndorff_nielsen_shephard_test.txt","hasFullInfo":true},{"id":431,"title":"Bipower Variation","filename":"bipower_variation.txt","group":"group 19","groupNum":19,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Jump-robust volatility estimator","overview":"Bipower Variation is a robust estimator of integrated variance that remains consistent in the presence of price jumps, unlike standard realized variance which conflates continuous volatility with jump contributions. The method exploits the fact that products of adjacent absolute returns have different probability limits depending on whether returns are generated by continuous diffusion (where products scale with volatility) or by jumps (where products are dominated by the jump component). By using products of absolute returns rather than squared returns, bipower variation downweights jump contributions while preserving information about continuous volatility.","formula":"The key insight comes from the theory that for a continuous semimartingale, |r_t|·|r_{t+1}| ~ volatility², but jump contamination affects squared returns more severely than products of absolute returns. This property enables bipower variation to serve as a jump-robust baseline against which realized variance can be compared - the difference between realized variance and bipower variation estimates the contribution of jumps to total variation. This decomposition is fundamental for volatility forecasting, option pricing, and risk management where jump and diffusive risks require different treatment.\n\nMathematical formulation:\n\nRealized Variance (jump-contaminated):\nRV = Σ r_i² where r_i are intraday returns\n\nBipower Variation (jump-robust):\nBV = μ₁⁻² · Σ|r_i|·|r_{i+1}|\n\nWhere μ₁ = E[|Z|] = √(2/π) ≈ 0.7979 for Z ~ N(0,1)\n\nAlternative form:\nBV = (π/2) · Σ|r_i|·|r_{i+1}|\n\nMulti-power variation (higher orders):\nMPV(p,q) = μ_p⁻¹·μ_q⁻¹ · Σ|r_i|^p·|r_{i+1}|^q\n\nWhere μ_p = E[|Z|^p] = 2^(p/2)·Γ((p+1)/2)/√π\n\nJump component estimate:\nJump_Var = max(0, RV - BV)\n\nRatio statistic:\nz = (RV - BV)/√(θ·TriPower) where θ = (π²/4 + π - 5)\n\nTriPower Variation:\nTPV = n^(1/3)·μ_(4/3)⁻³ · Σ|r_i|^(4/3)·|r_{i+1}|^(4/3)·|r_{i+2}|^(4/3)","parameters":"","intuition":"Bipower Variation is like measuring how bumpy a road is by feeling two adjacent spots at a time instead of measuring each bump individually. If you hit a single huge pothole (a jump), measuring it alone gives you a massive spike in \"bumpiness.\" But if you multiply the bumpiness at position 1 with position 2, that huge pothole only affects two measurements, and the product spreads out its impact. The general road texture (continuous volatility) shows up consistently in all the position-pairs, while the rare pothole gets diluted. This lets you estimate road texture while filtering out rare potholes.","rawContent":"Bipower Variation is a robust estimator of integrated variance that remains consistent in the presence of price jumps, unlike standard realized variance which conflates continuous volatility with jump contributions. The method exploits the fact that products of adjacent absolute returns have different probability limits depending on whether returns are generated by continuous diffusion (where products scale with volatility) or by jumps (where products are dominated by the jump component). By using products of absolute returns rather than squared returns, bipower variation downweights jump contributions while preserving information about continuous volatility.\n\nThe key insight comes from the theory that for a continuous semimartingale, |r_t|·|r_{t+1}| ~ volatility², but jump contamination affects squared returns more severely than products of absolute returns. This property enables bipower variation to serve as a jump-robust baseline against which realized variance can be compared - the difference between realized variance and bipower variation estimates the contribution of jumps to total variation. This decomposition is fundamental for volatility forecasting, option pricing, and risk management where jump and diffusive risks require different treatment.\n\nMathematical formulation:\n\nRealized Variance (jump-contaminated):\nRV = Σ r_i² where r_i are intraday returns\n\nBipower Variation (jump-robust):\nBV = μ₁⁻² · Σ|r_i|·|r_{i+1}|\n\nWhere μ₁ = E[|Z|] = √(2/π) ≈ 0.7979 for Z ~ N(0,1)\n\nAlternative form:\nBV = (π/2) · Σ|r_i|·|r_{i+1}|\n\nMulti-power variation (higher orders):\nMPV(p,q) = μ_p⁻¹·μ_q⁻¹ · Σ|r_i|^p·|r_{i+1}|^q\n\nWhere μ_p = E[|Z|^p] = 2^(p/2)·Γ((p+1)/2)/√π\n\nJump component estimate:\nJump_Var = max(0, RV - BV)\n\nRatio statistic:\nz = (RV - BV)/√(θ·TriPower) where θ = (π²/4 + π - 5)\n\nTriPower Variation:\nTPV = n^(1/3)·μ_(4/3)⁻³ · Σ|r_i|^(4/3)·|r_{i+1}|^(4/3)·|r_{i+2}|^(4/3)\n\nBipower Variation is like measuring how bumpy a road is by feeling two adjacent spots at a time instead of measuring each bump individually. If you hit a single huge pothole (a jump), measuring it alone gives you a massive spike in \"bumpiness.\" But if you multiply the bumpiness at position 1 with position 2, that huge pothole only affects two measurements, and the product spreads out its impact. The general road texture (continuous volatility) shows up consistently in all the position-pairs, while the rare pothole gets diluted. This lets you estimate road texture while filtering out rare potholes.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 19/bipower_variation.txt","hasFullInfo":true},{"id":432,"title":"Detrended Fluctuation Analysis (DFA)","filename":"detrended_fluctuation_analysis.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Scaling exponent","overview":"Detrended Fluctuation Analysis is a method for detecting long-range correlations in time series that is more robust to non-stationarity and local trends than traditional R/S analysis. DFA works by integrating the series to create a random walk, then systematically removing local trends of varying polynomial order before measuring fluctuations. This detrending step makes DFA particularly valuable for financial data which often contains local trends, regime changes, or other non-stationarities that can create spurious Hurst estimates with simpler methods. The result is a scaling exponent α (analogous to the Hurst exponent H) that characterizes persistence, randomness, or antipersistence.","formula":"The key innovation is the piecewise detrending: instead of assuming the series has a single global trend (which may not exist or may change), DFA removes a fitted polynomial trend within each window before computing fluctuations. This local detrending preserves the correlation structure we want to measure while removing contaminating trends that would bias simpler estimators. Higher-order DFA (using quadratic, cubic, or higher polynomials) can handle more complex local trends, making it suitable for real-world data where underlying dynamics shift over time.\n\nMathematical procedure:\n\n1. **Integration (create profile):**\n   Y(k) = Σ_{i=1}^k [X_i - X̄]\n\nTransforms series into cumulative sum (random walk)\n\n2. **Divide into windows:**\n   Split Y(k) into non-overlapping segments of length n\n\n3. **Local detrending:**\n   For each segment v, fit polynomial trend:\n   Y_v(k) = a_0 + a_1k + a_2k² + ... + a_p k^p\n\nCalculate residuals: ε_v(k) = Y(k) - Y_v(k)\n\n4. **Compute fluctuation:**\n   F²(v,n) = (1/n) Σ_{k=1}^n ε_v(k)²\n\n5. **Average over segments:**\n   F(n) = √[(1/N_s) Σ_v F²(v,n)]\n\n6. **Scaling analysis:**\n   F(n) ~ n^α\n\nlog(F(n)) = c + α·log(n)\n\nDFA orders:\n\n- **DFA-1:** Linear detrending (removes constant + linear trend)\n- **DFA-2:** Quadratic detrending (removes up to quadratic)\n- **DFA-k:** k-th order polynomial detrending\n\nRelationship to Hurst exponent:\n\nFor stationary series: α = H\nFor integrated series: α = H + 1\nFor differences of fBm: α = H\n\nInterpretation:\n\nα = 0.5: Uncorrelated (white noise)\n0.5 < α < 1.0: Persistent long-range correlations\nα = 1.0: 1/f noise (pink noise)\nα > 1.0: Non-stationary, strong trends\nα < 0.5: Antipersistent (mean-reverting)\n\nAdvantages over R/S:\n\n- Robust to polynomial trends\n- Less sensitive to edge effects\n- Better finite-sample properties\n- Handles non-stationarity\n\nApplications:\n\n- Volatility scaling (α ≈ 0.6-0.8 typical)\n- Return autocorrelation (α ≈ 0.5, near random)\n- Trading volume persistence\n- Order flow dynamics\n\nWindow size selection:\nn_min ≈ 10 (avoid overfitting)\nn_max ≈ N/10 (need multiple windows)","parameters":"","intuition":"Detrended Fluctuation Analysis is like measuring the long-term bounciness of a road, but first removing hills and valleys that would confuse your measurement. If you drive over a bumpy road that also goes up and down mountains, simply measuring \"how far from flat am I?\" would capture both the mountain terrain AND the bumpiness. DFA says: \"In each 1-mile segment, fit the best smooth hill/valley curve, subtract it out, THEN measure the remaining bumpiness.\" This way you isolate the road texture (correlation) from the overall terrain (trends). The scaling exponent α tells you if bumps have memory: α>0.5 means hitting one bump predicts more bumps ahead.","rawContent":"Detrended Fluctuation Analysis is a method for detecting long-range correlations in time series that is more robust to non-stationarity and local trends than traditional R/S analysis. DFA works by integrating the series to create a random walk, then systematically removing local trends of varying polynomial order before measuring fluctuations. This detrending step makes DFA particularly valuable for financial data which often contains local trends, regime changes, or other non-stationarities that can create spurious Hurst estimates with simpler methods. The result is a scaling exponent α (analogous to the Hurst exponent H) that characterizes persistence, randomness, or antipersistence.\n\nThe key innovation is the piecewise detrending: instead of assuming the series has a single global trend (which may not exist or may change), DFA removes a fitted polynomial trend within each window before computing fluctuations. This local detrending preserves the correlation structure we want to measure while removing contaminating trends that would bias simpler estimators. Higher-order DFA (using quadratic, cubic, or higher polynomials) can handle more complex local trends, making it suitable for real-world data where underlying dynamics shift over time.\n\nMathematical procedure:\n\n1. **Integration (create profile):**\n   Y(k) = Σ_{i=1}^k [X_i - X̄]\n   \n   Transforms series into cumulative sum (random walk)\n\n2. **Divide into windows:**\n   Split Y(k) into non-overlapping segments of length n\n\n3. **Local detrending:**\n   For each segment v, fit polynomial trend:\n   Y_v(k) = a_0 + a_1k + a_2k² + ... + a_p k^p\n   \n   Calculate residuals: ε_v(k) = Y(k) - Y_v(k)\n\n4. **Compute fluctuation:**\n   F²(v,n) = (1/n) Σ_{k=1}^n ε_v(k)²\n\n5. **Average over segments:**\n   F(n) = √[(1/N_s) Σ_v F²(v,n)]\n\n6. **Scaling analysis:**\n   F(n) ~ n^α\n   \n   log(F(n)) = c + α·log(n)\n\nDFA orders:\n\n- **DFA-1:** Linear detrending (removes constant + linear trend)\n- **DFA-2:** Quadratic detrending (removes up to quadratic)\n- **DFA-k:** k-th order polynomial detrending\n\nRelationship to Hurst exponent:\n\nFor stationary series: α = H\nFor integrated series: α = H + 1\nFor differences of fBm: α = H\n\nInterpretation:\n\nα = 0.5: Uncorrelated (white noise)\n0.5 < α < 1.0: Persistent long-range correlations\nα = 1.0: 1/f noise (pink noise)\nα > 1.0: Non-stationary, strong trends\nα < 0.5: Antipersistent (mean-reverting)\n\nAdvantages over R/S:\n\n- Robust to polynomial trends\n- Less sensitive to edge effects\n- Better finite-sample properties\n- Handles non-stationarity\n\nApplications:\n\n- Volatility scaling (α ≈ 0.6-0.8 typical)\n- Return autocorrelation (α ≈ 0.5, near random)\n- Trading volume persistence\n- Order flow dynamics\n\nWindow size selection:\nn_min ≈ 10 (avoid overfitting)\nn_max ≈ N/10 (need multiple windows)\n\nDetrended Fluctuation Analysis is like measuring the long-term bounciness of a road, but first removing hills and valleys that would confuse your measurement. If you drive over a bumpy road that also goes up and down mountains, simply measuring \"how far from flat am I?\" would capture both the mountain terrain AND the bumpiness. DFA says: \"In each 1-mile segment, fit the best smooth hill/valley curve, subtract it out, THEN measure the remaining bumpiness.\" This way you isolate the road texture (correlation) from the overall terrain (trends). The scaling exponent α tells you if bumps have memory: α>0.5 means hitting one bump predicts more bumps ahead.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 19/detrended_fluctuation_analysis.txt","hasFullInfo":true},{"id":433,"title":"Dynamic Copula Models","filename":"dynamic_copula_models.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Time-varying dependence","overview":"Dynamic Copula Models extend static copula frameworks by allowing dependence parameters to evolve over time in response to changing market conditions. While static copulas assume constant correlation structure, dynamic models recognize that asset dependencies strengthen during crises, weaken during calm periods, and respond to volatility clustering, regime changes, and information flow. These time-varying copulas are essential for risk management and portfolio optimization in realistic market environments where correlation itself is a stochastic process.","formula":"Common approaches include:\n\n**GARCH-type dynamics**: Copula parameters follow GARCH-like evolution with autoregressive updates based on past dependence measures. Parameters evolve smoothly in response to realized correlations.\n\n**Regime-switching copulas**: Parameters jump discretely between states (crisis/normal/boom) governed by a hidden Markov model. Captures abrupt correlation changes during market transitions.\n\n**Observation-driven models**: Parameters update based on observable variables like rolling correlations, VIX, or realized co-volatility rather than latent states.\n\n**Time-varying vine copulas**: Entire vine structure can adapt - not just parameters but copula families and tree structure evolve with market regimes.\n\nMathematical specifications:\n\nGARCH-DCC (Dynamic Conditional Correlation) Copula:\nR_t = diag(Q_t)^(-1/2) · Q_t · diag(Q_t)^(-1/2)\nQ_t = (1-α-β)·Q̄ + α·ε_{t-1}ε'_{t-1} + β·Q_{t-1}\n\nWhere R_t is time-varying correlation matrix used in copula C_t(u,v; R_t)\n\nRegime-switching t-copula:\nC_t(u,v) = C^(t-copula)(u,v; ρ_t, ν_t)\nρ_t = ρ_{s_t}, ν_t = ν_{s_t}\nP(s_t=j | s_{t-1}=i) = p_ij (Markov transition probabilities)\n\nObservation-driven Clayton copula:\nθ_t = ω + α·|u_{t-1} - v_{t-1}| + β·θ_{t-1}\nC_t(u,v) = (u^(-θ_t) + v^(-θ_t) - 1)^(-1/θ_t)\n\nTime-varying tail dependence (for t-copula):\nλ_t = 2·t_{ν_t+1}(-√[(ν_t+1)(1-ρ_t)/(1+ρ_t)])\n\nEstimation typically uses:\n1. Two-step: Estimate marginals, then dynamic copula\n2. Full MLE: Joint estimation of all parameters\n3. Particle filters: For regime-switching models\n\nDynamic Copula Models are like modeling how a married couple's behavior coordination changes over time. When they're newlyweds, they do everything together (high correlation). After 20 years with kids, they sometimes operate independently (lower correlation). During a family crisis, they become tightly coordinated again (correlation spike). A static copula would pick one average correlation; a dynamic copula tracks how their coordination evolves based on their history and current life circumstances (the regime they're in).","parameters":"","intuition":"","rawContent":"Dynamic Copula Models extend static copula frameworks by allowing dependence parameters to evolve over time in response to changing market conditions. While static copulas assume constant correlation structure, dynamic models recognize that asset dependencies strengthen during crises, weaken during calm periods, and respond to volatility clustering, regime changes, and information flow. These time-varying copulas are essential for risk management and portfolio optimization in realistic market environments where correlation itself is a stochastic process.\n\nCommon approaches include:\n\n**GARCH-type dynamics**: Copula parameters follow GARCH-like evolution with autoregressive updates based on past dependence measures. Parameters evolve smoothly in response to realized correlations.\n\n**Regime-switching copulas**: Parameters jump discretely between states (crisis/normal/boom) governed by a hidden Markov model. Captures abrupt correlation changes during market transitions.\n\n**Observation-driven models**: Parameters update based on observable variables like rolling correlations, VIX, or realized co-volatility rather than latent states.\n\n**Time-varying vine copulas**: Entire vine structure can adapt - not just parameters but copula families and tree structure evolve with market regimes.\n\nMathematical specifications:\n\nGARCH-DCC (Dynamic Conditional Correlation) Copula:\nR_t = diag(Q_t)^(-1/2) · Q_t · diag(Q_t)^(-1/2)\nQ_t = (1-α-β)·Q̄ + α·ε_{t-1}ε'_{t-1} + β·Q_{t-1}\n\nWhere R_t is time-varying correlation matrix used in copula C_t(u,v; R_t)\n\nRegime-switching t-copula:\nC_t(u,v) = C^(t-copula)(u,v; ρ_t, ν_t)\nρ_t = ρ_{s_t}, ν_t = ν_{s_t}\nP(s_t=j | s_{t-1}=i) = p_ij (Markov transition probabilities)\n\nObservation-driven Clayton copula:\nθ_t = ω + α·|u_{t-1} - v_{t-1}| + β·θ_{t-1}\nC_t(u,v) = (u^(-θ_t) + v^(-θ_t) - 1)^(-1/θ_t)\n\nTime-varying tail dependence (for t-copula):\nλ_t = 2·t_{ν_t+1}(-√[(ν_t+1)(1-ρ_t)/(1+ρ_t)])\n\nEstimation typically uses:\n1. Two-step: Estimate marginals, then dynamic copula\n2. Full MLE: Joint estimation of all parameters\n3. Particle filters: For regime-switching models\n\nDynamic Copula Models are like modeling how a married couple's behavior coordination changes over time. When they're newlyweds, they do everything together (high correlation). After 20 years with kids, they sometimes operate independently (lower correlation). During a family crisis, they become tightly coordinated again (correlation spike). A static copula would pick one average correlation; a dynamic copula tracks how their coordination evolves based on their history and current life circumstances (the regime they're in).","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/dynamic_copula_models.txt","hasFullInfo":true},{"id":434,"title":"Fractional Brownian Motion","filename":"fractional_brownian_motion.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Self-similar process","overview":"Fractional Brownian Motion (fBm) is a continuous-time stochastic process that generalizes standard Brownian motion by introducing a Hurst exponent H ∈ (0,1) controlling the degree of long-range dependence and roughness of sample paths. Unlike standard Brownian motion (H=0.5) which has independent increments, fBm with H≠0.5 exhibits either positive dependence (H>0.5, persistent/trending) or negative dependence (H<0.5, antipersistent/mean-reverting). This flexibility makes fBm valuable for modeling diverse phenomena: persistent trends in prices, mean-reverting volatility, and rough volatility models that capture the erratic high-frequency behavior of realized volatility.","formula":"The Hurst parameter completely characterizes the process's memory and roughness properties. When H>0.5, positive increments tend to be followed by positive increments (persistence), creating trending behavior seen in some commodity prices or momentum strategies. When H<0.5, the process is rougher than Brownian motion, exhibiting rapid oscillations and negative autocorrelation appropriate for modeling microstructure effects or rough volatility. The case H=0.5 recovers standard Brownian motion with efficient markets and no memory.\n\nMathematical definition:\n\nFractional Brownian Motion B^H_t with Hurst exponent H has:\n\nCovariance function:\nE[B^H_t B^H_s] = (1/2)(|t|^{2H} + |s|^{2H} - |t-s|^{2H})\n\nVariance:\nVar(B^H_t) = t^{2H}\n\nIncrement correlation:\nCorr(B^H_t - B^H_s, B^H_u - B^H_t) = (1/2)((u-s)^{2H} - 2(t-s)^{2H} - (u-t)^{2H})\n\nFor small lags τ:\nCorr(increment_t, increment_{t+τ}) ≈ H(2H-1)τ^{2H-2}\n\nKey properties:\n\nSelf-similarity:\nB^H_{ct} =^d c^H B^H_t for any c > 0\n\nH-Hölder continuity:\n|B^H_t - B^H_s| ≤ C|t-s|^H almost surely\n\nLong-range dependence (H>0.5):\nΣ_{k=1}^∞ Corr(increment_1, increment_{k+1}) = ∞\n\nRoughness (H<0.5):\nPaths are more irregular than Brownian motion\n\nSemimartingale property:\nOnly H=0.5 is a semimartingale (important for stochastic calculus)\n\nRepresentations:\n\nIntegral representation:\nB^H_t = ∫_{-∞}^t K_H(t,s) dW_s\n\nWhere K_H is fractional kernel and W is Wiener process\n\nMandelbrot-Van Ness:\nB^H_t = (1/Γ(H+1/2)) ∫_{-∞}^0 [(t-s)^{H-1/2} - (-s)^{H-1/2}]dW_s + ∫_0^t (t-s)^{H-1/2}dW_s\n\nApplications:\n\nRough volatility (H≈0.1): σ_t = f(B^H_t)\nPersistent prices (H>0.5): S_t = S_0 exp(B^H_t)\nTraffic models, hydrology, terrain modeling","parameters":"","intuition":"Fractional Brownian Motion is like modeling a drunk person's walk home, but with different drunkenness levels. Standard Brownian (H=0.5): completely random steps, no memory. High H (H=0.7, persistent): if they stepped north, they tend to keep going north - momentum-like. Low H (H=0.3, rough): if they stepped north, they'll probably step south next - choppy, oscillating. The Hurst parameter H controls this \"memory\" in their steps. Financial markets sometimes show H>0.5 (trends) or H<0.5 (mean reversion), but rough volatility models use H≈0.1 to capture the ultra-choppy nature of realized variance.","rawContent":"Fractional Brownian Motion (fBm) is a continuous-time stochastic process that generalizes standard Brownian motion by introducing a Hurst exponent H ∈ (0,1) controlling the degree of long-range dependence and roughness of sample paths. Unlike standard Brownian motion (H=0.5) which has independent increments, fBm with H≠0.5 exhibits either positive dependence (H>0.5, persistent/trending) or negative dependence (H<0.5, antipersistent/mean-reverting). This flexibility makes fBm valuable for modeling diverse phenomena: persistent trends in prices, mean-reverting volatility, and rough volatility models that capture the erratic high-frequency behavior of realized volatility.\n\nThe Hurst parameter completely characterizes the process's memory and roughness properties. When H>0.5, positive increments tend to be followed by positive increments (persistence), creating trending behavior seen in some commodity prices or momentum strategies. When H<0.5, the process is rougher than Brownian motion, exhibiting rapid oscillations and negative autocorrelation appropriate for modeling microstructure effects or rough volatility. The case H=0.5 recovers standard Brownian motion with efficient markets and no memory.\n\nMathematical definition:\n\nFractional Brownian Motion B^H_t with Hurst exponent H has:\n\nCovariance function:\nE[B^H_t B^H_s] = (1/2)(|t|^{2H} + |s|^{2H} - |t-s|^{2H})\n\nVariance:\nVar(B^H_t) = t^{2H}\n\nIncrement correlation:\nCorr(B^H_t - B^H_s, B^H_u - B^H_t) = (1/2)((u-s)^{2H} - 2(t-s)^{2H} - (u-t)^{2H})\n\nFor small lags τ:\nCorr(increment_t, increment_{t+τ}) ≈ H(2H-1)τ^{2H-2}\n\nKey properties:\n\nSelf-similarity:\nB^H_{ct} =^d c^H B^H_t for any c > 0\n\nH-Hölder continuity:\n|B^H_t - B^H_s| ≤ C|t-s|^H almost surely\n\nLong-range dependence (H>0.5):\nΣ_{k=1}^∞ Corr(increment_1, increment_{k+1}) = ∞\n\nRoughness (H<0.5):\nPaths are more irregular than Brownian motion\n\nSemimartingale property:\nOnly H=0.5 is a semimartingale (important for stochastic calculus)\n\nRepresentations:\n\nIntegral representation:\nB^H_t = ∫_{-∞}^t K_H(t,s) dW_s\n\nWhere K_H is fractional kernel and W is Wiener process\n\nMandelbrot-Van Ness:\nB^H_t = (1/Γ(H+1/2)) ∫_{-∞}^0 [(t-s)^{H-1/2} - (-s)^{H-1/2}]dW_s + ∫_0^t (t-s)^{H-1/2}dW_s\n\nApplications:\n\nRough volatility (H≈0.1): σ_t = f(B^H_t)\nPersistent prices (H>0.5): S_t = S_0 exp(B^H_t)\nTraffic models, hydrology, terrain modeling\n\nFractional Brownian Motion is like modeling a drunk person's walk home, but with different drunkenness levels. Standard Brownian (H=0.5): completely random steps, no memory. High H (H=0.7, persistent): if they stepped north, they tend to keep going north - momentum-like. Low H (H=0.3, rough): if they stepped north, they'll probably step south next - choppy, oscillating. The Hurst parameter H controls this \"memory\" in their steps. Financial markets sometimes show H>0.5 (trends) or H<0.5 (mean reversion), but rough volatility models use H≈0.1 to capture the ultra-choppy nature of realized variance.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 19/fractional_brownian_motion.txt","hasFullInfo":true},{"id":435,"title":"Gaussian Copula","filename":"gaussian_copula.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Linear dependence","overview":"The Gaussian Copula is a multivariate distribution function that models dependence between random variables using the correlation structure of a multivariate normal distribution while allowing the individual variables (marginals) to have any distribution. It separates the modeling of marginal behaviors (how each asset individually behaves) from the dependence structure (how assets move together), providing flexibility to capture realistic univariate distributions while imposing a specific correlation pattern. The Gaussian copula is characterized entirely by a correlation matrix and implies symmetric, elliptical dependence with relatively light tails in joint extremes.","formula":"The construction works by transforming each variable to a uniform distribution using its own cumulative distribution function, then applying the inverse normal CDF to get standard normal variables, which are then correlated according to a specified correlation matrix. This allows two assets to each follow any distribution (log-normal, Student-t, empirical, etc.) while their joint behavior follows the Gaussian dependence structure. The main limitation is that Gaussian copulas exhibit weak tail dependence - they underestimate the probability of joint extreme movements, which was famously problematic in credit risk models during the 2008 financial crisis.\n\nMathematical formulation:\n\nCopula function:\nC(u₁, u₂, ..., u_n; R) = Φ_R(Φ⁻¹(u₁), Φ⁻¹(u₂), ..., Φ⁻¹(u_n))","parameters":"Where:\n- Φ_R is the multivariate normal CDF with correlation matrix R\n- Φ⁻¹ is the inverse standard normal CDF\n- u_i = F_i(x_i) are the marginal CDFs transformed to uniform [0,1]\n\nFor two variables:\nC(u,v; ρ) = Φ_ρ(Φ⁻¹(u), Φ⁻¹(v))\n\nTail dependence:\nλ_upper = λ_lower = 0 (asymptotically independent tails unless ρ = ±1)\n\nSimulation procedure:\n1. Draw Z ~ N(0, R) from multivariate normal\n2. Transform to uniform: U_i = Φ(Z_i)\n3. Transform to target marginals: X_i = F_i⁻¹(U_i)","intuition":"A Gaussian Copula is like saying two dancers have \"correlated\" movements - when one moves left, the other tends to move left too - but each dancer has their own personal style. Dancer A might take small, precise steps (normal distribution), while Dancer B takes wild, unpredictable leaps (heavy-tailed distribution). The copula captures how their directions correlate without forcing them to have the same movement style. However, it assumes their coordination is \"well-behaved\" and doesn't capture situations where they're especially likely to both fall down at the same time.","rawContent":"The Gaussian Copula is a multivariate distribution function that models dependence between random variables using the correlation structure of a multivariate normal distribution while allowing the individual variables (marginals) to have any distribution. It separates the modeling of marginal behaviors (how each asset individually behaves) from the dependence structure (how assets move together), providing flexibility to capture realistic univariate distributions while imposing a specific correlation pattern. The Gaussian copula is characterized entirely by a correlation matrix and implies symmetric, elliptical dependence with relatively light tails in joint extremes.\n\nThe construction works by transforming each variable to a uniform distribution using its own cumulative distribution function, then applying the inverse normal CDF to get standard normal variables, which are then correlated according to a specified correlation matrix. This allows two assets to each follow any distribution (log-normal, Student-t, empirical, etc.) while their joint behavior follows the Gaussian dependence structure. The main limitation is that Gaussian copulas exhibit weak tail dependence - they underestimate the probability of joint extreme movements, which was famously problematic in credit risk models during the 2008 financial crisis.\n\nMathematical formulation:\n\nCopula function:\nC(u₁, u₂, ..., u_n; R) = Φ_R(Φ⁻¹(u₁), Φ⁻¹(u₂), ..., Φ⁻¹(u_n))\n\nWhere:\n- Φ_R is the multivariate normal CDF with correlation matrix R\n- Φ⁻¹ is the inverse standard normal CDF\n- u_i = F_i(x_i) are the marginal CDFs transformed to uniform [0,1]\n\nFor two variables:\nC(u,v; ρ) = Φ_ρ(Φ⁻¹(u), Φ⁻¹(v))\n\nTail dependence:\nλ_upper = λ_lower = 0 (asymptotically independent tails unless ρ = ±1)\n\nSimulation procedure:\n1. Draw Z ~ N(0, R) from multivariate normal\n2. Transform to uniform: U_i = Φ(Z_i)\n3. Transform to target marginals: X_i = F_i⁻¹(U_i)\n\nA Gaussian Copula is like saying two dancers have \"correlated\" movements - when one moves left, the other tends to move left too - but each dancer has their own personal style. Dancer A might take small, precise steps (normal distribution), while Dancer B takes wild, unpredictable leaps (heavy-tailed distribution). The copula captures how their directions correlate without forcing them to have the same movement style. However, it assumes their coordination is \"well-behaved\" and doesn't capture situations where they're especially likely to both fall down at the same time.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/gaussian_copula.txt","hasFullInfo":true},{"id":436,"title":"Geweke-Porter-Hudak (GPH) Estimator","filename":"gph_estimator.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Fractional differencing","overview":"The Geweke-Porter-Hudak (GPH) Estimator is a semiparametric method for estimating the fractional differencing parameter d in long-memory processes by exploiting the characteristic behavior of the spectral density near zero frequency. Unlike time-domain methods that must specify the full ARFIMA model structure, GPH focuses solely on the low-frequency behavior where long memory dominates, making it robust to short-term dynamics misspecification. The method performs a simple OLS regression in the frequency domain, using only the lowest frequencies where the power law relationship f(ω) ∝ ω^(-2d) is most pronounced.","formula":"The key insight is that long-memory processes have spectral densities that diverge at the origin with a specific power law determined by d. By taking logarithms and focusing on a band of low frequencies (excluding zero itself), the estimation problem becomes linear regression of log periodogram ordinates on log frequencies. The choice of bandwidth m (number of frequencies to include) involves a bias-variance tradeoff: small m reduces bias from short-memory contamination but increases variance; large m increases precision but may be biased by higher-frequency dynamics. Typical choices are m ≈ n^0.5 or n^0.6.\n\nMathematical foundation:\n\nSpectral density for ARFIMA process near ω=0:\nf(ω) = C·ω^(-2d)·g(ω)","parameters":"Where:\n- C is constant depending on innovation variance\n- ω^(-2d) is the long-memory component  \n- g(ω) is smooth, bounded away from 0 and ∞\n\nTaking logarithms:\nlog(f(ω_j)) = log(C·g(ω_j)) - 2d·log(ω_j)\n\nGPH regression:\n\nDependent variable: log(I(ω_j))\nWhere I(ω_j) is periodogram at frequency ω_j = 2πj/n\n\nRegression model:\nlog(I(ω_j)) = β_0 + β_1·log(ω_j) + ε_j\n\nFor j = 1, 2, ..., m (low frequencies only)\n\nOLS estimator:\nd̂_GPH = -β̂_1/2\n\nWhere β̂_1 is OLS slope coefficient\n\nAsymptotic properties:\n\nConsistency: d̂_GPH →^p d as n→∞, m→∞, m/n→0\n\nAsymptotic normality:\n√m(d̂_GPH - d) →^d N(0, π²/24)\n\nStandard error:\nSE(d̂_GPH) = π/(2√(6m))\n\nBandwidth selection:\n\nConservative: m = n^0.5 (original GPH)\nData-dependent: m = n^α with α ∈ [0.5, 0.8]\nPlug-in methods: Optimal m depending on d̂\n\nTypical choice: m = floor(n^0.6)\n\nRefinements:\n\n**Modified GPH (Robinson):** \nAccounts for tapering and trimming\n\n**Exact local Whittle:**\nMaximum likelihood version in frequency domain\n\n**Log-periodogram regression with tapered data:**\nReduces bias from end-point effects\n\nAdvantages:\n- No need to specify AR/MA orders\n- Robust to short-memory misspecification\n- Simple computation (OLS regression)\n- Theory well-developed\n\nDisadvantages:\n- Bandwidth choice affects results\n- Can be biased if strong short memory\n- Less efficient than MLE\n- Assumes stationarity\n\nApplications:\n- Quick d estimation for ARFIMA models\n- Long-memory detection tests\n- Preliminary analysis before full modeling","intuition":"GPH Estimator is like estimating how steep a mountain is by looking only at the foothill slopes while ignoring the peak details. Long memory in data creates a \"mountain\" in the frequency domain that rises sharply as you approach zero frequency (d>0) or descends into a valley (d<0). GPH says: \"Measure the slope in just the first m foothill frequencies, ignore the complicated peak structure.\" You plot log(height) vs log(frequency) for the lowest frequencies, and the slope is -2d. Pick too few frequencies (small m): noisy estimate. Pick too many: contaminated by peak details that aren't about long memory.","rawContent":"The Geweke-Porter-Hudak (GPH) Estimator is a semiparametric method for estimating the fractional differencing parameter d in long-memory processes by exploiting the characteristic behavior of the spectral density near zero frequency. Unlike time-domain methods that must specify the full ARFIMA model structure, GPH focuses solely on the low-frequency behavior where long memory dominates, making it robust to short-term dynamics misspecification. The method performs a simple OLS regression in the frequency domain, using only the lowest frequencies where the power law relationship f(ω) ∝ ω^(-2d) is most pronounced.\n\nThe key insight is that long-memory processes have spectral densities that diverge at the origin with a specific power law determined by d. By taking logarithms and focusing on a band of low frequencies (excluding zero itself), the estimation problem becomes linear regression of log periodogram ordinates on log frequencies. The choice of bandwidth m (number of frequencies to include) involves a bias-variance tradeoff: small m reduces bias from short-memory contamination but increases variance; large m increases precision but may be biased by higher-frequency dynamics. Typical choices are m ≈ n^0.5 or n^0.6.\n\nMathematical foundation:\n\nSpectral density for ARFIMA process near ω=0:\nf(ω) = C·ω^(-2d)·g(ω)\n\nWhere:\n- C is constant depending on innovation variance\n- ω^(-2d) is the long-memory component  \n- g(ω) is smooth, bounded away from 0 and ∞\n\nTaking logarithms:\nlog(f(ω_j)) = log(C·g(ω_j)) - 2d·log(ω_j)\n\nGPH regression:\n\nDependent variable: log(I(ω_j))\nWhere I(ω_j) is periodogram at frequency ω_j = 2πj/n\n\nRegression model:\nlog(I(ω_j)) = β_0 + β_1·log(ω_j) + ε_j\n\nFor j = 1, 2, ..., m (low frequencies only)\n\nOLS estimator:\nd̂_GPH = -β̂_1/2\n\nWhere β̂_1 is OLS slope coefficient\n\nAsymptotic properties:\n\nConsistency: d̂_GPH →^p d as n→∞, m→∞, m/n→0\n\nAsymptotic normality:\n√m(d̂_GPH - d) →^d N(0, π²/24)\n\nStandard error:\nSE(d̂_GPH) = π/(2√(6m))\n\nBandwidth selection:\n\nConservative: m = n^0.5 (original GPH)\nData-dependent: m = n^α with α ∈ [0.5, 0.8]\nPlug-in methods: Optimal m depending on d̂\n\nTypical choice: m = floor(n^0.6)\n\nRefinements:\n\n**Modified GPH (Robinson):** \nAccounts for tapering and trimming\n\n**Exact local Whittle:**\nMaximum likelihood version in frequency domain\n\n**Log-periodogram regression with tapered data:**\nReduces bias from end-point effects\n\nAdvantages:\n- No need to specify AR/MA orders\n- Robust to short-memory misspecification\n- Simple computation (OLS regression)\n- Theory well-developed\n\nDisadvantages:\n- Bandwidth choice affects results\n- Can be biased if strong short memory\n- Less efficient than MLE\n- Assumes stationarity\n\nApplications:\n- Quick d estimation for ARFIMA models\n- Long-memory detection tests\n- Preliminary analysis before full modeling\n\nGPH Estimator is like estimating how steep a mountain is by looking only at the foothill slopes while ignoring the peak details. Long memory in data creates a \"mountain\" in the frequency domain that rises sharply as you approach zero frequency (d>0) or descends into a valley (d<0). GPH says: \"Measure the slope in just the first m foothill frequencies, ignore the complicated peak structure.\" You plot log(height) vs log(frequency) for the lowest frequencies, and the slope is -2d. Pick too few frequencies (small m): noisy estimate. Pick too many: contaminated by peak details that aren't about long memory.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 19/gph_estimator.txt","hasFullInfo":true},{"id":437,"title":"Hurst Exponent Estimation","filename":"hurst_exponent_estimation.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Long-range dependence measure","overview":"Hurst Exponent Estimation quantifies the degree of long-range dependence and self-similarity in a time series by estimating the parameter H that characterizes how variance scales with time. Originally developed by hydrologist Harold Hurst to analyze Nile River floods, the Hurst exponent has become fundamental in financial econometrics for detecting persistence (trends, H>0.5), antipersistence (mean reversion, H<0.5), or randomness (H=0.5). Unlike traditional correlation measures that only look at lag-1 dependence, the Hurst exponent captures the full autocorrelation structure through a single parameter, making it invaluable for regime classification and model selection.","formula":"The fundamental property is that for self-similar processes, the variance of cumulative returns scales as time^(2H): if daily variance is σ², then monthly variance is approximately σ²·(20)^{2H} rather than σ²·20 as independence would predict. This scaling relationship enables multiple estimation approaches, each with different statistical properties and robustness to model misspecification. Financial applications include: identifying trending versus mean-reverting regimes, validating long-memory models, detecting changes in market microstructure, and calibrating rough volatility models.\n\nEstimation methods:\n\n**Rescaled Range (R/S) Analysis:**\nR/S(n) = (max cumulative deviation - min cumulative deviation) / std dev\nE[R/S(n)] ~ n^H\n\nProcedure:\n1. Divide series into blocks of length n\n2. For each block, compute range R and std dev S\n3. Average R/S across blocks\n4. Repeat for multiple n\n5. Estimate H from slope: log(R/S) ~ H·log(n)\n\n**Variance-Time Plot:**\nVar(X̄_m) ~ m^{2H-2}\n\nWhere X̄_m is average over non-overlapping blocks of size m\n\nEstimation: log(Var(X̄_m)) = c + (2H-2)log(m)\n\n**Detrended Fluctuation Analysis (DFA):**\nF(n) = √(Σ[X_cumulative - local_trend]²)\nF(n) ~ n^H\n\nMore robust to non-stationarity than R/S\n\n**Periodogram Method:**\nPower spectral density f(ω) ~ ω^{-2H+1} as ω→0\n\nRegression: log(f(ω_k)) = c - (2H-1)log(ω_k)\n\nUse low-frequency periodogram ordinates\n\n**Wavelet-based Estimator:**\nVar(wavelet coefficients at scale j) ~ 2^{2Hj}\n\nRegression: log(Var(d_j)) = c + 2H·j\n\nRobust to local trends and polynomial contamination\n\n**Maximum Likelihood (for fBm):**\nNumerical optimization of fBm likelihood\nAsymptotically efficient but computationally intensive\n\nInterpretation:\n\nH = 0.5: Brownian motion, no memory (efficient market)\n0.5 < H < 1: Long memory, persistence, trending\n0 < H < 0.5: Antipersistence, mean reversion\n\nFinancial empirics:\n- Returns: H ≈ 0.48-0.52 (close to random walk)\n- Volatility: H ≈ 0.10-0.15 (rough volatility)\n- Volume: H ≈ 0.6-0.7 (persistent)\n- Order flow: H ≈ 0.3-0.4 (mean-reverting)","parameters":"","intuition":"Hurst Exponent Estimation is like measuring how a child's height growth compounds over time. If H=0.5, growth is random - doubling the time period exactly doubles expected height increase (√variance scales with √time). If H=0.7 (persistence), growth accelerates - year 2's growth depends positively on year 1's, so 2 years gives more than 2× one year's growth. If H=0.3 (mean reversion), growth slows - a big year 1 means smaller year 2, so 2 years gives less than 2× scaling. The Hurst exponent H captures this compounding behavior in one number.","rawContent":"Hurst Exponent Estimation quantifies the degree of long-range dependence and self-similarity in a time series by estimating the parameter H that characterizes how variance scales with time. Originally developed by hydrologist Harold Hurst to analyze Nile River floods, the Hurst exponent has become fundamental in financial econometrics for detecting persistence (trends, H>0.5), antipersistence (mean reversion, H<0.5), or randomness (H=0.5). Unlike traditional correlation measures that only look at lag-1 dependence, the Hurst exponent captures the full autocorrelation structure through a single parameter, making it invaluable for regime classification and model selection.\n\nThe fundamental property is that for self-similar processes, the variance of cumulative returns scales as time^(2H): if daily variance is σ², then monthly variance is approximately σ²·(20)^{2H} rather than σ²·20 as independence would predict. This scaling relationship enables multiple estimation approaches, each with different statistical properties and robustness to model misspecification. Financial applications include: identifying trending versus mean-reverting regimes, validating long-memory models, detecting changes in market microstructure, and calibrating rough volatility models.\n\nEstimation methods:\n\n**Rescaled Range (R/S) Analysis:**\nR/S(n) = (max cumulative deviation - min cumulative deviation) / std dev\nE[R/S(n)] ~ n^H\n\nProcedure:\n1. Divide series into blocks of length n\n2. For each block, compute range R and std dev S\n3. Average R/S across blocks\n4. Repeat for multiple n\n5. Estimate H from slope: log(R/S) ~ H·log(n)\n\n**Variance-Time Plot:**\nVar(X̄_m) ~ m^{2H-2}\n\nWhere X̄_m is average over non-overlapping blocks of size m\n\nEstimation: log(Var(X̄_m)) = c + (2H-2)log(m)\n\n**Detrended Fluctuation Analysis (DFA):**\nF(n) = √(Σ[X_cumulative - local_trend]²)\nF(n) ~ n^H\n\nMore robust to non-stationarity than R/S\n\n**Periodogram Method:**\nPower spectral density f(ω) ~ ω^{-2H+1} as ω→0\n\nRegression: log(f(ω_k)) = c - (2H-1)log(ω_k)\n\nUse low-frequency periodogram ordinates\n\n**Wavelet-based Estimator:**\nVar(wavelet coefficients at scale j) ~ 2^{2Hj}\n\nRegression: log(Var(d_j)) = c + 2H·j\n\nRobust to local trends and polynomial contamination\n\n**Maximum Likelihood (for fBm):**\nNumerical optimization of fBm likelihood\nAsymptotically efficient but computationally intensive\n\nInterpretation:\n\nH = 0.5: Brownian motion, no memory (efficient market)\n0.5 < H < 1: Long memory, persistence, trending\n0 < H < 0.5: Antipersistence, mean reversion\n\nFinancial empirics:\n- Returns: H ≈ 0.48-0.52 (close to random walk)\n- Volatility: H ≈ 0.10-0.15 (rough volatility)\n- Volume: H ≈ 0.6-0.7 (persistent)\n- Order flow: H ≈ 0.3-0.4 (mean-reverting)\n\nHurst Exponent Estimation is like measuring how a child's height growth compounds over time. If H=0.5, growth is random - doubling the time period exactly doubles expected height increase (√variance scales with √time). If H=0.7 (persistence), growth accelerates - year 2's growth depends positively on year 1's, so 2 years gives more than 2× one year's growth. If H=0.3 (mean reversion), growth slows - a big year 1 means smaller year 2, so 2 years gives less than 2× scaling. The Hurst exponent H captures this compounding behavior in one number.","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 19/hurst_exponent_estimation.txt","hasFullInfo":true},{"id":438,"title":"Jump Intensity Estimation","filename":"jump_intensity_estimation.txt","group":"group 19","groupNum":19,"categoryId":46,"categoryTitle":"46. JUMP DETECTION & DISCONTINUITY","subcategory":"General","summary":"Jump frequency modeling","overview":"Jump Intensity Estimation quantifies the frequency or arrival rate of price jumps, typically modeled as a Poisson or self-exciting (Hawkes) process that governs when discrete price discontinuities occur. Unlike jump variation which measures the magnitude of jumps, intensity captures how often jumps happen - a critical parameter for option pricing, risk management, and high-frequency trading strategies. The intensity can be constant (homogeneous Poisson), time-varying (inhomogeneous Poisson), or self-exciting where jumps cluster (Hawkes process), with the latter most realistic for financial markets where jumps tend to trigger more jumps.","formula":"Estimation typically proceeds by first detecting jumps using statistical tests, then modeling the inter-arrival times or counting process. For simple Poisson jumps, intensity λ is estimated as (number of jumps)/(total time). For time-varying intensity, λ(t) is modeled as a function of state variables (volatility, volume, spreads, time-of-day). For Hawkes processes, intensity includes a baseline rate plus an endogenous component that increases after each jump, capturing the empirical jump clustering phenomenon where volatility events and news arrivals bunch together.\n\nMathematical frameworks:\n\n**Homogeneous Poisson:**\nN_t ~ Poisson(λt)\nIntensity: λ = E[# jumps per unit time]\n\nEstimation:\nλ̂ = (Total detected jumps) / T\n\n**Time-varying (Inhomogeneous) Poisson:**\nλ(t) = λ₀ · exp(β'X_t)\n\nWhere X_t are covariates (volatility, volume, spreads, time-of-day)\n\nEstimation via MLE:\nL = Σ log(λ(t_i)) - ∫ λ(s)ds\n\n**Hawkes (self-exciting) process:**\nλ(t) = λ₀ + Σ_{t_i < t} α·exp(-β(t - t_i))","parameters":"Where:\n- λ₀ = baseline intensity\n- α = jump impact on future intensity\n- β = decay rate of excitement\n- Branching ratio: n = α/β (stability requires n < 1)\n\nEstimation:\n- MLE with compensator: N_t - ∫₀ᵗ λ(s)ds ~ Martingale\n- EM algorithm\n- Recursive filtering\n\n**Jump size and intensity jointly:**\nY_t = ∫σ_s dW_s + Σ_{i=1}^{N_t} J_i\n\nWhere:\n- N_t ~ intensity process λ(t)\n- J_i ~ jump size distribution (normal, double exponential, etc.)\n\nSeparate positive/negative intensities:\nλ⁺(t) = intensity of positive jumps\nλ⁻(t) = intensity of negative jumps\n\nOften λ⁻ > λ⁺ for equities (crashes more frequent than rallies)\n\nDiagnostic:\n- Inter-arrival time distribution\n- Autocorrelation of jump indicators\n- Conditional intensity given recent jumps","intuition":"Jump Intensity Estimation is like measuring earthquake frequency in a region. Simple estimation: count quakes (jumps) per year to get average rate λ = 5/year. But that ignores patterns: quakes cluster after a major event (self-exciting Hawkes), are more likely during certain seasons (time-varying), and aftershocks trigger more aftershocks (branching). Advanced intensity models capture this: \"baseline rate is 3/year, but after each quake, intensity jumps by 8 and decays with 2-week half-life.\" This predicts high activity right after major events, matching how financial jumps also cluster.","rawContent":"Jump Intensity Estimation quantifies the frequency or arrival rate of price jumps, typically modeled as a Poisson or self-exciting (Hawkes) process that governs when discrete price discontinuities occur. Unlike jump variation which measures the magnitude of jumps, intensity captures how often jumps happen - a critical parameter for option pricing, risk management, and high-frequency trading strategies. The intensity can be constant (homogeneous Poisson), time-varying (inhomogeneous Poisson), or self-exciting where jumps cluster (Hawkes process), with the latter most realistic for financial markets where jumps tend to trigger more jumps.\n\nEstimation typically proceeds by first detecting jumps using statistical tests, then modeling the inter-arrival times or counting process. For simple Poisson jumps, intensity λ is estimated as (number of jumps)/(total time). For time-varying intensity, λ(t) is modeled as a function of state variables (volatility, volume, spreads, time-of-day). For Hawkes processes, intensity includes a baseline rate plus an endogenous component that increases after each jump, capturing the empirical jump clustering phenomenon where volatility events and news arrivals bunch together.\n\nMathematical frameworks:\n\n**Homogeneous Poisson:**\nN_t ~ Poisson(λt)\nIntensity: λ = E[# jumps per unit time]\n\nEstimation:\nλ̂ = (Total detected jumps) / T\n\n**Time-varying (Inhomogeneous) Poisson:**\nλ(t) = λ₀ · exp(β'X_t)\n\nWhere X_t are covariates (volatility, volume, spreads, time-of-day)\n\nEstimation via MLE:\nL = Σ log(λ(t_i)) - ∫ λ(s)ds\n\n**Hawkes (self-exciting) process:**\nλ(t) = λ₀ + Σ_{t_i < t} α·exp(-β(t - t_i))\n\nWhere:\n- λ₀ = baseline intensity\n- α = jump impact on future intensity\n- β = decay rate of excitement\n- Branching ratio: n = α/β (stability requires n < 1)\n\nEstimation:\n- MLE with compensator: N_t - ∫₀ᵗ λ(s)ds ~ Martingale\n- EM algorithm\n- Recursive filtering\n\n**Jump size and intensity jointly:**\nY_t = ∫σ_s dW_s + Σ_{i=1}^{N_t} J_i\n\nWhere:\n- N_t ~ intensity process λ(t)\n- J_i ~ jump size distribution (normal, double exponential, etc.)\n\nSeparate positive/negative intensities:\nλ⁺(t) = intensity of positive jumps\nλ⁻(t) = intensity of negative jumps\n\nOften λ⁻ > λ⁺ for equities (crashes more frequent than rallies)\n\nDiagnostic:\n- Inter-arrival time distribution\n- Autocorrelation of jump indicators\n- Conditional intensity given recent jumps\n\nJump Intensity Estimation is like measuring earthquake frequency in a region. Simple estimation: count quakes (jumps) per year to get average rate λ = 5/year. But that ignores patterns: quakes cluster after a major event (self-exciting Hawkes), are more likely during certain seasons (time-varying), and aftershocks trigger more aftershocks (branching). Advanced intensity models capture this: \"baseline rate is 3/year, but after each quake, intensity jumps by 8 and decays with 2-week half-life.\" This predicts high activity right after major events, matching how financial jumps also cluster.","tags":["Jump Detection"],"relPath":"public/concept-list/list-concepts/group 19/jump_intensity_estimation.txt","hasFullInfo":true},{"id":439,"title":"Jump-Robust Volatility Estimators","filename":"jump_robust_volatility_estimators.txt","group":"group 19","groupNum":19,"categoryId":46,"categoryTitle":"46. JUMP DETECTION & DISCONTINUITY","subcategory":"General","summary":"Continuous component isolation","overview":"Jump-Robust Volatility Estimators are a class of estimators designed to measure the continuous (diffusive) component of price variation while being immune or resistant to contamination from discrete price jumps. These estimators are critical because standard realized variance conflates two fundamentally different risk sources - continuous volatility from normal price diffusion and jump risk from discrete information shocks - which require different modeling, hedging, and risk management approaches. By isolating the continuous component, these estimators enable better volatility forecasting, more accurate option pricing models that separate diffusion from jump parameters, and improved risk metrics.","formula":"The fundamental principle underlying these estimators is that continuous sample paths have different scaling properties and statistical moments than jump processes. Common approaches include: (1) truncation methods that threshold large returns, (2) multi-power variations that use products of returns which are less jump-sensitive, (3) nearest-neighbor methods that compare returns to local volatility estimates, and (4) pre-averaging approaches that smooth over jump locations. Each has different finite-sample properties, efficiency under pure diffusion, and robustness to various jump configurations.\n\nKey estimators:\n\n**Truncated Realized Variance:**\nTRV = Σ r_i²·𝟙{|r_i| ≤ α·√(BV/n)}\n\nTruncates returns exceeding threshold (typically α ≈ 3-4)\n\n**Bipower Variation:**\nBV = μ₁⁻² · Σ|r_i|·|r_{i+1}|\n\nUses products of adjacent absolute returns\n\n**MedRV (Median Realized Variance):**\nMedRV = (π/(6-4√3+π)) · Σ median(|r_{i-1}|, |r_i|, |r_{i+1}|)²\n\nUses median of three consecutive returns\n\n**MinRV (Minimum Realized Variance):**\nMinRV = (π/(π-2)) · Σ min(|r_i|, |r_{i+1}|)²\n\nUses minimum of adjacent pairs\n\n**Outlyingness-Weighted Variance:**\nOWV = Σ w_i·r_i²\n\nWhere w_i = 𝟙{|r_i|/σ̂_local ≤ c} with adaptive weights\n\n**Nearest Neighbor Truncation:**\nNNTRV = Σ r_i²·𝟙{|r_i| ≤ c·√(NNV_i)}\n\nWhere NNV_i uses k-nearest returns to estimate local variance\n\n**ROWVar (Realized Outlyingness-Weighted Variance):**\nCombines threshold and bipower ideas with robust weighting\n\nEfficiency ranking (under no jumps):\nRV > MinRV > MedRV > BV > TRV (higher is better)\n\nRobustness ranking (under jumps):\nTRV > MedRV > MinRV > BV > RV (higher is better)\n\nJump-Robust Volatility Estimators are like trying to measure the typical speed of a car on a highway while ignoring moments when the driver suddenly accelerates to pass a truck. Standard measurement would say \"average squared speed changes\" which treats the passing acceleration the same as normal speed variations. Jump-robust methods recognize that the passing maneuver (jump) is fundamentally different from cruise-control wobbles (continuous volatility) and filter it out using techniques like \"ignore the top 1% of speed changes\" or \"use median speed changes instead of average\" or \"only count speed changes that match your neighbors' changes.\"","parameters":"","intuition":"","rawContent":"Jump-Robust Volatility Estimators are a class of estimators designed to measure the continuous (diffusive) component of price variation while being immune or resistant to contamination from discrete price jumps. These estimators are critical because standard realized variance conflates two fundamentally different risk sources - continuous volatility from normal price diffusion and jump risk from discrete information shocks - which require different modeling, hedging, and risk management approaches. By isolating the continuous component, these estimators enable better volatility forecasting, more accurate option pricing models that separate diffusion from jump parameters, and improved risk metrics.\n\nThe fundamental principle underlying these estimators is that continuous sample paths have different scaling properties and statistical moments than jump processes. Common approaches include: (1) truncation methods that threshold large returns, (2) multi-power variations that use products of returns which are less jump-sensitive, (3) nearest-neighbor methods that compare returns to local volatility estimates, and (4) pre-averaging approaches that smooth over jump locations. Each has different finite-sample properties, efficiency under pure diffusion, and robustness to various jump configurations.\n\nKey estimators:\n\n**Truncated Realized Variance:**\nTRV = Σ r_i²·𝟙{|r_i| ≤ α·√(BV/n)}\n\nTruncates returns exceeding threshold (typically α ≈ 3-4)\n\n**Bipower Variation:**\nBV = μ₁⁻² · Σ|r_i|·|r_{i+1}|\n\nUses products of adjacent absolute returns\n\n**MedRV (Median Realized Variance):**\nMedRV = (π/(6-4√3+π)) · Σ median(|r_{i-1}|, |r_i|, |r_{i+1}|)²\n\nUses median of three consecutive returns\n\n**MinRV (Minimum Realized Variance):**\nMinRV = (π/(π-2)) · Σ min(|r_i|, |r_{i+1}|)²\n\nUses minimum of adjacent pairs\n\n**Outlyingness-Weighted Variance:**\nOWV = Σ w_i·r_i²\n\nWhere w_i = 𝟙{|r_i|/σ̂_local ≤ c} with adaptive weights\n\n**Nearest Neighbor Truncation:**\nNNTRV = Σ r_i²·𝟙{|r_i| ≤ c·√(NNV_i)}\n\nWhere NNV_i uses k-nearest returns to estimate local variance\n\n**ROWVar (Realized Outlyingness-Weighted Variance):**\nCombines threshold and bipower ideas with robust weighting\n\nEfficiency ranking (under no jumps):\nRV > MinRV > MedRV > BV > TRV (higher is better)\n\nRobustness ranking (under jumps):\nTRV > MedRV > MinRV > BV > RV (higher is better)\n\nJump-Robust Volatility Estimators are like trying to measure the typical speed of a car on a highway while ignoring moments when the driver suddenly accelerates to pass a truck. Standard measurement would say \"average squared speed changes\" which treats the passing acceleration the same as normal speed variations. Jump-robust methods recognize that the passing maneuver (jump) is fundamentally different from cruise-control wobbles (continuous volatility) and filter it out using techniques like \"ignore the top 1% of speed changes\" or \"use median speed changes instead of average\" or \"only count speed changes that match your neighbors' changes.\"","tags":["Volatility","Jump Detection"],"relPath":"public/concept-list/list-concepts/group 19/jump_robust_volatility_estimators.txt","hasFullInfo":true},{"id":440,"title":"Kendall's Tau Filter","filename":"kendalls_tau_filter.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Rank correlation","overview":"Kendall's Tau is a non-parametric rank correlation measure that quantifies monotonic dependence between two variables without assuming linearity or specific distributional forms. Unlike Pearson correlation which measures linear association and is sensitive to outliers, Kendall's Tau is based purely on the concordance of ranked observations - whether pairs of observations tend to move in the same direction or opposite directions. This makes it particularly robust for financial data with heavy tails, non-normal distributions, and non-linear relationships, providing a more reliable measure of association that isn't distorted by extreme values.","formula":"The measure is calculated by comparing all possible pairs of observations: a pair is concordant if both variables increase together or decrease together, and discordant if one increases while the other decreases. Tau is the difference between concordance and discordance probabilities, ranging from -1 (perfect negative monotonic relationship) to +1 (perfect positive monotonic relationship). The rank-based nature means tau is invariant to monotonic transformations, making it ideal for comparing copula-based models where marginal transformations don't affect dependence structure.\n\nMathematical definition:\n\nFor sample (x₁,y₁),...,(x_n,y_n):\n\nKendall's Tau:\nτ = (C - D) / (n choose 2) = (C - D) / [n(n-1)/2]","parameters":"Where:\nC = # concordant pairs = Σᵢ<ⱼ sign((x_j-x_i)(y_j-y_i)) · 𝟙{(x_j-x_i)(y_j-y_i) > 0}\nD = # discordant pairs = Σᵢ<ⱼ 𝟙{(x_j-x_i)(y_j-y_i) < 0}\n\nAlternative formula:\nτ = (4/[n(n-1)]) · Σᵢ<ⱼ sign((x_j-x_i)(y_j-y_i))\n\nPopulation version (for copula C):\nτ = 4·∫∫ C(u,v) dC(u,v) - 1 = 1 - 4·∫∫ (∂C/∂u)(∂C/∂v) du dv\n\nRelationship to copula parameters:\n\nGaussian/t-copula: τ = (2/π)·arcsin(ρ)\nClayton copula: τ = θ/(θ+2)\nGumbel copula: τ = 1 - 1/θ\nFrank copula: τ = 1 + 4·[D₁(θ) - 1]/θ\n\nFiltering application:\nτ_t = rolling Kendall's Tau over window [t-W, t]\nStrength_t = |τ_t| (dependence magnitude)\nDirection_t = sign(τ_t) (positive/negative relationship)\n\nUse for copula selection:\n1. Estimate τ̂ from data\n2. Invert copula relationship to get θ estimate\n3. Compare fit across copula families","intuition":"Kendall's Tau is like judging if two students' study habits are related by looking at their daily rankings instead of actual hours studied. If Student A studies more than usual, does Student B also rank higher that day? You don't care if \"more\" means 2 hours vs 1 hour or 8 hours vs 4 hours - just whether they both went up or down relative to their own patterns. This makes the measure immune to one student studying 10x more than the other, or to outlier days where someone pulls an all-nighter. It captures pure directional coordination.","rawContent":"Kendall's Tau is a non-parametric rank correlation measure that quantifies monotonic dependence between two variables without assuming linearity or specific distributional forms. Unlike Pearson correlation which measures linear association and is sensitive to outliers, Kendall's Tau is based purely on the concordance of ranked observations - whether pairs of observations tend to move in the same direction or opposite directions. This makes it particularly robust for financial data with heavy tails, non-normal distributions, and non-linear relationships, providing a more reliable measure of association that isn't distorted by extreme values.\n\nThe measure is calculated by comparing all possible pairs of observations: a pair is concordant if both variables increase together or decrease together, and discordant if one increases while the other decreases. Tau is the difference between concordance and discordance probabilities, ranging from -1 (perfect negative monotonic relationship) to +1 (perfect positive monotonic relationship). The rank-based nature means tau is invariant to monotonic transformations, making it ideal for comparing copula-based models where marginal transformations don't affect dependence structure.\n\nMathematical definition:\n\nFor sample (x₁,y₁),...,(x_n,y_n):\n\nKendall's Tau:\nτ = (C - D) / (n choose 2) = (C - D) / [n(n-1)/2]\n\nWhere:\nC = # concordant pairs = Σᵢ<ⱼ sign((x_j-x_i)(y_j-y_i)) · 𝟙{(x_j-x_i)(y_j-y_i) > 0}\nD = # discordant pairs = Σᵢ<ⱼ 𝟙{(x_j-x_i)(y_j-y_i) < 0}\n\nAlternative formula:\nτ = (4/[n(n-1)]) · Σᵢ<ⱼ sign((x_j-x_i)(y_j-y_i))\n\nPopulation version (for copula C):\nτ = 4·∫∫ C(u,v) dC(u,v) - 1 = 1 - 4·∫∫ (∂C/∂u)(∂C/∂v) du dv\n\nRelationship to copula parameters:\n\nGaussian/t-copula: τ = (2/π)·arcsin(ρ)\nClayton copula: τ = θ/(θ+2)\nGumbel copula: τ = 1 - 1/θ\nFrank copula: τ = 1 + 4·[D₁(θ) - 1]/θ\n\nFiltering application:\nτ_t = rolling Kendall's Tau over window [t-W, t]\nStrength_t = |τ_t| (dependence magnitude)\nDirection_t = sign(τ_t) (positive/negative relationship)\n\nUse for copula selection:\n1. Estimate τ̂ from data\n2. Invert copula relationship to get θ estimate\n3. Compare fit across copula families\n\nKendall's Tau is like judging if two students' study habits are related by looking at their daily rankings instead of actual hours studied. If Student A studies more than usual, does Student B also rank higher that day? You don't care if \"more\" means 2 hours vs 1 hour or 8 hours vs 4 hours - just whether they both went up or down relative to their own patterns. This makes the measure immune to one student studying 10x more than the other, or to outlier days where someone pulls an all-nighter. It captures pure directional coordination.","tags":["DSP Filtering","Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/kendalls_tau_filter.txt","hasFullInfo":true},{"id":441,"title":"Kernel-Based Realized Volatility","filename":"kernel_based_realized_volatility.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Weighted realized variance","overview":"Kernel-Based Realized Volatility is a sophisticated estimator that uses weighted averages of high-frequency returns to obtain consistent estimates of integrated volatility in the presence of microstructure noise. Unlike simple realized variance which weights all returns equally, kernel estimators apply a weighting function (kernel) that downweights autocovariances at longer lags where microstructure noise effects are minimal, while carefully handling the bias introduced by noise at short lags. This approach optimally trades off the variance reduction from using more high-frequency data against the bias from microstructure noise.","formula":"The key innovation is recognizing that autocovariances of returns contain information about both volatility and noise structure. The kernel function determines how to combine these autocovariances to minimize mean squared error. Popular kernel choices include the Bartlett (triangular), Parzen (quadratic), and Tukey-Hanning kernels, each with different smoothness and efficiency properties. The bandwidth parameter controls how many autocovariance lags to include, with optimal bandwidth depending on the noise-to-signal ratio.\n\nMathematical formulation:\nRV_kernel = Σ[h=-H to H] k(h/H) * γ(h)","parameters":"Where:\n- γ(h) = Σ[j=1 to n-|h|] r(j) * r(j+|h|) is the h-th autocovariance\n- k(x) is the kernel function (e.g., Bartlett: k(x) = 1 - |x|)\n- H is the bandwidth parameter\n- r(j) are the high-frequency returns\n\nFor Bartlett kernel:\nRV_Bartlett = γ(0) + 2 * Σ[h=1 to H] (1 - h/(H+1)) * γ(h)\n\nOptimal bandwidth:\nH* = c * n^(2/3) where c depends on noise-to-signal ratio","intuition":"Kernel-Based Realized Volatility is like calculating the average temperature for a day, but instead of treating all thermometer readings equally, you give more weight to readings taken during stable conditions and less weight to readings taken right when someone opened a window or walked past the thermometer. The \"kernel\" is your rule for how much to trust each reading based on how far it is from other readings in time, helping you separate real temperature changes from temporary disturbances.","rawContent":"Kernel-Based Realized Volatility is a sophisticated estimator that uses weighted averages of high-frequency returns to obtain consistent estimates of integrated volatility in the presence of microstructure noise. Unlike simple realized variance which weights all returns equally, kernel estimators apply a weighting function (kernel) that downweights autocovariances at longer lags where microstructure noise effects are minimal, while carefully handling the bias introduced by noise at short lags. This approach optimally trades off the variance reduction from using more high-frequency data against the bias from microstructure noise.\n\nThe key innovation is recognizing that autocovariances of returns contain information about both volatility and noise structure. The kernel function determines how to combine these autocovariances to minimize mean squared error. Popular kernel choices include the Bartlett (triangular), Parzen (quadratic), and Tukey-Hanning kernels, each with different smoothness and efficiency properties. The bandwidth parameter controls how many autocovariance lags to include, with optimal bandwidth depending on the noise-to-signal ratio.\n\nMathematical formulation:\nRV_kernel = Σ[h=-H to H] k(h/H) * γ(h)\n\nWhere:\n- γ(h) = Σ[j=1 to n-|h|] r(j) * r(j+|h|) is the h-th autocovariance\n- k(x) is the kernel function (e.g., Bartlett: k(x) = 1 - |x|)\n- H is the bandwidth parameter\n- r(j) are the high-frequency returns\n\nFor Bartlett kernel:\nRV_Bartlett = γ(0) + 2 * Σ[h=1 to H] (1 - h/(H+1)) * γ(h)\n\nOptimal bandwidth:\nH* = c * n^(2/3) where c depends on noise-to-signal ratio\n\nKernel-Based Realized Volatility is like calculating the average temperature for a day, but instead of treating all thermometer readings equally, you give more weight to readings taken during stable conditions and less weight to readings taken right when someone opened a window or walked past the thermometer. The \"kernel\" is your rule for how much to trust each reading based on how far it is from other readings in time, helping you separate real temperature changes from temporary disturbances.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/kernel_based_realized_volatility.txt","hasFullInfo":true},{"id":442,"title":"Lee-Mykland Jump Test","filename":"lee_mykland_jump_test.txt","group":"group 19","groupNum":19,"categoryId":46,"categoryTitle":"46. JUMP DETECTION & DISCONTINUITY","subcategory":"General","summary":"Statistical jump test","overview":"The Lee-Mykland Jump Test is a statistical test for detecting significant price jumps in high-frequency data by comparing each return to a rolling estimate of local volatility. The test constructs a standardized test statistic that follows a known distribution under the null hypothesis of no jumps, enabling formal hypothesis testing with controlled false positive rates. Unlike simple threshold rules, Lee-Mykland accounts for time-varying volatility by normalizing returns using a jump-robust local volatility estimate, making the test adaptive to changing market conditions and avoiding spurious jump detection during periods of elevated continuous volatility.","formula":"The test statistic is constructed by scaling each return by an estimate of integrated variance over a local window, using bipower variation to ensure the volatility estimate isn't contaminated by the very jumps we're trying to detect. Under the null of no jumps, this statistic approximately follows the distribution of the maximum of a sequence of standard normal random variables, for which critical values can be determined. When the test statistic exceeds the critical value (typically corresponding to significance level α = 0.01 or 0.001), a jump is declared at that observation.\n\nMathematical formulation:\n\nTest statistic for return r_i:\nL_i = r_i / √(V_i)\n\nWhere V_i is jump-robust local variance estimate\n\nLocal bipower variation:\nV_i = (1/K) · Σ_{j=i-K+2}^i |r_{j-1}|·|r_j| / μ₁²\n\nWhere K is window size (e.g., K = 1/Δt for sampling interval Δt)\n\nStandardized statistic:\nL*_i = L_i / √(c · max(1, TPV_i/BV_i²))","parameters":"Where:\n- c ≈ (π²/4 + π - 5) ≈ 0.79\n- TPV_i is local tripower variation\n- Adjustment handles heteroskedasticity\n\nCritical values (from extreme value theory):\nC_α(n) = (√(2log n) - (log π + log(log n))/(2√(2log n)))\n\nFor α = 0.01 significance level\n\nDecision rule:\nJump detected if |L*_i| > C_α(n)\n\nJump sign:\nsign(r_i) indicates direction (positive or negative jump)\n\nExtensions:\n- Multiple testing correction (Bonferroni)\n- Finite-sample adjustments\n- Cojump detection (multivariate version)","intuition":"Lee-Mykland Jump Test is like detecting if a student's test score represents a genuine breakthrough (jump in knowledge) versus normal variation. If a student who usually scores 75±5 suddenly gets a 95, you can't just say \"20 points above average = jump\" because maybe the whole class improved on this easier test. Lee-Mykland says: look at the student's recent score volatility (last 10 tests), normalize the 95 by that volatility, and compare to critical values for \"how extreme would this be if they're just randomly fluctuating?\" If it's more extreme than expected 99% of the time, declare it a real knowledge jump, not luck.","rawContent":"The Lee-Mykland Jump Test is a statistical test for detecting significant price jumps in high-frequency data by comparing each return to a rolling estimate of local volatility. The test constructs a standardized test statistic that follows a known distribution under the null hypothesis of no jumps, enabling formal hypothesis testing with controlled false positive rates. Unlike simple threshold rules, Lee-Mykland accounts for time-varying volatility by normalizing returns using a jump-robust local volatility estimate, making the test adaptive to changing market conditions and avoiding spurious jump detection during periods of elevated continuous volatility.\n\nThe test statistic is constructed by scaling each return by an estimate of integrated variance over a local window, using bipower variation to ensure the volatility estimate isn't contaminated by the very jumps we're trying to detect. Under the null of no jumps, this statistic approximately follows the distribution of the maximum of a sequence of standard normal random variables, for which critical values can be determined. When the test statistic exceeds the critical value (typically corresponding to significance level α = 0.01 or 0.001), a jump is declared at that observation.\n\nMathematical formulation:\n\nTest statistic for return r_i:\nL_i = r_i / √(V_i)\n\nWhere V_i is jump-robust local variance estimate\n\nLocal bipower variation:\nV_i = (1/K) · Σ_{j=i-K+2}^i |r_{j-1}|·|r_j| / μ₁²\n\nWhere K is window size (e.g., K = 1/Δt for sampling interval Δt)\n\nStandardized statistic:\nL*_i = L_i / √(c · max(1, TPV_i/BV_i²))\n\nWhere:\n- c ≈ (π²/4 + π - 5) ≈ 0.79\n- TPV_i is local tripower variation\n- Adjustment handles heteroskedasticity\n\nCritical values (from extreme value theory):\nC_α(n) = (√(2log n) - (log π + log(log n))/(2√(2log n)))\n\nFor α = 0.01 significance level\n\nDecision rule:\nJump detected if |L*_i| > C_α(n)\n\nJump sign:\nsign(r_i) indicates direction (positive or negative jump)\n\nExtensions:\n- Multiple testing correction (Bonferroni)\n- Finite-sample adjustments\n- Cojump detection (multivariate version)\n\nLee-Mykland Jump Test is like detecting if a student's test score represents a genuine breakthrough (jump in knowledge) versus normal variation. If a student who usually scores 75±5 suddenly gets a 95, you can't just say \"20 points above average = jump\" because maybe the whole class improved on this easier test. Lee-Mykland says: look at the student's recent score volatility (last 10 tests), normalize the 95 by that volatility, and compare to critical values for \"how extreme would this be if they're just randomly fluctuating?\" If it's more extreme than expected 99% of the time, declare it a real knowledge jump, not luck.","tags":["Jump Detection"],"relPath":"public/concept-list/list-concepts/group 19/lee_mykland_jump_test.txt","hasFullInfo":true},{"id":443,"title":"Local Whittle Estimator","filename":"local_whittle_estimator.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Semiparametric estimation","overview":"The Local Whittle Estimator is a semiparametric maximum likelihood approach for estimating the fractional differencing parameter d that improves upon the GPH estimator by explicitly modeling the spectral density near zero frequency as a power function plus a smooth unknown component. While GPH uses simple OLS regression, the local Whittle approach derives from a genuine likelihood framework, yielding more efficient estimates with better finite-sample properties and the same asymptotic variance. The \"local\" aspect refers to using only low frequencies where the long-memory approximation f(ω) ≈ Cω^(-2d) is valid, while \"Whittle\" refers to the frequency-domain quasi-likelihood used for Gaussian processes.","formula":"The estimator maximizes an approximate likelihood constructed from periodogram ordinates at low frequencies, treating these ordinates as approximately independent exponential random variables (which holds asymptotically for Gaussian processes). Unlike GPH which ignores the unknown smooth component g(ω) in the spectral density, local Whittle estimates it along with d via profile likelihood, improving efficiency. The bandwidth choice remains critical but matters less than for GPH since the likelihood framework naturally accounts for parameter uncertainty.\n\nMathematical framework:\n\nSpectral density near ω=0:\nf(ω; θ) = C(θ)·ω^(-2d)·g(ω; θ)","parameters":"Where:\n- θ = (d, η) contains d and nuisance parameters η\n- g(ω; θ) is smooth, g(0) = 1\n\nWhittle likelihood (exact for Gaussian):\nL(θ) = -(n/2)log(2π) - (1/2)Σ[log f(ω_j; θ) + I(ω_j)/f(ω_j; θ)]\n\nLocal Whittle approximation:\nUse f(ω_j; θ) ≈ C·ω_j^(-2d) for j = 1,...,m\n\nObjective function:\nQ(d, C) = (1/m)Σ_{j=1}^m [log(C·ω_j^(-2d)) + I(ω_j)/(C·ω_j^(-2d))]\n\nProfile out C:\nĈ(d) = (1/m)Σ_{j=1}^m I(ω_j)·ω_j^{2d}\n\nConcentrated objective:\nQ(d) = log(Ĉ(d)) + (2d/m)Σ_{j=1}^m log(ω_j)\n\nLocal Whittle estimator:\nd̂_LW = arg min_d Q(d)\n\nFirst-order condition:\n∂Q/∂d = 0\n\nYields:\nΣ_{j=1}^m log(ω_j)·I(ω_j)·ω_j^{2d̂}/Ĉ(d̂) = (m/2)·Σ_{j=1}^m log(ω_j)\n\nAsymptotic properties:\n\nConsistency: d̂_LW →^p d\nSame rate as GPH: √m-consistent\n\nAsymptotic normality:\n√m(d̂_LW - d) →^d N(0, 1/4)\n\nImproved efficiency:\nAvar(d̂_LW) = 1/(4m) < π²/(24m) = Avar(d̂_GPH)\n\nEfficiency ratio: π²/6 ≈ 1.645\n\nStandard error:\nSE(d̂_LW) = 1/(2√m)\n\nBandwidth selection:\n\nSimilar to GPH: m = n^α, α ∈ [0.5, 0.8]\n\nData-dependent methods:\n- Cross-validation\n- Plug-in estimators\n- Stability-based selection\n\nRobust modifications:\n\n**Exact local Whittle:**\nTapers data to reduce leakage\n\n**Pooled local Whittle:**\nUses overlapping blocks for robustness\n\n**Adaptive local Whittle:**\nBandwidth changes with preliminary d̂\n\nAdvantages over GPH:\n- More efficient (lower variance)\n- Better finite-sample behavior\n- Likelihood interpretation\n- Easier inference\n\nComputation:\nNumerical optimization (e.g., golden section search)\nQ(d) is unimodal for d ∈ (-0.5, 1.5)","intuition":"Local Whittle Estimator is like GPH's sophisticated cousin who estimates the mountain slope more carefully. While GPH just draws a line through log-periodogram points, local Whittle says \"I'll maximize a proper statistical model.\" It's like the difference between eyeballing a line through scattered points versus finding the line that maximizes the probability of seeing those exact points under a statistical model. Both use the same low-frequency data, but local Whittle extracts more information from it through the likelihood principle, getting about 64% more efficiency (smaller standard errors for the same sample size).","rawContent":"The Local Whittle Estimator is a semiparametric maximum likelihood approach for estimating the fractional differencing parameter d that improves upon the GPH estimator by explicitly modeling the spectral density near zero frequency as a power function plus a smooth unknown component. While GPH uses simple OLS regression, the local Whittle approach derives from a genuine likelihood framework, yielding more efficient estimates with better finite-sample properties and the same asymptotic variance. The \"local\" aspect refers to using only low frequencies where the long-memory approximation f(ω) ≈ Cω^(-2d) is valid, while \"Whittle\" refers to the frequency-domain quasi-likelihood used for Gaussian processes.\n\nThe estimator maximizes an approximate likelihood constructed from periodogram ordinates at low frequencies, treating these ordinates as approximately independent exponential random variables (which holds asymptotically for Gaussian processes). Unlike GPH which ignores the unknown smooth component g(ω) in the spectral density, local Whittle estimates it along with d via profile likelihood, improving efficiency. The bandwidth choice remains critical but matters less than for GPH since the likelihood framework naturally accounts for parameter uncertainty.\n\nMathematical framework:\n\nSpectral density near ω=0:\nf(ω; θ) = C(θ)·ω^(-2d)·g(ω; θ)\n\nWhere:\n- θ = (d, η) contains d and nuisance parameters η\n- g(ω; θ) is smooth, g(0) = 1\n\nWhittle likelihood (exact for Gaussian):\nL(θ) = -(n/2)log(2π) - (1/2)Σ[log f(ω_j; θ) + I(ω_j)/f(ω_j; θ)]\n\nLocal Whittle approximation:\nUse f(ω_j; θ) ≈ C·ω_j^(-2d) for j = 1,...,m\n\nObjective function:\nQ(d, C) = (1/m)Σ_{j=1}^m [log(C·ω_j^(-2d)) + I(ω_j)/(C·ω_j^(-2d))]\n\nProfile out C:\nĈ(d) = (1/m)Σ_{j=1}^m I(ω_j)·ω_j^{2d}\n\nConcentrated objective:\nQ(d) = log(Ĉ(d)) + (2d/m)Σ_{j=1}^m log(ω_j)\n\nLocal Whittle estimator:\nd̂_LW = arg min_d Q(d)\n\nFirst-order condition:\n∂Q/∂d = 0\n\nYields:\nΣ_{j=1}^m log(ω_j)·I(ω_j)·ω_j^{2d̂}/Ĉ(d̂) = (m/2)·Σ_{j=1}^m log(ω_j)\n\nAsymptotic properties:\n\nConsistency: d̂_LW →^p d\nSame rate as GPH: √m-consistent\n\nAsymptotic normality:\n√m(d̂_LW - d) →^d N(0, 1/4)\n\nImproved efficiency:\nAvar(d̂_LW) = 1/(4m) < π²/(24m) = Avar(d̂_GPH)\n\nEfficiency ratio: π²/6 ≈ 1.645\n\nStandard error:\nSE(d̂_LW) = 1/(2√m)\n\nBandwidth selection:\n\nSimilar to GPH: m = n^α, α ∈ [0.5, 0.8]\n\nData-dependent methods:\n- Cross-validation\n- Plug-in estimators\n- Stability-based selection\n\nRobust modifications:\n\n**Exact local Whittle:**\nTapers data to reduce leakage\n\n**Pooled local Whittle:**\nUses overlapping blocks for robustness\n\n**Adaptive local Whittle:**\nBandwidth changes with preliminary d̂\n\nAdvantages over GPH:\n- More efficient (lower variance)\n- Better finite-sample behavior\n- Likelihood interpretation\n- Easier inference\n\nComputation:\nNumerical optimization (e.g., golden section search)\nQ(d) is unimodal for d ∈ (-0.5, 1.5)\n\nLocal Whittle Estimator is like GPH's sophisticated cousin who estimates the mountain slope more carefully. While GPH just draws a line through log-periodogram points, local Whittle says \"I'll maximize a proper statistical model.\" It's like the difference between eyeballing a line through scattered points versus finding the line that maximizes the probability of seeing those exact points under a statistical model. Both use the same low-frequency data, but local Whittle extracts more information from it through the likelihood principle, getting about 64% more efficiency (smaller standard errors for the same sample size).","tags":["Signal Processing"],"relPath":"public/concept-list/list-concepts/group 19/local_whittle_estimator.txt","hasFullInfo":true},{"id":444,"title":"Market Making Spread Filter","filename":"market_making_spread_filter.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Bid-ask dynamics","overview":"Market Making Spread Filter analyzes and models the dynamics of bid-ask spreads in order to filter out microstructure noise caused by the mechanics of market making rather than fundamental price movements. The bid-ask spread represents the market maker's compensation for providing liquidity and bearing inventory risk, and its width varies with market conditions, volatility, order flow toxicity, and competition among liquidity providers. By understanding spread dynamics, traders can better estimate the \"true\" mid-price and identify when apparent price movements are just artifacts of crossing between bid and ask rather than genuine information.","formula":"The filter typically models the spread as a function of various market conditions: during high volatility or uncertain periods, spreads widen as market makers protect themselves; during high competition or low volatility, spreads narrow. The effective spread (difference between trade price and mid-quote at execution time) can differ from the quoted spread due to price improvement or market impact. Filtering based on spread dynamics helps identify when price changes are likely noise (frequent bouncing between stable bid/ask) versus signal (mid-point movement with spread adjustment).\n\nMathematical components:\n\nQuoted spread:\nS_quoted(t) = Ask(t) - Bid(t)\n\nRelative spread:\nS_relative(t) = (Ask(t) - Bid(t)) / Mid(t)\n\nEffective spread (for a buy):\nS_effective = 2 * (Trade_Price - Mid_at_execution)\n\nSpread filter for mid-price:\nMid_filtered(t) = α * Mid(t) + (1-α) * Mid_filtered(t-1)\n\nWhere α decreases when spread is wide (low confidence in mid-price).\n\nRoll's spread estimator (from serial covariance):\nS_estimated = 2 * sqrt(-Cov(ΔP_t, ΔP_t-1))\n\nTrade direction indicator:\nDirection = sign(Trade_Price - Mid) used to adjust for systematic bid/ask effects","parameters":"","intuition":"Market Making Spread Filter is like trying to determine the \"real\" price of a used car by watching the dealer. The dealer posts it for $20,000 but says they'll accept $18,000. That $2,000 gap is the spread - the dealer's profit margin and negotiation room. When you see someone buy it for $19,200, you don't conclude the car's value jumped from $18,000 to $19,200; you recognize they just negotiated within the spread. The real value is probably around $19,000 (the middle), and the filter helps you track that true value rather than getting distracted by which side of the spread each transaction hits.","rawContent":"Market Making Spread Filter analyzes and models the dynamics of bid-ask spreads in order to filter out microstructure noise caused by the mechanics of market making rather than fundamental price movements. The bid-ask spread represents the market maker's compensation for providing liquidity and bearing inventory risk, and its width varies with market conditions, volatility, order flow toxicity, and competition among liquidity providers. By understanding spread dynamics, traders can better estimate the \"true\" mid-price and identify when apparent price movements are just artifacts of crossing between bid and ask rather than genuine information.\n\nThe filter typically models the spread as a function of various market conditions: during high volatility or uncertain periods, spreads widen as market makers protect themselves; during high competition or low volatility, spreads narrow. The effective spread (difference between trade price and mid-quote at execution time) can differ from the quoted spread due to price improvement or market impact. Filtering based on spread dynamics helps identify when price changes are likely noise (frequent bouncing between stable bid/ask) versus signal (mid-point movement with spread adjustment).\n\nMathematical components:\n\nQuoted spread:\nS_quoted(t) = Ask(t) - Bid(t)\n\nRelative spread:\nS_relative(t) = (Ask(t) - Bid(t)) / Mid(t)\n\nEffective spread (for a buy):\nS_effective = 2 * (Trade_Price - Mid_at_execution)\n\nSpread filter for mid-price:\nMid_filtered(t) = α * Mid(t) + (1-α) * Mid_filtered(t-1)\n\nWhere α decreases when spread is wide (low confidence in mid-price).\n\nRoll's spread estimator (from serial covariance):\nS_estimated = 2 * sqrt(-Cov(ΔP_t, ΔP_t-1))\n\nTrade direction indicator:\nDirection = sign(Trade_Price - Mid) used to adjust for systematic bid/ask effects\n\nMarket Making Spread Filter is like trying to determine the \"real\" price of a used car by watching the dealer. The dealer posts it for $20,000 but says they'll accept $18,000. That $2,000 gap is the spread - the dealer's profit margin and negotiation room. When you see someone buy it for $19,200, you don't conclude the car's value jumped from $18,000 to $19,200; you recognize they just negotiated within the spread. The real value is probably around $19,000 (the middle), and the filter helps you track that true value rather than getting distracted by which side of the spread each transaction hits.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/market_making_spread_filter.txt","hasFullInfo":true},{"id":445,"title":"Microstructure Noise Reduction","filename":"microstructure_noise_reduction.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Bid-ask bounce removal","overview":"Microstructure noise reduction addresses the high-frequency distortions in asset prices caused by market mechanics rather than fundamental information. This noise arises from bid-ask spreads, discrete price grids, order flow fragmentation, asynchronous trading, and the mechanical effects of market making. The noise is most severe at ultra-high frequencies and can severely bias volatility estimates and price discovery if not properly addressed. The goal is to extract the efficient price - the true value signal - from the observed transaction prices that contain both signal and noise.","formula":"The key insight is that microstructure noise is typically negatively autocorrelated at very short horizons (bid-ask bounce creates mean reversion), while true price innovations follow a random walk. Filtering techniques exploit this property through various methods: subsampling at lower frequencies to reduce noise impact, pre-averaging across multiple observations to smooth out bounces, kernel-weighted estimators that downweight noisy high-frequency observations, and two-timescale approaches that separate noise from signal based on their different scaling properties across sampling frequencies.\n\nA basic noise reduction model represents observed price as:\nObserved_Price(t) = Efficient_Price(t) + Noise(t)\n\nWhere Noise(t) is i.i.d. with variance σ²_noise and Efficient_Price follows a continuous semimartingale.\n\nPre-averaging estimator:\nAvg_Return(i) = (1/k) * Σ[j=0 to k-1] Return(i+j)\nRealized_Variance = Σ Avg_Return(i)² with bias correction","parameters":"","intuition":"Microstructure noise is like trying to measure the temperature of a room with a thermometer that's being constantly touched by people's warm fingers. Every reading bounces between the actual room temperature and the heat from the finger contact. To get the real room temperature, you need to either take measurements less frequently (so fingers have time to move away), or average many quick readings together to cancel out the random finger-touching effects.","rawContent":"Microstructure noise reduction addresses the high-frequency distortions in asset prices caused by market mechanics rather than fundamental information. This noise arises from bid-ask spreads, discrete price grids, order flow fragmentation, asynchronous trading, and the mechanical effects of market making. The noise is most severe at ultra-high frequencies and can severely bias volatility estimates and price discovery if not properly addressed. The goal is to extract the efficient price - the true value signal - from the observed transaction prices that contain both signal and noise.\n\nThe key insight is that microstructure noise is typically negatively autocorrelated at very short horizons (bid-ask bounce creates mean reversion), while true price innovations follow a random walk. Filtering techniques exploit this property through various methods: subsampling at lower frequencies to reduce noise impact, pre-averaging across multiple observations to smooth out bounces, kernel-weighted estimators that downweight noisy high-frequency observations, and two-timescale approaches that separate noise from signal based on their different scaling properties across sampling frequencies.\n\nA basic noise reduction model represents observed price as:\nObserved_Price(t) = Efficient_Price(t) + Noise(t)\n\nWhere Noise(t) is i.i.d. with variance σ²_noise and Efficient_Price follows a continuous semimartingale.\n\nPre-averaging estimator:\nAvg_Return(i) = (1/k) * Σ[j=0 to k-1] Return(i+j)\nRealized_Variance = Σ Avg_Return(i)² with bias correction\n\nMicrostructure noise is like trying to measure the temperature of a room with a thermometer that's being constantly touched by people's warm fingers. Every reading bounces between the actual room temperature and the heat from the finger contact. To get the real room temperature, you need to either take measurements less frequently (so fingers have time to move away), or average many quick readings together to cancel out the random finger-touching effects.","tags":["DSP Filtering","Microstructure"],"relPath":"public/concept-list/list-concepts/group 19/microstructure_noise_reduction.txt","hasFullInfo":true},{"id":446,"title":"Multifractal Detrended Fluctuation Analysis (MFDFA)","filename":"multifractal_dfa.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Multi-scale DFA","overview":"Multifractal Detrended Fluctuation Analysis extends DFA to characterize multifractal properties - the fact that different moments of fluctuations scale with different exponents, indicating heterogeneous scaling behavior across the distribution. While monofractal processes have a single Hurst exponent describing all moments, financial data typically exhibits multifractality where small and large fluctuations have different scaling properties. MFDFA reveals this rich structure by computing a spectrum of generalized Hurst exponents h(q) for different moment orders q, providing insights into the distribution's tails, asymmetry, and local versus global correlation structure.","formula":"The multifractal spectrum is particularly valuable in finance because it captures how extreme events (captured by large |q|) scale differently than typical events (q≈2). Fat tails manifest as h(negative q) > h(positive q), indicating large fluctuations are more persistent than small ones. The width of the multifractal spectrum quantifies the degree of heterogeneity in the series - wide spectra indicate complex, multiscale dynamics common in high-frequency data and volatile periods. This goes far beyond single-H characterizations, enabling sophisticated regime detection and risk modeling.\n\nMathematical procedure:\n\n1. **Standard DFA steps 1-4:**\n   Compute profile Y(k), divide into windows, detrend, get F(v,n)\n\n2. **Generalized fluctuation function:**\n   F_q(n) = {(1/N_s) Σ_v [F²(v,n)]^{q/2}}^{1/q}\n\nFor q ≠ 0\n\nFor q = 0:\n   F_0(n) = exp{(1/2N_s) Σ_v ln[F²(v,n)]}\n\n3. **Scaling behavior:**\n   F_q(n) ~ n^{h(q)}\n\nlog(F_q(n)) = c_q + h(q)·log(n)\n\n4. **Generalized Hurst exponent:**\n   h(q) = slope from regression of log(F_q(n)) vs log(n)\n\n5. **Mass exponent:**\n   τ(q) = q·h(q) - 1\n\n6. **Multifractal spectrum:**\n   α = h(q) + q·h'(q)  (singularity strength)\n   f(α) = q·(α - h(q)) + 1  (fractal dimension)\n\nInterpretation of q-moments:\n\nq = 2: Standard DFA, captures typical fluctuations\nq > 2: Emphasizes large fluctuations (tail behavior)\nq < 0: Emphasizes small fluctuations\nq → ∞: Isolates maximum fluctuations\nq → -∞: Isolates minimum fluctuations\n\nMultifractality measures:\n\nWidth: Δh = h(-5) - h(5)\nLarge Δh indicates strong multifractality\n\nAsymmetry: h(q) - h(0) for positive vs negative q\nReveals tail asymmetry\n\nDegree: Δα = α_max - α_min\nBroader spectra = more complex dynamics\n\nSources of multifractality:\n\n1. **Fat-tailed distributions** (different PDF in tails vs center)\n2. **Nonlinear correlations** (volatility clustering)\n3. **Both combined** (typical in finance)\n\nApplications:\n\n- Risk assessment: h(q→∞) for tail risk\n- Regime detection: Δh changes across regimes\n- Market microstructure: Intraday multifractality\n- Crisis detection: Spectrum narrowing/widening\n\nTypical financial findings:\n\nReturns: Weak multifractality (Δh ≈ 0.05-0.15)\nVolatility: Strong multifractality (Δh ≈ 0.3-0.5)\nVolume: Moderate multifractality (Δh ≈ 0.2-0.3)","parameters":"","intuition":"MFDFA is like measuring how differently \"good\" students and \"struggling\" students benefit from increased study time. Regular DFA would give you one answer: \"Each extra hour raises scores by X%.\" MFDFA recognizes heterogeneity: \"Top students (large q) gain 2X% per hour due to compounding knowledge (persistent), while struggling students (small q) gain only 0.5X% per hour because they forget things (less persistent).\" The multifractal spectrum h(q) captures how the time-benefit relationship varies across the performance distribution, revealing that \"scaling\" isn't universal but depends on which part of the distribution you're analyzing.","rawContent":"Multifractal Detrended Fluctuation Analysis extends DFA to characterize multifractal properties - the fact that different moments of fluctuations scale with different exponents, indicating heterogeneous scaling behavior across the distribution. While monofractal processes have a single Hurst exponent describing all moments, financial data typically exhibits multifractality where small and large fluctuations have different scaling properties. MFDFA reveals this rich structure by computing a spectrum of generalized Hurst exponents h(q) for different moment orders q, providing insights into the distribution's tails, asymmetry, and local versus global correlation structure.\n\nThe multifractal spectrum is particularly valuable in finance because it captures how extreme events (captured by large |q|) scale differently than typical events (q≈2). Fat tails manifest as h(negative q) > h(positive q), indicating large fluctuations are more persistent than small ones. The width of the multifractal spectrum quantifies the degree of heterogeneity in the series - wide spectra indicate complex, multiscale dynamics common in high-frequency data and volatile periods. This goes far beyond single-H characterizations, enabling sophisticated regime detection and risk modeling.\n\nMathematical procedure:\n\n1. **Standard DFA steps 1-4:**\n   Compute profile Y(k), divide into windows, detrend, get F(v,n)\n\n2. **Generalized fluctuation function:**\n   F_q(n) = {(1/N_s) Σ_v [F²(v,n)]^{q/2}}^{1/q}\n   \n   For q ≠ 0\n\n   For q = 0:\n   F_0(n) = exp{(1/2N_s) Σ_v ln[F²(v,n)]}\n\n3. **Scaling behavior:**\n   F_q(n) ~ n^{h(q)}\n   \n   log(F_q(n)) = c_q + h(q)·log(n)\n\n4. **Generalized Hurst exponent:**\n   h(q) = slope from regression of log(F_q(n)) vs log(n)\n\n5. **Mass exponent:**\n   τ(q) = q·h(q) - 1\n\n6. **Multifractal spectrum:**\n   α = h(q) + q·h'(q)  (singularity strength)\n   f(α) = q·(α - h(q)) + 1  (fractal dimension)\n\nInterpretation of q-moments:\n\nq = 2: Standard DFA, captures typical fluctuations\nq > 2: Emphasizes large fluctuations (tail behavior)\nq < 0: Emphasizes small fluctuations\nq → ∞: Isolates maximum fluctuations\nq → -∞: Isolates minimum fluctuations\n\nMultifractality measures:\n\nWidth: Δh = h(-5) - h(5)\nLarge Δh indicates strong multifractality\n\nAsymmetry: h(q) - h(0) for positive vs negative q\nReveals tail asymmetry\n\nDegree: Δα = α_max - α_min\nBroader spectra = more complex dynamics\n\nSources of multifractality:\n\n1. **Fat-tailed distributions** (different PDF in tails vs center)\n2. **Nonlinear correlations** (volatility clustering)\n3. **Both combined** (typical in finance)\n\nApplications:\n\n- Risk assessment: h(q→∞) for tail risk\n- Regime detection: Δh changes across regimes\n- Market microstructure: Intraday multifractality\n- Crisis detection: Spectrum narrowing/widening\n\nTypical financial findings:\n\nReturns: Weak multifractality (Δh ≈ 0.05-0.15)\nVolatility: Strong multifractality (Δh ≈ 0.3-0.5)\nVolume: Moderate multifractality (Δh ≈ 0.2-0.3)\n\nMFDFA is like measuring how differently \"good\" students and \"struggling\" students benefit from increased study time. Regular DFA would give you one answer: \"Each extra hour raises scores by X%.\" MFDFA recognizes heterogeneity: \"Top students (large q) gain 2X% per hour due to compounding knowledge (persistent), while struggling students (small q) gain only 0.5X% per hour because they forget things (less persistent).\" The multifractal spectrum h(q) captures how the time-benefit relationship varies across the performance distribution, revealing that \"scaling\" isn't universal but depends on which part of the distribution you're analyzing.","tags":["Entropy & Fractals"],"relPath":"public/concept-list/list-concepts/group 19/multifractal_dfa.txt","hasFullInfo":true},{"id":447,"title":"Previous Tick Interpolation","filename":"previous_tick_interpolation.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Missing data imputation","overview":"Previous Tick Interpolation is a simple method for handling missing or asynchronous data in high-frequency trading by carrying forward the last observed price until a new update occurs. This \"last observation carried forward\" approach is the most basic synchronization technique, filling gaps in irregular tick data by assuming the price remains constant between actual trades or quotes. While computationally trivial and intuitively reasonable for very short time intervals, this method can introduce biases in volatility and correlation estimates, particularly when assets have very different update frequencies.","formula":"The main advantage is simplicity and the absence of look-ahead bias - you only use information available at each point in time. However, the method creates artificial serial correlation in returns (since prices appear constant until they jump), understates volatility during periods without trades, and can bias correlation estimates when one asset updates much more frequently than another. Despite these limitations, previous tick interpolation remains widely used in practice for real-time systems where computational efficiency is critical and the alternatives (like refresh time sampling) may discard too much information.\n\nMathematical formulation:\nFor each asset i at query time t:\nPrice_i(t) = Price_i(τ_i)\n\nWhere τ_i = max{s ≤ t : asset i traded at time s}\n\nInterpolated return over [t₁, t₂]:\nr_i[t₁,t₂] = log(Price_i(t₂)) - log(Price_i(t₁))\n           = log(Price_i(τ₂)) - log(Price_i(τ₁))\n\nWhere τ₁ and τ₂ are the last actual trades before t₁ and t₂.\n\nSynchronized multivariate observation:\nP(t) = [Price₁(τ₁(t)), Price₂(τ₂(t)), ..., Price_n(τ_n(t))]\n\nWhere each τ_i(t) is the most recent trade time for asset i before or at time t.","parameters":"","intuition":"Previous Tick Interpolation is like checking the score of a football game on your phone during a road trip. You check at 2:00pm and it's 14-10. You check again at 2:30pm and it's still 14-10, so you record \"14-10\" for every minute in between. But the score might have actually changed to 21-10 at 2:15pm and back to 14-10 at 2:25pm - you just missed those updates. You're pretending the score was frozen until you next checked, which is simple but not perfectly accurate.","rawContent":"Previous Tick Interpolation is a simple method for handling missing or asynchronous data in high-frequency trading by carrying forward the last observed price until a new update occurs. This \"last observation carried forward\" approach is the most basic synchronization technique, filling gaps in irregular tick data by assuming the price remains constant between actual trades or quotes. While computationally trivial and intuitively reasonable for very short time intervals, this method can introduce biases in volatility and correlation estimates, particularly when assets have very different update frequencies.\n\nThe main advantage is simplicity and the absence of look-ahead bias - you only use information available at each point in time. However, the method creates artificial serial correlation in returns (since prices appear constant until they jump), understates volatility during periods without trades, and can bias correlation estimates when one asset updates much more frequently than another. Despite these limitations, previous tick interpolation remains widely used in practice for real-time systems where computational efficiency is critical and the alternatives (like refresh time sampling) may discard too much information.\n\nMathematical formulation:\nFor each asset i at query time t:\nPrice_i(t) = Price_i(τ_i)\n\nWhere τ_i = max{s ≤ t : asset i traded at time s}\n\nInterpolated return over [t₁, t₂]:\nr_i[t₁,t₂] = log(Price_i(t₂)) - log(Price_i(t₁))\n           = log(Price_i(τ₂)) - log(Price_i(τ₁))\n\nWhere τ₁ and τ₂ are the last actual trades before t₁ and t₂.\n\nSynchronized multivariate observation:\nP(t) = [Price₁(τ₁(t)), Price₂(τ₂(t)), ..., Price_n(τ_n(t))]\n\nWhere each τ_i(t) is the most recent trade time for asset i before or at time t.\n\nPrevious Tick Interpolation is like checking the score of a football game on your phone during a road trip. You check at 2:00pm and it's 14-10. You check again at 2:30pm and it's still 14-10, so you record \"14-10\" for every minute in between. But the score might have actually changed to 21-10 at 2:15pm and back to 14-10 at 2:25pm - you just missed those updates. You're pretending the score was frozen until you next checked, which is simple but not perfectly accurate.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/previous_tick_interpolation.txt","hasFullInfo":true},{"id":448,"title":"Pre-Averaging Estimator","filename":"pre_averaging_estimator.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Noise-robust volatility","overview":"The Pre-Averaging Estimator is a method for computing realized volatility that first smooths high-frequency returns using a local averaging window before squaring and summing, thereby reducing the impact of microstructure noise. The key insight is that averaging returns over short intervals reduces noise variance faster than it reduces signal variance, creating a favorable signal-to-noise ratio improvement. This pre-averaging step acts as a low-pass filter that attenuates high-frequency noise while preserving the volatility signal we want to measure.","formula":"The technique applies a weight function to returns within a moving window, creating \"pre-averaged returns\" that have substantially lower noise contamination than raw returns. These smoothed returns are then used in a realized variance calculation with appropriate scaling and bias correction factors. The window length is chosen to balance noise reduction (larger windows) against information loss from excessive smoothing (smaller windows), with optimal choice depending on the noise-to-signal ratio.\n\nMathematical formulation:\nDefine pre-averaged returns:\nR̄(i) = Σ[j=1 to k_n-1] g(j/k_n) * r(i+j)","parameters":"Where:\n- g(x) is a weight function (e.g., g(x) = min(x, 1-x) for triangular)\n- k_n is the averaging window length (typically k_n ~ n^(1/2))\n- r(i) are raw high-frequency returns\n\nPre-Averaging RV estimator:\nRV_PA = (n/(θ * k_n)) * Σ[i=0 to n-k_n] R̄(i)² - (ψ * n)/(θ² * k_n) * Noise_Var\n\nWhere θ and ψ are constants depending on g(x):\nθ = ∫[0 to 1] g(x)² dx\nψ = ∫[0 to 1] (g'(x))² dx\n\nOptimal window:\nk_n* = c * n^(1/2) * (Noise_Var / Integrated_Vol)^(1/2)","intuition":"Pre-Averaging is like trying to weigh individual grains of sand on a sensitive scale in a windy room. Each grain's reading bounces wildly due to air currents. Instead of weighing each grain alone, you group every 10 grains together and weigh them as a batch. The wind still affects the reading, but now it's only ±0.1g of error on a 1.0g batch instead of ±0.1g on a 0.1g grain - a much better ratio. Then you divide the batch weight by 10 to get the average grain weight with less noise.","rawContent":"The Pre-Averaging Estimator is a method for computing realized volatility that first smooths high-frequency returns using a local averaging window before squaring and summing, thereby reducing the impact of microstructure noise. The key insight is that averaging returns over short intervals reduces noise variance faster than it reduces signal variance, creating a favorable signal-to-noise ratio improvement. This pre-averaging step acts as a low-pass filter that attenuates high-frequency noise while preserving the volatility signal we want to measure.\n\nThe technique applies a weight function to returns within a moving window, creating \"pre-averaged returns\" that have substantially lower noise contamination than raw returns. These smoothed returns are then used in a realized variance calculation with appropriate scaling and bias correction factors. The window length is chosen to balance noise reduction (larger windows) against information loss from excessive smoothing (smaller windows), with optimal choice depending on the noise-to-signal ratio.\n\nMathematical formulation:\nDefine pre-averaged returns:\nR̄(i) = Σ[j=1 to k_n-1] g(j/k_n) * r(i+j)\n\nWhere:\n- g(x) is a weight function (e.g., g(x) = min(x, 1-x) for triangular)\n- k_n is the averaging window length (typically k_n ~ n^(1/2))\n- r(i) are raw high-frequency returns\n\nPre-Averaging RV estimator:\nRV_PA = (n/(θ * k_n)) * Σ[i=0 to n-k_n] R̄(i)² - (ψ * n)/(θ² * k_n) * Noise_Var\n\nWhere θ and ψ are constants depending on g(x):\nθ = ∫[0 to 1] g(x)² dx\nψ = ∫[0 to 1] (g'(x))² dx\n\nOptimal window:\nk_n* = c * n^(1/2) * (Noise_Var / Integrated_Vol)^(1/2)\n\nPre-Averaging is like trying to weigh individual grains of sand on a sensitive scale in a windy room. Each grain's reading bounces wildly due to air currents. Instead of weighing each grain alone, you group every 10 grains together and weigh them as a batch. The wind still affects the reading, but now it's only ±0.1g of error on a 1.0g batch instead of ±0.1g on a 0.1g grain - a much better ratio. Then you divide the batch weight by 10 to get the average grain weight with less noise.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/pre_averaging_estimator.txt","hasFullInfo":true},{"id":449,"title":"Quote Stuffing Detection","filename":"quote_stuffing_detection.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Manipulation detection","overview":"Quote Stuffing Detection identifies patterns of excessive order placement and cancellation designed to create information overload, slow down competing traders' systems, or probe for hidden liquidity. Quote stuffing involves rapidly submitting and canceling large numbers of orders (often hundreds per second) without intent to execute, creating what appears to be market activity but is actually a form of market manipulation or predatory high-frequency trading practice. Detection algorithms identify statistically anomalous patterns in order submission/cancellation rates, order lifetime distributions, and the ratio of messages to actual trades.","formula":"The detection process typically monitors several metrics: message-to-trade ratio (high values suggest stuffing), order cancellation rates (>95% cancellation suggests non-genuine orders), order lifetime distributions (extremely short-lived orders that repeatedly cancel), and temporal clustering (bursts of activity followed by quiet periods). Machine learning classifiers can be trained on labeled examples to distinguish legitimate market making (which also has high cancellation rates) from manipulative quote stuffing based on contextual features like order size patterns, timing precision, and correlation with price movements.\n\nDetection metrics:\n\nMessage-to-Trade Ratio:\nMTR(window) = (Orders_submitted + Orders_canceled) / Trades_executed\n\nCancellation Rate:\nCR(window) = Orders_canceled / Orders_submitted\n\nOrder Lifetime Distribution:\nLifetime(order_i) = Time_canceled - Time_submitted\nFlag if median(Lifetime) < threshold (e.g., 100ms)\n\nBurst Detection:\nActivity_rate(t) = Count(messages in [t-Δt, t]) / Δt\nFlag if Activity_rate > μ + k*σ (where k=3 to 5)\n\nSuspicious Pattern Score:\nScore = w₁*MTR + w₂*CR + w₃*ShortLifetime_ratio + w₄*Burst_frequency","parameters":"","intuition":"Quote Stuffing Detection is like watching someone at an auction who keeps rapidly raising their paddle and immediately lowering it 100 times per minute without ever actually buying anything. While legitimate bidders might change their mind occasionally, this person is clearly not trying to buy - they're either trying to confuse other bidders about the real interest level, slow down the auctioneer's ability to process real bids, or trick the auction house's computer system. The detector spots this \"fake bidding\" pattern and flags it as suspicious market manipulation.","rawContent":"Quote Stuffing Detection identifies patterns of excessive order placement and cancellation designed to create information overload, slow down competing traders' systems, or probe for hidden liquidity. Quote stuffing involves rapidly submitting and canceling large numbers of orders (often hundreds per second) without intent to execute, creating what appears to be market activity but is actually a form of market manipulation or predatory high-frequency trading practice. Detection algorithms identify statistically anomalous patterns in order submission/cancellation rates, order lifetime distributions, and the ratio of messages to actual trades.\n\nThe detection process typically monitors several metrics: message-to-trade ratio (high values suggest stuffing), order cancellation rates (>95% cancellation suggests non-genuine orders), order lifetime distributions (extremely short-lived orders that repeatedly cancel), and temporal clustering (bursts of activity followed by quiet periods). Machine learning classifiers can be trained on labeled examples to distinguish legitimate market making (which also has high cancellation rates) from manipulative quote stuffing based on contextual features like order size patterns, timing precision, and correlation with price movements.\n\nDetection metrics:\n\nMessage-to-Trade Ratio:\nMTR(window) = (Orders_submitted + Orders_canceled) / Trades_executed\n\nCancellation Rate:\nCR(window) = Orders_canceled / Orders_submitted\n\nOrder Lifetime Distribution:\nLifetime(order_i) = Time_canceled - Time_submitted\nFlag if median(Lifetime) < threshold (e.g., 100ms)\n\nBurst Detection:\nActivity_rate(t) = Count(messages in [t-Δt, t]) / Δt\nFlag if Activity_rate > μ + k*σ (where k=3 to 5)\n\nSuspicious Pattern Score:\nScore = w₁*MTR + w₂*CR + w₃*ShortLifetime_ratio + w₄*Burst_frequency\n\nQuote Stuffing Detection is like watching someone at an auction who keeps rapidly raising their paddle and immediately lowering it 100 times per minute without ever actually buying anything. While legitimate bidders might change their mind occasionally, this person is clearly not trying to buy - they're either trying to confuse other bidders about the real interest level, slow down the auctioneer's ability to process real bids, or trick the auction house's computer system. The detector spots this \"fake bidding\" pattern and flags it as suspicious market manipulation.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/quote_stuffing_detection.txt","hasFullInfo":true},{"id":450,"title":"Refresh Time Sampling","filename":"refresh_time_sampling.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Asynchronous data alignment","overview":"Refresh Time Sampling is a method for synchronizing asynchronous trading data from multiple assets or markets that trade at different times and frequencies. In modern electronic markets, different securities update at different moments, creating a challenge when you need aligned price observations for correlation, covariance, or portfolio calculations. Refresh time sampling solves this by creating synthetic observation times when all assets have updated at least once since the previous refresh time, ensuring that correlation estimates aren't biased by stale prices.","formula":"The algorithm maintains a \"last known price\" for each asset and only records a new multivariate observation when every asset has experienced at least one trade or quote update. This ensures that no asset's price is used repeatedly while others are updating, which would artificially inflate or deflate correlation estimates. The tradeoff is that sampling frequency is determined by the slowest-updating asset, potentially discarding information from faster-moving securities. However, this cost is worthwhile because using asynchronous data with standard methods can create severe biases in estimated correlations.\n\nAlgorithm:\n1. Initialize: t₀ = 0, LastUpdate(asset_i) = 0 for all assets\n2. For each new tick at time t for asset_j:\n   a. Update LastUpdate(asset_j) = t\n   b. If min(LastUpdate(all assets)) > t_prev:\n      - Record synchronized observation at t_refresh = t\n      - Save current prices for all assets\n      - Update t_prev = t_refresh\n      - Reset LastUpdate(asset_i) = 0 for all assets\n\nSynchronized return:\nr_sync(t_refresh) = [r₁(t_refresh), r₂(t_refresh), ..., r_n(t_refresh)]\n\nWhere each r_i uses the most recent price update for asset i.\n\nCorrelation/Covariance then computed on synchronized returns:\nCov(i,j) = (1/N_refresh) * Σ r_i(t_k) * r_j(t_k)","parameters":"","intuition":"Refresh Time Sampling is like trying to take a group photo of your friends who arrive at different times. If you just snap a photo every 10 seconds using whoever is already in frame, early arrivals appear in way more photos than late arrivals, making it look like they're more \"connected\" to each other. Instead, you wait until everyone has arrived at least once since the last photo, then take the picture. You might take fewer total photos this way, but each one fairly represents the whole group's positions.","rawContent":"Refresh Time Sampling is a method for synchronizing asynchronous trading data from multiple assets or markets that trade at different times and frequencies. In modern electronic markets, different securities update at different moments, creating a challenge when you need aligned price observations for correlation, covariance, or portfolio calculations. Refresh time sampling solves this by creating synthetic observation times when all assets have updated at least once since the previous refresh time, ensuring that correlation estimates aren't biased by stale prices.\n\nThe algorithm maintains a \"last known price\" for each asset and only records a new multivariate observation when every asset has experienced at least one trade or quote update. This ensures that no asset's price is used repeatedly while others are updating, which would artificially inflate or deflate correlation estimates. The tradeoff is that sampling frequency is determined by the slowest-updating asset, potentially discarding information from faster-moving securities. However, this cost is worthwhile because using asynchronous data with standard methods can create severe biases in estimated correlations.\n\nAlgorithm:\n1. Initialize: t₀ = 0, LastUpdate(asset_i) = 0 for all assets\n2. For each new tick at time t for asset_j:\n   a. Update LastUpdate(asset_j) = t\n   b. If min(LastUpdate(all assets)) > t_prev:\n      - Record synchronized observation at t_refresh = t\n      - Save current prices for all assets\n      - Update t_prev = t_refresh\n      - Reset LastUpdate(asset_i) = 0 for all assets\n\nSynchronized return:\nr_sync(t_refresh) = [r₁(t_refresh), r₂(t_refresh), ..., r_n(t_refresh)]\n\nWhere each r_i uses the most recent price update for asset i.\n\nCorrelation/Covariance then computed on synchronized returns:\nCov(i,j) = (1/N_refresh) * Σ r_i(t_k) * r_j(t_k)\n\nRefresh Time Sampling is like trying to take a group photo of your friends who arrive at different times. If you just snap a photo every 10 seconds using whoever is already in frame, early arrivals appear in way more photos than late arrivals, making it look like they're more \"connected\" to each other. Instead, you wait until everyone has arrived at least once since the last photo, then take the picture. You might take fewer total photos this way, but each one fairly represents the whole group's positions.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/refresh_time_sampling.txt","hasFullInfo":true},{"id":451,"title":"Rescaled Range (R/S) Analysis","filename":"rescaled_range_analysis.txt","group":"group 19","groupNum":19,"categoryId":47,"categoryTitle":"47. FRACTIONAL INTEGRATION & LONG MEMORY","subcategory":"General","summary":"Hurst estimation method","overview":"Rescaled Range (R/S) Analysis is Harold Hurst's original method for detecting long-range dependence by measuring how the range of cumulative deviations from the mean scales with time. The technique was developed to analyze the Nile River's annual flows, where Hurst discovered that optimal dam capacity required accounting for long-term persistence that traditional statistics missed. In finance, R/S analysis has become a foundational tool for distinguishing random walks (H=0.5) from persistent or mean-reverting processes, testing market efficiency hypotheses, and validating the presence of long memory that justifies ARFIMA and fractional models.","formula":"The method works by examining increasingly long windows of data and tracking how the range of cumulative deviations grows. For independent increments (random walk), this range grows as √n. For persistent processes, it grows faster (~n^H with H>0.5); for mean-reverting processes, slower (H<0.5). By plotting log(R/S) against log(n) across multiple timescales, the slope directly estimates the Hurst exponent. The beauty is that R/S is non-parametric, requires no distributional assumptions, and is relatively robust to non-normality, though it can be affected by short-term dependence and trends.\n\nMathematical formulation:\n\nFor time series {X_t}, t=1,...,N:\n\n1. Calculate mean:\n   X̄ = (1/N)ΣX_t\n\n2. Compute cumulative deviations:\n   Y_k = Σ_{t=1}^k (X_t - X̄) for k=1,...,N\n\n3. Calculate range:\n   R = max(Y_k) - min(Y_k)\n\n4. Calculate standard deviation:\n   S = √[(1/N)Σ(X_t - X̄)²]\n\n5. Rescaled range:\n   R/S = R/S\n\nFor multiple window sizes n:\n\nR/S(n) = (1/K)Σ_{k=1}^K [R_k(n)/S_k(n)]\n\nWhere K = floor(N/n) is number of non-overlapping windows\n\nExpected scaling:\nE[R/S(n)] = c·n^H\n\nEstimation:\nlog(R/S(n)) = log(c) + H·log(n) + ε_n\n\nLinear regression on (log(n), log(R/S(n))) gives slope = Ĥ\n\nClassical Hurst's adjustment for short-term correlations:\n(R/S)_adj accounts for first-order autocorrelation\n\nModified R/S (Lo, 1991):\nUses robust variance estimate:\nS²_q = S² + 2Σ_{j=1}^q w_j·γ_j\n\nWhere w_j = 1 - j/(q+1) and γ_j is lag-j autocovariance\n\nInterpretation ranges:\n\nH < 0.5: Mean-reverting, antipersistent\n- H ≈ 0.3: Strong mean reversion\n- Overshoots tend to correct\n\nH = 0.5: Random walk, independent increments\n- Pure Brownian motion\n- Efficient market hypothesis\n\nH > 0.5: Persistent, trending\n- H ≈ 0.7: Strong trends\n- Momentum continuation likely\n\nTypical window sizes:\nn ∈ {10, 20, 50, 100, 200, 500}\n\nSufficient sample: N > 100 for reliable estimates","parameters":"","intuition":"Rescaled Range Analysis is like measuring how far a wandering dog typically strays from its starting point over different time intervals. After 1 minute, maybe they're 10 feet away on average. After 4 minutes, if they're doing a random walk (H=0.5), they should be about 2×10=20 feet away (√4 scaling). But if they tend to keep wandering in the same direction once they start (H=0.7, persistent), they might be 30+ feet away. If they tend to circle back (H=0.3, mean-reverting), maybe only 15 feet. R/S measures this scaling across many time windows to estimate H.","rawContent":"Rescaled Range (R/S) Analysis is Harold Hurst's original method for detecting long-range dependence by measuring how the range of cumulative deviations from the mean scales with time. The technique was developed to analyze the Nile River's annual flows, where Hurst discovered that optimal dam capacity required accounting for long-term persistence that traditional statistics missed. In finance, R/S analysis has become a foundational tool for distinguishing random walks (H=0.5) from persistent or mean-reverting processes, testing market efficiency hypotheses, and validating the presence of long memory that justifies ARFIMA and fractional models.\n\nThe method works by examining increasingly long windows of data and tracking how the range of cumulative deviations grows. For independent increments (random walk), this range grows as √n. For persistent processes, it grows faster (~n^H with H>0.5); for mean-reverting processes, slower (H<0.5). By plotting log(R/S) against log(n) across multiple timescales, the slope directly estimates the Hurst exponent. The beauty is that R/S is non-parametric, requires no distributional assumptions, and is relatively robust to non-normality, though it can be affected by short-term dependence and trends.\n\nMathematical formulation:\n\nFor time series {X_t}, t=1,...,N:\n\n1. Calculate mean:\n   X̄ = (1/N)ΣX_t\n\n2. Compute cumulative deviations:\n   Y_k = Σ_{t=1}^k (X_t - X̄) for k=1,...,N\n\n3. Calculate range:\n   R = max(Y_k) - min(Y_k)\n\n4. Calculate standard deviation:\n   S = √[(1/N)Σ(X_t - X̄)²]\n\n5. Rescaled range:\n   R/S = R/S\n\nFor multiple window sizes n:\n\nR/S(n) = (1/K)Σ_{k=1}^K [R_k(n)/S_k(n)]\n\nWhere K = floor(N/n) is number of non-overlapping windows\n\nExpected scaling:\nE[R/S(n)] = c·n^H\n\nEstimation:\nlog(R/S(n)) = log(c) + H·log(n) + ε_n\n\nLinear regression on (log(n), log(R/S(n))) gives slope = Ĥ\n\nClassical Hurst's adjustment for short-term correlations:\n(R/S)_adj accounts for first-order autocorrelation\n\nModified R/S (Lo, 1991):\nUses robust variance estimate:\nS²_q = S² + 2Σ_{j=1}^q w_j·γ_j\n\nWhere w_j = 1 - j/(q+1) and γ_j is lag-j autocovariance\n\nInterpretation ranges:\n\nH < 0.5: Mean-reverting, antipersistent\n- H ≈ 0.3: Strong mean reversion\n- Overshoots tend to correct\n\nH = 0.5: Random walk, independent increments\n- Pure Brownian motion\n- Efficient market hypothesis\n\nH > 0.5: Persistent, trending\n- H ≈ 0.7: Strong trends\n- Momentum continuation likely\n\nTypical window sizes:\nn ∈ {10, 20, 50, 100, 200, 500}\n\nSufficient sample: N > 100 for reliable estimates\n\nRescaled Range Analysis is like measuring how far a wandering dog typically strays from its starting point over different time intervals. After 1 minute, maybe they're 10 feet away on average. After 4 minutes, if they're doing a random walk (H=0.5), they should be about 2×10=20 feet away (√4 scaling). But if they tend to keep wandering in the same direction once they start (H=0.7, persistent), they might be 30+ feet away. If they tend to circle back (H=0.3, mean-reverting), maybe only 15 feet. R/S measures this scaling across many time windows to estimate H.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 19/rescaled_range_analysis.txt","hasFullInfo":true},{"id":452,"title":"Signed Jump Decomposition","filename":"signed_jump_decomposition.txt","group":"group 19","groupNum":19,"categoryId":46,"categoryTitle":"46. JUMP DETECTION & DISCONTINUITY","subcategory":"General","summary":"Positive/negative jumps","overview":"Signed Jump Decomposition separates the total jump variation into positive (upward) and negative (downward) components, recognizing that jump risk is fundamentally asymmetric - crashes and rallies have different economic drivers, different predictability, different risk premia, and different implications for portfolio management. This decomposition extends basic jump detection by not only identifying whether jumps occurred, but characterizing their direction and relative magnitude. The distinction matters because negative jumps tend to be larger, more clustered, and more persistent in their effects on subsequent volatility than positive jumps.","formula":"The methodology first identifies jumps using any detection test (Lee-Mykland, BNS, etc.), then classifies each detected jump by its sign and aggregates the contributions. This produces three key measures: total jump variation, positive jump variation (good news jumps), and negative jump variation (bad news jumps). Empirically, negative jump variation typically dominates in equity markets, reflecting the asymmetric nature of market crashes versus rallies. Option pricing models that incorporate signed jumps can better capture volatility skew and the higher prices of put options relative to calls.\n\nMathematical formulation:\n\nTotal jump variation:\nJV = Σ J_i² where J_i is jump size\n\nSigned decomposition:\nJV = JV⁺ + JV⁻\n\nPositive jump variation:\nJV⁺ = Σ J_i² · 𝟙{J_i > 0}\n\nNegative jump variation:\nJV⁻ = Σ J_i² · 𝟙{J_i < 0}\n\nAlternative formulation using cube returns (captures skewness):\nJV⁺_signed = Σ r_i³ · 𝟙{jump detected at i and r_i > 0}\nJV⁻_signed = Σ r_i³ · 𝟙{jump detected at i and r_i < 0}\n\nJump size decomposition:\nRV = CV + JV = CV + JV⁺ + JV⁻\n\nWhere CV is continuous variance\n\nAsymmetry measures:\nJump_Skewness = (JV⁺ - JV⁻) / (JV⁺ + JV⁻)\nNegative ratio: R⁻ = JV⁻ / JV\n\nTypical findings (equity markets):\n- R⁻ ≈ 0.65-0.75 (negative jumps dominate)\n- E[JV⁻] > E[JV⁺]\n- Negative jumps more clustered in time\n\nTri-power quarticity-based estimation:\nJV⁺ = max(0, Σ r_i³ · 𝟙{r_i > 0}) with appropriate scaling\nJV⁻ = min(0, Σ r_i³ · 𝟙{r_i < 0}) with appropriate scaling\n\nApplications:\n- Risk-neutral vs physical jump intensities\n- Asymmetric GARCH with jump components\n- Separate volatility forecasts for up/down moves\n- Option pricing with crash vs rally jumps","parameters":"","intuition":"Signed Jump Decomposition is like analyzing a stock trader's winning and losing trades separately instead of just looking at total P&L volatility. You might find they have 60% win rate with average win of $500, but 40% losses averaging $1,000 - meaning losses dominate risk despite winning more often. Similarly, a stock might jump up 2% ten times (total +20%) but jump down 5% four times (total -20%), with the negative jumps contributing 4×5² = 100 to squared variation versus positive's 10×2² = 40. The asymmetry reveals that downside jump risk is the real concern, not overall jumpiness.","rawContent":"Signed Jump Decomposition separates the total jump variation into positive (upward) and negative (downward) components, recognizing that jump risk is fundamentally asymmetric - crashes and rallies have different economic drivers, different predictability, different risk premia, and different implications for portfolio management. This decomposition extends basic jump detection by not only identifying whether jumps occurred, but characterizing their direction and relative magnitude. The distinction matters because negative jumps tend to be larger, more clustered, and more persistent in their effects on subsequent volatility than positive jumps.\n\nThe methodology first identifies jumps using any detection test (Lee-Mykland, BNS, etc.), then classifies each detected jump by its sign and aggregates the contributions. This produces three key measures: total jump variation, positive jump variation (good news jumps), and negative jump variation (bad news jumps). Empirically, negative jump variation typically dominates in equity markets, reflecting the asymmetric nature of market crashes versus rallies. Option pricing models that incorporate signed jumps can better capture volatility skew and the higher prices of put options relative to calls.\n\nMathematical formulation:\n\nTotal jump variation:\nJV = Σ J_i² where J_i is jump size\n\nSigned decomposition:\nJV = JV⁺ + JV⁻\n\nPositive jump variation:\nJV⁺ = Σ J_i² · 𝟙{J_i > 0}\n\nNegative jump variation:\nJV⁻ = Σ J_i² · 𝟙{J_i < 0}\n\nAlternative formulation using cube returns (captures skewness):\nJV⁺_signed = Σ r_i³ · 𝟙{jump detected at i and r_i > 0}\nJV⁻_signed = Σ r_i³ · 𝟙{jump detected at i and r_i < 0}\n\nJump size decomposition:\nRV = CV + JV = CV + JV⁺ + JV⁻\n\nWhere CV is continuous variance\n\nAsymmetry measures:\nJump_Skewness = (JV⁺ - JV⁻) / (JV⁺ + JV⁻)\nNegative ratio: R⁻ = JV⁻ / JV\n\nTypical findings (equity markets):\n- R⁻ ≈ 0.65-0.75 (negative jumps dominate)\n- E[JV⁻] > E[JV⁺]\n- Negative jumps more clustered in time\n\nTri-power quarticity-based estimation:\nJV⁺ = max(0, Σ r_i³ · 𝟙{r_i > 0}) with appropriate scaling\nJV⁻ = min(0, Σ r_i³ · 𝟙{r_i < 0}) with appropriate scaling\n\nApplications:\n- Risk-neutral vs physical jump intensities\n- Asymmetric GARCH with jump components\n- Separate volatility forecasts for up/down moves\n- Option pricing with crash vs rally jumps\n\nSigned Jump Decomposition is like analyzing a stock trader's winning and losing trades separately instead of just looking at total P&L volatility. You might find they have 60% win rate with average win of $500, but 40% losses averaging $1,000 - meaning losses dominate risk despite winning more often. Similarly, a stock might jump up 2% ten times (total +20%) but jump down 5% four times (total -20%), with the negative jumps contributing 4×5² = 100 to squared variation versus positive's 10×2² = 40. The asymmetry reveals that downside jump risk is the real concern, not overall jumpiness.","tags":["Jump Detection"],"relPath":"public/concept-list/list-concepts/group 19/signed_jump_decomposition.txt","hasFullInfo":true},{"id":453,"title":"Spearman's Rho Filter","filename":"spearmans_rho_filter.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Rank correlation alternative","overview":"Spearman's Rho (ρ_s) is a non-parametric rank correlation coefficient that measures monotonic dependence by computing Pearson correlation on ranked data rather than raw values. Like Kendall's Tau, it provides a robust alternative to Pearson correlation that isn't distorted by outliers or non-normality, but Spearman's Rho is computationally simpler and more intuitive as it's just \"Pearson correlation of the ranks.\" This makes it easier to interpret for users familiar with standard correlation while maintaining robustness to heavy tails and non-linear monotonic relationships common in financial data.","formula":"The calculation ranks each variable independently from 1 to n, then computes the Pearson correlation of these rank sequences. Perfect positive Spearman correlation (ρ_s = 1) means the ranks are perfectly aligned - the highest X corresponds to highest Y, second-highest X to second-highest Y, etc. Unlike Kendall's Tau which counts pairwise concordance, Spearman's Rho squares the rank differences, making it more sensitive to large rank deviations but also slightly less robust to outliers than Kendall's Tau (though still much more robust than Pearson).\n\nMathematical definition:\n\nFor sample (x₁,y₁),...,(x_n,y_n):\n\nLet R_i = rank of x_i, S_i = rank of y_i\n\nSpearman's Rho:\nρ_s = Pearson_correlation(R, S) = Σ(R_i - R̄)(S_i - S̄) / √[Σ(R_i - R̄)² · Σ(S_i - S̄)²]\n\nSimplified formula (no tied ranks):\nρ_s = 1 - (6·Σd_i²) / [n(n²-1)]\n\nWhere d_i = R_i - S_i (rank difference)\n\nPopulation version (for copula C):\nρ_s = 12·∫∫ C(u,v) du dv - 3 = 12·∫∫ uv dC(u,v) - 3\n\nRelationship to copula parameters:\n\nGaussian/t-copula: ρ_s ≈ (6/π)·arcsin(ρ/2)\nClayton copula: No closed form, but monotonic in θ\nGumbel copula: No closed form, but monotonic in θ\nFrank copula: Numerical integration required\n\nVariance (under independence):\nVar(ρ_s) ≈ 1/(n-1)\n\nAsymptotic normality:\n√n·ρ_s ~ N(0, (1+ρ_s²)/2) approximately\n\nFiltering application:\nρ_s,t = rolling Spearman's Rho over window [t-W, t]\n\nOutlier detection:\nFlag observations where rank(x_i) and rank(y_i) differ by more than k standard deviations\n\nRegime detection:\nρ_s,short vs ρ_s,long to identify changing dependence","parameters":"","intuition":"Spearman's Rho is like ranking two sets of runners in a race and checking if their finishing orders match. Runner A who finishes 1st, does Runner B finish 1st? If A finishes 5th, does B finish around 5th? You don't care about actual times (3:15 vs 4:30 doesn't matter), only relative positions. Perfect Spearman correlation means the rankings are identical - whoever is fastest in Race A is fastest in Race B, second-fastest matches second-fastest, etc. This captures monotonic relationships regardless of whether the actual time differences are linear or curved.","rawContent":"Spearman's Rho (ρ_s) is a non-parametric rank correlation coefficient that measures monotonic dependence by computing Pearson correlation on ranked data rather than raw values. Like Kendall's Tau, it provides a robust alternative to Pearson correlation that isn't distorted by outliers or non-normality, but Spearman's Rho is computationally simpler and more intuitive as it's just \"Pearson correlation of the ranks.\" This makes it easier to interpret for users familiar with standard correlation while maintaining robustness to heavy tails and non-linear monotonic relationships common in financial data.\n\nThe calculation ranks each variable independently from 1 to n, then computes the Pearson correlation of these rank sequences. Perfect positive Spearman correlation (ρ_s = 1) means the ranks are perfectly aligned - the highest X corresponds to highest Y, second-highest X to second-highest Y, etc. Unlike Kendall's Tau which counts pairwise concordance, Spearman's Rho squares the rank differences, making it more sensitive to large rank deviations but also slightly less robust to outliers than Kendall's Tau (though still much more robust than Pearson).\n\nMathematical definition:\n\nFor sample (x₁,y₁),...,(x_n,y_n):\n\nLet R_i = rank of x_i, S_i = rank of y_i\n\nSpearman's Rho:\nρ_s = Pearson_correlation(R, S) = Σ(R_i - R̄)(S_i - S̄) / √[Σ(R_i - R̄)² · Σ(S_i - S̄)²]\n\nSimplified formula (no tied ranks):\nρ_s = 1 - (6·Σd_i²) / [n(n²-1)]\n\nWhere d_i = R_i - S_i (rank difference)\n\nPopulation version (for copula C):\nρ_s = 12·∫∫ C(u,v) du dv - 3 = 12·∫∫ uv dC(u,v) - 3\n\nRelationship to copula parameters:\n\nGaussian/t-copula: ρ_s ≈ (6/π)·arcsin(ρ/2)\nClayton copula: No closed form, but monotonic in θ\nGumbel copula: No closed form, but monotonic in θ\nFrank copula: Numerical integration required\n\nVariance (under independence):\nVar(ρ_s) ≈ 1/(n-1)\n\nAsymptotic normality:\n√n·ρ_s ~ N(0, (1+ρ_s²)/2) approximately\n\nFiltering application:\nρ_s,t = rolling Spearman's Rho over window [t-W, t]\n\nOutlier detection:\nFlag observations where rank(x_i) and rank(y_i) differ by more than k standard deviations\n\nRegime detection:\nρ_s,short vs ρ_s,long to identify changing dependence\n\nSpearman's Rho is like ranking two sets of runners in a race and checking if their finishing orders match. Runner A who finishes 1st, does Runner B finish 1st? If A finishes 5th, does B finish around 5th? You don't care about actual times (3:15 vs 4:30 doesn't matter), only relative positions. Perfect Spearman correlation means the rankings are identical - whoever is fastest in Race A is fastest in Race B, second-fastest matches second-fastest, etc. This captures monotonic relationships regardless of whether the actual time differences are linear or curved.","tags":["DSP Filtering","Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/spearmans_rho_filter.txt","hasFullInfo":true},{"id":454,"title":"Tail Dependence Measures","filename":"tail_dependence_measures.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Extreme event dependence","overview":"Tail Dependence Measures quantify the probability that two or more assets experience extreme movements simultaneously, capturing the critical risk that correlations increase precisely when they matter most for portfolio protection. Unlike standard correlation which measures average linear association, tail dependence focuses specifically on co-movement in the extremes - the joint probability of crashes or booms. This distinction is crucial for risk management: two assets might have modest average correlation but strong tail dependence, meaning they'll both collapse together during crises even if they move independently during normal times.","formula":"Upper tail dependence λ_U measures the probability that one variable exceeds a high threshold given that another does. Lower tail dependence λ_L measures joint crashes. Mathematically, these are limiting conditional probabilities as we move further into the tails. Many standard distributions (like Gaussian) have zero tail dependence asymptotically, meaning they systematically underestimate crisis correlations. Fat-tailed copulas (t-copula, Clayton) exhibit positive tail dependence, better matching observed financial behavior.\n\nMathematical definitions:\n\nUpper tail dependence:\nλ_U = lim_{u→1⁻} P(U₂ > u | U₁ > u) = lim_{u→1⁻} (1 - 2u + C(u,u))/(1 - u)\n\nLower tail dependence:\nλ_L = lim_{u→0⁺} P(U₂ ≤ u | U₁ ≤ u) = lim_{u→0⁺} C(u,u)/u\n\nFor common copulas:\n\nGaussian: λ_U = λ_L = 0 (asymptotically independent)\n\nStudent t: λ_U = λ_L = 2·t_{ν+1}(-√[(ν+1)(1-ρ)/(1+ρ)])\nExample: ρ=0.5, ν=5 gives λ ≈ 0.20\n\nClayton: λ_L = 2^(-1/θ), λ_U = 0\nExample: θ=2 gives λ_L = 0.5\n\nGumbel: λ_U = 2 - 2^(1/θ), λ_L = 0\nExample: θ=2 gives λ_U = 0.586\n\nEmpirical estimation:\n\nThreshold-based:\nλ̂_U = (# pairs where both exceed 95th percentile)/(# pairs where at least one exceeds 95th percentile)\n\nRank-based:\nλ̂_L = C_emp(k/n, k/n)/(k/n) for small k\n\nHill estimator:\nλ̂ = 2 - 2·exp(mean(log(min(U_i,V_i))) for extreme pairs\n\nApplications:\n- Crisis risk assessment: Pr(both assets crash)\n- Portfolio VaR: Accounting for crash correlation\n- Hedge effectiveness: Do hedges work in crashes?\n- Contagion detection: Cross-market extreme linkages\n\nTail Dependence Measures answer the question: \"If Stock A crashes to its worst 5% of historical values, what's the probability Stock B also crashes to its worst 5%?\" Standard correlation might say they're 30% correlated on average, but tail dependence could reveal they're 60% likely to crash together - a huge difference for someone relying on B to protect against A's downside. It's like knowing two friends who usually have independent schedules, but when one gets sick, the other catches it 80% of the time because they carpool. Average independence masks critical contagion risk.","parameters":"","intuition":"","rawContent":"Tail Dependence Measures quantify the probability that two or more assets experience extreme movements simultaneously, capturing the critical risk that correlations increase precisely when they matter most for portfolio protection. Unlike standard correlation which measures average linear association, tail dependence focuses specifically on co-movement in the extremes - the joint probability of crashes or booms. This distinction is crucial for risk management: two assets might have modest average correlation but strong tail dependence, meaning they'll both collapse together during crises even if they move independently during normal times.\n\nUpper tail dependence λ_U measures the probability that one variable exceeds a high threshold given that another does. Lower tail dependence λ_L measures joint crashes. Mathematically, these are limiting conditional probabilities as we move further into the tails. Many standard distributions (like Gaussian) have zero tail dependence asymptotically, meaning they systematically underestimate crisis correlations. Fat-tailed copulas (t-copula, Clayton) exhibit positive tail dependence, better matching observed financial behavior.\n\nMathematical definitions:\n\nUpper tail dependence:\nλ_U = lim_{u→1⁻} P(U₂ > u | U₁ > u) = lim_{u→1⁻} (1 - 2u + C(u,u))/(1 - u)\n\nLower tail dependence:\nλ_L = lim_{u→0⁺} P(U₂ ≤ u | U₁ ≤ u) = lim_{u→0⁺} C(u,u)/u\n\nFor common copulas:\n\nGaussian: λ_U = λ_L = 0 (asymptotically independent)\n\nStudent t: λ_U = λ_L = 2·t_{ν+1}(-√[(ν+1)(1-ρ)/(1+ρ)])\nExample: ρ=0.5, ν=5 gives λ ≈ 0.20\n\nClayton: λ_L = 2^(-1/θ), λ_U = 0\nExample: θ=2 gives λ_L = 0.5\n\nGumbel: λ_U = 2 - 2^(1/θ), λ_L = 0\nExample: θ=2 gives λ_U = 0.586\n\nEmpirical estimation:\n\nThreshold-based:\nλ̂_U = (# pairs where both exceed 95th percentile)/(# pairs where at least one exceeds 95th percentile)\n\nRank-based:\nλ̂_L = C_emp(k/n, k/n)/(k/n) for small k\n\nHill estimator:\nλ̂ = 2 - 2·exp(mean(log(min(U_i,V_i))) for extreme pairs\n\nApplications:\n- Crisis risk assessment: Pr(both assets crash)\n- Portfolio VaR: Accounting for crash correlation\n- Hedge effectiveness: Do hedges work in crashes?\n- Contagion detection: Cross-market extreme linkages\n\nTail Dependence Measures answer the question: \"If Stock A crashes to its worst 5% of historical values, what's the probability Stock B also crashes to its worst 5%?\" Standard correlation might say they're 30% correlated on average, but tail dependence could reveal they're 60% likely to crash together - a huge difference for someone relying on B to protect against A's downside. It's like knowing two friends who usually have independent schedules, but when one gets sick, the other catches it 80% of the time because they carpool. Average independence masks critical contagion risk.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/tail_dependence_measures.txt","hasFullInfo":true},{"id":455,"title":"Threshold Bipower Variation","filename":"threshold_bipower_variation.txt","group":"group 19","groupNum":19,"categoryId":1,"categoryTitle":"1. VOLATILITY ESTIMATORS","subcategory":"General","summary":"Jump-robust volatility estimator","overview":"Threshold Bipower Variation extends the standard bipower variation approach by explicitly truncating or downweighting returns that exceed a threshold, providing even more robust jump detection when jumps are large and frequent. While standard bipower variation reduces jump influence through the product of absolute returns, it can still be contaminated by very large jumps that dominate adjacent return products. The threshold approach directly addresses this by either excluding returns above a critical threshold or applying a smooth truncation function, ensuring that extreme observations don't distort the continuous volatility estimate.","formula":"The threshold is typically set as a multiple of spot volatility (often 3-4 times the standard deviation), creating an adaptive filter that accounts for time-varying volatility levels. Returns below the threshold are treated normally in the bipower calculation, while those above are either omitted entirely or replaced with the threshold value. This provides superior finite-sample performance when jumps are relatively large compared to diffusive volatility, which is common in equity markets during earnings announcements, macroeconomic surprises, or flash crash events.\n\nMathematical formulation:\n\nThreshold function:\n𝟙{|r_i| ≤ α·σ̂_i}\n\nWhere α ∈ [3,5] is threshold multiplier and σ̂_i is local volatility estimate\n\nThreshold Bipower Variation:\nTBV = μ₁⁻² · Σ|r_i|·|r_{i+1}|·𝟙{|r_i| ≤ c_i}·𝟙{|r_{i+1}| ≤ c_{i+1}}\n\nWhere c_i = α·√(BV_local/n) is adaptive threshold\n\nAlternative with soft truncation:\nTBV_soft = μ₁⁻² · Σ min(|r_i|, c_i)·min(|r_{i+1}|, c_{i+1})\n\nMinimax threshold bipower:\nTBV_mm = μ₁⁻² · Σ g(r_i, c_i)·g(r_{i+1}, c_{i+1})\n\nWhere g(r,c) = r·𝟙{|r| ≤ c} + c·sign(r)·𝟙{|r| > c}\n\nLocal volatility estimation (for threshold):\nσ̂²_i = median(|r_{i-h}|·|r_{i-h+1}|,...,|r_{i+h}|·|r_{i+h+1}|) / μ₁²\n\nOptimal threshold selection:\nα* = arg min MSE(TBV_α) ≈ 3-5 in Monte Carlo studies\n\nJump component with threshold:\nJump_Var = max(0, RV - TBV)","parameters":"","intuition":"Threshold Bipower Variation is like measuring ocean wave heights by comparing adjacent waves, but ignoring measurements when a tsunami (jump) passes through. Standard bipower would be contaminated because the product of \"tsunami height × next wave\" is still enormous. With thresholding, you say \"any wave over 20 feet doesn't count as a normal wave - it's an outlier event.\" So you only multiply adjacent wave heights when both are under 20 feet, giving you a clean measure of typical wave variance without tsunami contamination. The threshold adapts: if waves are normally 10 feet, you use 30-40 feet; if they're normally 2 feet, you use 6-8 feet.","rawContent":"Threshold Bipower Variation extends the standard bipower variation approach by explicitly truncating or downweighting returns that exceed a threshold, providing even more robust jump detection when jumps are large and frequent. While standard bipower variation reduces jump influence through the product of absolute returns, it can still be contaminated by very large jumps that dominate adjacent return products. The threshold approach directly addresses this by either excluding returns above a critical threshold or applying a smooth truncation function, ensuring that extreme observations don't distort the continuous volatility estimate.\n\nThe threshold is typically set as a multiple of spot volatility (often 3-4 times the standard deviation), creating an adaptive filter that accounts for time-varying volatility levels. Returns below the threshold are treated normally in the bipower calculation, while those above are either omitted entirely or replaced with the threshold value. This provides superior finite-sample performance when jumps are relatively large compared to diffusive volatility, which is common in equity markets during earnings announcements, macroeconomic surprises, or flash crash events.\n\nMathematical formulation:\n\nThreshold function:\n𝟙{|r_i| ≤ α·σ̂_i}\n\nWhere α ∈ [3,5] is threshold multiplier and σ̂_i is local volatility estimate\n\nThreshold Bipower Variation:\nTBV = μ₁⁻² · Σ|r_i|·|r_{i+1}|·𝟙{|r_i| ≤ c_i}·𝟙{|r_{i+1}| ≤ c_{i+1}}\n\nWhere c_i = α·√(BV_local/n) is adaptive threshold\n\nAlternative with soft truncation:\nTBV_soft = μ₁⁻² · Σ min(|r_i|, c_i)·min(|r_{i+1}|, c_{i+1})\n\nMinimax threshold bipower:\nTBV_mm = μ₁⁻² · Σ g(r_i, c_i)·g(r_{i+1}, c_{i+1})\n\nWhere g(r,c) = r·𝟙{|r| ≤ c} + c·sign(r)·𝟙{|r| > c}\n\nLocal volatility estimation (for threshold):\nσ̂²_i = median(|r_{i-h}|·|r_{i-h+1}|,...,|r_{i+h}|·|r_{i+h+1}|) / μ₁²\n\nOptimal threshold selection:\nα* = arg min MSE(TBV_α) ≈ 3-5 in Monte Carlo studies\n\nJump component with threshold:\nJump_Var = max(0, RV - TBV)\n\nThreshold Bipower Variation is like measuring ocean wave heights by comparing adjacent waves, but ignoring measurements when a tsunami (jump) passes through. Standard bipower would be contaminated because the product of \"tsunami height × next wave\" is still enormous. With thresholding, you say \"any wave over 20 feet doesn't count as a normal wave - it's an outlier event.\" So you only multiply adjacent wave heights when both are under 20 feet, giving you a clean measure of typical wave variance without tsunami contamination. The threshold adapts: if waves are normally 10 feet, you use 30-40 feet; if they're normally 2 feet, you use 6-8 feet.","tags":["Volatility"],"relPath":"public/concept-list/list-concepts/group 19/threshold_bipower_variation.txt","hasFullInfo":true},{"id":456,"title":"Tick-by-Tick Data Filtering","filename":"tick_by_tick_data_filtering.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Microsecond data processing","overview":"Tick-by-tick data filtering is a technique for processing ultra-high-frequency market data at the individual transaction or quote level, operating at microsecond to millisecond resolution. This filtering approach handles the massive volume of data generated by modern electronic markets, where thousands of price updates and trades can occur within a single second. The primary challenge is separating genuine price movement signals from microstructure noise caused by bid-ask bounce, quote stuffing, and other high-frequency phenomena that don't reflect true asset value changes.","formula":"The filtering process typically involves several stages: (1) data cleaning to remove erroneous or duplicate ticks, (2) timestamp synchronization across multiple venues, (3) outlier detection using statistical bounds or velocity checks, (4) aggregation methods like volume bars or time bars to reduce noise while preserving information, and (5) microstructure noise reduction through sampling or averaging techniques. Common approaches include sampling at regular intervals, using previous-tick methods, or implementing refresh-time sampling for asynchronous data streams.\n\nMathematical representation varies by method, but a simple tick filter might use:\nFiltered_Price = median(Last_N_Ticks) or Filtered_Price = VWAP(Ticks_in_Window)\n\nFor noise reduction:\nClean_Price(t) = Price(t) if |Price(t) - Price(t-1)| / Price(t-1) < Threshold, else Price(t-1)","parameters":"","intuition":"Tick-by-tick filtering is like using a high-speed camera to film a hummingbird's wings - you capture so many frames per second that most of what you see is just blur and vibration, not the actual movement pattern. The filter helps you throw away the useless blurry frames and keep only the ones that show real position changes, so you can understand how the bird is actually flying rather than getting distracted by every tiny flutter.","rawContent":"Tick-by-tick data filtering is a technique for processing ultra-high-frequency market data at the individual transaction or quote level, operating at microsecond to millisecond resolution. This filtering approach handles the massive volume of data generated by modern electronic markets, where thousands of price updates and trades can occur within a single second. The primary challenge is separating genuine price movement signals from microstructure noise caused by bid-ask bounce, quote stuffing, and other high-frequency phenomena that don't reflect true asset value changes.\n\nThe filtering process typically involves several stages: (1) data cleaning to remove erroneous or duplicate ticks, (2) timestamp synchronization across multiple venues, (3) outlier detection using statistical bounds or velocity checks, (4) aggregation methods like volume bars or time bars to reduce noise while preserving information, and (5) microstructure noise reduction through sampling or averaging techniques. Common approaches include sampling at regular intervals, using previous-tick methods, or implementing refresh-time sampling for asynchronous data streams.\n\nMathematical representation varies by method, but a simple tick filter might use:\nFiltered_Price = median(Last_N_Ticks) or Filtered_Price = VWAP(Ticks_in_Window)\n\nFor noise reduction:\nClean_Price(t) = Price(t) if |Price(t) - Price(t-1)| / Price(t-1) < Threshold, else Price(t-1)\n\nTick-by-tick filtering is like using a high-speed camera to film a hummingbird's wings - you capture so many frames per second that most of what you see is just blur and vibration, not the actual movement pattern. The filter helps you throw away the useless blurry frames and keep only the ones that show real position changes, so you can understand how the bird is actually flying rather than getting distracted by every tiny flutter.","tags":["DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/tick_by_tick_data_filtering.txt","hasFullInfo":true},{"id":457,"title":"Time-Varying Copulas","filename":"time_varying_copulas.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Conditional dependence","overview":"Time-Varying Copulas model dependence structures that change smoothly over time rather than jumping between discrete regimes, capturing the gradual evolution of market correlations in response to information flow, volatility persistence, and business cycle dynamics. Unlike regime-switching models that assume abrupt state changes, time-varying copulas allow copula parameters (and sometimes copula families) to evolve continuously according to deterministic trends, stochastic processes, or observable conditioning variables. This provides a flexible framework for modeling correlation that responds to market conditions without requiring explicit regime classification.","formula":"The time variation can enter through multiple mechanisms: parameters may follow smooth transition functions of time or observable variables; rolling window estimation creates adaptive parameters; or parameters evolve according to stochastic processes like random walks or mean-reverting dynamics. Modern approaches use score-driven or observation-driven updates where copula parameters respond to forecast errors or realized dependence measures, ensuring parameters remain in valid ranges while adapting to new information.\n\nMathematical frameworks:\n\nScore-driven (GAS) copula:\nθ_t = ω + α·s_{t-1} + β·θ_{t-1}\ns_t = S_t^(-1) · ∇_θ log c_t (scaled score of copula log-likelihood)\n\nWhere S_t is scaling matrix (often Fisher information)\n\nSmooth transition copula:\nθ_t = θ₁·(1-G(z_t)) + θ₂·G(z_t)\nG(z_t) = (1 + exp(-γ(z_t - c)))^(-1)\n\nWhere z_t is transition variable (e.g., VIX, business cycle indicator)\n\nStochastic correlation copula:\nρ_t = tanh(x_t)\nx_t = μ + φ(x_{t-1} - μ) + σ_η·η_t\nC_t(u,v) = Φ_ρ_t(Φ^(-1)(u), Φ^(-1)(v))\n\nRolling window approach:\nθ_t = estimate using data in [t-W, t]\nC_t(u,v; θ_t) with window width W\n\nAdaptive vine copula:\nTree structure and copula families updated periodically based on:\n- Rolling dependence measures\n- Information criteria for model selection\n- Stability tests for structure changes\n\nFiltering/estimation:\n- Kalman filter for Gaussian latent θ_t\n- Particle filter for nonlinear/non-Gaussian dynamics\n- Sequential MLE with rolling windows\n\nTime-Varying Copulas are like tracking how two coworkers' productivity depends on each other over time. Early in a project, they work independently (low correlation). As the deadline approaches, they become interdependent - when one falls behind, the other does too (increasing correlation). After project completion, independence returns. Rather than saying \"they switch between independent and dependent modes,\" time-varying copulas describe the smooth, gradual increase and decrease in their coordination as project stress evolves continuously.","parameters":"","intuition":"","rawContent":"Time-Varying Copulas model dependence structures that change smoothly over time rather than jumping between discrete regimes, capturing the gradual evolution of market correlations in response to information flow, volatility persistence, and business cycle dynamics. Unlike regime-switching models that assume abrupt state changes, time-varying copulas allow copula parameters (and sometimes copula families) to evolve continuously according to deterministic trends, stochastic processes, or observable conditioning variables. This provides a flexible framework for modeling correlation that responds to market conditions without requiring explicit regime classification.\n\nThe time variation can enter through multiple mechanisms: parameters may follow smooth transition functions of time or observable variables; rolling window estimation creates adaptive parameters; or parameters evolve according to stochastic processes like random walks or mean-reverting dynamics. Modern approaches use score-driven or observation-driven updates where copula parameters respond to forecast errors or realized dependence measures, ensuring parameters remain in valid ranges while adapting to new information.\n\nMathematical frameworks:\n\nScore-driven (GAS) copula:\nθ_t = ω + α·s_{t-1} + β·θ_{t-1}\ns_t = S_t^(-1) · ∇_θ log c_t (scaled score of copula log-likelihood)\n\nWhere S_t is scaling matrix (often Fisher information)\n\nSmooth transition copula:\nθ_t = θ₁·(1-G(z_t)) + θ₂·G(z_t)\nG(z_t) = (1 + exp(-γ(z_t - c)))^(-1)\n\nWhere z_t is transition variable (e.g., VIX, business cycle indicator)\n\nStochastic correlation copula:\nρ_t = tanh(x_t)\nx_t = μ + φ(x_{t-1} - μ) + σ_η·η_t\nC_t(u,v) = Φ_ρ_t(Φ^(-1)(u), Φ^(-1)(v))\n\nRolling window approach:\nθ_t = estimate using data in [t-W, t]\nC_t(u,v; θ_t) with window width W\n\nAdaptive vine copula:\nTree structure and copula families updated periodically based on:\n- Rolling dependence measures\n- Information criteria for model selection\n- Stability tests for structure changes\n\nFiltering/estimation:\n- Kalman filter for Gaussian latent θ_t\n- Particle filter for nonlinear/non-Gaussian dynamics\n- Sequential MLE with rolling windows\n\nTime-Varying Copulas are like tracking how two coworkers' productivity depends on each other over time. Early in a project, they work independently (low correlation). As the deadline approaches, they become interdependent - when one falls behind, the other does too (increasing correlation). After project completion, independence returns. Rather than saying \"they switch between independent and dependent modes,\" time-varying copulas describe the smooth, gradual increase and decrease in their coordination as project stress evolves continuously.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/time_varying_copulas.txt","hasFullInfo":true},{"id":458,"title":"Two-Scales Realized Volatility (TSRV)","filename":"two_scales_realized_volatility.txt","group":"group 19","groupNum":19,"categoryId":44,"categoryTitle":"44. HIGH-FREQUENCY TRADING FILTERS","subcategory":"General","summary":"Multi-timescale volatility","overview":"Two-Scales Realized Volatility is a robust estimator of integrated volatility in the presence of microstructure noise that uses returns computed at two different sampling frequencies. The method exploits the fact that microstructure noise and true volatility scale differently with sampling frequency: true volatility is approximately constant across reasonable sampling intervals, while noise variance increases linearly as sampling becomes more frequent. By comparing volatility estimates at two timescales, TSRV can identify and remove the noise component while preserving the signal.","formula":"The TSRV approach computes realized variance at a fast timescale (capturing both signal and substantial noise) and at a slower timescale (capturing signal with less noise contamination). The difference in scaling between these estimates reveals the noise variance, which is then used to bias-correct the high-frequency estimate. This yields a consistent estimator of integrated volatility that is more efficient than simple sparse sampling (which discards information) and more robust than unadjusted high-frequency realized variance (which is severely biased upward by noise).\n\nMathematical formulation:\nLet RV_fast = realized variance at fast timescale (every tick)\nLet RV_slow = realized variance at slow timescale (every K ticks)\n\nTSRV = RV_slow - (n_slow/n_fast) * RV_fast_avg\nor equivalently:\nTSRV = (1 - K⁻¹) * RV_slow - (1/K) * bias_correction\n\nWhere n_fast and n_slow are the number of returns at each frequency, and K is the subsampling ratio.\n\nAlternative formulation:\nTSRV = RV_all - (n/n_sub) * Noise_Variance_Estimate","parameters":"","intuition":"Two-Scales Realized Volatility is like weighing yourself on two different scales - one super-precise digital scale that picks up every tiny vibration in the floor (high frequency), and one old-fashioned analog scale that only shows whole pounds (low frequency). The digital scale shows 150.7 pounds bouncing between 150.3 and 151.1 as the floor vibrates. The analog shows 150. By comparing them, you realize the digital scale has about 0.5 pounds of \"floor vibration noise\" that you need to subtract to get your true weight of 150.2 pounds.","rawContent":"Two-Scales Realized Volatility is a robust estimator of integrated volatility in the presence of microstructure noise that uses returns computed at two different sampling frequencies. The method exploits the fact that microstructure noise and true volatility scale differently with sampling frequency: true volatility is approximately constant across reasonable sampling intervals, while noise variance increases linearly as sampling becomes more frequent. By comparing volatility estimates at two timescales, TSRV can identify and remove the noise component while preserving the signal.\n\nThe TSRV approach computes realized variance at a fast timescale (capturing both signal and substantial noise) and at a slower timescale (capturing signal with less noise contamination). The difference in scaling between these estimates reveals the noise variance, which is then used to bias-correct the high-frequency estimate. This yields a consistent estimator of integrated volatility that is more efficient than simple sparse sampling (which discards information) and more robust than unadjusted high-frequency realized variance (which is severely biased upward by noise).\n\nMathematical formulation:\nLet RV_fast = realized variance at fast timescale (every tick)\nLet RV_slow = realized variance at slow timescale (every K ticks)\n\nTSRV = RV_slow - (n_slow/n_fast) * RV_fast_avg\nor equivalently:\nTSRV = (1 - K⁻¹) * RV_slow - (1/K) * bias_correction\n\nWhere n_fast and n_slow are the number of returns at each frequency, and K is the subsampling ratio.\n\nAlternative formulation:\nTSRV = RV_all - (n/n_sub) * Noise_Variance_Estimate\n\nTwo-Scales Realized Volatility is like weighing yourself on two different scales - one super-precise digital scale that picks up every tiny vibration in the floor (high frequency), and one old-fashioned analog scale that only shows whole pounds (low frequency). The digital scale shows 150.7 pounds bouncing between 150.3 and 151.1 as the floor vibrates. The analog shows 150. By comparing them, you realize the digital scale has about 0.5 pounds of \"floor vibration noise\" that you need to subtract to get your true weight of 150.2 pounds.","tags":["Volatility","DSP Filtering"],"relPath":"public/concept-list/list-concepts/group 19/two_scales_realized_volatility.txt","hasFullInfo":true},{"id":459,"title":"t-Copula","filename":"t_copula.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"Heavy-tailed dependence","overview":"The t-Copula (Student's t copula) extends the Gaussian copula by incorporating heavy tails and symmetric tail dependence, making it more appropriate for financial data that exhibits joint extreme movements. Like the Gaussian copula, it separates marginal distributions from dependence structure, but uses a multivariate Student's t distribution instead of the multivariate normal. The key advantage is realistic modeling of crash scenarios: the t-copula captures the empirical observation that assets are more likely to crash together than to boom together, exhibiting stronger correlation during market stress.","formula":"The t-copula is parameterized by a correlation matrix (like Gaussian) plus a degrees of freedom parameter ν that controls tail heaviness. Lower ν produces heavier tails and stronger tail dependence - as ν → ∞, the t-copula converges to the Gaussian copula. Typical financial applications use ν between 3 and 10. The symmetric tail dependence means the model treats joint crashes and joint booms identically, which may not perfectly match reality (crashes tend to be more correlated than booms), but is more realistic than the asymptotic independence of Gaussian copulas.\n\nMathematical formulation:\n\nCopula function:\nC(u₁, u₂, ..., u_n; R, ν) = t_R,ν(t_ν⁻¹(u₁), t_ν⁻¹(u₂), ..., t_ν⁻¹(u_n))","parameters":"Where:\n- t_R,ν is the multivariate Student's t CDF with correlation R and ν degrees of freedom\n- t_ν⁻¹ is the inverse univariate Student's t CDF with ν degrees of freedom\n- u_i = F_i(x_i) are marginal CDFs\n\nBivariate t-copula:\nC(u,v; ρ, ν) = t_ρ,ν(t_ν⁻¹(u), t_ν⁻¹(v))\n\nTail dependence:\nλ_upper = λ_lower = 2·t_ν+1(-√[(ν+1)(1-ρ)/(1+ρ)])\n\nFor ρ = 0.5, ν = 4: λ ≈ 0.24 (24% chance of joint extremes)\nAs ν → ∞: λ → 0 (converges to Gaussian)\n\nSimulation:\n1. Draw S ~ χ²(ν)\n2. Draw Z ~ N(0,R)\n3. Set X = √(ν/S) · Z (follows multivariate t)\n4. U_i = t_ν(X_i), then apply F_i⁻¹(U_i)","intuition":"The t-Copula is like modeling two skiers going down a mountain where there are occasional ice patches that make both skiers more likely to fall at the same time. The Gaussian copula would say \"they sometimes fall together by random chance,\" but the t-copula recognizes \"when conditions get extreme (icy patches), they're much more likely to BOTH wipe out together than you'd expect from independence.\" The degrees of freedom parameter controls how \"icy\" the mountain is - lower values mean more frequent patches where joint falls become very likely.","rawContent":"The t-Copula (Student's t copula) extends the Gaussian copula by incorporating heavy tails and symmetric tail dependence, making it more appropriate for financial data that exhibits joint extreme movements. Like the Gaussian copula, it separates marginal distributions from dependence structure, but uses a multivariate Student's t distribution instead of the multivariate normal. The key advantage is realistic modeling of crash scenarios: the t-copula captures the empirical observation that assets are more likely to crash together than to boom together, exhibiting stronger correlation during market stress.\n\nThe t-copula is parameterized by a correlation matrix (like Gaussian) plus a degrees of freedom parameter ν that controls tail heaviness. Lower ν produces heavier tails and stronger tail dependence - as ν → ∞, the t-copula converges to the Gaussian copula. Typical financial applications use ν between 3 and 10. The symmetric tail dependence means the model treats joint crashes and joint booms identically, which may not perfectly match reality (crashes tend to be more correlated than booms), but is more realistic than the asymptotic independence of Gaussian copulas.\n\nMathematical formulation:\n\nCopula function:\nC(u₁, u₂, ..., u_n; R, ν) = t_R,ν(t_ν⁻¹(u₁), t_ν⁻¹(u₂), ..., t_ν⁻¹(u_n))\n\nWhere:\n- t_R,ν is the multivariate Student's t CDF with correlation R and ν degrees of freedom\n- t_ν⁻¹ is the inverse univariate Student's t CDF with ν degrees of freedom\n- u_i = F_i(x_i) are marginal CDFs\n\nBivariate t-copula:\nC(u,v; ρ, ν) = t_ρ,ν(t_ν⁻¹(u), t_ν⁻¹(v))\n\nTail dependence:\nλ_upper = λ_lower = 2·t_ν+1(-√[(ν+1)(1-ρ)/(1+ρ)])\n\nFor ρ = 0.5, ν = 4: λ ≈ 0.24 (24% chance of joint extremes)\nAs ν → ∞: λ → 0 (converges to Gaussian)\n\nSimulation:\n1. Draw S ~ χ²(ν)\n2. Draw Z ~ N(0,R)\n3. Set X = √(ν/S) · Z (follows multivariate t)\n4. U_i = t_ν(X_i), then apply F_i⁻¹(U_i)\n\nThe t-Copula is like modeling two skiers going down a mountain where there are occasional ice patches that make both skiers more likely to fall at the same time. The Gaussian copula would say \"they sometimes fall together by random chance,\" but the t-copula recognizes \"when conditions get extreme (icy patches), they're much more likely to BOTH wipe out together than you'd expect from independence.\" The degrees of freedom parameter controls how \"icy\" the mountain is - lower values mean more frequent patches where joint falls become very likely.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/t_copula.txt","hasFullInfo":true},{"id":460,"title":"Vine Copulas (C-Vine, D-Vine, R-Vine)","filename":"vine_copulas.txt","group":"group 19","groupNum":19,"categoryId":45,"categoryTitle":"45. COPULA & DEPENDENCE MODELING","subcategory":"General","summary":"High-dimensional copulas","overview":"Vine Copulas are flexible multivariate dependence models built by decomposing a high-dimensional distribution into a cascade of bivariate copulas arranged in a tree structure. This construction overcomes the curse of dimensionality that plagues standard copulas, which become computationally intractable and inflexible when modeling dependencies among many assets. Vines allow each pair of variables to have its own copula type and parameters, enabling rich, heterogeneous dependence patterns while maintaining computational feasibility through hierarchical decomposition.","formula":"The key types are:\n\n**C-Vine (Canonical Vine)**: Star structure where one \"root\" variable connects to all others, then second-level connects remaining variables. Useful when one asset (like a market index) drives correlations with all others.\n\n**D-Vine (Drawable Vine)**: Chain structure where variables connect in sequence. Natural for time series or ordered data where adjacent relationships matter most.\n\n**R-Vine (Regular Vine)**: Most general structure allowing arbitrary tree configurations. Provides maximum flexibility but requires algorithms to select optimal structure from data.\n\nEach vine has multiple \"trees\" - Tree 1 specifies marginal dependencies, Tree 2 specifies conditional dependencies given Tree 1, and so on. The copula types and parameters can differ at each node, mixing Gaussian, t, Clayton, Gumbel, etc. as appropriate.\n\nMathematical decomposition:\n\nFor n variables with density f:\nf(x₁,...,x_n) = [∏ f_i(x_i)] · [∏∏ c_j,k|D(F_j|D, F_k|D)]","parameters":"Where:\n- f_i are marginal densities\n- c_j,k|D are bivariate copula densities conditional on set D\n- F_j|D are conditional distributions\n\nC-Vine example (3 variables):\nf(x₁,x₂,x₃) = f₁(x₁)·f₂(x₂)·f₃(x₃) · c₁,₂(F₁,F₂) · c₁,₃(F₁,F₃) · c₂,₃|₁(F₂|₁,F₃|₁)\n\nD-Vine example (3 variables):\nf(x₁,x₂,x₃) = f₁(x₁)·f₂(x₂)·f₃(x₃) · c₁,₂(F₁,F₂) · c₂,₃(F₂,F₃) · c₁,₃|₂(F₁|₂,F₃|₂)\n\nStructure selection:\n1. Estimate all pairwise dependencies\n2. Build Tree 1: Select pairs with strongest dependence\n3. Build Tree 2: Conditional dependencies given Tree 1\n4. Continue until n-1 trees complete","intuition":"Vine Copulas are like describing how a group of friends influences each other's decisions. Simple copulas would say \"they all have the same type of connection.\" Vines let you say: \"Alice strongly influences Bob (Clayton copula), Bob moderately influences Charlie (Gaussian copula), and Alice weakly influences Charlie only through Bob (Frank copula conditional).\" The C-Vine is like one popular person influencing everyone; D-Vine is like a chain of influence; R-Vine lets the social network have any shape that fits the actual relationships.","rawContent":"Vine Copulas are flexible multivariate dependence models built by decomposing a high-dimensional distribution into a cascade of bivariate copulas arranged in a tree structure. This construction overcomes the curse of dimensionality that plagues standard copulas, which become computationally intractable and inflexible when modeling dependencies among many assets. Vines allow each pair of variables to have its own copula type and parameters, enabling rich, heterogeneous dependence patterns while maintaining computational feasibility through hierarchical decomposition.\n\nThe key types are:\n\n**C-Vine (Canonical Vine)**: Star structure where one \"root\" variable connects to all others, then second-level connects remaining variables. Useful when one asset (like a market index) drives correlations with all others.\n\n**D-Vine (Drawable Vine)**: Chain structure where variables connect in sequence. Natural for time series or ordered data where adjacent relationships matter most.\n\n**R-Vine (Regular Vine)**: Most general structure allowing arbitrary tree configurations. Provides maximum flexibility but requires algorithms to select optimal structure from data.\n\nEach vine has multiple \"trees\" - Tree 1 specifies marginal dependencies, Tree 2 specifies conditional dependencies given Tree 1, and so on. The copula types and parameters can differ at each node, mixing Gaussian, t, Clayton, Gumbel, etc. as appropriate.\n\nMathematical decomposition:\n\nFor n variables with density f:\nf(x₁,...,x_n) = [∏ f_i(x_i)] · [∏∏ c_j,k|D(F_j|D, F_k|D)]\n\nWhere:\n- f_i are marginal densities\n- c_j,k|D are bivariate copula densities conditional on set D\n- F_j|D are conditional distributions\n\nC-Vine example (3 variables):\nf(x₁,x₂,x₃) = f₁(x₁)·f₂(x₂)·f₃(x₃) · c₁,₂(F₁,F₂) · c₁,₃(F₁,F₃) · c₂,₃|₁(F₂|₁,F₃|₁)\n\nD-Vine example (3 variables):\nf(x₁,x₂,x₃) = f₁(x₁)·f₂(x₂)·f₃(x₃) · c₁,₂(F₁,F₂) · c₂,₃(F₂,F₃) · c₁,₃|₂(F₁|₂,F₃|₂)\n\nStructure selection:\n1. Estimate all pairwise dependencies\n2. Build Tree 1: Select pairs with strongest dependence\n3. Build Tree 2: Conditional dependencies given Tree 1\n4. Continue until n-1 trees complete\n\nVine Copulas are like describing how a group of friends influences each other's decisions. Simple copulas would say \"they all have the same type of connection.\" Vines let you say: \"Alice strongly influences Bob (Clayton copula), Bob moderately influences Charlie (Gaussian copula), and Alice weakly influences Charlie only through Bob (Frank copula conditional).\" The C-Vine is like one popular person influencing everyone; D-Vine is like a chain of influence; R-Vine lets the social network have any shape that fits the actual relationships.","tags":["Dependence & Copulas"],"relPath":"public/concept-list/list-concepts/group 19/vine_copulas.txt","hasFullInfo":true}]}