// Downloaded From https://www.WiseStockTrader.com
_SECTION_BEGIN("_MultiShow Indicator");

GraphXSpace = 25;

indyOpt = ParamList("Indicator", "MA|EMA|TEMA|DEMA|WMA|Wilders|DMI (no Base/Periods used)");
periods = Optimize("period ",Param("DPO periods ",7,1,50,1),1,50,2);
Fast = Optimize("Fast",Param("Fast-Line ( blue )",9,1,28,1),1,28,1);
Slow = Optimize("Slow",Param("Slow-Line ( red )",26,1,28,1),1,28,1);
Base = ParamList("Base", "DPO|Close|RSIa (DPO)");

//DetrendedPriceOsc
////////////////////////////////////////////////////////////////////////////////
function DetrendedPriceOsc( Periods )
{
return C- AMA(Ref( EMA( C, Periods ), -( 1 + Periods/2 ) ),0.5);
}
////////////////////////////////////////////////////////////////////////////////

//Dynamic Momentum Index Tushar Chande Translated to AFL by Jayson Casavant
////////////////////////////////////////////////////////////////////////////////
//Cmo5 formula
CMO5_1=Sum( IIf( C > Ref( C, -1 ) , ( C - Ref( C ,-1 ) ) ,0 ) ,5 ) ;
CMO5_2=Sum( IIf( C < Ref( C ,-1 ) , ( Ref( C ,-1 ) - C )  ,0 ) ,5 );
CMO5=DEMA(100 * Nz(( CMO5_1 -CMO5_2)  /( CMO5_1+CMO5_2)),3);

//Cmo10 formula
CMO10_1=Sum( IIf( C > Ref( C, -1 ) , ( C - Ref( C ,-1 ) ) ,0 ) ,10 ) ;
CMO10_2=Sum( IIf( C < Ref( C ,-1 ) , ( Ref( C ,-1 ) - C )  ,0 ) ,10 );
CMO10=DEMA(100 * Nz(( CMO10_1 -CMO10_2)  /( CMO10_1+CMO10_2)),3);

//Cmo20 formula
CMO20_1=Sum( IIf( C > Ref( C, -1 ) , ( C - Ref( C ,-1 ) ) ,0 ) ,20 ) ;
CMO20_2=Sum( IIf( C < Ref( C ,-1 ) , ( Ref( C ,-1 ) - C )  ,0 ) ,20 );
CMO20=DEMA(100 * Nz(( CMO20_1 -CMO20_2)  /( CMO20_1+CMO20_2)),3);

// dmi formula
dmi=((StDev(C,5)* CMO5)+(StDev(C,10)* CMO10)+(StDev(C,20)*
CMO20))/(StDev(C,5)+StDev(C,10)+StDev(C,20));
////////////////////////////////////////////////////////////////////////////////

switch (Base)
{
	case "DPO":
	SetChartOptions(1,0);
	ArrayBase = DetrendedPriceOsc( Periods );
	break;

	case "Close":
	SetChartOptions(1,0,chartGridMargins);
	ArrayBase = Close;
	break;

	case "RSIa (DPO)":
	SetChartOptions(1,0,chartGrid20|chartGrid30 |chartGrid50 |chartGrid70|chartGrid80);
	ArrayBase = RSIa(DetrendedPriceOsc( Periods ),Periods);
	break;
}

ArrayFast =0;
ArraySlow =0;

switch (indyOpt)
{
	case "MA":
	ArrayFast = MA ( ArrayBase, Fast );
	ArraySlow = MA ( ArrayBase, Slow );
	break;

	case "EMA":
	ArrayFast = EMA ( ArrayBase, Fast );
	ArraySlow = EMA ( ArrayBase, Slow );
	break;

	case "TEMA":
	ArrayFast = TEMA ( ArrayBase, Fast );
	ArraySlow = TEMA ( ArrayBase, Slow );
	break;

	case "DEMA":
	ArrayFast = DEMA ( ArrayBase, Fast );
	ArraySlow = DEMA ( ArrayBase, Slow );
	break;

	case "WMA":
	ArrayFast = WMA( ArrayBase, Fast );
	ArraySlow = WMA( ArrayBase, Slow );
	break;

	case "Wilders":
	ArrayFast = Wilders ( ArrayBase, Fast );
	ArraySlow = Wilders ( ArrayBase, Slow );
	break;

	case "DMI (no Base/Periods used)":
	SetChartOptions(1,0);
	ArrayFast = ArrayMA   =EMA(dmi,Fast);
	ArraySlow = ArrayEMA =MA(dmi,Slow);
	break;
}

Plot ( ArrayFast , indyOpt+ " ("+fast+")", colorBlue);
Plot ( ArraySlow , indyOpt+ " ("+slow+")", colorRed);
PlotOHLC (ArrayFast ,ArrayFast ,ArraySlow ,ArraySlow ,"",ColorBlend( colorWhite, colorBlue, 0.1 ), styleCloud | styleNoRescale | styleNoTitle , Null, Null, Null, -1 );;

_SECTION_END();

//////////////////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Buy/Sell Criteria");

//Entry Criteria Long
Long1 = (ArraySlow -ArrayFast ) < Ref((ArraySlow -ArrayFast ),-1) ;
//Entry Criteria Short //
Short1 = (ArraySlow -ArrayFast ) > Ref((ArraySlow -ArrayFast ),-1) ;

Buy= Long1 ;
Sell=0;
Short= Short1 ;
Cover=0;

Buy=ExRem(Buy,Short);
Short=ExRem(Short,Buy);

PlotShapes( Buy * shapeUpArrow , colorDarkGreen, 0); 
PlotShapes( Short * shapeDownArrow , colorDarkRed, 0);

_SECTION_END();

//////////////////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Ribbon");
ShowRibbon = ParamToggle("Ribbon","No|Yes",1);
uptrend=Buy;
downtrend=Short;
if (ShowRibbon ) Plot( 2, "Ribbon",IIf( Long1 , colorSeaGreen, IIf( Short1 , colorOrange, colorLavender )), styleOwnScale|styleArea|styleNoLabel|styleNoTitle , -0.5, 100 );

_SECTION_END();

//////////////////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Bollinger Bands (Area)");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 100, 1 );
Width = Param("Width", 2, 0, 10, 0.05 );
Color = ParamColor("Color", colorLightGrey );
Style = ParamStyle("Style") | styleNoRescale | styleNoTitle | styleNoLabel   ;;
Plot( bbt = BBandTop( P, Periods, Width ), "BBTop" + _PARAM_VALUES(), Color, Style ); 
Plot( bbb = BBandBot( P, Periods, Width ), "BBBot" + _PARAM_VALUES(), Color, Style ); 
PlotOHLC( bbt, bbt, bbb, bbb, "", ColorBlend( Color, colorWhite, 0.9 ), styleCloud | styleNoRescale | styleNoLabel | styleNoTitle  , Null, Null, Null, -1 );
bbm = ((bbt +bbb )/2);
Plot( bbm , "BBMid" + _PARAM_VALUES(), Color, styleDashed | styleNoRescale  | styleNoLabel | styleNoTitle ); 
_SECTION_END();

//////////////////////////////////////////////////////////////////////////////