//@version=4 study("LIN2", shorttitle="LIN2", overlay=true) src = input(close, title="Source") src1 = input(close, title="Source") mult1 = input(2, minval=1, title="Base Line Periods") multdev = input(-2.0, title="Deviation",step=1) len2 = input(240, title="Lookback Period") mult2 = input(2, minval=1, title="Base Line Periods1") multdev1 = input(-1.0, title="Deviation2",step=1) len21 = input(240, title="Lookback Period2") //REGRESSION SLOPE donchian(len) => avg(lowest(len), highest(len)) baseLine = donchian(mult1) ext=input(true,title="Extend Lines") ln =ext?extend.right:extend.none //REGRESSION SLOPE 1 donchian1(len) => avg(lowest(len), highest(len)) baseLine1 = donchian(mult2) ext1=input(true,title="Extend Lines") ln1 =ext1?extend.right:extend.none //-- MEAN calcSlope(src, len2) => if not barstate.islast [float(na), float(na), float(na)] else sumX = 0.0 sumY = 0.0 sumXSqr = 0.0 sumXY = 0.0 for i = 0 to len2 - 1 val = src[i] per = i + 1.0 sumX := sumX + per sumY := sumY + val sumXSqr := sumXSqr + per * per sumXY := sumXY + val * per slope = (len2 * sumXY - sumX * sumY) / (len2 * sumXSqr - sumX * sumX) average2 = sumY / len2 intercept = average2 - slope * sumX / len2 + slope [slope, average2, intercept] [s, a2, i] = calcSlope(src, len2) //-- MEAN 1 calcSlope1(src1, len21) => if not barstate.islast [float(na), float(na), float(na)] else sumX1 = 0.0 sumY1 = 0.0 sumXSqr1 = 0.0 sumXY1 = 0.0 for ii = 0 to len21 - 1 val1 = src1[ii] per1 = ii + 1.0 sumX1 := sumX1 + per1 sumY1 := sumY1 + val1 sumXSqr1 := sumXSqr1 + per1 * per1 sumXY1 := sumXY1 + val1 * per1 slope1 = (len21 * sumXY1 - sumX1 * sumY1) / (len21 * sumXSqr1 - sumX1 * sumX1) average21 = sumY1 / len21 intercept1 = average21 - slope1 * sumX1 / len21 + slope1 [slope1, average21, intercept1] [ss, a22, ii] = calcSlope1(src1, len21) //deviation code lrc = linreg(src, len2, 0) lrc1 = linreg(src,len2,1) lrSlope = (lrc-lrc1) lrIntercept = lrc - bar_index*lrSlope deviationSum = 0.0 for z=0 to len2-1 deviationSum:= deviationSum + pow(src[z]-(lrSlope*(bar_index-z)+lrIntercept), 2) deviation = sqrt(deviationSum/(len2)) up = deviation * multdev //+lrc dn = deviation * multdev startPrice = (i + s * (len2 - 1)) endPrice = i //deviation code 1 lrc2 = linreg(src1, len21, 0) lrc3 = linreg(src1,len21,1) lrSlope1 = (lrc2-lrc3) lrIntercept1 = lrc2 - bar_index*lrSlope1 deviationSum1 = 0.0 for z=0 to len21-1 deviationSum1:= deviationSum1 + pow(src1[z]-(lrSlope1*(bar_index-z)+lrIntercept1), 2) deviation1 = sqrt(deviationSum1/(len21)) up1 = deviation1 * multdev1 //+lrc2 dn1 = deviation1 * multdev1 startPrice1 = (ii + ss * (len21 - 1)) endPrice1 = ii /////////////////// var line baseLine5 = na if na(baseLine) baseLine5 := line.new(bar_index - len2 + 1, startPrice, bar_index, endPrice, width=2, color=color.red, style=line.style_solid, extend=ln) else line.set_xy1(baseLine5, bar_index - len2 + 1, startPrice) line.set_xy2(baseLine5, bar_index, endPrice) na // /////////////////// var line baseLine3 = na if na(baseLine3) baseLine3 := line.new(bar_index - len21 + 1, startPrice1, bar_index, endPrice1, width=2, color=color.red, style=line.style_solid, extend=ln) else line.set_xy1(baseLine3, bar_index - len21 + 1, startPrice1) line.set_xy2(baseLine3, bar_index, endPrice1) na // //////////High Channel////////////// var line baseLine6 = na if na(baseLine6) baseLine6 := line.new(bar_index - len2 + 1, startPrice + up, bar_index, endPrice + up, width=2, color=color.blue, style=line.style_solid, extend=ln) else line.set_xy1(baseLine6, bar_index - len2 + 1, startPrice + up) line.set_xy2(baseLine6, bar_index, endPrice + up) na // ////////////////Low Channel/////////////////// var line baseLine7 = na if na(baseLine7) baseLine7 := line.new(bar_index - len2 + 1, startPrice-dn, bar_index, endPrice-dn, width=2, color=color.blue, style=line.style_solid, extend=ln) else line.set_xy1(baseLine7, bar_index - len2 + 1, startPrice- dn) line.set_xy2(baseLine7, bar_index, endPrice- dn) na // //////////High Channel////////////// var line baseLine4 = na if na(baseLine4) baseLine4 := line.new(bar_index - len21 + 1, startPrice1 + up1, bar_index, endPrice1 + up1, width=2, color=color.blue, style=line.style_solid, extend=ln) else line.set_xy1(baseLine4, bar_index - len21 + 1, startPrice1 + up1) line.set_xy2(baseLine4, bar_index, endPrice1 + up1) na // ////////////////Low Channel/////////////////// var line baseLine2 = na if na(baseLine2) baseLine2 := line.new(bar_index - len21 + 1, startPrice1-dn1, bar_index, endPrice1-dn1, width=2, color=color.blue, style=line.style_solid, extend=ln) else line.set_xy1(baseLine2, bar_index - len21 + 1, startPrice1- dn1) line.set_xy2(baseLine2, bar_index, endPrice1- dn1) na //