- //@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 //