Hi,

I develop close system for MT4 and now I translate for Zorro. Is a free for all.
Feedback is welcome.

variables dPlusBar, dMinusBar is a sensitive for close. Bigger value mean, close early. You can also play with parameters for MACD.

how use:
Code
...
vars Price = series(price());
...
int k=fceCloseSignal(Price);
if (k == _CLOSE_LONG)
    exitLong();
else if (k == _CLOSE_SHORT)
    exitShort();


and fce is:
Code

#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;
}

Last edited by Grat; 06/05/20 06:29.