예스스탁
예스스탁 답변
2025-05-28 11:02:53
안녕하세요
예스스탁입니다.
input : length(14);
input : k(1);
input : method (1);#1:Atr, 2:Stdev, 3:Linreg
input : show(false);
var : upper(0),lower(0),slope_ph(0),slope_pl(0),src(0),n(0);
var : ph(0),pl(0),slope(0),single_upper(0),single_lower(0);
var : upper_breakout(False),lower_breakout(False),tx(0);
var : alpha(0),ATrV(0);
upper = 0;
lower = 0;
slope_ph = 0;
slope_pl = 0;
src = close;
n = index;
ph = SwingHigh(1,H,length,length,length*2+1);
pl = Swinglow(1,L,length,length,length*2+1);
if method == 1 Then
{
alpha = 1 / length ;
ATrV = IFf(IsNan(ATrV[1]) == true, ma(TrueRange,length) , alpha * TrueRange + (1 - alpha) * IFf(isnan(ATrV[1])==true,0,ATrV[1]));
slope = atrv / length * k;
}
if method == 2 Then
slope = std(src, length) / length * k;
if method == 3 Then
slope = abs(ma(src * index, length) - ma(src, length) * ma(index, length)) / variance(n, length,1) / 2 * k;
slope_ph = iff(ph != -1 , slope , slope_ph[1]);
slope_pl = iff(pl != -1 , slope , slope_pl[1]);
upper = IFf(ph != -1 , ph , upper[1] - slope_ph);
lower = iff(pl != -1 , pl , lower[1] + slope_pl);
single_upper = 0;
single_lower = 0;
single_upper = iff(src[length] > upper , 0 , iff(ph != -1 ,1 , single_upper[1]));
single_lower = iff(src[length] < lower , 0 , iff(pl != -1 ,1 , single_lower[1]));
upper_breakout = single_upper[1] != 0 and src[length] > upper and IFF(show , src > src[length] , true); // my modify
lower_breakout = single_lower[1] != 0 and src[length] < lower and IFF(show , src < src[length] , true); // my modify
if upper_breakout == true Then
{
tx = Text_New(sDate[length],sTime[length],low[length],"▲");
Text_SetStyle(tx,2,0);
Text_SetColor(tx,Red);
Text_SetSize(tx,20);
}
if lower_breakout == true Then
{
tx = Text_New(sDate[length],sTime[length],high[length],"▼");
Text_SetStyle(tx,2,1);
Text_SetColor(tx,Green);
Text_SetSize(tx,20);
}
var : TL1(0),TL2(0);
if Ph != -1 Then
{
TL_SetExtRight(TL1,False);
TL1 = TL_New(sDate[length],sTime[length],PH,sDate[length-1],sTime[length-1],PH - slope_ph);
TL_SetColor(TL1,Red);
TL_SetExtRight(TL1,true);
}
Else
{
TL_SetEnd(TL1,sDate[length-1],sTime[length-1],TL_GetEndVal(TL1)-slope_ph);
}
if Pl != -1 Then
{
TL_SetExtRight(TL2,False);
TL2 = TL_New(sDate[length],sTime[length],PL,sDate[length-1],sTime[length-1],PL + slope_pl);
TL_SetColor(TL2,Green);
TL_SetExtRight(TL2,true);
}
Else
{
TL_SetEnd(TL2,sDate[length-1],sTime[length-1],TL_GetEndVal(TL2)+slope_pl);
}
즐거운 하루되세요
> 고도산 님이 쓴 글입니다.
> 제목 : 지표식 부탁드립니다
> 지표식 변환 부탁합니다. 미리 감사드립니다.
//@version=6
indicator('Trendlines with Breaks', overlay = true)
length = input.int(14)
k = input.float(1., 'Slope', minval = 0, step = .1)
method = input.string('Atr', 'Slope Calculation Method', options = ['Atr', 'Stdev', 'Linreg'])
show = input(false, 'Show Only Confirmed Breakouts')
//----
upper = 0.
lower = 0.
slope_ph = 0.
slope_pl = 0.
src = close
n = bar_index
//----
ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)
slope = switch method
'Atr' => ta.atr(length) / length * k
'Stdev' => ta.stdev(src, length) / length * k
'Linreg' => math.abs(ta.sma(src * bar_index, length) - ta.sma(src, length) * ta.sma(bar_index, length)) / ta.variance(n, length) / 2 * k
slope_ph := bool(ph) ? slope : slope_ph[1]
slope_pl := bool(pl) ? slope : slope_pl[1]
upper := bool(ph) ? ph : upper[1] - slope_ph
lower := bool(pl) ? pl : lower[1] + slope_pl
//----
single_upper = 0
single_lower = 0
single_upper := src[length] > upper ? 0 : bool(ph) ? 1 : single_upper[1]
single_lower := src[length] < lower ? 0 : bool(pl) ? 1 : single_lower[1]
//upper_breakout = single_upper[1]==1 and src[length] > upper and (show ? src > src[length] : 1)
//lower_breakout = single_lower[1]==1 and src[length] < lower and (show ? src < src[length] : 1)
upper_breakout = bool(single_upper[1]) and src[length] > upper and (show ? src > src[length] : true) // my modify
lower_breakout = bool(single_lower[1]) and src[length] < lower and (show ? src < src[length] : true) // my modify
plotshape(upper_breakout ? low[length] : na, 'Upper Break', shape.labelup, location.absolute, #ef5350, -length, text = 'B↑', textcolor = color.white, size = size.tiny)
plotshape(lower_breakout ? high[length] : na, 'Lower Break', shape.labeldown, location.absolute, #26a69a, -length, text = 'B↓', textcolor = color.white, size = size.tiny)
//----
var line up_l = na
var line dn_l = na
var label recent_up_break = na
var label recent_dn_break = na
if bool(ph[1]) // my modify
line.delete(up_l[1])
label.delete(recent_up_break[1])
up_l := line.new(n - length - 1, ph[1], n - length, upper, color = #ef5350, extend = extend.right, style = line.style_dashed)
up_l
if bool(pl[1]) // my modify
line.delete(dn_l[1])
label.delete(recent_dn_break[1])
dn_l := line.new(n - length - 1, pl[1], n - length, lower, color = #26a69a, extend = extend.right, style = line.style_dashed)
dn_l
if ta.crossover(src, upper - slope_ph * length)
label.delete(recent_up_break[1])
recent_up_break := label.new(n, low, 'B', color = #ef5350, textcolor = color.white, style = label.style_label_up, size = size.small)
recent_up_break
if ta.crossunder(src, lower + slope_pl * length)
label.delete(recent_dn_break[1])
recent_dn_break := label.new(n, high, 'B', color = #26a69a, textcolor = color.white, style = label.style_label_down, size = size.small)
recent_dn_break
//----
plot(upper, 'Upper', color = bool(ph) ? na : #ef5350, offset = -length)
plot(lower, 'Lower', color = bool(pl) ? na : #26a69a, offset = -length)
alertcondition(ta.crossover(src, upper - slope_ph * length), 'Upper Breakout', 'Price broke upper trendline')
alertcondition(ta.crossunder(src, lower + slope_pl * length), 'Lower Breakout', 'Price broke lower trendline')