I think there's a problem with the phantom trading feature in the evaluation shell.
In eval.c, we see this snippet:
if(VI(_Phantom) > 0) {
int PhantomLong = phantom(1,VI(_Phantom),VI(_Phantom)),
PhantomShort = phantom(-1,VI(_Phantom),VI(_Phantom));
The phantom() function says the parameters are:
Dir 1 for long trades, -1 for short trades, 0 for both.
FastPeriod Lowpass period for filtering the equity curve.
SlowPeriod Lowpass period for further filtering the fast-term filtered equity curve.
What sense does it make for the fast period to be the same as the slow period?
It might be helpful if we instead have two variables, one for fast period and another for slow period.
So we can replace:
var _Phantom; //= 0, 0..50; 0-None, 5..50 Time period for equity curve trading
with something like this...
var _Phantom_Fast; //= 0, 0..50; 0-None, 5..50 Fast time period for equity curve trading
var _Phantom_Slow; //= 0, 0..50; 0-None, 5..50 Slow time period for equity curve trading