커뮤니티

수식 부탁드립니다

프로필 이미지
고도산
2025-11-16 15:26:11
168
글번호 228062
답변완료


//@version=5

indicator(

 title="#DEMA Adjusted Average True Range [BackQuant]", shorttitle = "DEMA ATR [BackQuant]", overlay=true)


다음 TV 수식을 YT로 변환하고 싶습니다. 미리 감사드립니다.


//@version=5

indicator( title="DEMA Adjusted Average True Range [BackQuant]", shorttitle = "DEMA ATR [BackQuant]", overlay=true, timeframe="", timeframe_gaps=true )


// Define User Inputs

simple bool       haCandles               =        input.bool(false, "Use HA Candles?")

simple int        periodDema              =        input.int(7, "Dema Period", group = "Dema Atr")

series float      sourceDema              =        input.source(close, "Calculation Source", group = "Dema Atr")

simple int        periodAtr               =        input.int(14, "Period", group = "Dema Atr")

simple float      factorAtr               =        input.float(1.7, "Factor", step = 0.01, group = "Dema Atr")

simple bool       paintCandles            =        input.bool(false, "Paint Candles According to trend?")

string            movingAverageType       =        input.string("Ema", title="MA Type", options=["SMA", "Hull", "Ema", "Wma", "Dema"],group = "Confluence")

simple int        movingAveragePeriod     =        input.int(50, "Moving Average Period", group = "Confluence")

simple color      longColour              =       #ff0000

simple color      shortColour             =       #00ff00

/////////////////////////////////////////////////////////////// © BackQuant ///////////////////////////////////////////////////////////////

// Function

//DEMA//

DEMA(src, dLen)=>

    e1 = ta.ema(src, dLen)

    e2 = ta.ema(e1, dLen)

    dema = 2 * e1 - e2

    dema


DemaAtrWithBands(periodDema, source, lookback, atrFactor)=>

    ema1   = ta.ema(source,  periodDema)

    ema2   = ta.ema(ema1, periodDema)

    demaOut = 2 * ema1 - ema2


    atr = ta.atr(lookback)

    trueRange = atr * atrFactor


    DemaAtr = demaOut

    DemaAtr := nz(DemaAtr[1], DemaAtr)


    trueRangeUpper = demaOut + trueRange

    trueRangeLower  = demaOut - trueRange


    if trueRangeLower > DemaAtr

        DemaAtr := trueRangeLower

    if trueRangeUpper < DemaAtr

        DemaAtr := trueRangeUpper

    DemaAtr


// Function Out

DemaAtr = DemaAtrWithBands(periodDema, source, periodAtr, factorAtr)

/////////////////////////////////////////////////////////////// © BackQuant ///////////////////////////////////////////////////////////////

// Moving Average Switch Type

maOut = ta.ema(DemaAtr, movingAveragePeriod, movingAverageType)

/////////////////////////////////////////////////////////////// © BackQuant ///////////////////////////////////////////////////////////////

// Conditions

DemaAtrLong = ta.crossover(DemaAtr, DemaAtr[1])

DemaAtrShort = ta.crossunder(DemaAtr, DemaAtr[1])


// Colour Condtions

var color Trend = #ffffff

if DemaAtrLong

    Trend := longColour

if DemaAtrShort

    Trend := shortColour


// Plotting

plot( DemaAtr, "ATR", color=Trend, linewidth = 2 )


plot(maOut, "Moving Average", color.white, 2, plot.style_line)

지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-11-17 14:17:03

안녕하세요 예스스탁입니다. input : showAtr(true); input : haCandles(false); input : periodDema(7); input : sourceDema(close); input : periodAtr(14); input : factorAtr(1.7); input : paintCandles(false); input : showMA(false); input : movingAverageType(2);#1:SMA, 2:Hull, 3:Ema, 4:Wma, 5:Dema input : movingAveragePeriod(50); var : longColour(Lime),shortColour(Red); var : heikinashi_close(0),heikinashi_open(0),heikinashi_high(0),heikinashi_low(0); var : source(0); heikinashi_close = (O+H+L+C)/4; heikinashi_open= iff(index == 0,open,(heikinashi_open [1] + heikinashi_close [1])/2) ; heikinashi_high = MaxList(High, heikinashi_open, heikinashi_close) ; heikinashi_low = MinList(Low, heikinashi_open, heikinashi_close) ; source = close; if haCandles == true Then source = heikinashi_close; if haCandles == false Then source = sourceDema ; var : ema1(0),ema2(0),demaOut(0); var : alpha(0),atr(0),TR(0),DemaAtr(0); var : trueRangeUpper(0),trueRangeLower(0); ema1 = ema(source, periodDema); ema2 = ema(ema1, periodDema); demaOut = 2 * ema1 - ema2; alpha = 1 / periodAtr ; atr = IFf(IsNan(atr[1]) == true, ma(TrueRange,periodAtr) , alpha * TrueRange + (1 - alpha) * IFf(isnan(atr[1])==true,0,atr[1])); TR = atr * factorAtr ; DemaAtr = demaOut ; DemaAtr = iff(isnan(DemaAtr[1]) == true, DemaAtr,DemaAtr[1]); trueRangeUpper = demaOut + TR; trueRangeLower = demaOut - TR; if trueRangeLower > DemaAtr Then DemaAtr = trueRangeLower; if trueRangeUpper < DemaAtr Then DemaAtr = trueRangeUpper; var : e1(0),e2(0),maOut(0); if movingAverageType == 1 Then maOut = ma(DemaAtr,movingAveragePeriod); if movingAverageType == 2 Then maOut = wma(2 * wma(DemaAtr, movingAveragePeriod / 2) - wma(DemaAtr, movingAveragePeriod), round(sqrt(movingAveragePeriod),0)); if movingAverageType == 3 Then maOut = ema(DemaAtr,movingAveragePeriod); if movingAverageType == 4 Then maOut = wma(DemaAtr,movingAveragePeriod); if movingAverageType == 5 Then { e1 = ema(DemaAtr, movingAveragePeriod); e2 = ema(e1, movingAveragePeriod); maOut = 2 * e1 - e2; } var : DemaAtrLong(False),DemaAtrShort(False); DemaAtrLong = CrossUp(DemaAtr, DemaAtr[1]); DemaAtrShort = CrossDown(DemaAtr, DemaAtr[1]); var : Trend(Black); if DemaAtrLong Then Trend = longColour; if DemaAtrShort Then Trend = shortColour; if showAtr == true Then plot1(DemaAtr,"ATR",Trend); Else NoPlot(1); if showMA == true Then plot2(maOut,"oving Average",Trend); Else NoPlot(2); 즐거운 하루되세요