Facebook
From Crippled Bee, 4 Years ago, written in Plain Text.
This paste is a reply to Untitled from Baby Curlew - go back
Embed
Viewing differences between Untitled and Re: Untitled
//@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 //
.