Untitled
//@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