Perpetual LinearRegress Channels
Forums › ProRealTime English forum › ProBuilder support › Perpetual LinearRegress Channels
- This topic has 0 replies, 1 voice, and was last updated 2 weeks ago by
LucasBest.
Viewing 1 post (of 1 total)
-
-
11/19/2025 at 11:47 PM #253790Perpetual LinearRegress Channels123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189DefParam DrawOnLastBarOnly = trueColorGreenR = 60ColorGreenG = 179ColorGreenB = 113 // Green colorColorRedR = 255ColorRedG = 69ColorRedB = 0 // Red colorColorGrayR = 169ColorGrayG = 169ColorGrayB = 169 // Gray colorUpperMultInput = MultInputLowerMultInput = MultInput// Initialize variables for calculationsonce ChannelsIndex = 0once StartIndex = 1LengthInput = barindex - StartIndex + 1SumX = 0SumY = 0SumXSqr = 0SumXY = 0FOR i = 0 TO LengthInput - 1 DOVal = close[i]Per = i + 1SumX = SumX + PerSumY = SumY + ValSumXSqr = SumXSqr + Per * PerSumXY = SumXY + Val * PerNEXTIF LengthInput * SumXSqr - SumX * SumX <> 0 THENSlope = (LengthInput * SumXY - SumX * SumY) / (LengthInput * SumXSqr - SumX * SumX)ELSESlope = 0ENDIFAvgVal = SumY / LengthInputIntercept = AvgVal - Slope * SumX / LengthInput + SlopeStartPrc = Intercept + Slope * (LengthInput - 1)EndPrc = Intercept// Calculation for DeviationUpDev = 0DnDev = 0StdDevAcc = 0Dsxx = 0Dsyy = 0Dsxy = 0Periods = LengthInput - 3DayValue = Intercept + Slope * Periods / 2Val = InterceptFOR j = 0 TO Periods DOPrc = high[j] - ValIF Prc > UpDev THENUpDev = PrcENDIFPrc = Val - low[j]IF Prc > DnDev THENDnDev = PrcENDIFPrc = close[j]Dxt = Prc - AvgValDyt = Val - DayValuePrc = Prc - ValStdDevAcc = StdDevAcc + Prc * PrcDsxx = Dsxx + Dxt * DxtDsyy = Dsyy + Dyt * DytDsxy = Dsxy + Dxt * DytVal = Val + SlopeNEXTIF Periods = 0 THENStdDev = SQRT(StdDevAcc)ELSEStdDev = SQRT(StdDevAcc / Periods)ENDIFIF Dsxx = 0 OR Dsyy = 0 THENPearsonR = 0ELSEPearsonR = Dsxy / SQRT(Dsxx * Dsyy)ENDIFUpperStartPrc = StartPrc + UpperMultInput * StdDevUpperEndPrc = EndPrc + UpperMultInput * StdDevLowerStartPrc = StartPrc - LowerMultInput * StdDevLowerEndPrc = EndPrc - LowerMultInput * StdDev/*IF (high > UpperEndPrc OR low < LowerEndPrc) THENIf high > UpperEndPrc thenDrawarrowdown(barindex,high+5)coloured("red",255)elseDrawarrowup(barindex,low-5)coloured("green",255)EndifEndif*/IF (close > UpperEndPrc OR close < LowerEndPrc) THEN$channelsX1[ChannelsIndex] = barindex - LengthInput + 1$channelsY1[ChannelsIndex] = StartPrc$channelsX2[ChannelsIndex] = barindex - 1$channelsY2[ChannelsIndex] = EndPrc$channelsWidth[ChannelsIndex] = StdDevChannelsIndex = ChannelsIndex + 1StartIndex = barindexELSIF islastbarupdate THENj = (close > UpperEndPrc OR close < LowerEndPrc)MidPrc = (EndPrc+StartPrc[j])/2PercentPrcChg = 100*(EndPrc-StartPrc[j]) / MidPrcTF = GetTimeFrameCandlePercentPrcChg = PercentPrcChg / (LengthInput-j)a = CandlePercentPrcChg * 3600 / TF // PercentPrcChg per Hour = Speed of changeIf a>0.02 thenR = ColorGreenRG = ColorGreenGB = ColorGreenBelsif a<-0.02 thenR = ColorRedRG = ColorRedGB = ColorRedBelseR = ColorGrayRG = ColorGrayGB = ColorGrayBendifDRAWSEGMENT(barindex - LengthInput + 1, StartPrc[j], barindex - j, EndPrc[j]) style(dottedline2,2) COLOURED(R,G,B,200)DRAWSEGMENT(barindex - LengthInput + 1, UpperStartPrc[j], barindex - j, UpperEndPrc[j])style(line,4) COLOURED(R,G,B,100)DRAWSEGMENT(barindex - LengthInput + 1, LowerStartPrc[j], barindex - j, LowerEndPrc[j])style(line,4)COLOURED(R,G,B,100)DrawTriangle(barindex - LengthInput + 1, UpperStartPrc[j], barindex - j, UpperEndPrc[j], barindex - LengthInput + 1, UpperStartPrc[j] - StdDev) bordercolor(R,G,B,0) coloured(R,G,B,50)DrawTriangle(barindex - LengthInput + 1, UpperStartPrc[j] - StdDev, barindex - j, UpperEndPrc[j], barindex - j, UpperEndPrc[j] - StdDev) bordercolor(R,G,B,0) coloured(R,G,B,50)DrawTriangle(barindex - LengthInput + 1, LowerStartPrc[j], barindex - j, LowerEndPrc[j], barindex - LengthInput + 1, LowerStartPrc[j] + StdDev) bordercolor(R,G,B,0) coloured(R,G,B,50)DrawTriangle(barindex - LengthInput + 1, LowerStartPrc[j] + StdDev, barindex - j, LowerEndPrc[j], barindex - j, LowerEndPrc[j] + StdDev) bordercolor(R,G,B,0) coloured(R,G,B,50)ENDIFIf ChannelsIndex>0 thenFOR k = 0 TO ChannelsIndex-1 DOMidPrc = ($channelsY2[k]+$channelsY1[k])/2PercentPrcChg = 100*($channelsY2[k]-$channelsY1[k]) / MidPrcTF = GetTimeFrameCandlePercentPrcChg = PercentPrcChg / ($channelsX2[k]-$channelsX1[k])a = CandlePercentPrcChg * 3600 / TF // PercentPrcChg per Hour = Speed of changeIf a>0.02 thenR = ColorGreenRG = ColorGreenGB = ColorGreenBelsif a<-0.02 thenR = ColorRedRG = ColorRedGB = ColorRedBelseR = ColorGrayRG = ColorGrayGB = ColorGrayBendifDRAWSEGMENT($channelsX1[k], $channelsY1[k], $channelsX2[k], $channelsY2[k]) style(dottedline2,2) COLOURED(R,G,B,255)DRAWSEGMENT($channelsX1[k], $channelsY1[k] + UpperMultInput * $channelsWidth[k], $channelsX2[k], $channelsY2[k] + UpperMultInput * $channelsWidth[k]) style(line,4) COLOURED(R,G,B,255)DRAWSEGMENT($channelsX1[k], $channelsY1[k] - LowerMultInput * $channelsWidth[k], $channelsX2[k], $channelsY2[k] - LowerMultInput * $channelsWidth[k]) style(line,4) COLOURED(R,G,B,255)DrawTriangle($channelsX1[k], $channelsY1[k] + UpperMultInput * $channelsWidth[k], $channelsX2[k], $channelsY2[k] + UpperMultInput * $channelsWidth[k], $channelsX1[k], $channelsY1[k] + (UpperMultInput-1) * $channelsWidth[k]) bordercolor(R,G,B,0) coloured(R,G,B,50)DrawTriangle($channelsX1[k], $channelsY1[k] + (UpperMultInput-1) * $channelsWidth[k], $channelsX2[k], $channelsY2[k] + UpperMultInput * $channelsWidth[k], $channelsX2[k], $channelsY2[k] + (UpperMultInput-1) * $channelsWidth[k]) bordercolor(R,G,B,0) coloured(R,G,B,50)DrawTriangle($channelsX1[k], $channelsY1[k] - LowerMultInput * $channelsWidth[k], $channelsX2[k], $channelsY2[k] - LowerMultInput * $channelsWidth[k], $channelsX1[k], $channelsY1[k] - (LowerMultInput-1) * $channelsWidth[k]) bordercolor(R,G,B,0) coloured(R,G,B,50)DrawTriangle($channelsX1[k], $channelsY1[k] - (LowerMultInput-1) * $channelsWidth[k], $channelsX2[k], $channelsY2[k] - LowerMultInput * $channelsWidth[k], $channelsX2[k], $channelsY2[k] - (LowerMultInput-1) * $channelsWidth[k]) bordercolor(R,G,B,0) coloured(R,G,B,50)NEXTEndifRETURN
2 users thanked author for this post.
-
AuthorPosts
Viewing 1 post (of 1 total)
