Untitled
//@version=6 strategy('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) // Girdi parametreleri fast_length = input.int(title="Hızlı Ortalama Periyodu", defval=12) slow_length = input.int(title="Yavaş Ortalama Periyodu", defval=26) src = input.source(title="Kaynak", defval=close) signal_length = input.int(title="Sinyal Yumuşatma Periyodu", minval=1, maxval=50, defval=9, display=display.data_window) sma_source = input.string(title="Osilatör MA Türü", defval="EMA", options=["SMA", "EMA"], display=display.data_window) sma_signal = input.string(title="Sinyal Hattı MA Türü", defval="EMA", options=["SMA", "EMA"], display=display.data_window) // MACD hesaplamaları fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal // Sıfır çizgisi ve MACD göstergeleri // Al ve Sat sinyalleri için koşullar buySignal1 = ta.crossover(macd, 0) sellSignal1 = ta.crossunder(macd, 0) macdsart = macd > 0 // İsim çakışmasını önlemek için farklı isimler kullanıldı bullishCondition = macd > signal // MACD sinyal hattının üzerinde bearishCondition = macd < signal // MACD sinyal hattının altında buySignal34 = ta.crossover(macd, signal) and macdsart and bullishCondition sellSignal34 = ta.crossunder(macd, signal) and macdsart and bearishCondition // ALIM ve SATIM STRATEJİSİ if buySignal1 strategy.entry("Long", strategy.long) if buySignal34 strategy.entry("Long", strategy.long) if sellSignal34 strategy.entry("Short", strategy.short) // Alım ve satım sinyallerini grafikte göster plotshape(buySignal34, location=location.belowbar, color=color.rgb(110, 109, 109), style=shape.arrowup, title="TEKRAR AL", text="TEKRAR AL", textcolor=color.rgb(0, 255, 55), size=size.small, offset=0) plotshape(sellSignal34, location=location.abovebar, color=#0ff936, style=shape.arrowdown, title="KAR AL", text="KAR AL", textcolor=#ffffff, size=size.small, offset=0)
Leave a Comment