conversione da tradingview: canale regressione lineare

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #193892 quote
    lowbatlowbat
    Participant
    Senior

    Buonasera sarebbe possile convertire questo codice: canale regressione lineare?

    allego foto.

    GRAZIE

     

    indicator(“Linear Regression Channel”, shorttitle=”LinReg”, overlay=true)

    lengthInput = input.int(100, title=”Length”, minval = 1, maxval = 5000)
    sourceInput = input.source(close, title=”Source”)

    group1 = “Channel Settings”
    useUpperDevInput = input.bool(true, title=”Upper Deviation”, inline = “Upper Deviation”, group = group1)
    upperMultInput = input.float(2.0, title=””, inline = “Upper Deviation”, group = group1)
    useLowerDevInput = input.bool(true, title=”Lower Deviation”, inline = “Lower Deviation”, group = group1)
    lowerMultInput = input.float(2.0, title=””, inline = “Lower Deviation”, group = group1)

    group2 = “Display Settings”
    showPearsonInput = input.bool(true, “Show Pearson’s R”, group = group2)
    extendLeftInput = input.bool(false, “Extend Lines Left”, group = group2)
    extendRightInput = input.bool(true, “Extend Lines Right”, group = group2)
    extendStyle = switch
    extendLeftInput and extendRightInput => extend.both
    extendLeftInput => extend.left
    extendRightInput => extend.right
    => extend.none

    group3 = “Color Settings”
    colorUpper = input.color(color.new(color.blue, 85), “”, inline = group3, group = group3)
    colorLower = input.color(color.new(color.red, 85), “”, inline = group3, group = group3)

    calcSlope(source, length) =>
    max_bars_back(source, 5000)
    if not barstate.islast or length <= 1
    [float(na), float(na), float(na)]
    else
    sumX = 0.0
    sumY = 0.0
    sumXSqr = 0.0
    sumXY = 0.0
    for i = 0 to length – 1 by 1
    val = source[i]
    per = i + 1.0
    sumX += per
    sumY += val
    sumXSqr += per * per
    sumXY += val * per
    slope = (length * sumXY – sumX * sumY) / (length * sumXSqr – sumX * sumX)
    average = sumY / length
    intercept = average – slope * sumX / length + slope
    [slope, average, intercept]

    [s, a, i] = calcSlope(sourceInput, lengthInput)
    startPrice = i + s * (lengthInput – 1)
    endPrice = i
    var line baseLine = na
    if na(baseLine) and not na(startPrice)
    baseLine := line.new(bar_index – lengthInput + 1, startPrice, bar_index, endPrice, width=1, extend=extendStyle, color=color.new(colorLower, 0))
    else
    line.set_xy1(baseLine, bar_index – lengthInput + 1, startPrice)
    line.set_xy2(baseLine, bar_index, endPrice)
    na

    calcDev(source, length, slope, average, intercept) =>
    upDev = 0.0
    dnDev = 0.0
    stdDevAcc = 0.0
    dsxx = 0.0
    dsyy = 0.0
    dsxy = 0.0
    periods = length – 1
    daY = intercept + slope * periods / 2
    val = intercept
    for j = 0 to periods by 1
    price = high[j] – val
    if price > upDev
    upDev := price
    price := val – low[j]
    if price > dnDev
    dnDev := price
    price := source[j]
    dxt = price – average
    dyt = val – daY
    price -= val
    stdDevAcc += price * price
    dsxx += dxt * dxt
    dsyy += dyt * dyt
    dsxy += dxt * dyt
    val += slope
    stdDev = math.sqrt(stdDevAcc / (periods == 0 ? 1 : periods))
    pearsonR = dsxx == 0 or dsyy == 0 ? 0 : dsxy / math.sqrt(dsxx * dsyy)
    [stdDev, pearsonR, upDev, dnDev]

    [stdDev, pearsonR, upDev, dnDev] = calcDev(sourceInput, lengthInput, s, a, i)
    upperStartPrice = startPrice + (useUpperDevInput ? upperMultInput * stdDev : upDev)
    upperEndPrice = endPrice + (useUpperDevInput ? upperMultInput * stdDev : upDev)
    var line upper = na
    lowerStartPrice = startPrice + (useLowerDevInput ? -lowerMultInput * stdDev : -dnDev)
    lowerEndPrice = endPrice + (useLowerDevInput ? -lowerMultInput * stdDev : -dnDev)
    var line lower = na
    if na(upper) and not na(upperStartPrice)
    upper := line.new(bar_index – lengthInput + 1, upperStartPrice, bar_index, upperEndPrice, width=1, extend=extendStyle, color=color.new(colorUpper, 0))
    else
    line.set_xy1(upper, bar_index – lengthInput + 1, upperStartPrice)
    line.set_xy2(upper, bar_index, upperEndPrice)
    na
    if na(lower) and not na(lowerStartPrice)
    lower := line.new(bar_index – lengthInput + 1, lowerStartPrice, bar_index, lowerEndPrice, width=1, extend=extendStyle, color=color.new(colorUpper, 0))
    else
    line.set_xy1(lower, bar_index – lengthInput + 1, lowerStartPrice)
    line.set_xy2(lower, bar_index, lowerEndPrice)
    na
    linefill.new(upper, baseLine, color = colorUpper)
    linefill.new(baseLine, lower, color = colorLower)

    // Pearson’s R
    var label r = na
    label.delete(r[1])
    if showPearsonInput and not na(pearsonR)
    r := label.new(bar_index – lengthInput + 1, lowerStartPrice, str.tostring(pearsonR, “#.################”), color = color.new(color.white, 100), textcolor=color.new(colorUpper, 0), size=size.normal, style=label.style_label_up)

    1.png 1.png
    #193924 quote
    NicolasNicolas
    Keymaster
    Legend

    Puoi ottenere lo stesso canale con quell'indicatore disponibile nella nostra libreria di codici: https://www.prorealcode.com/prorealtime-indicators/standard-deviation-standard-error-linear-regression-channel/

    lowbat thanked this post
    #194026 quote
    lowbatlowbat
    Participant
    Senior

    Grazie Nicolas

    leggendo un po in giro sul forum a riguardo del canale di regressione lineare mi pare di aver capito che non si può creare uno screener che possa indicare quando un’azione incroci o tocchi la linea inferiore o superiore, è corretto?

    #194028 quote
    robertogozzirobertogozzi
    Moderator
    Legend

    Certo che può, come può farlo per le Bande di Bollinger o una media, ecc… Però apri un nuovo topic nel supporto SCREENER, in quanto è un argomento diverso da questo.

    lowbat thanked this post
Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

conversione da tradingview: canale regressione lineare


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
lowbat @lowbat Participant
Summary

This topic contains 3 replies,
has 3 voices, and was last updated by robertogozzirobertogozzi
4 years, 3 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 05/26/2022
Status: Active
Attachments: 1 files
ProRealCode ProRealCode
Loading...