Untitled

 avatar
unknown
plain_text
9 days ago
11 kB
5
Indexable
//@version=5
//@strategy_alert_message {{strategy.order.alert_message}}
strategy("Özelleştirilebilir Seanslı EMA Stratejisi", overlay=true, max_labels_count=500, default_qty_type=strategy.cash, default_qty_value=10000)


baslangicSaati = input.time(defval=timestamp("2023-01-01 10:15"), title="Başlangıç Saati", group="Borsa Seans Ayarları")
bitisSaati = input.time(defval=timestamp("2023-01-01 17:00"), title="Bitiş Saati", group="Borsa Seans Ayarları")
kapanisBuffer = input.int(defval=15, title="Kapanış Öncesi Dakika", minval=1, maxval=60, group="Borsa Seans Ayarları")


alim_yontemi = "mktbest"
api_key = input.string(defval="", title="API KEY", group="Emir Ayarları")
giris_tipi = input.string(defval="Lot", title="Giriş Tipi", options=["Lot", "TL"], group="Emir Ayarları")
lot = input.float(defval=1000, title="Parasal Büyüklük/Lot", step=0.1, minval=0.1, group="Emir Ayarları")


BBperiod = input.int(defval=21, title='BB Period', minval=1)
BBdeviations = input.float(defval=1.00, title='BB Deviations', minval=0.1, step=0.05)
UseATRfilter = input(defval=true, title='ATR Filter')
ATRperiod = input.int(defval=5, title='ATR Period', minval=1)
hl = input(defval=false, title='Hide Labels')


var grpSembol = "Hisse Seçimleri"
hisse1 = input.symbol(defval="", title="Hisse 1", group=grpSembol)
aktif1 = input.bool(defval=true, title="→ Hisse 1 Aktif", group=grpSembol)
hisse2 = input.symbol(defval="", title="Hisse 2", group=grpSembol)
aktif2 = input.bool(defval=false, title="→ Hisse 2 Aktif", group=grpSembol)
hisse3 = input.symbol(defval="", title="Hisse 3", group=grpSembol)
aktif3 = input.bool(defval=false, title="→ Hisse 3 Aktif", group=grpSembol)
hisse4 = input.symbol(defval="", title="Hisse 4", group=grpSembol)
aktif4 = input.bool(defval=false, title="→ Hisse 4 Aktif", group=grpSembol)
hisse5 = input.symbol(defval="", title="Hisse 5", group=grpSembol)
aktif5 = input.bool(defval=false, title="→ Hisse 5 Aktif", group=grpSembol)


isMarketOpen() =>
    time >= timestamp(year, month, dayofmonth, hour(baslangicSaati), minute(baslangicSaati)) and time <= timestamp(year, month, dayofmonth, hour(bitisSaati), minute(bitisSaati))

getSessionEnd() =>
    timestamp(year, month, dayofmonth, hour(bitisSaati), minute(bitisSaati)) - (kapanisBuffer * 60 * 1000)


f_kalanSureHesapla() =>
    if isMarketOpen()
        kalanSaniye = (getSessionEnd() - time) / 1000
        saat = math.floor(kalanSaniye / 3600)
        dakika = math.floor((kalanSaniye % 3600) / 60)
        saniye = math.floor(kalanSaniye % 60)
        str.tostring(saat) + ":" + str.tostring(dakika, "00") + ":" + str.tostring(saniye, "00")
    else
        "Kapalı"


f_signal(hisseFiyat) =>
    BBUpper = ta.sma(hisseFiyat, BBperiod) + ta.stdev(hisseFiyat, BBperiod) * BBdeviations
    BBLower = ta.sma(hisseFiyat, BBperiod) - ta.stdev(hisseFiyat, BBperiod) * BBdeviations
    
    BBSignal = hisseFiyat > BBUpper ? 1 : hisseFiyat < BBLower ? -1 : 0
    var float TrendLine = 0.0
    var int iTrend = 0
    
    if BBSignal == 1 and UseATRfilter
        TrendLine := low - ta.atr(ATRperiod)
        TrendLine := TrendLine < TrendLine[1] ? TrendLine[1] : TrendLine
    else if BBSignal == -1 and UseATRfilter
        TrendLine := high + ta.atr(ATRperiod)
        TrendLine := TrendLine > TrendLine[1] ? TrendLine[1] : TrendLine
    else if BBSignal == 0 and UseATRfilter
        TrendLine := TrendLine[1]
    
    if BBSignal == 1 and not UseATRfilter
        TrendLine := low
        TrendLine := TrendLine < TrendLine[1] ? TrendLine[1] : TrendLine
    else if BBSignal == -1 and not UseATRfilter
        TrendLine := high
        TrendLine := TrendLine > TrendLine[1] ? TrendLine[1] : TrendLine
    else if BBSignal == 0 and not UseATRfilter
        TrendLine := TrendLine[1]
    
    iTrend := TrendLine > TrendLine[1] ? 1 : TrendLine < TrendLine[1] ? -1 : iTrend[1]
    
    alSinyali = iTrend[1] == -1 and iTrend == 1 ? 1 : 0
    satSinyali = iTrend[1] == 1 and iTrend == -1 ? 1 : 0
    
    [alSinyali, satSinyali, TrendLine, iTrend]

