// Downloaded From https://www.WiseStockTrader.com _SECTION_BEGIN(""); SetBarsRequired(350, -0); parmPlotScoreCard = ParamToggle("Plot KPScoreCard", "No|Yes", 1); parmPlotA900AutoStop = ParamToggle("Plot A900/AutoStop", "No|Yes", 0); parmA900Color = ParamColor("A900 Color", colorWhite); parmA900Style = ParamStyle("A900 Style", styleLine, maskAll); parmAutoStopColor = ParamColor("AutoStop Color", colorYellow); parmAutoStopStyle = ParamStyle("AutoStop Style", styleLine, maskAll); parmPPTextColor = ParamColor("PP Text color", colorBlue); parmPPTrndColorUp = ParamColor("PP Trend Up color", ColorRGB(167,224,243) ); parmPPTrndColorDn = ParamColor("PP Trend Dwn color", ColorRGB(255,192,203) ); parmPPTextOffSet = Param("PP OffSet", 0.60, 0.40, 1.5, 0.1); parmTickMultipler = Param("M/W tick allowance", 1, 0, 10, 1); parmA900AutoStopX = ParamToggle("Plot A900/AutoStop Cross", "No|Yes"); parmA900AutoStopColorX = ParamColor("A900/AutoStop Cross Color", colorBlue); ParmSCThreshold = Param("ScoreCard Threshold", 3, 1, 9, 1); parmVoice = ParamToggle("Voice 123 Setups", "No|Yes", 0); parmAlert = ParamToggle("Alert 123 Setups", "No|Yes", 0); parmPivotPop = ParamToggle("PivotPop", "No|Yes", 1); parmBarCancel = Param("Bar Cancel", 7, 1, 20, 1); parmWaterLevelColor = ParamColor("WalterLevel Color", ColorRGB(127,255,212)); parmWaterLevelStyle = ParamStyle("WaterLevel Style", styleLine, maskAll); parmBBPeriod = Param("Bollinger Band Period", 10, 2, 30, 1); parmBBSD = Param("bollinger Band SD", 0.8, 0.2, 3.0); ParmPlotPPIndicators = ParamToggle("Plot Pivot Pop indicators", "No|Yes", 0); parmBBColor = ParamColor("BBands Color", colorWhite); parmBBStyle = ParamStyle("BBands Style", styleLine, maskAll); ParmDebug = ParamToggle("Debug", "No|Yes", 0); _N(PaneName = Name() + Interval(2)+ _SECTION_NAME()); _N(NewBarName = "NewBar" + PaneName); function NewBarP() { PrevDT = StaticVarGet( NewBarName); DT = LastValue(DateTime()); StaticVarSet( NewBarName,DT); return DT != PrevDT; } function MRoundP(Number, Multiple ) { if(Multiple == 0 ) { xMultiple = 0.01; } else { xMultiple = Multiple; } Divided = Number / xMultiple; intDivided = int(Divided); intDivided = intDivided + round(Divided - intDivided); return intDivided * xMultiple; } ObjAB = CreateObject("Broker.Application"); ticker = objAB.Stocks(Name() ); if(ticker.TickSize == 0) { TickValue = 0.01; } else { TickValue = ticker.TickSize; } NewBarSignal = NewBarP(); KPA900 = E_TSKPA900(Close); KPAutoStop = E_TSKPAUTOSTOP(High,Low,Close); Ctmpl = E_TSKPCOLORTMPL(Open,High,Low,Close,Volume); //ScoreCard KPScoreCard = 0; KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd0 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd1 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd2 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd3 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd4 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd5 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd6 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd7 > 0, 1, -1); KPScoreCard = KPScoreCard + IIf(tskp_colortmplcnd8 > 0, 1, -1); if(parmDebug == 1) { // printf("a900: %0.6f% \nAutoStop: %0.6f%\nScoreCard: %0.0f%\n", KPA900, KPAutoStop, KPScoreCard); } if(parmPlotScoreCard == 1) { //_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g% (%0.4f%) {{VALUES}}", O, H, L, C, SelectedValue( C - Ref(C, -1)) )); if( ParamToggle("Tooltip shows", "All Values|Only Prices" ) ) { // ToolTip=StrFormat("Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.2f%%)\nVolume: "+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 ))); } //Color = IIf(KPScoreCard >= parmSCThreshold, colorBlue, IIf(KPScoreCard <= -parmSCThreshold, colorRed, colorYellow) ); //Plot( C, "Close", Color , styleNoTitle | ParamStyle("OHLC Style") | GetPriceStyle() ); } //user want A900/AutoStop plotted if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } // find A900/AutoStop cross over/under with ScoreCard confirmation. XOUp = (KPA900 > KPAutoStop) AND (KPScoreCard >= parmSCThreshold); // New Pivot Low XODn = (KPA900 < KPAutoStop) AND (KPScoreCard <= -parmSCThreshold); // New Pivot High if(parmDebug == 1) { // printf(WriteIf(XOUp, "before= XOUp: True", "before= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //remove duplicate signals XOUp = ExRem(XOUp, XODn); XODn = ExRem(XODn, XOUp); if(parmDebug == 1) { // printf(WriteIf(XOUp, "after= XOUp: True", "after= XOUp: False") + WriteIf(XODn, " XODn: True\n", " XODn: False\n") ); } //find the current Pivot Points - PL and PH //remember XOUp = 1 means a PL and XODn =1 means a PH PLBars = IIf(XOUp, LowestSinceBars(XODn, L ,1), 0); //find the bar that produced the Lowest Low PHBars = IIf(XODn, HighestSinceBars(XOUp, H, 1),0); //find the bar that produced the Highest High //PLPrice = IIf(XOUp, Ref(L, -PLBars), 0); //PHPrice = IIf(XODn, Ref(H, -PHBars),0); PLPrice = Ref(L, -PLBars); PHPrice = Ref(H, -PHBars); //keep track of the previous Pivot Points PrevPLBars = Ref(BarsSince(XOUp), -1) +1; PrevPHBars = Ref(BarsSince(XODn), -1) +1; PrevPLPrice = Ref(PLPrice, -prevPLBars); PrevPHPrice = Ref(PHPrice, -PrevPHBars ); PivotsCloseEnough = TickValue * parmTickMultipler; PLDifference = MroundP(PLPrice - PRevPLPrice, ticker.TickSize); PHDifference = MroundP(PHPrice - PrevPHPrice, ticker.TickSize); PPTrend = IIf(XOUp AND (PLDifference > PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 1, IIf(XOUp AND (PLDifference < - PivotsCloseEnough) AND PRevPHPrice > PrevPLPrice AND PrevPHPrice > PLPrice, -1, IIf(XODn AND (PHDifference > PivotsCloseEnough) AND PrevPLPrice < PrevPHprice AND PrevPLPrice < PHPrice, 1, IIf(XODn AND (PHDifference < -PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -1, IIf(XOUp AND (abs(PLDifference) <= PivotsCloseEnough) AND PrevPHPrice > PrevPLPrice AND PRevPHPrice > PLPrice, 2, IIf(XODn AND (abs(PHDifference) <= PivotsCloseEnough) AND PrevPLPrice < PrevPHPrice AND PrevPLPrice < PHPrice, -2, 0)))) )); if(ParmDebug) { //printf("Current PH Bar: %g% /Price: %g%\n", PHBars, PHPrice); //printf("Current PL Bar: %g% /Price: %g%\n", PLBars, PLPrice); //printf("Previous PH Bar: %g% /Price: %g%\n", PrevPHBars, PrevPHPrice); //printf("Previous PL Bar: %g% /Price: %g%\n", PrevPLBars, PrevPLPrice) ; //printf("PP Trend: %g%\n", PPTrend); //printf("PHPrice - PrevPHPrice: %g%\nPLPrice - PrevPLPrice: %g%\nPivotsCloseEnough: %g%", PHDifference, PLDifference, PivotsCloseEnough); } //PLot pivots as text dist = parmPPTextOffSet * ATR(10); //for( i = 0; i < BarCount -1; i++) for( i = 0; i < BarCount ; i++) { if(XOUp[i ] == 1 AND abs(PPTrend[i]) != 2) //cross up -plot the Pivot Low { PlotText("PL", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XODn[i ] == 1 AND abs(PPTrend[i]) != 2) //cross down - plot the pivot high { PlotText("PH", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, IIf(PPTrend[i] == 1, parmPPTrndColorUp, IIf(PPTrend[i] == -1, parmPPTrndColorDn, colorYellow) )); } if(XOUp[i ] == 1 AND (PPTrend[i]) == 2) // the Pivot Low is a W Bottom { PlotText("PW", i - PLBars[i], PLPrice[i] - dist[i] , parmPPTextColor, colorYellow) ; } if(XODn[i ] == 1 AND PPTrend[i] == -2) //cross down - pivot high is a M Top { PlotText("PM", i - PHBars[i], PHPrice[i] + dist[i], parmPPTextColor, colorYellow) ; } } //end For // Plot A900/AutoStop cross over/under if(parmA900AutoStopX == 1) { PlotShapes(IIf(Cross(KPA900, KPAutoStop), shapeUpTriangle, shapeNone),colorYellow, 0, L, -30); PlotShapes(IIf(Cross(KPAutoStop, KPA900), shapeDownTriangle, shapeNone), colorRed, 0, H , -30); } if(parmPivotPop == 1) { //Kp indicators for Pivot Pop dummy = E_TSKPFAST2(Open, High, Low, Close, Volume); KPFast2 = IIf(tskp_fast2val1 > 0, 1, -1); //calculations BarsSinceXOUp =BarsSince(XOUp); BarsSinceXODn = BarsSince(XODn); UBB = BBandTop(C, parmBBPeriod, parmBBSD); LBB = BBandBot(C, parmBBPeriod, parmBBSD); PopFilter = True; if(parmDebug == 1) { //printf("\nFast2: %1.0f% \nUBB: %0.6f%\nLBB: %0.6f%\nC: %g%\n", KPFast2, UBB, LBB, C); //printf("Bars since Last XOUp: %1.0f%\nBars since last XODn: %1.0f%\n", BarsSinceXOUp, BarsSinceXODn ); //printf("Bars since PPTrnd =1: %1.0f%\nBars since PPTrnd = -1: %1.0f%\n", BarsSince(PPTrend ==1), BarsSince(PPTrend == -1) ); } PPopUp = (BarsSince(PPTrend >= 1) < BarsSince(PPTrend <= -1)) AND (BarsSince(XOUp) <= parmBarCancel) AND (KPA900 >= KPAutoStop) AND(KPFast2 == 1) AND (KPScoreCard >= 5) AND PopFilter AND (C > UBB) AND (C > O) ; PPopUp = IIf( PPopUp AND Sum(PPopUP, BarsSince(XOUp)+1) == 1, True, False ); //keep only the 1st signal PPopDn = (BarsSince(PPTrend <= -1) < BarsSince(PPTrend >= 1)) AND (BarsSince(XODn) <= parmBarCancel) AND (KPA900 <= KPAutoStop) AND(KPFast2 == -1) AND (KPScoreCard <= -5) AND PopFilter AND (C < LBB) AND (C < O) ; PPopDn = IIf( PPopDn AND Sum(PPopDn, BarsSince(XODn) + 1) == 1, True, False); //keep only the first signal if(parmDebug == 1) { //printf(WriteIf(PPopUp,"PPopUp: True", "PPopUp: False") + WriteIf(PPopDn, " PPopDn: True\n", " PPopDn: False\n") ); //printf("PPopUp sum: %1.0f% \nPPopDn sum: %1.0f%\n", Sum(PPopUP, BarsSince(XOUp)) , Sum(PPopDn, BarsSince(XODn)) ); } // Plots PlotShapes(IIf(PPopUp, shapeHollowUpArrow, shapeNone), colorYellow, 0, L, -25); PlotShapes(IIf(PPopDn, shapeHollowDownArrow, shapeNone), colorRed, 0, H, -25); if(ParmPlotPPIndicators == 1) //plot the Pivot Pop Indicators { //Plot(UBB, "Upper BB", colorYellow, parmBBStyle); //Plot(LBB, "Lower BB", colorRed, parmBBStyle); if(parmPlotA900AutoStop == 1) { // Plot(KPA900, "A900", parmA900Color, parmA900Style); // Plot(KPAutoStop, "AutoStop", parmAutoStopColor, parmAutoStopStyle); } //Plot( 0.5, "Fast2", IIf(tskp_fast2val1 > 0, parmPPTrndColorUp, parmPPTrndColorDn) , styleArea | styleNoLabel | styleOwnScale , 0, 10); } //endif parmPlotPPIndicators } // end if parmPivotPop // Type 1, 2 or 3 setups // kp indicators KPWaterlevel = E_TSKPWATERLEVEL(Open,High,Low,Close,Volume); dummy = E_TSKPMEDIUM(Close); KPMediumUp = tskp_mediumup; KPMediumDn = tskp_mediumdown; KPMediumMA = tskp_mediumma; KPMedium = KPMediumUp + KPMediumDn; //calculations PLBars = IIf(XOUp, LowestSince(XODn, KPMedium ,1), 0); //find the Lowest Low PHBars = IIf(XODn, HighestSinceBars(XOUp, KPMedium, 1),0); //find the bar that produced the Highest High PrevPLMedium = Ref(KPMedium, -prevPLBars); PrevPHMedium = Ref(KPMEdium, -PrevPHBars ); Type1Filter = IIf(PPopUp AND (LowestSince(XODn, KPMedium, 1) > 0 ) AND (HighestSince(XODn, KPMedium, 1) > 0 ), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) < 0) AND (LowestSince(XOUp, KPMedium ,1) < 0), True, False)); Type2Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium > 0, True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium < 0, True, False)); Type3Filter = IIf(PPopUp AND LowestSince(XODn, KPMedium, 1) < 0 AND KPMedium < 0 AND (KPMedium > KPMediumMA), True, IIf(PPopDn AND (HighestSince(XOUp, KPMedium ,1) > 0) AND KPMEdium > 0 AND(KPMedium < KPMediumMA), True, False)); Type1Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type1Filter; Type1Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type1Filter; Type2Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type2Filter AND C > KPWaterLevel; Type2Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type2Filter AND C < KPWaterLevel; Type3Buy = PPopUp AND ((Close - Open) >= 0) AND (KPScoreCard >= ParmSCThreshold) AND Type3Filter AND C > KPWaterLevel; Type3Sell = PPopDn AND ((Close - Open) <= 0) AND (KPScoreCard <= -ParmSCThreshold) AND Type3Filter AND C < KPWaterLevel; if(parmDebug == 1) { //printf("Type1Filter: %g%\nType2Filter: %g%\nType3Filter: %g%\n", Type1Filter, Type2Filter, Type3Filter); //printf("KPWaterlevel: %g%\n", KPWaterLevel); //printf("KPMedium: %g%\nKPMediumMA: %g%\n", KPMedium, KPMediumMA); //printf("Highest XOUp Medium: %g%\nLowest XOUp Medium: %g%\n", HighestSince(XOUp, KPMedium, 1), LowestSince(XOUp, KPMedium ,1) ); //printf("Highest XODn Medium: %g%\nLowest XODn Medium: %g%\n", HighestSince(XODn, KPMedium, 1), LowestSince(XODn, KPMedium ,1) ); //printf("Prev PH Medium: %g%:Prev PL Medium: %g%\n", PrevPHMedium, PrevPLMedium); //printf("Type1Buy: %g%:Type1Sell: %g%\n", Type1Buy, Type1Sell); //printf("Type2Buy: %g%:Type2Sell: %g%\n", Type2Buy, Type2Sell); //printf("Type3Buy: %g%:Type3Sell: %g%\n", Type3Buy, Type3Sell); } // Plots PlotShapes(IIf(Type1Buy, shapeDigit1 , IIf(Type1Sell, shapeDigit1, shapeNone)), IIf(Type1Buy, colorBlue, IIf(Type1Sell, colorRed, Null)), 0, IIf(Type1Buy, High, IIf(Type1Sell, L, O)), IIf(Type1Buy, 30, IIf(Type1Sell, -30, 0)) ); PlotShapes(IIf(Type2Buy, shapeDigit2 , IIf(Type2Sell, shapeDigit2, shapeNone)), IIf(Type2Buy, colorBlue, IIf(Type2Sell, colorRed, Null)), 0, IIf(Type2Buy, High, IIf(Type2Sell, L, O)), IIf(Type2Buy, 30, IIf(Type2Sell, -30, 0)) ); PlotShapes(IIf(Type3Buy, shapeDigit3 , IIf(Type3Sell, shapeDigit3, shapeNone)), IIf(Type3Buy, colorBlue, IIf(Type3Sell, colorRed, Null)), 0, IIf(Type3Buy, High, IIf(Type3Sell, L, O)), IIf(Type3Buy, 30, IIf(Type3Sell, -30, 0)) ); //Plot(KPWaterLevel, "KPWaterLevel", parmWaterLevelColor, parmWaterLevelStyle); // HMM how to print Medium on a price chart //voice if(parmVoice ==1) { if(NewBarSignal) { if( LastValue(Ref(Type1Buy, -1)) == 1) Say(Interval(2) + " New Type one buy."); if( LastValue(Ref(Type2Buy, -1)) == 1) Say(Interval(2) + " New Type two buy"); if( LastValue(Ref(Type3Buy, -1)) == 1) Say(Interval(2) + " New Type three buy."); if( LastValue(Ref(Type1Sell,-1)) ==1) Say(Interval(2) + " New Type one sell."); if( LastValue(Ref(Type2Sell,-1)) ==1) Say(Interval(2) + " New Type two sell."); if( LastValue(Ref(Type3Sell,-1)) ==1) Say(Interval(2) + " New Type three sell."); } } //alerts if(parmAlert ==1) { AlertIf(NewbarSignal AND Ref(Type1Buy, -1), "", "Type 1 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Buy, -1), "", "Type 2 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Buy, -1), "", "Type 3 Buy.", 1, 15, 0); AlertIf(NewbarSignal AND Ref(Type1Sell, -1), "", "Type 1 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type2Sell, -1), "", "Type 2 Sell.", 2, 15, 0); AlertIf(NewbarSignal AND Ref(Type3Sell, -1), "", "Type 3 Sell.", 2, 15, 0); } _SECTION_END(); //********************************* //********************************* _SECTION_BEGIN("Chart Settings"); SetChartOptions(0,chartShowArrows|chartShowDates); SetChartBkColor(ParamColor("Outer Panel",colorPaleBlue)); SetChartBkGradientFill(ParamColor("Upper Chart",1),ParamColor("Lower Chart",23)); _SECTION_END(); //================================================Start Chart Configuration============================================================================ _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); Plot( C, "Close", colorBlue, styleCandle, Zorder = 1); //================================================End Chart Configuration=============================================================================== //====================================Start of Linear Regression Code================================================================================== P = ParamField("Price field",-1); Length = 150; Daysback = Param("Period for Liner Regression Line",Length,1,240,1); shift = Param("Look back period",0,0,240,1); //=============================== Math Formula ======================================================================================================== x = Cum(1); lastx = LastValue( x ) - shift; aa = LastValue( Ref(LinRegIntercept( p, Daysback), -shift) ); bb = LastValue( Ref(LinRegSlope( p, Daysback ), -shift) ); y = Aa + bb * ( x - (Lastx - DaysBack +1 ) ); //==================Plot the Linear Regression Line ==================================================================================================== LRColor = ParamColor("LR Color", colorCycle ); LRStyle = ParamStyle("LR Style"); LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); LRStyle = ParamStyle("LR Style"); Angle = Param("Angle", 0.05, 0, 1.5, 0.01);// A slope higher than 0.05 radians will turn green, less than -0.05 will turn red and anything in between will be white. LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y, Null ); Pi = 3.14159265 * atan(1); // Pi SlopeAngle = atan(bb)*(180/Pi); LineUp = SlopeAngle > Angle; LineDn = SlopeAngle < - Angle; if(LineUp) { Plot(LRLine, "Lin. Reg. Line Up", IIf(LineUp, colorBrightGreen, colorWhite), LRStyle); } else { Plot(LRLine, "Lin. Reg. Line Down", IIf(LineDn, colorDarkRed, colorWhite), LRStyle); } //========================== Plot 1st SD Channel ====================================================================================================== SDP = Param("Standard Deviation", 1.5, 0, 6, 0.1); SD = SDP/2; width = LastValue( Ref(SD*StDev(p, Daysback),-shift) ); //Set width of inside chanels here. SDU = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width , Null ) ; SDL = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width , Null ) ; SDColor = ParamColor("SD Color", colorCycle ); SDStyle = ParamStyle("SD Style"); Plot( SDU , "Upper Lin Reg", colorBrown,SDStyle ); //Inside Regression Lines Plot( SDL , "Lower Lin Reg", colorLime,SDStyle ); //Inside Regression Lines //========================== Plot 2d SD Channel ======================================================================================================== SDP2 = Param("2d Standard Deviation", 2.0, 0, 6, 0.1); SD2 = SDP2/2; width2 = LastValue( Ref(SD2*StDev(p, Daysback),-shift) ); //Set width of outside chanels here. SDU2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width2 , Null ) ; SDL2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width2 , Null ) ; SDColor2 = ParamColor("2 SD Color", colorCycle ); SDStyle2 = ParamStyle("2 SD Style"); Plot( SDU2 , "Upper Lin Reg", colorRed,SDStyle2 ); //OutSide Regression Lines Plot( SDL2 , "Lower Lin Reg", colorLime,SDStyle2 ); //OutSide Regression Lines Trend = IIf(LRLine > Ref(LRLine,-1),colorGreen,colorRed);//Changes LR line to green if sloping up and red if sloping down. Plot( LRLine , "LinReg", Trend, LRSTYLE ); PlotOHLC(SDU,SDL2,SDU2,SDL,"",colorYellow,styleNoLabel | styleCloud); //============================ End Indicator Code ======================================================================================================== _SECTION_BEGIN(" "); farback=Param("How Far back to go",100,50,5000,10); nBars = Param("Number of bars", 12, 5, 40); aHPivs = H - H; aLPivs = L - L; // -- More for future use, not necessary for basic plotting aHPivHighs = H - H; aLPivLows = L - L; aHPivIdxs = H - H; aLPivIdxs = L - L; 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); // -- Would like to set this up so pivots are calculated back from // last visible bar to make it easy to "go back" and see the pivots // this code would find. However, the first instance of // _Trace output will show a value of 0 aVisBars = Status("barvisible"); nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0))); _TRACE("Last visible bar: " + nLastVisBar); // -- Initialize value of curTrend curBar = (BarCount-1); curTrend = ""; if (aLLVBars[curBar] < aHHVBars[curBar]) { curTrend = "D"; } else { curTrend = "U"; } // -- Loop through bars. Search for // entirely array-based approach // in future version for (i=0; i lastHPIdx) { // -- Bar and price info for candidate pivot candIdx = curBar - aHHVBars[curBar]; candPrc = aHHV[curBar]; if ( lastHPH < candPrc AND candIdx > lastLPIdx AND candIdx < curBar) { // -- OK, we'll add this as a pivot... aHPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j candPrc AND candIdx > lastHPIdx AND candIdx < curBar) { // -- OK, we'll add this as a pivot... aLPivs[candIdx] = 1; // ...and then rearrange elements in the // pivot information arrays for (j=0; j