커뮤니티

수식 부탁드립니다

프로필 이미지
고도산
2025-11-16 15:26:11
68
글번호 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); 즐거운 하루되세요