var MMI(vars Data,int TimePeriod)
{
var m = Median(Data,TimePeriod);
int i, nh=0, nl=0;
for(i=1; i<TimePeriod; 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)/(TimePeriod-1);
}
function run()
{
set(PARAMETERS);
StartDate = 2002;
EndDate = 2008;
NumWFOCycles = 10;
LookBack = 3000;
vars Price = series(price());
var period = optimize(1200,1000,2000,50);//optimize(500,50,3000,50);
var mmiperiod = 100;//optimize(200,50,1200);
vars Trend = series(LowPass(Price,period));
Stop = ATR(100)*4;//optimize(4, 2, 8);
vars Meanness = series(MMI(Price,period));
vars Filter = series(LowPass(Meanness,mmiperiod));
if( valley(Trend) ){
exitShort(); // close opposite position
if(falling(Filter))
enterLong();
} else if( peak(Trend) ) {
exitLong();
if(falling(Filter))
enterShort();
}
}