// Downloaded From https://www.WiseStockTrader.com
//Concencus of Common Traditional Indicators by Sosrodiningrat @2017
//Feature: Buy, Sell, Optimize
OptimizerSetEngine("spso");OptimizerSetOption("Runs",1);OptimizerSetOption("MaxEval",1000);
function ParamOptimize(description,defaultVal,minv,maxv,step){return Optimize(description,Param(description,defaultVal,minv,maxv,step),minv,maxv,step);}//parameter and optimizer

SetBarsRequired(sbrAll,-1);

Plot(C,"",colorBlack,styleCandle);

display=ParamToggle("Display","OFF|ON",1);

indi01=LinRegSlope(ADX(ParamOptimize("ADX",14,1,100,1)),2);
indi02=LinRegSlope(ATR(ParamOptimize("ATR",7,1,100,1)),2);
indi03=LinRegSlope(BBandTop(C,ParamOptimize("BBTopPeriod",14,1,100,1),ParamOptimize("BBTopDev",2,0.1,6,0.1)),2);
indi04=LinRegSlope(BBandBot(C,ParamOptimize("BBBotPeriod",14,1,100,1),ParamOptimize("BBBotDev",2,0.1,6,0.1)),2);
indi05=LinRegSlope(CCI(ParamOptimize("CCI",14,1,100,1)),2);
indi06=LinRegSlope(Chaikin(ParamOptimize("Chaikin",9,1,9,1),ParamOptimize("BBBotPeriod",14,10,20,1)),2);
indi07=LinRegSlope(MACD(12,26),2);
indi08=LinRegSlope(Signal(12,26,9),2);
indi09=LinRegSlope(MDI(ParamOptimize("MDI",14,1,100,1)),2);
indi10=LinRegSlope(MFI(ParamOptimize("MFI",14,1,100,1)),2);
indi11=LinRegSlope(NVI(),2);
indi12=LinRegSlope(OBV(),2);
indi13=LinRegSlope(OscP(ParamOptimize("OscP1",9,1,17,1),ParamOptimize("OscP2",18,18,30,1)),2);
indi14=LinRegSlope(OscV(ParamOptimize("OscV1",9,1,17,1),ParamOptimize("OscV2",18,18,30,1)),2);
indi15=LinRegSlope(PDI(ParamOptimize("PDI",14,1,100,1)),2);
indi16=LinRegSlope(PVI(),2);
indi17=LinRegSlope(RMI(20,5),2);
indi18=LinRegSlope(ROC(C,ParamOptimize("ROC",12,1,100,1)),2);
indi19=LinRegSlope(RSI(ParamOptimize("RSI",5,1,100,1)),2);
indi20=LinRegSlope(RWI(5,30),2);
indi21=LinRegSlope(RWIHi(5,30),2);
indi22=LinRegSlope(RWILo(5,30),2);
indi23=LinRegSlope(SAR(0.02,0.2),2);
indi24=LinRegSlope(StochD(14,3,3),2);
indi25=LinRegSlope(StochK(14,3),2);
indi26=LinRegSlope(Trix(ParamOptimize("Trix",5,1,100,1)),2);
indi27=LinRegSlope(Ultimate(7,14,28),2);
indi28=LinRegSlope(DEMA(C,ParamOptimize("DEMA",5,1,100,1)),2);
indi29=LinRegSlope(EMA(C,ParamOptimize("EMA",5,1,100,1)),2);
indi30=LinRegSlope(MA(C,ParamOptimize("MA",5,1,100,1)),2);
indi31=LinRegSlope(TEMA(C,ParamOptimize("TEMA",5,1,100,1)),2);
indi32=LinRegSlope(Wilders(C,ParamOptimize("Wilders",10,1,100,1)),2);
indi33=LinRegSlope(WMA(C,ParamOptimize("WMA",5,1,100,1)),2);

