### Magic EMA T3 Ribbon System

 Magic EMA T3 Ribbon System

```//www.aflcode.com
_SECTION_BEGIN("T3 Function");

SetChartOptions(0,chartShowArrows|chartShowDates);
SetChartBkColor(31) ;

function T3(price,periods)

{
s = 0.84;
e1=EMA(price,periods);
e2=EMA(e1,Periods);
e3=EMA(e2,Periods);
e4=EMA(e3,Periods);
e5=EMA(e4,Periods);
e6=EMA(e5,Periods);
c1=-s*s*s;
c2=3*s*s+3*s*s*s;
c3=-6*s*s-3*s-3*s*s*s;
c4=1+3*s+s*s*s+3*s*s;
Ti3=c1*e6+c2*e5+c3*e4+c4*e3;
return ti3;
}
PercentChange = 4;
ZZ = Zig(C,LastValue(PercentChange)) ;
PivotLow = Ref(IIf(Ref(ROC(ZZ,1),-1) < 0 AND ROC(ZZ,1) > 0, 1, Null),1);
PivotHigh = Ref(IIf(Ref(ROC(ZZ,1),-1) > 0 AND ROC(ZZ,1) < 0, 1, Null),1);
AND ROC(ZZ,1) > 0,1,0);

Plot (C,"Close",color,64,32);
//Plot(C,"",4,64);
Plot(T3(C,50),"T3",colorCustom12,4);
Plot(t3(C,20),"T3",colorBlue,4);
X1=Ref(C,-1);
X1=Ref(C,-2);

//Buy=H<T3(C,50) AND H<t3(C,20) AND C>X1 ;
_SECTION_END();

Plot (EMA (C,20), "EMA 20",colorCustom11,4);
Plot (EMA (C,45), "EMA 45",colorYellow,4);
Plot (EMA (C,200), "EMA 200",9,4);//colorAqua
Plot (EMA (C,420), "EMA 200",colorAqua,4);//
Plot(TEMA(C+(C/60),2),"C*2",colorBlack,4);
_SECTION_BEGIN("MA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 10, 2, 200, 1 );//colorOrange
//Plot( MA( P, Periods ), _DEFAULT_NAME(),colorOrange, 4);
_SECTION_END();

_SECTION_BEGIN("WMA1");
P = ParamField("Price field",-1);
Periods = Param("Periods",8, 1, 300, 1, 5 );
//Plot( WMA( P, 5 ), "WMA(5)", colorBrightGreen, ParamStyle("Style") );
_SECTION_END();

_SECTION_BEGIN("Colud10");

Color = IIf(EMA (C,20) < t3(C,20) , colorWhite,//LightGrey//30
IIf(EMA (C,20) > t3(C,20),colorGreen,7 ) );//PaleGreen,colorPink
Colori = IIf(T3(C,50) < t3(C,20) , 30,
IIf(T3(C,50) > t3(C,20), colorLightGrey,7 ) );
PlotOHLC(EMA (C,20), EMA (C,20), t3(C,20) , t3(C,20) , "", Color, styleCloud | styleNoLabel);
PlotOHLC(t3(C,50), t3(C,50), t3(C,20) , t3(C,20) , "", Colori, styleCloud | styleNoLabel);

_SECTION_END();

_SECTION_BEGIN("Cloud10");
Color = IIf(EMA (C,20) < t3(C,20) , colorWhite,//LightGrey//30
IIf(EMA (C,20) > t3(C,20),12 ,7 ) );//PaleGreen,colorPink
Colori = IIf(T3(C,50) < t3(C,20) , colorGreen,
IIf(T3(C,50) > t3(C,20), colorLightGrey,7 ) );
PlotOHLC(EMA (C,20), EMA (C,20), t3(C,20) , t3(C,20) , "", Color, styleCloud | styleNoLabel);
PlotOHLC(t3(C,50), t3(C,50), t3(C,20) , t3(C,20) , "", Colori, styleCloud | styleNoLabel);

//Buy=H>EMA (C,20) AND Ref(H,-1)<EMA (C,20)AND Ref(H,-2)<EMA (C,20);

_SECTION_BEGIN("Zig Zag Indicator with Valid Entry and Exit Points");
//------------------------------------------------------------------------------
//
//  Formula Name:    Zig Zag Indicator with Valid Entry and Exit Points
PercentChange = 6;
ZZ = Zig(C,LastValue(PercentChange)) ;
PivotLow = Ref(IIf(Ref(ROC(ZZ,1),-1) < 0 AND ROC(ZZ,1) > 0, 1, Null),1);
PivotHigh = Ref(IIf(Ref(ROC(ZZ,1),-1) > 0 AND ROC(ZZ,1) < 0, 1, Null),1);
PlotShapes ( IIf(PivotHigh, shapeSmallCircle, shapeNone), colorCustom12,0,H, 5);
PlotShapes( IIf(PivotLow, shapeSmallCircle, shapeNone),  colorBlue,0, L, -5);

_SECTION_END();

_SECTION_BEGIN("GIP-3");
// -- what will be our lookback range for the hh and ll?
nBars = Param("Number of bars", 12, 5, 40);
bTrace = Param("Include trace output", 1, 0, 1);
nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 1);
bShowTCZ = Param("Show TCZ", 1, 0, 1);
nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 1);
nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, .04, .2, .01);
bLastBarCanBePiv = Param("Last bar can be a pivot", 1, 0, 1);
retrcTolerance = .01;
tczTolerance = .005;
nNumBarsToScan = 120;

// -- added from exploration version 20040204
nExploreBarIdx = 0;
nExploreDate = 0;
nCurDateNum = 0;
DN = DateNum();
DT = DateTime();

// -- key exploration variables
bTCZLong = False;
bTCZShort = False;
nAnchorPivIdx = 0;

// 1 - INDICATOR, 2 - COMMENTARY, 3 - SCAN,
// 4 - EXPLORATION, 5 - BACKTEST / Optimize
if(Status("action")==1) {
bDraw = True;
bUseLastVis = Param("Use last visible bar", 1, 0, 1);
} else {
bDraw = False;
bUseLastVis = False;
bTrace = False;
nExploreDate = Status("rangetodate");
for (i=LastValue(BarIndex());i>=0;i--) {
nCurDateNum = DN[i];
if (nCurDateNum == nExploreDate) {
nExploreBarIdx = i;
}
}
// -- if(Status("action")==1...
}

GraphXSpace=7;

// -- Create 0-initialized arrays the size of barcount
aHPivs = H - H;
aLPivs = L - L;
aHPivHighs = H - H;
aLPivLows = L - L;
aHPivIdxs = H - H;
aLPivIdxs = L - L;
aLegVol = H - H;
aRetrcVol = H - H;

nHPivs = 0;
nLPivs = 0;

lastHPIdx = 0;
lastLPIdx = 0;
lastHPH = 0;
lastLPL = 0;
curPivBarIdx = 0;

// -- looking back from the current bar, how many bars
//    back were the hhv and llv values of the previous
//    n bars, etc.?
aHHVBars = HHVBars(H, nBars);
aLLVBars = LLVBars(L, nBars);
aHHV = HHV(H, nBars);
aLLV = LLV(L, nBars);

// -- Initialize value of curTrend
nLastVisBar = LastValue(
Highest(IIf(Status("barvisible"), BarIndex(), 0)));

curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar,
IIf(Status("action")==4 AND nExploreBarIdx > 0, nExploreBarIdx,
LastValue(BarIndex())));

curTrend = "";
if (aLLVBars[curBar] < aHHVBars[curBar])
curTrend = "D";
else
curTrend = "U";

// -- Make sure there are enough bars!
if (curBar >= nNumBarsToScan) {
for (i=0; i<nNumBarsToScan; i++) {

// -- value of curBar dependent on two parameters
curBar = IIf(nlastVisBar > 0 AND bUseLastVis,
nlastVisBar-i,
IIf(Status("action")==4 AND nExploreBarIdx > 0,
nExploreBarIdx-i,
LastValue(BarIndex())-i));

// -- Have we identified a pivot? If trend is down...
if (aLLVBars[curBar] < aHHVBars[curBar]) {

// ... and had been up, this is a trend change
if (curTrend == "U") {
curTrend = "D";
// -- Capture pivot information
curPivBarIdx = curBar - aLLVBars[curBar];
aLPivs[curPivBarIdx] = 1;
aLPivLows[nLPivs] = L[curPivBarIdx];
aLPivIdxs[nLPivs] = curPivBarIdx;
nLPivs++;
}
// -- or current trend is up
} else {
if (curTrend == "D") {
curTrend = "U";
curPivBarIdx = curBar - aHHVBars[curBar];
aHPivs[curPivBarIdx] = 1;
aHPivHighs[nHPivs] = H[curPivBarIdx];
aHPivIdxs[nHPivs] = curPivBarIdx;
nHPivs++;
}
// --   If curTrend is up...else...
}

// -- loop through bars
}
}

// -- Start at last bar. Reestablish curBar
curBar =
IIf(nlastVisBar > 0 AND bUseLastVis,
nlastVisBar,
IIf(Status("action")==4 AND nExploreBarIdx > 0,
nExploreBarIdx,
LastValue(BarIndex()))
);

// -- Make sure I found at least two of each above.
if (nHPivs >= 2 AND nLPivs >= 2) {

lastLPIdx = aLPivIdxs[0];
lastLPL = aLPivLows[0];

lastHPIdx = aHPivIdxs[0];
lastHPH = aHPivHighs[0];

nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);

nLLVAfterLastPiv = aLLVAfterLastPiv[curBar];
nLLVIdxAfterLastPiv = curBar - aLLVIdxAfterLastPiv[curBar];
nHHVAfterLastPiv = aHHVAfterLastPiv[curBar];
nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv[curBar];

// -- Later want to add last high pivot only if

if (lastHPIdx > lastLPIdx) {

if (aHPivHighs[0] < aHPivHighs[1]) {

if (nLLVAfterLastPiv < aLPivLows[0] AND
(nLLVIdxAfterLastPiv - lastHPIdx - 1) >= nMinBarsBtwPivs
AND nLLVIdxAfterLastPiv != curBar   ) {

// -- OK, we'll add this as a pivot.
//    Mark it for plotting...
aLPivs[nLLVIdxAfterLastPiv] = 1;

//    ...and then rearrange elements in the
//    pivot information arrays
for (j=0; j<nLPivs; j++) {
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
}
aLPivLows[0] = nLLVAfterLastPiv;
aLPivIdxs[0] = nLLVIdxAfterLastPiv;
nLPivs++;

// -- Test whether to add piv given last piv is high
//    AND we have lower highs
}

// -- Here, the last piv is a high piv, and we have
//    higher-highs. The most likely addition is a
//    Low piv that is a retracement.
} else {

if (nLLVAfterLastPiv > aLPivLows[0] AND
(nLLVIdxAfterLastPiv - lastHPIdx - 1) >= nMinBarsBtwPivs
AND nLLVIdxAfterLastPiv != curBar   ) {

// -- OK, we'll add this as a pivot.
//    Mark it for plotting...
aLPivs[nLLVIdxAfterLastPiv] = 1;

//    ...and then rearrange elements in the
//    pivot information arrays
for (j=0; j<nLPivs; j++) {
aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
}
aLPivLows[0] = nLLVAfterLastPiv;
aLPivIdxs[0] = nLLVIdxAfterLastPiv;
nLPivs++;

// -- Test whether to add piv given last piv is high
//    AND we have lower highs
}
// -- The last piv is a high and we have higher highs
//    OR lower highs
}

/* ****************************************************************
Still finding missed pivot(s). Here, the last piv is a low piv.
**************************************************************** */
} else {

// -- First case, lower highs
if (aHPivHighs[0] < aHPivHighs[1]) {

if (nHHVAfterLastPiv < aHPivHighs[0] AND
(nHHVIdxAfterLastPiv - lastLPIdx - 1) >= nMinBarsBtwPivs
AND nHHVIdxAfterLastPiv != curBar   ) {

// -- OK, we'll add this as a pivot.
//    Mark that for plotting
aHPivs[nHHVIdxAfterLastPiv] = 1;

//    ...and then rearrange elements in the
//    pivot information arrays
for (j=0; j<nHPivs; j++) {
aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-(j+1)];
aHPivIdxs[nHPivs-j] = aHPivIdxs[nhPivs-(j+1)];
}
aHPivHighs[0] = nHHVAfterLastPiv;
aHPivIdxs[0] = nHHVIdxAfterLastPiv;
nHPivs++;

// -- Test whether to add piv given last piv is high
//    AND we have lower highs
}

// -- Second case when last piv is a low piv, higher highs
//    Most likely addition is high piv that is a retracement.
//    Considering adding a high piv as long as it is higher
} else {

// -- Where I have higher highs,
if (nHHVAfterLastPiv > aHPivHighs[0] AND
(nHHVIdxAfterLastPiv - lastLPIdx - 1) >= nMinBarsBtwPivs
AND nHHVIdxAfterLastPiv != curBar   ) {

// -- OK, we'll add this as a pivot.
//    Mark it for plotting...
aHPivs[nHHVIdxAfterLastPiv] = 1;

//    ...and then rearrange elements in the
//    pivot information arrays
for (j=0; j<nHPivs; j++) {
aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-(j+1)];
aHPivIdxs[nHPivs-j] = aHPivIdxs[nhPivs-(j+1)];
}
aHPivHighs[0] = nHHVAfterLastPiv;
aHPivIdxs[0] = nHHVIdxAfterLastPiv;
nHPivs++;

// -- Test whether to add piv given last piv is high
//    AND we have lower highs
}

}

}

// -- If there are at least two of each
}

/* ****************************************
// -- Done with finding pivots
***************************************** */

if (bDraw) {

// -- OK, let's plot the pivots using arrows
PlotShapes(
IIf(aHPivs==1, shapeDownArrow, shapeNone),
colorRed, 0,    High, Offset=-15);
PlotShapes(
colorCustom12, 0, High, Offset=-15);
PlotShapes(
IIf(aLPivs==1, shapeUpArrow , shapeNone),
5, 0, Low, Offset=-15);
PlotShapes(
colorBlue, 0, Low, Offset=-15);
}

Title = EncodeColor(colorYellow)+Title =Name() + " " + Date() +EncodeColor( colorYellow) +
EncodeColor(55)+ "   Open:  "+ WriteIf(O> Ref(O,-1),EncodeColor(colorBrightGreen),EncodeColor(colorRed))+ WriteVal(O,format=1.2) +
EncodeColor(55)+ "   High:  "+ WriteIf(H> Ref(H,-1),EncodeColor(colorBrightGreen),EncodeColor(colorRed))+  WriteVal(H,format=1.2) +
EncodeColor(55)+ "   Low:  "+ WriteIf(L> Ref(L,-1),EncodeColor(colorBrightGreen),EncodeColor(colorRed))+  WriteVal(L,format=1.2) +
EncodeColor(55)+ "   Close:  "+ WriteIf(C> Ref(C,-1),EncodeColor(colorBrightGreen),EncodeColor(colorRed))+ WriteVal(C,format=1.2)+
EncodeColor(55)+ "   Change:  "+WriteIf(C> Ref(C,-1),EncodeColor(5),EncodeColor(55))+ WriteVal((C-Ref(C,-1)),format=1.2)+  "  ("+ WriteVal(ROC(C,1),format=1.2)+ "%"+ ")  "+
"\n"+EncodeColor(55)+"Volume   = "+ WriteIf(V> Ref(V,-1),EncodeColor(colorBrightGreen),EncodeColor(colorRed))+ WriteVal(V,format=1.2)+
"\n"+EncodeColor(55)+"Change:   "+WriteIf(V> Ref(V,-1),EncodeColor(5),EncodeColor(55))+ WriteVal((V-Ref(V,-1)),format=1.2)+  "  ("+ WriteVal(ROC(V,1),format=1.2)+ "%"+ ")  "+
"\n"+EncodeColor(colorCustom11)+"EMA (C,20)  = "+ WriteVal(EMA (C,20),format=1.2)+
"\n"+EncodeColor(colorYellow)+"EMA (C,45)  = "+ WriteVal(EMA (C,45),format=1.2)+
"\n"+EncodeColor(9)+"EMA(C,200) = "+ WriteVal(EMA (C,200),format=1.2)+
"\n"+EncodeColor(colorAqua)+"EMA(C,420) = "+ WriteVal(EMA (C,420),format=1.2)+
"\n"+EncodeColor(colorBlue)+"T3(C,20)      = "+ WriteVal(t3(C,20),format=1.2)+
"\n"+EncodeColor(colorCustom12)+"T3(C,50)      = "+ WriteVal(t3(C,20),format=1.2);

_SECTION_END();
```

Previous
Next Post »