René,
Excellent coding - thanks a lot!
When browsing your code, the normalization algorithm in function
calcSymbols() caught my attention.
Code: Select all
if ( max > min ) {
for (int iSymbol = 0; iSymbol < ArraySize(symbols); iSymbol++) {
symbols[iSymbol].value = 2 * ((symbols[iSymbol].value - min) / (max-min)) - 1.0;
}
}
You seem to set the symbol with highest CSS slope at value +1 and the symbol with the lowest slope at -1. Then all other symbols get their values between those extremes, much like a stoch calculation.
I see the necessity for some kind of normalization for method CSS in order to map its readings to a limited colour scale. The implication of doing so is that we loose one of the best features of CSS: a measure for the weighted strength of a certain currency. We can only identify by colour intensity whether a currency is strong or weak as compared to the others, but IMO we don't have any chance to judge whether this colour mapping is caused by significant moves or just by random fluctuations.
The other methods you've implemented at the moment (ADX, Stochastic, and MFI) are defined on limited scales per se. So when it comes to mapping their original values to your
-1 ... +1 scale a simple linear transformation applied to their scalar values would be sufficient. These are normalized per se, and a second normalization is being applied by your algorithm.
I do not state that it would be better to replace the second normalization by a simple linear transformation, but I do believe that the choice of appropriate normalization algorithms is crucial for any cluster indicator like this one - if and only IF normalization is necessary for a specific purpose.
I'd love to read about your thoughts that led to the specific algorithm you implemented here.
Cheers,
Jürgen
If you can't explain it simply, you don't understand it well enough. (Albert Einstein)
It appears that the Weighted Moving Average was invented by a trader who did not have a firm grasp of filter theory in hopes of reducing lag. (John F. Ehlers)