printf("\nADX= "+WriteIf(indi01>0,"UP",WriteIf(indi01<0,"DOWN","SIDEWAYS")));
printf("\nATR= "+WriteIf(indi02>0,"UP",WriteIf(indi02<0,"DOWN","SIDEWAYS")));
printf("\nBBandTop= "+WriteIf(indi03>0,"UP",WriteIf(indi03<0,"DOWN","SIDEWAYS")));
printf("\nBBandBot= "+WriteIf(indi04>0,"UP",WriteIf(indi04<0,"DOWN","SIDEWAYS")));
printf("\nCCI= "+WriteIf(indi05>0,"UP",WriteIf(indi05<0,"DOWN","SIDEWAYS")));
printf("\nChaikin= "+WriteIf(indi06>0,"UP",WriteIf(indi06<0,"DOWN","SIDEWAYS")));
printf("\nMACD= "+WriteIf(indi07>0,"UP",WriteIf(indi07<0,"DOWN","SIDEWAYS")));
printf("\nSignal= "+WriteIf(indi08>0,"UP",WriteIf(indi08<0,"DOWN","SIDEWAYS")));
printf("\nMDI= "+WriteIf(indi09>0,"UP",WriteIf(indi09<0,"DOWN","SIDEWAYS")));
printf("\nMFI= "+WriteIf(indi10>0,"UP",WriteIf(indi10<0,"DOWN","SIDEWAYS")));
printf("\nNVI= "+WriteIf(indi11>0,"UP",WriteIf(indi11<0,"DOWN","SIDEWAYS")));
printf("\nOBV= "+WriteIf(indi12>0,"UP",WriteIf(indi12<0,"DOWN","SIDEWAYS")));
printf("\nOscP= "+WriteIf(indi13>0,"UP",WriteIf(indi13<0,"DOWN","SIDEWAYS")));
printf("\nOscV= "+WriteIf(indi14>0,"UP",WriteIf(indi14<0,"DOWN","SIDEWAYS")));
printf("\nPDI= "+WriteIf(indi15>0,"UP",WriteIf(indi15<0,"DOWN","SIDEWAYS")));
printf("\nPVI= "+WriteIf(indi16>0,"UP",WriteIf(indi16<0,"DOWN","SIDEWAYS")));
printf("\nRMI= "+WriteIf(indi17>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nROC= "+WriteIf(indi18>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nRSI= "+WriteIf(indi19>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nRWI= "+WriteIf(indi20>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nRWIHi= "+WriteIf(indi21>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nRWILo= "+WriteIf(indi22>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nSAR= "+WriteIf(indi23>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nStochD= "+WriteIf(indi24>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nStochK= "+WriteIf(indi25>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nTrix= "+WriteIf(indi26>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nUltimate= "+WriteIf(indi27>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nDEMA= "+WriteIf(indi28>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nEMA= "+WriteIf(indi29>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nMA= "+WriteIf(indi30>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nTEMA= "+WriteIf(indi31>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nWilders= "+WriteIf(indi32>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));
printf("\nWMA= "+WriteIf(indi33>0,"UP",WriteIf(indi17<0,"DOWN","SIDEWAYS")));

allindi=indi01+indi02+indi03+indi04+indi05+indi06+indi07+indi08+indi09+indi10+indi11;
allindi=allindi+indi12+indi13+indi14+indi15+indi16+indi17+indi18+indi19+indi20+indi21;
allindi=allindi+indi22+indi23+indi24+indi25+indi26+indi27+indi28+indi29+indi30+indi31;
allindi=allindi+indi32+indi33;

per=ParamOptimize("AllIndi",72,2,200,1);
Buy=LinRegSlope(allindi,per)>0;
Sell=LinRegSlope(allindi,per)<0;
Buy=ExRem(Buy,Sell);Sell=ExRem(Sell,Buy);


printf("\n\nAllIndicators= "+WriteIf(allindi>0,"UP",WriteIf(allindi<0,"DOWN","SIDEWAYS")));

//====================================
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorBlue,0,L,-12);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-12);
//====================================
if(display==1)
{
GfxSetOverlayMode(1);
GfxSetBkMode(1); // transparent
GfxSelectFont("Tahoma", Status("pxheight")/4 );
if(SelectedValue(allindi>0)){GfxSetTextColor(colorGreen);SetChartBkColor(colorPaleGreen);}
if(SelectedValue(allindi<0)){GfxSetTextColor(colorRed);SetChartBkColor(colorRose);}
if(SelectedValue(allindi==0)){GfxSetTextColor(colorLightGrey);SetChartBkColor(colorWhite);}
GfxTextOut(WriteIf(allindi>0,"UP",WriteIf(allindi<0,"DOWN","SIDEWAYS")),510,100);
}
//====================================