// Pozisyon Yönetimi
f_calculateLotSize(hisseFiyat) =>
    giris_tipi == "TL" ? math.round(lot / hisseFiyat) : lot

f_islemYap(hisse, lotMiktari, index, islem_yap, aktif) =>
    var bool pozisyondaMi = false
    var float sonIslemFiyati = 0.0
    var float islemLotu = 0.0
    var string kapanis_nedeni = ""
    var bool akshamKapanis = false
    var float alSinyaliSabah = 0.0
    var float satSinyaliSabah = 0.0
    
    [hisseFiyat, hisseTicker] = request.security(hisse, timeframe.period, [close, syminfo.ticker])
    
    
    sessionEnd = getSessionEnd()
    isSonDakika = time >= sessionEnd
    
    
    if isMarketOpen() and isSonDakika and pozisyondaMi
        [_, satSinyali, _, _] = f_signal(hisseFiyat)
        akshamKapanis := not satSinyali 
    
    
    if isMarketOpen() and barstate.isconfirmed and islem_yap and aktif and hisse != ""
        [alSinyali, satSinyali, TrendLine, iTrend] = f_signal(hisseFiyat)
        
        
        if alSinyali and not pozisyondaMi
            actualLot = f_calculateLotSize(hisseFiyat)
            strategy.entry("Hisse "+str.tostring(index), strategy.long, qty=actualLot)
            alert('{"name": "' + hisseTicker + ' LONG ISLEMDE 💰 ", "symbol": "' + hisseTicker + '", "orderSide": "buy", "orderType": "' + alim_yontemi + '", "price": "' + str.tostring(hisseFiyat) + '", "quantity": "' + str.tostring(actualLot) + '", "timeInForce": "day", "apiKey": "' + api_key + '"}')
            pozisyondaMi := true
            sonIslemFiyati := hisseFiyat
            islemLotu := actualLot
            kapanis_nedeni := ""
        
        
        else if pozisyondaMi and isSonDakika
            strategy.close("Hisse "+str.tostring(index), comment = "⏰ Süre İle Kapama")
            alert('{"name": "' + hisseTicker + ' SÜRE KAPANIŞ 🕒", "symbol": "' + hisseTicker + '", "orderSide": "sell", "orderType": "' + alim_yontemi + '", "price": "' + str.tostring(hisseFiyat) + '", "quantity": "' + str.tostring(islemLotu) + '", "timeInForce": "day", "apiKey": "' + api_key + '"}')
            pozisyondaMi := false
            islemLotu := 0
            kapanis_nedeni := "⏰ Süre"
        
        
        else if pozisyondaMi and satSinyali
            strategy.close("Hisse "+str.tostring(index), comment = "📊 Sinyal İle Kapama")
            alert('{"name": "' + hisseTicker + ' LONG TP1 Bitti 🚀", "symbol": "' + hisseTicker + '", "orderSide": "sell", "orderType": "' + alim_yontemi + '", "price": "' + str.tostring(hisseFiyat) + '", "quantity": "' + str.tostring(islemLotu) + '", "timeInForce": "day", "apiKey": "' + api_key + '"}')
            pozisyondaMi := false
            islemLotu := 0
            kapanis_nedeni := "📊 Sinyal"
    
    
    if not pozisyondaMi and kapanis_nedeni == "⏰ Süre" and not isMarketOpen()[1] and isMarketOpen()
        if akshamKapanis  
            [alSinyaliSabah, satSinyaliSabah, _, _] = f_signal(hisseFiyat)
            
            
            if not hl
                label.new(bar_index, high, text="Sabah Sinyaller: Al=" + str.tostring(alSinyaliSabah) + " Sat=" + str.tostring(satSinyaliSabah), color=color.new(color.blue, 80), textcolor=color.white, style=label.style_label_down)
            
            
            if alSinyaliSabah and not satSinyaliSabah
                actualLot = f_calculateLotSize(hisseFiyat)
                strategy.entry("Hisse "+str.tostring(index), strategy.long, qty=actualLot)
                alert('{"name": "' + hisseTicker + ' TEKRAR AÇILDI 💰 ", "symbol": "' + hisseTicker + '", "orderSide": "buy", "orderType": "' + alim_yontemi + '", "price": "' + str.tostring(hisseFiyat) + '", "quantity": "' + str.tostring(actualLot) + '", "timeInForce": "day", "apiKey": "' + api_key + '"}')
                pozisyondaMi := true
                sonIslemFiyati := hisseFiyat
                islemLotu := actualLot
                kapanis_nedeni := ""
    
    [pozisyondaMi, hisseFiyat, hisseTicker, islemLotu, kapanis_nedeni, akshamKapanis, alSinyaliSabah, satSinyaliSabah]


