# BOSS Bag-of-SFA-Symbols classifier written from scratch in pure MQL5. Turns price windows into words, and bags of words into a regime classifier. Companion code for the MQL5 article: https://www.mql5.com/en/articles/23491 ## What it does Symbolic Fourier Approximation converts a price window into a short string: the window goes through a Fourier transform, the low coefficients are kept, and each is binned into a letter. Similar shapes become the same word, and noise that does not change the shape drops out. BOSS then counts words rather than comparing series point by point. That is what makes it fast, and it is why one classifier is not enough: a single window length sees one time scale, so the ensemble spans several. Regimes are labelled without hand-labelling, which matters because hand-labels are where this kind of study usually goes wrong. Benchmarked against Dynamic Time Warping on BTCUSD, the ensemble wins on clean accuracy and runs roughly twenty times faster. `BOSSvsDTWBenchmark.mq5` reproduces that comparison, and `BOSSNoiseSweep.mq5` is the noise robustness sweep. ## Layout ``` Include/BOSS/SFA.mqh Symbolic Fourier Approximation Include/BOSS/FourierTransform.mqh the transform behind SFA Include/BOSS/BOSS.mqh bag-of-words model and ensemble Include/BOSS/RegimeLabeler.mqh unsupervised regime labels Indicators/BOSS/BOSSRegime.mq5 the regime indicator Scripts/BOSS/BOSSSelfTest.mq5 correctness checks Scripts/BOSS/BOSSvsDTWBenchmark.mq5 accuracy and speed against DTW Scripts/BOSS/BOSSNoiseSweep.mq5 robustness under added noise ``` Run `BOSSSelfTest.mq5` first. If it fails, nothing downstream is worth reading. ## Disclaimer Educational code. Past behaviour of any model or dataset says nothing about future results. Test on your own data and broker conditions before drawing conclusions.