커뮤니티

지표식 부탁드립니다

프로필 이미지
고도산
2025-05-28 07:50:52
268
글번호 191232
답변완료
지표식 변환 부탁합니다. 미리 감사드립니다. //@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')
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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')