I would not judge this only by the changed performance metrics. I would first compare both MMI implementations against the published/reference formula. If the new 3.01 MMI differs from that formula, then the recoded version is likely wrong. If the old version differed, then the old backtest results were based on a flawed indicator. Since MMI is often used as a trend filter, even small output differences can strongly affect entries/exits and performance.
The correct MMI should follow the reference definition: calculate the median of the data window, then count cases where price is above median and continues upward, or below median and continues downward. The classic Zorro/Financial Hacker version is:
var MMI(var *Data,int Length)
{
var m = Median(Data,Length);
int i, nh=0, nl=0;
for(i=1; i<Length; i++) {
if(Data[i] > m && Data[i] > Data[i-1])
nl++;
else if(Data[i] < m && Data[i] < Data[i-1])
nh++;
}
return 100.*(nl+nh)/(Length-1);
}Zorro’s manual says MMI measures mean-reversal tendency in a 0–100% range, with random numbers around 75%, and that source code is in indicators.c.
So the practical answer is: compare both versions against this reference formula. The version matching this formula is the correct one. If 3.01 changed the median handling, indexing direction, equal-value handling, or the denominator, it can absolutely produce different backtests.