#define _CLOSE_LONG 100
#define _CLOSE_SHORT -100
#define _CLOSE_SIG 0 // register for AssetInt,AssetFloat
int fceCloseSignal(vars Price){
static var dMax=0;
var dFast=9;
var dMulF=38;
var dSignal=12;
var dPlusBar=optimize(0.9,0.5,5);
var dMinurBar=optimize(0.9,0.5,5);
series(MACD(Price,dFast,dMulF,dSignal));
vars aHist=series(rMACDHist);
int nSig=AssetInt[_CLOSE_SIG];
var dAction=0;
if (crossOver(aHist,0))
nSig=1;
if (crossUnder(aHist,0))
nSig=-1;
AssetInt[_CLOSE_SIG]=nSig;
var dMax=AssetFloat[_CLOSE_SIG];
if (nSig == 1){
if(rMACDHist > dMax)
dMax=rMACDHist*0.99;
AssetFloat[_CLOSE_SIG]=dMax;
var dDiffPR=(dMax - rMACDHist)/100;
var dMaxPR=(dMax )/100;
dAction = (dMaxPR/ dDiffPR);
if (dAction > 0 && dAction < dPlusBar){
return _CLOSE_LONG;
}
}
if (nSig == -1){
if(rMACDHist < dMax)
dMax=rMACDHist*0.99;
AssetFloat[_CLOSE_SIG]=dMax;
var dDiffPR=(dMax - rMACDHist)/100;
var dMaxPR=(dMax )/100;
dAction = (dMaxPR/ dDiffPR);
if (dAction > 0 && dAction < dMinurBar){
return _CLOSE_SHORT;
}
}
return -1;
}