1.6 KiB
SFA
Symbolic Fourier Approximation in MQL5, and a direct comparison against SAX on identical windows.
Companion code for the MQL5 article: https://www.mql5.com/en/articles/24006
What it does
SAX spends its bits describing where a window sits in time. SFA spends them describing its shape: the window goes through a Fourier transform, the low coefficients are kept, and those are binned into letters.
The bins are not fixed. Multiple Coefficient Binning learns them from the data, so each coefficient gets breakpoints matched to its own distribution rather than to an assumed normal.
The lower bound is where this gets useful and where it is easy to get wrong. SFA admits a distance bound that lets the search skip candidates safely, and the article works through the factor of two that the bound carries, since getting it wrong either breaks correctness or throws away the speed.
SFACompare.mq5 runs SAX and SFA over the same windows so the comparison is
like for like rather than two tuned systems talking past each other.
Layout
Include/SFA/SFATransform.mqh Fourier front end and MCB binning
Include/SFA/SFAAnalogs.mqh analog search with the lower bound
Include/SAX/SAXTransform.mqh SAX, included for the comparison
Indicators/SFA/SFAAnalog.mq5 the indicator
Scripts/SFA/SFAValidate.mq5 validation harness
Scripts/SFA/SFACompare.mq5 SAX against SFA on identical windows
Run SFAValidate.mq5 first, then SFACompare.mq5 on your own symbol.
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.