예스스탁
예스스탁 답변
2025-09-26 13:49:13.0
안녕하세요
예스스탁입니다.
1 . 지표
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);
2. 시스템
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;
Buy();
}
if DemaAtrShort Then
{
Sell();
Trend = shortColour;
}
즐거운 하루되세요
> 신대륙발견 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> //@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 showAtr = input.bool(true, "Plot Dema Atr on Chart?")
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?")
simple bool showMA = input.bool(false, "Show Atr Moving Average as Confluence?",group = "Confluence")
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 = #00ff00
simple color shortColour = #ff0000
/////////////////////////////////////////////////////////////// © BackQuant ///////////////////////////////////////////////////////////////
// Use HA Candles?
heikinashi_close = request.security(
symbol = ticker.heikinashi(syminfo.tickerid),
timeframe = timeframe.period,
expression = close,
gaps = barmerge.gaps_off,
lookahead = barmerge.lookahead_off
)
var series float source = close
if haCandles == true
source := heikinashi_close
if haCandles == false
source := sourceDema
/////////////////////////////////////////////////////////////// © BackQuant ///////////////////////////////////////////////////////////////
// Function
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
movingAverage(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Hull" => ta.hma(source, length)
"Ema" => ta.ema(source, length)
"Wma" => ta.wma(source, length)
"Dema" => ta.dema(source, length)
maOut = movingAverage(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(
showAtr ? DemaAtr : na,
"ATR",
color=Trend,
linewidth = 2
)
barcolor(paintCandles ? Trend : na)
plot(showMA ? maOut : na, "Moving Average", color.white, 2, plot.style_line)
/////////////////////////////////////////////////////////////// © BackQuant ///////////////////////////////////////////////////////////////
// Alerts
alertcondition(
DemaAtrLong,
title="Dema ATR Trend Up",
message="Dema ATR Trend Up - {{ticker}} - {{interval}}"
)
alertcondition(
DemaAtrShort,
title="Dema ATR Trend Down",
message="Dema ATR Trend Down - {{ticker}} - {{interval}}"
)
트레이딩뷰 수식인데 여기서 DEMA 선의 색이 바뀌면 매수/매도 신호가 나오게 해주세요.