[poz1, fiyat1, ticker1, lot1, neden1, aksham1, alSinyal1, satSinyal1] = f_islemYap(hisse1, lot, 1, true, aktif1)
[poz2, fiyat2, ticker2, lot2, neden2, aksham2, alSinyal2, satSinyal2] = f_islemYap(hisse2, lot, 2, true, aktif2)
[poz3, fiyat3, ticker3, lot3, neden3, aksham3, alSinyal3, satSinyal3] = f_islemYap(hisse3, lot, 3, true, aktif3)
[poz4, fiyat4, ticker4, lot4, neden4, aksham4, alSinyal4, satSinyal4] = f_islemYap(hisse4, lot, 4, true, aktif4)
[poz5, fiyat5, ticker5, lot5, neden5, aksham5, alSinyal5, satSinyal5] = f_islemYap(hisse5, lot, 5, true, aktif5)


var table debugTable = table.new(position.bottom_right, 8, 6, border_width=1)
table.cell(debugTable, 0, 0, "Hisse", bgcolor=#f0f0f0)
table.cell(debugTable, 1, 0, "Durum", bgcolor=#f0f0f0)
table.cell(debugTable, 2, 0, "Fiyat", bgcolor=#f0f0f0)
table.cell(debugTable, 3, 0, "Lot", bgcolor=#f0f0f0)
table.cell(debugTable, 4, 0, "Seans", bgcolor=#f0f0f0)
table.cell(debugTable, 5, 0, "Kalan Süre", bgcolor=#f0f0f0)
table.cell(debugTable, 6, 0, "Akşam Durum", bgcolor=#f0f0f0)
table.cell(debugTable, 7, 0, "Sabah Durum", bgcolor=#f0f0f0)

addRow(ticker, poz, price, lot, neden, row, aktif, akshamKapanis, alSinyalSabah, satSinyalSabah) =>
    kalanSure = f_kalanSureHesapla()
    bgcolor = aktif ? #f0f0f0 : #e0e0e0
    table.cell(debugTable, 0, row, ticker, bgcolor=bgcolor)
    table.cell(debugTable, 1, row, poz ? "▲ Açık" : "▼ Kapalı " + neden, bgcolor=poz ? color.new(#4CAF50, 70) : color.new(#F44336, 70))
    table.cell(debugTable, 2, row, str.tostring(price, "#.##"), text_color=poz ? #4CAF50 : #F44336)
    table.cell(debugTable, 3, row, str.tostring(lot))
    table.cell(debugTable, 4, row, isMarketOpen() ? "Açık " + str.format_time(baslangicSaati, "HH:mm") + "-" + str.format_time(bitisSaati, "HH:mm") : "Kapalı", bgcolor=isMarketOpen() ? #4CAF50 : #F44336)
    table.cell(debugTable, 5, row, kalanSure, text_color=isMarketOpen() ? #2196F3 : #9E9E9E)
    table.cell(debugTable, 6, row, str.tostring(akshamKapanis ? "Al Şartı ✅" : "Sat Şartı ❌"), bgcolor=akshamKapanis ? color.new(#4CAF50, 70) : color.new(#F44336, 70))
    table.cell(debugTable, 7, row, neden == "⏰ Süre" and akshamKapanis ?  (alSinyalSabah and not satSinyalSabah ? "Al ✅" : satSinyalSabah ? "Sat ❌" : "Bekle 🔄") : "Pasif ⏸️",  bgcolor=neden == "⏰ Süre" and akshamKapanis ?  (alSinyalSabah and not satSinyalSabah ? color.new(#4CAF50, 70) : satSinyalSabah ? color.new(#F44336, 70) : color.new(#2196F3, 70)) : color.new(#9E9E9E, 70))


addRow(ticker1, poz1, fiyat1, lot1, neden1, 1, aktif1, aksham1, alSinyal1, satSinyal1)
addRow(ticker2, poz2, fiyat2, lot2, neden2, 2, aktif2, aksham2, alSinyal2, satSinyal2)
addRow(ticker3, poz3, fiyat3, lot3, neden3, 3, aktif3, aksham3, alSinyal3, satSinyal3)
addRow(ticker4, poz4, fiyat4, lot4, neden4, 4, aktif4, aksham4, alSinyal4, satSinyal4)
addRow(ticker5, poz5, fiyat5, lot5, neden5, 5, aktif5, aksham5, alSinyal5, satSinyal5)
Leave a Comment