Untitled

 avatar
unknown
plain_text
a month ago
7.3 kB
3
Indexable
//@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