답변완료
문의
indicator("HTF Trend Tracker [BigBeluga]", overlay = true, max_lines_count = 500, max_labels_count = 500)
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
tf = input.timeframe("D", "Timeframe")
bull_col = input.color(color.rgb(12, 193, 142), "✓", inline = "col")
bear_col = input.color(color.red, "✕", inline = "col")
mid_col = input.color(color.rgb(121, 121, 121), "-", inline = "col")
var line_1 = line(na)
var line_2 = line(na)
var color_trend = color(na)
var trend = bool(na)
// }
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
draw_line(x1, x2, y, txt, color)=>
l = line.new(x1, y, x2, y, color = color, style = line.style_dashed)
label.delete(label.new(x1, y, txt, color = color(na), style = label.style_label_right)[1])
l
var h = float(na)
var l = float(na)
var count = 0
if not timeframe.change(tf)
count +=1
h := ta.highest(count)
l := ta.lowest(count)
if timeframe.change(tf)
count := 0
line_1 := draw_line(bar_index, bar_index, h[1], tf + " High", bear_col)
line_2 := draw_line(bar_index, bar_index, l[1], tf + " Low", bull_col)
line_1.set_x2(bar_index)
line_2.set_x2(bar_index)
if barstate.islast
line.delete(line.new(line_1.get_x1(), line_1.get_y1(), bar_index+15, line_1.get_y1(), color = bear_col, style = line.style_arrow_right)[1])
line.delete(line.new(line_2.get_x1(), line_2.get_y1(), bar_index+15, line_2.get_y1(), color = bull_col, style = line.style_arrow_right)[1])
mid = math.avg(line_1.get_y1(),line_2.get_y1())
if ta.crossover(close, line_1.get_y1()) and barstate.isconfirmed
color_trend := bull_col
trend := true
if ta.crossunder(close, line_2.get_y1()) and barstate.isconfirmed
color_trend := bear_col
trend := false
// }
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
if trend and trend != trend[1]
label.new(bar_index, low - ta.sma(high-low, 100), "✓", style = label.style_label_up, size = size.tiny, color = bull_col)
if not trend and trend != trend[1]
label.new(bar_index, high + ta.sma(high-low, 100), "✕", style = label.style_label_down, size = size.tiny, color = bear_col)
high_sdv = (high- mid)
low_sdv = (mid - low)
color_bars =
trend
? color.from_gradient(high_sdv, 0, ta.highest(high_sdv, 100), mid_col, bull_col)
: color.from_gradient(low_sdv, 0, ta.highest(low_sdv,100), mid_col, bear_col)
plotcandle(open, high, low, close, title ='Candles', color = color_bars, wickcolor=color_bars, bordercolor = color_bars)
plot(mid, "Trend", color = color_trend, linewidth = 2)
// }
예스식으로 부탁드립니다
2025-04-13
305
글번호 190067
지표
답변완료
부틱드립니다
수고하십니다
아래수식은 제가 이것저것 갖다 붙인수식인데요 이상한선들이 나타나내요 수식수정 부탁드립니다
input : 타주기분(5);
var : S1(0),D1(0),TM(0),TF(0),box(0),dd(0),tt(0);
var : oo(0),hh(0),ll(0),cc(0),TL1(0),TL2(0),TL3(0),clr(0),ii(0),TL(0),TL4(0);
var : box1(0),box2(0),box3(0),box4(0);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
}
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
dd = sDate;
tt = sTime;
oo = O;
hh = H;
ll = L;
//cc = C;
box = Box_New(sDate,sTime,oo,NextBarSdate,NextBarStime,c);
//------------------------------------------------------------------
TL1 = TL_New(sDate,sTime,max(C,oo),sDate,sTime,hh);
TL2 = TL_New(sDate,sTime,min(C,oo),sDate,sTime,ll);
box1 = box[1];
box2 = box1[1];
box3 = box2[1];
box4 = box3[1];
Box_Delete(Box4);
ii = 1;
}
Else
{
ii = ii +1;
if h > hh Then
hh = h;
if l < ll Then
ll = l;
var1 = Round(ii/2,1);
Box_SetEnd(box,sDate,sTime,C);
//-------------------------------------------------------
TL_SetBegin(TL1,sDate[var1],sTime[var1],max(c,oo));
TL_SetEnd(TL1,sDate[var1],sTime[var1],hh);
TL_SetBegin(TL2,sDate[var1],sTime[var1],min(c,oo));
TL_SetEnd(TL2,sDate[var1],sTime[var1],ll);
TL = TL_New(dd,tt,c,sDate,sTime,c);
TL_SetExtRight(TL,true);
TL_SetColor(TL,Green);
TL_SetSize(TL,1);
TL1 = TL[1];
TL2 = TL1[1];
TL3 = TL2[1];
TL4 = TL3[1];
TL_Delete(TL4);
TL_SetBegin(TL,dd,tt,c);
TL_SetEnd(TL,sDate,sTime,c);
}
if C > oo Then
clr = DarkRed;
else if C < oo Then
clr = Green;
Else
clr = White;
Box_SetColor(box,clr);
Box_SetSize(box,5);
Box_SetFill(box,True,60);//내부채움
TL_SetColor(tl1,Yellow);
TL_SetColor(tl2,Yellow);
TL_SetColor(tl3,clr);
TL_SetColor(tl,clr);
TL_SetSize(TL1,5);
TL_SetSize(TL2,5);
}
2025-04-13
294
글번호 190064
지표
답변완료
수식 부탁드립니다
지표식 부탁드리고요. 시스템식도 가능하면 부탁드립니다.
// INPUTS ========================================================================================================{
//@variable len Length of the Gaussian filter for smoothing (minimum value: 5)
int len = input.int(30, "Length", minval = 5)
//@variable mode 선택 the mode of aggregation to be used: AVG (average), MEADIAN (median), or MODE (mode)
string mode = input.string("AVG", "Type", ["AVG", "MEADIAN", "MODE"])
//@variable distance Multiplier for calculating the distance between the Gaussian filter and the volatility bands
float distance = input.float(3, step = 0.1)
//@variable show_retest Boolean input to determine if retest signals should be displayed
bool show_retest = input.bool(false, "Retest Signals")
//@variable up Color for upward trends and visual signals, represented in RGB
color up = input.color(color.rgb(40, 218, 150), group = "Color")
//@variable dn Color for downward trends and visual signals, represented in hex code
color dn = input.color(#287bda, group = "Color")
// }
// CALCULATIONS ============================================================================================={
//@function Calculates a Gaussian filter for smoothing the data
//@param src (series float) Source price series
//@param length (int) Length of the filter
//@param sigma (float) Standard deviation for the Gaussian function
//@returns (float) Smoothed value for the current bar
gaussian_filter(src, length, sigma) =>
var float[] weights = array.new_float(100) // Create an array to store weights for Gaussian filter
float total = 0.0 // Sum of all weights, used for normalization
float pi = math.pi // Define Pi constant
// Calculate weights for Gaussian filter
for i = 0 to length - 1
float weight = math.exp(-0.5 * math.pow((i - length / 2) / sigma, 2.0)) / math.sqrt(sigma * 2.0 * pi)
weights.set(i, weight)
total := total + weight
// Normalize weights
for i = 0 to length - 1
weights.set(i, weights.get(i) / total)
// Apply Gaussian filter to the source series
float sum = 0.0
for i = 0 to length - 1
sum := sum + src[i] * weights.get(i)
sum
//@function Multi-trend calculation using Gaussian filter
//@param src (series float) Source price series
//@param period (int) Lookback period for trend calculation
//@returns (float[]) Returns score, value, color, trend line, and trend status
multi_trend(src, period) =>
array<float> g_value = array.new<float>() // Array to store Gaussian filtered values
float volatility = ta.sma(high - low, 100) // Calculate the average true range (ATR) volatility
var float lower_band = 0.0 // Lower band for trend analysis
var float upper_band = 0.0 // Upper band for trend analysis
var float trend_line = 0.0 // Trend line value
var bool trend = na // Trend direction status
// Apply Gaussian filter with a step adjustment to calculate multiple trend lines
for step = 0 to 20 by 1
float gaussian_filter = gaussian_filter(src, (period + step), 10)
g_value.push(gaussian_filter)
float coeff = 0.05
float score = 0.0
// Calculate score based on trend analysis
for i = 0 to g_value.size() - 1
float g_f = g_value.get(i)
if g_f > g_value.first()
score += coeff
// Determine color based on score
color color = score > 0.5
? color.from_gradient(score, 0.5, 1, na, dn)
: color.from_gradient(score, 0, 0.5, up, na)
// Determine value based on user-선택된 mode (AVG, MEDIAN, MODE)
float value = switch mode
"AVG" => g_value.avg()
"MEADIAN" => g_value.median()
"MODE" => g_value.mode()
lower_band := value - volatility * distance // Calculate lower band based on value and volatility
upper_band := value + volatility * distance // Calculate upper band based on value and volatility
// Check crossover and crossunder of price with bands to determine trend
if ta.crossover(close, upper_band)
trend := true
if ta.crossunder(close, lower_band)
trend := false
// Set trend line based on trend direction
trend_line :=
trend ? lower_band
: not trend ? upper_band : na
// Return values: score, value, color, trend line, and trend status
[score, value, color, trend_line, trend]
// Get the result from the multi-trend function
[score, avg, color, trend_line, trend] = multi_trend(close, len)
// }
// PLOT ============================================================================================================={
// Plot the average line returned from multi_trend function
p2 = plot(avg, color = color, linewidth=6)
// Plot the trend line based on trend status
p1 = plot(ta.change(trend) ? na : trend_line,
color = close > trend_line ? up : dn,
linewidth = 7,
style = plot.style_linebr)
// Plot the trend line again with styling
plot(trend_line, color = close > trend_line ? up : dn, linewidth=1, style = plot.style_linebr)
// Add labels for cross under and crossover events
if ta.crossunder(close, trend_line)
label.new(bar_index, trend_line, score < 0.5 ? "▼" : "▼",
color = dn,
textcolor = chart.fg_color,
style = label.style_label_lower_right,
size = score < 0.5 ? size.tiny : size.tiny)
if ta.crossover(close, trend_line)
label.new(bar_index, trend_line, score > 0.5 ? "▲" : "▲",
color = up,
textcolor = chart.bg_color,
style = label.style_label_upper_right,
size = score > 0.5 ? size.tiny : size.tiny)
// Determine trend color based on trend direction
color trend_color = trend ? color.new(up, 100) : color.new(dn, 100)
// Fill between trend line and average line to show areas of trend
fill(p1, p2, trend_line, avg, trend_color, na)
fill(p1, p2, trend_line, avg, trend_color, na)
// Add retest labels if the option is enabled
if show_retest
if ta.crossunder(high, avg) and not trend
label.new(bar_index[1], high[1], "▼",
color = color(na),
style = label.style_label_down,
textcolor = chart.fg_color,
size = size.small)
if ta.crossover(close, avg) and trend
label.new(bar_index[1], low[1], "▲",
color = color(na),
style = label.style_label_up,
textcolor = chart.fg_color,
size = size.small)
// Calculate score-up and score-down for trend strength representation
float score_up = (score - 1) * -1
float score_dn = 1 - score_up
// Display trend strength as a table if on the last bar
if barstate.islast
table trend_strength_up = table.new(position.bottom_center, 100, 100)
table trend_strength_dn = table.new(position.top_center, 100, 100)
// Create cells to represent trend strength up
for i = 0 to score_up * 20
trend_strength_up.cell(0 + i, 0, bgcolor = color.new(up, 100 - i * 5), text = i == 0 ? "|" : "", text_color = color.gray)
if i == score_up * 20
trend_strength_up.cell(0 + i, 0,
text = str.tostring(score_up * 100, format.percent) + " ▲",
text_color = chart.fg_color,
height = 2)
// Create cells to represent trend strength down
for i = 0 to score_dn * 20
trend_strength_dn.cell(0 + i, 0, bgcolor = color.new(dn, 100 - i * 5), text = i == 0 ? "|" : "", text_color = color.gray)
if i == score_dn * 20
trend_strength_dn.cell(0 + i, 0,
text = str.tostring(score_dn * 100, format.percent) + " ▼",
text_color = chart.fg_color,
height = 2)
// }
2025-04-11
373
글번호 190059
지표