// Downloaded From https://www.WiseStockTrader.com Head & Shoulder/Inverted Head & Shoulder: x = Cum(1); per = 5; back=50; inter=100; s11=H;s12=L; /* H & S */ pR = PeakBars( s11, per, 1 ) == 0; endt1= LastValue(ValueWhen( pR, x, 1 )); medt1=LastValue(ValueWhen( pR, x, 2 )); startt1=LastValue(ValueWhen( pR, x, 3 )); dt1=endt1-startt1; C1=x==endt1 OR x==medt1 OR x==startt1; endR = LastValue(ValueWhen( pR, s11, 1 ) ); medR=LastValue(ValueWhen( pR, s11, 2 ) ); startR = LastValue( ValueWhen( pR, s11, 3 )); Filter1=medR>endR AND medR>startR AND abs(startR-endR)<0.02*(startR+endR) AND dt1LastValue(x)-back; MaxGraph=10;Graph1=C;Graph1Style=64;GraphXSpace=5; /*H&S Neck Line*/ Aper=medt1-startt1;bper=endt1-medt1; La= LastValue(ValueWhen(x==medt1,LLV(L,Aper))); Lb=LastValue(ValueWhen(x==-1+endt1,LLV(L,bper))); Fa=L==La AND x>startt1 AND xmedt1 AND xstartt-5,trendlineS,-1e10);Graph3BarColor=7; /*Inverted H & S*/ tpR = TroughBars( s12, per, 1 ) == 0; tendt1=LastValue(ValueWhen(tpr,x,1)); tmedt1=LastValue(ValueWhen(tpr,x,2)); tstartt1=LastValue(ValueWhen(tpr,x,3)); tdt1=tendt1-tstartt1; C2=x==tendt1 OR x==tmedt1 OR x==tstartt1; tendR = LastValue(ValueWhen( tpR, s12, 1 ) ); tmedR=LastValue(ValueWhen( tpR, s12, 2 ) ); tstartR = LastValue( ValueWhen( tpR, s12, 3 )); Filter2=tmedRLastValue(x)-back; Graph1BarColor=IIf(C1 AND Filter1,7,IIf(C2 AND Filter2,10,1)); /*Inverted H&S Neck Line*/ tAper=tmedt1-tstartt1;tbper=tendt1-tmedt1; Ha= LastValue(ValueWhen(x==tmedt1,HHV(H,tAper))); Hb=LastValue(ValueWhen(x==-1+tendt1,HHV(H,tbper))); tFa=H==Ha AND x>tstartt1 AND xtmedt1 AND xRstartt-5,trendlineR,-1e10);Graph4BarColor=10; Filter=Filter1 OR Filter2; NumColumns=2;/*Graph2=x==-1+tendt1;*/ Column0=Filter1; Column1=Filter2; Column0Format=Column1Format=1.0; Column0Name="H&S"; Column1Name="inv H&S"; Double top & bottom: /* Detecting double tops and bottoms*/ percdiff = 5; /* peak detection threshold */ fwdcheck = 5; /* forward validity check */ mindistance = 10; validdiff = percdiff/10; PK= Peak( H, percdiff, 1 ) == High; TR= Trough( L, percdiff, 1 ) == Low; x = Cum( 1 ); XPK1 = ValueWhen( PK, x, 1 ); XPK2 = ValueWhen( PK, x, 2 ); xTR1 = ValueWhen( Tr, x, 1 ); xTr2 = ValueWhen( Tr, x, 2 ); peakdiff = ValueWhen( PK, H, 1 )/ValueWhen( PK, H, 2 ); Troughdiff=ValueWhen( tr, L, 1 )/ValueWhen( tr, L, 2 ); doubletop = PK AND abs( peakdiff - 1 ) < validdiff AND (Xpk1 -Xpk2)>mindistance AND High > HHV( Ref( H, fwdcheck ), fwdcheck - 1 ); doubleBot=tr AND abs( troughdiff - 1 ) < validdiff AND (Xtr1 -Xtr2)>mindistance AND Low < LLV( Ref( L, fwdcheck ), fwdcheck - 1 ); Sell = doubletop; Buy = doublebot; WriteIf( Highest( doubletop ) == 1, "AmiBroker has detected some possible double top patterns for " + Name() + "\nLook for green arrows on the price chart.", "There are no double top patterns for " + Name() ); WriteIf(Highest( doublebot)==1,"AmiBroker has detected some possible double bottom patterns for " + Name() + "\nLook for red arrows on the price chart.", "There are no double bottom patterns for " + Name() ); Filter=Sell OR Buy ; AddColumn( IIf( doubletop , 88, 01), "Double TOP", formatChar ); AddColumn( IIf( doublebot , 88, 01), "Double BOT", formatChar );