Untitled
//@version=6 indicator('RSN_KALE', overlay = true, max_labels_count = 500, max_boxes_count = 500) // INPUTS // Kısa ve uzun EMA'lar için farklı hareketli ortalama türlerini seçme imkanı short_ma_type = input.string("EMA", title="Kısa MA", options=["Kalman", "EMA", "SMA", "WMA", "RMA", "EMA2", "RMA2"], inline="KISA_Ema", group='HAREKETLİ ORTALAMA') long_ma_type = input.string("EMA", title="Uzun MA", options=["Kalman", "EMA", "SMA", "WMA", "RMA", "EMA2", "RMA2"], inline="UZUN_Ema", group='HAREKETLİ ORTALAMA') // Kısa ve uzun hareketli ortalama length parametreleri int KISA_Ema = input.int(12, title="Kısa MA", inline="KISA_Ema", group='HAREKETLİ ORTALAMA') int UZUN_Ema = input.int(26, title="Uzun MA", inline="UZUN_Ema", group='HAREKETLİ ORTALAMA') bool retest_sig = true bool candle_color = input.bool(true, 'BAR COLOR', inline = 'colors') color upper_col = input.color(#13bd6e, 'up', inline = 'colors') color lower_col = input.color(#b1232f, 'dn', inline = 'colors') // ATR Calculation float atr = ta.atr(55) * 0.5 var lower_box = box(na) var upper_box = box(na) // Kalman filter function kalman_filter(src, length, R = 0.01, Q = 0.1) => var float estimate = na var float error_est = 1.0 var float error_meas = R * length var float kalman_gain = 0.0 var float prediction = na if na(estimate) estimate := src prediction := estimate kalman_gain := error_est / (error_est + error_meas) estimate := prediction + kalman_gain * (src - prediction) error_est := (1 - kalman_gain) * error_est + Q / length estimate // EMA2 Function ema2(src, length) => alpha = 2 / (length + 1) var float result = na result := na(result[1]) ? src : alpha * src + (1 - alpha) * result[1] result // RMA2 Function rma2(src, length) => alpha = 1 / length var float result = na result := na(result[1]) ? src : alpha * src + (1 - alpha) * result[1] result // Calculate the selected moving average for both short and long float short_ma = na float long_ma = na // Kısa dönem hareketli ortalama hesaplaması if short_ma_type == "Kalman" short_ma := kalman_filter(close, KISA_Ema) else if short_ma_type == "EMA" short_ma := ta.ema(close, KISA_Ema) else if short_ma_type == "SMA" short_ma := ta.sma(close, KISA_Ema) else if short_ma_type == "WMA" short_ma := ta.wma(close, KISA_Ema) else if short_ma_type == "RMA" short_ma := ta.rma(close, KISA_Ema) else if short_ma_type == "EMA2" short_ma := ema2(close, KISA_Ema) else if short_ma_type == "RMA2" short_ma := rma2(close, KISA_Ema) // Uzun dönem hareketli ortalama hesaplaması if long_ma_type == "Kalman" long_ma := kalman_filter(close, UZUN_Ema) else if long_ma_type == "EMA" long_ma := ta.ema(close, UZUN_Ema) else if long_ma_type == "SMA" long_ma := ta.sma(close, UZUN_Ema) else if long_ma_type == "WMA" long_ma := ta.wma(close, UZUN_Ema) else if long_ma_type == "RMA" long_ma := ta.rma(close, UZUN_Ema) else if long_ma_type == "EMA2" long_ma := ema2(close, UZUN_Ema) else if long_ma_type == "RMA2" long_ma := rma2(close, UZUN_Ema) // Trend Detection Logic bool trend_up = short_ma > long_ma color trend_col = trend_up ? upper_col : lower_col color trend_col1 = short_ma > short_ma[2] ? upper_col : lower_col color candle_col = candle_color ? trend_up and short_ma > short_ma[2] ? upper_col : not trend_up and short_ma < short_ma[2] ? lower_col : color.rgb(255, 255, 255, 26) : na // PLOTTING if trend_up and not trend_up[1] label.new(bar_index, short_ma, '\n' + str.tostring(math.round(close, 1)), color = color(na), textcolor = upper_col, style = label.style_label_up, size = size.normal) lower_box := box.new(bar_index, low + atr, bar_index, low, border_color = na, bgcolor = color.new(color.green, 80)) lower_box if not ta.change(trend_up) lower_box.set_right(bar_index) if trend_up[1] and not trend_up label.new(bar_index, short_ma, str.tostring(math.round(close, 1)) + '\n', color = color(na), textcolor = lower_col, style = label.style_label_down, size = size.normal) upper_box := box.new(bar_index, high, bar_index, high - atr, border_color = na, bgcolor = color.new(color.red, 80)) upper_box if not ta.change(trend_up) upper_box.set_right(bar_index) if retest_sig if high < upper_box.get_bottom() and high[1] >= upper_box.get_bottom() label.new(bar_index - 1, high[1], '', color = color(na), textcolor = lower_col, style = label.style_label_down, size = size.normal) if low > lower_box.get_top() and low[1] <= lower_box.get_top() label.new(bar_index - 1, low[1], '', color = color(na), textcolor = upper_col, style = label.style_label_up, size = size.normal) // Plot short and long moving averages p1 = plot(short_ma, 'Kısa MA', color = trend_col1, display = display.none) p2 = plot(long_ma, 'Uzun MA', linewidth = 2, color = trend_col, display = display.none) // Plotting candles plotcandle(open, high, low, close, title = 'RSN_KALE', color = candle_col, wickcolor = candle_col, bordercolor = candle_col)
Leave a Comment