예스스탁
예스스탁 답변
2020-06-11 10:59:30
안녕하세요
예스스탁입니다.
input : atrLen(12),m1(4.0),m2(1.5),adxLen(14);
var : src(0),hr(0),lr(0),dmpos(0),dmneg(0),str(0),sdmpos(0),sdmneg(0),dip(0),din(0),dx(0),adxv(0),mm(0),upv(0),dnv(0);
var : hl2(0),tup(0),tdown(0),stops(0),trend(0),trendChange(false),lineColor(0),shapeColor(0);
src = c;
hl2 = (H+L)/2;
hR = high - high[1];
lR = low[1] - low;
dmPos = iff(hR > lR , abs(hR) , 0);
dmNeg = iff(lR > hR , abs(lR) , 0);
if CurrentBar >= 1 then
{
sTR = sTR[1] - sTR[1]/adxLen + TrueRange;
sDMPos = sDMPos[1] - sDMPos[1] / adxLen + dmPos;
sDMNeg = sDMNeg[1] - sDMNeg[1] / adxLen + dmNeg;
DIP = sDMPos / sTR * 100;
DIN = sDMNeg / sTR * 100;
DX = abs(DIP - DIN) / (DIP + DIN) * 100;
adxv = ma(DX, adxLen);
// Trailing ATR
mm = iff(adxv > adxv[1], m1 ,iff(adxv < adxv[1] , m2 ,mm));
upv = hl2 - mm * atr(atrLen);
dnv = hl2 + mm * atr(atrLen);
TUp = iff(src[1] > TUp[1] , max(upv, TUp[1]) , upv);
TDown = iff(src[1] < TDown[1] , min(dnv, TDown[1]) , dnv);
trend = iff(src > TDown[1] , 1 , iff(src < TUp[1] , -1 , trend));
stops = iff(trend == 1 , TUp , TDown);
trendChange = trend != trend[1];
// Plot
lineColor = iff(trendChange ==false,iff(trend > 0 ,red,blue),BLACK);
shapeColor = iff(trendChange == true,iff(trend > trend[1],MAGENTA,CYAN),BLACK);
plot1(stops,"ATR Trend",lineColor);
plot2(iff(trendChange == true,stops,nan),"Change",shapeColor);
}
즐거운 하루되세요
> as8282 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 아래수식을 예스로 부탁합니다.
//Mode
src = input(title = "Source", type = source, defval = close)
atrLen = input(title = "ATR", type = integer, defval = 12, minval = 1, maxval = 1000)
m1 = input(title = "ATR Multiplier - ADX Rising", type = float, defval = 4.0, minval = 1, step = 0.1, maxval = 1000)
m2 = input(title = "ATR Multiplier - ADX Falling", type = float, defval = 1.5, minval = 1, step = 0.1, maxval = 1000)
adxLen = input(title = "ADX", type = integer, defval = 14, minval = 1, maxval = 1000)
// DI-Pos, DI-Neg, ADX
hR = high - nz(high[1])
lR = nz(low[1]) - low
dmPos = hR > lR ? abs(hR) : 0
dmNeg = lR > hR ? abs(lR) : 0
sTR = nz(sTR[1]) - nz(sTR[1]) / adxLen + tr
sDMPos = nz(sDMPos[1]) - nz(sDMPos[1]) / adxLen + dmPos
sDMNeg = nz(sDMNeg[1]) - nz(sDMNeg[1]) / adxLen + dmNeg
DIP = sDMPos / sTR * 100
DIN = sDMNeg / sTR * 100
DX = abs(DIP - DIN) / (DIP + DIN) * 100
adx = sma(DX, adxLen)
// Trailing ATR
m = rising(adx, 1) ? m1 : falling(adx, 1) ? m2 : nz(m[1])
up = hl2 - m * atr(atrLen)
dn = hl2 + m * atr(atrLen)
TUp = src[1] > TUp[1] ? max(up, TUp[1]) : up
TDown = src[1] < TDown[1] ? min(dn, TDown[1]) : dn
trend = src > TDown[1] ? 1 : src < TUp[1]? -1 : nz(trend[1], 1)
stop = trend == 1 ? TUp : TDown
trendChange = change(trend)
// Plot
lineColor = not(trendChange) ? trend > 0 ? #00FF00DD : #FF0000DD : #00000000
shapeColor = trendChange ? trendChange > 0 ? #00FF00F8 : #FF0000F8 : #00000000
plot(stop, color = lineColor, style = line, linewidth = 1, title = "ATR Trend")
plotshape(trendChange ? stop : na, style = shape.circle, size = size.tiny, location = location.absolute, color = shapeColor, title = "Change")
// end