Untitled

 avatar
unknown
plain_text
2 months ago
31 kB
4
Indexable
//@version=5
strategy('Kule Dönence Str unLimited1'
         , shorttitle           = 'Kule Dönence Str unLimited1' 
         , overlay              = true) 
        //  , initial_capital      = 10000
        //  , default_qty_type     = strategy.fixed
        //  , default_qty_value    = 500
        //  , pyramiding           = 0
        //  , commission_value     = 0.03
        //  , commission_type      = strategy.commission.percent)

// Date Input Parameters
startDate = input.time(timestamp("2024-08-01"), "Start Date")
endDate = input.time(timestamp("2025-12-31"), "End Date")

// ---------------------------- Theme --------------------------------------- //
// Coldors
red = color.red
green = color.rgb(21, 194, 122)
brightred = color.rgb(158, 43, 35)
brightgreen = color.rgb(21, 194, 122)
cautioncol = color.yellow
gray= color.gray
aqua = color.aqua
orange= color.orange
darkgreen = color.rgb(21, 194, 122)
darkred = color.rgb(165, 57, 66)
white = color.white

// Groups 
grma = "📈 Moving Averages 📈"
grhts = "Trend Seviyeleri"
grt = "DCA"
grll = "🩸 Leverage Liquidations 🩸"
gla= "🔔 Alerts 🔔"

// Constants
dataType = "Custom"
instructions = "Off"
smaS = "Off"
constant = 1>0
rsi=ta.rsi(close,14)


// ------------------------- Trend State ------------------------------------ //
// Code Author: © Koalafied_3
showtrend = true
//   tooltip ="Check this box if you want to see the Bull, Bear, or Chop trend state background according to Hayden.\n(Page 56) 10 Lies That Traders Believe = The RSI is unable to indicate trend direction, because it's only a momentum indicator.")
showbc = input(true, title='Bar Boyama Göster?',group=grhts)
ts1 = 66
ts2 = 37
// ts1 = input.float(defval=66, title=" Bullish RSI  60 to 75", minval=50, maxval=75, step=1, group=grhts)
// ts2 = input.float(defval=37, title=" Bearish RSI  28 to 40", minval=25, maxval=50, step=1, group=grhts)
ts1a = 61
ts2a = 39
// Trend State
var state = 0
if ta.crossover(rsi, ts1)
    state := 1
    state
if ta.crossunder(rsi, ts2) 
    state := 2
    state
state := state

//-----------------3 State RSI Gradient Bar Color on Chart--------------------//
cbullu = brightgreen
cbulld = darkgreen
cbearu = brightred
cbeard = darkred
cbearc = brightgreen
cbullc = brightred 

barcolor(state==1 and rsi>50?cbullu: state==1 and rsi<50?cbulld: state==2 and rsi<50 ?cbearu: state==2 and rsi>50 ?cbeard:color.new(color.from_gradient(rsi, ts2, ts1, cbearu, cbullu),0),title="Chart Bar Color", display = showbc ? display.all : display.none, editable=false)

// RSI 50 Line
obLevelM = 50
src = close
length = 14
ep = 2 * length - 1
auc = ta.ema(math.max(src - src[1], 0), ep)
adc = ta.ema(math.max(src[1] - src, 0), ep)

x7 = (length - 1) * (adc * obLevelM / (100 - obLevelM) - auc)
ub4 = x7 >= 0 ? src + x7 : src + x7 * (100 - obLevelM) / obLevelM
plot(ub4, title='Rsn Mov', color=color.new(ub4>ub4[1]?color.green:ub4<ub4[1]?color.red:color.white, 25), linewidth=3)

// ---------------------------- Trade Setup --------------------------------- //
// Inspired by @ KioseffTrading
lot_size = 1
dcaorstop = "DCA 3"
// Number of Decimals for Labels
pricedecimals= 2
truncateprice(number, pricedecimals) =>
    factor = math.pow(10, pricedecimals)
    int(number * factor) / factor

// Define a bull/bear cross
bullcross= state==1 and state[1]==2
bearcross= state==2 and state[1]==1

// Detect what was last signal (long or short)
long_short = 0
long_last = bullcross and (nz(long_short[1]) == 0 or nz(long_short[1]) == -1)
short_last = bearcross and (nz(long_short[1]) == 0 or nz(long_short[1]) == 1)
long_short := long_last ? 1 : short_last ? -1 : long_short[1]

// Remove first bar for SL/TP (you can't enter a trade at bar close and THEN hit your SL on that same bar)
longBar1 = ta.barssince(long_last)
longBar2 = longBar1 >= 1 ? true : false
shortBar1 = ta.barssince(short_last)
shortBar2 = shortBar1 >= 1 ? true : false

// Wen entry, sir?
bullentry = ta.valuewhen(bullcross, close, 0) 
bearentry = ta.valuewhen(bearcross, close, 0) 
entin= state==1 and long_short==1?bullentry:state==2 and long_short==-1?bearentry:na
// entout=plot(entin, 'Giriş', color=color.new(color.blue, 0), style=plot.style_circles, editable=false)

// Targets
// ATR TP & SL
// ATR hesaplama yöntemi için seçenekler
atr_method = 'hl2'

// ATR kaynağı (srcATR) - Kullanıcının seçimine göre hesaplanır
var float srcATR = na
if atr_method == "close"
    srcATR := close
else if atr_method == "hl2"
    srcATR := (high + low) / 2
else if atr_method == "hlc3"
    srcATR := (high + low + close) / 3

// ATR periyodu
// atrPeriod = 55
// per = atrPeriod
// //ATR çarpanı
// atrMultiplier = 3

atrPeriod = input.int(55, title="ATR Period", minval=1)
atrMultiplier = input.float(3, title="ATR Multiplier", minval=0.1, step=0.1)
per = atrPeriod

// ATR hesaplama
atr_value = ta.atr(per)

// ATR çarpanı ile çarpılmış değer
atr_multiplied = atr_value * atrMultiplier

atr = ta.atr(atrPeriod)
ATRupper=srcATR + atr * atrMultiplier
ATRlower=srcATR - atr * atrMultiplier
ATRupper2=srcATR + atr * (atrMultiplier*0.800)
ATRlower2=srcATR - atr * (atrMultiplier*0.800)
ATRupper3=srcATR + atr * (atrMultiplier*0.763)
ATRlower3=srcATR - atr * (atrMultiplier*0.763)
ATRupper4=srcATR + atr * (atrMultiplier*0.618)
ATRlower4=srcATR - atr * (atrMultiplier*0.618)
ATRupper5=srcATR + atr * (atrMultiplier*0.5)
ATRlower5=srcATR - atr * (atrMultiplier*0.5)
ATRupper6=srcATR + atr * (atrMultiplier*0.382)
ATRlower6=srcATR - atr * (atrMultiplier*0.382)
ATRupper7=srcATR + atr * (atrMultiplier*0.236)
ATRlower7=srcATR - atr * (atrMultiplier*0.236)
ATRupper8=srcATR + atr * (atrMultiplier*0.146)
ATRlower8=srcATR - atr * (atrMultiplier*0.146)
bearse=srcATR + atr * (atrMultiplier*0.146)
bullse=srcATR - atr * (atrMultiplier*0.146)
bearse2=srcATR + atr * (atrMultiplier*0.236)
bullse2=srcATR - atr * (atrMultiplier*0.236)
bearse3=srcATR + atr * (atrMultiplier*0.5)
bullse3=srcATR - atr * (atrMultiplier*0.5)

ATRbulltp1=ta.valuewhen(bullcross,ATRupper,0)
ATRbeartp1=ta.valuewhen(bearcross,ATRlower,0)
ATRbulltp2=ta.valuewhen(bullcross,ATRupper2,0)
ATRbeartp2=ta.valuewhen(bearcross,ATRlower2,0)
ATRbulltp3=ta.valuewhen(bullcross,ATRupper3,0)
ATRbeartp3=ta.valuewhen(bearcross,ATRlower3,0)
ATRbulltp4=ta.valuewhen(bullcross,ATRupper4,0)
ATRbeartp4=ta.valuewhen(bearcross,ATRlower4,0)
ATRbulltp5=ta.valuewhen(bullcross,ATRupper5,0)
ATRbeartp5=ta.valuewhen(bearcross,ATRlower5,0)
ATRbulltp6=ta.valuewhen(bullcross,ATRupper6,0)
ATRbeartp6=ta.valuewhen(bearcross,ATRlower6,0)
ATRbulltp7=ta.valuewhen(bullcross,ATRupper7,0)
ATRbeartp7=ta.valuewhen(bearcross,ATRlower7,0)
ATRbulltp8=ta.valuewhen(bullcross,ATRupper8,0)
ATRbeartp8=ta.valuewhen(bearcross,ATRlower8,0)
vwbearse=ta.valuewhen(bearcross,bearse,0)
vwbullse=ta.valuewhen(bullcross,bullse,0)
vwbearse2=ta.valuewhen(bearcross,bearse2,0)
vwbullse2=ta.valuewhen(bullcross,bullse2,0)
vwbearse3=ta.valuewhen(bearcross,bearse3,0)
vwbullse3=ta.valuewhen(bullcross,bullse3,0)

bgrad = 80
tgrad = 95

exin = state==1 and long_short==1?ATRbulltp1:state==2 and long_short==-1?ATRbeartp1:na
excol = long_short == 1 and close<ATRbulltp1?color.orange: long_short==-1 and close>ATRbeartp1?red:color.yellow
// exout = plot(exin, 'Kar AL', color=color.new(excol, 0), style=plot.style_circles, editable=false)
// fill(entout,exout,exin,long_short==1?bullentry:long_short==-1?bearentry:na, top_color=color.new(long_short==1?darkgreen:long_short==-1?darkred:na,bgrad), bottom_color=color.new(long_short==1?darkgreen:long_short==-1?darkred:na,tgrad))

dca3in=state==1 and long_short==1?vwbullse3:state==2 and long_short==-1?vwbearse3:na
// dca3out=plot(dca3in, "Stop", color=color.new(color.red, 0), style=plot.style_circles, editable=false)
// fill(entout,dca3out,long_short==1?vwbullse3:long_short==-1?vwbearse3:na,long_short==1?bullentry:long_short==-1?bearentry:na, top_color=color.new(gray,85), bottom_color=color.new(gray,tgrad))

// Trade Setup Labels
// Profit
bullt1profit=(((ATRbulltp1/bullentry)- 1)*100)
beart1profit=((1-(bearentry/ATRbeartp1))*-100)
bullt2profit=(((ATRbulltp2/bullentry)- 1)*100)
beart2profit=((1-(bearentry/ATRbeartp2))*-100)
bullt3profit=(((ATRbulltp3/bullentry)- 1)*100)
beart3profit=((1-(bearentry/ATRbeartp3))*-100)
bullt4profit=(((ATRbulltp4/bullentry)- 1)*100)
beart4profit=((1-(bearentry/ATRbeartp4))*-100)
bullt5profit=(((ATRbulltp5/bullentry)- 1)*100)
beart5profit=((1-(bearentry/ATRbeartp5))*-100)
bullt6profit=(((ATRbulltp6/bullentry)- 1)*100)
beart6profit=((1-(bearentry/ATRbeartp6))*-100)
bullt7profit=(((ATRbulltp7/bullentry)- 1)*100)
beart7profit=((1-(bearentry/ATRbeartp7))*-100)
bullt8profit=(((ATRbulltp8/bullentry)- 1)*100)
beart8profit=((1-(bearentry/ATRbeartp8))*-100)

// @ Capissimo
bidask = close 

tbase = (time - time[1]) / 1000
tcurr = (timenow - time_close[1]) / 1000
barlife = tcurr / tbase

var float start_long_trade = bidask
var float long_trades = 0.
var float start_short_trade = bidask
var float short_trades = 0.
var int wins = 0
var int trade_count = 0

longtphit = ta.crossover(hl2, ATRbulltp1) and longBar2
longstophit = ta.crossunder(low, vwbullse3) and dcaorstop =="Stop" and longBar2
shorttphit = ta.crossunder(low, ATRbeartp1) and shortBar2
shortstophit = ta.crossover(high, vwbearse3) and dcaorstop =="Stop" and shortBar2

if bullcross //enter bull
    start_long_trade := bidask
    start_long_trade
if bearcross or longtphit or (dcaorstop=="Stop"?longstophit:na)//exit bull
    ldiff = bidask - start_long_trade // long profit in dollars
    wins := ldiff > 0 ? 1 : 0
    long_trades := ldiff * lot_size
    trade_count := 1
    trade_count
if bearcross //enter bear
    start_short_trade := bidask
    start_short_trade
if bullcross or shorttphit or (dcaorstop=="Stop"?shortstophit:na)//exitbear
    sdiff = start_short_trade - bidask // short profit in dollars
    wins := sdiff > 0 ? 1 : 0
    short_trades := sdiff * lot_size
    trade_count := 1
    trade_count

bullcprofit=((bidask-start_long_trade)/start_long_trade)
bearcprofit=((start_short_trade-bidask)/start_short_trade)

cumbull = ta.cum(long_trades)
cumbear = ta.cum(short_trades)
cumpbull = ta.cum(bullcprofit)
cumpbear = ta.cum(bearcprofit)
cumreturn = ta.cum(long_trades) + ta.cum(short_trades) // sum of both short profit and long profit in $
cumpreturn = ta.cum(bullcprofit) + ta.cum(bearcprofit) // sum of both short profit and long profit in %
totaltrades = ta.cum(trade_count) //# trades
totalwins = ta.cum(wins)
totallosses = totaltrades - totalwins == 0 ? 1 : totaltrades - totalwins
avgreturn = cumreturn / totaltrades
avgpreturn = cumpreturn / totaltrades
avgbulltp = bullentry*(1+ta.valuewhen(bullcross,avgpreturn,0)) 
avgbeartp = bearentry*(1-ta.valuewhen(bearcross,avgpreturn,0))
avgtp = long_short==1?avgbulltp:long_short==-1?avgbeartp:na
avgtpcol = long_short == 1 and avgtp>bullentry?green:long_short == 1 and avgtp<bullentry?red: long_short==-1 and avgtp<bearentry?red: long_short==-1 and avgtp>bearentry?red:na
// plot(avgtp, "Avg TP", color=color.new(avgtpcol,50), style=plot.style_circles)
info =  "\n\n  📈 Backtest 📈" 
  + '\nKar:  ' + str.tostring(cumbull, '#.##') +'\nZarar:  ' + str.tostring(cumbear, '#.##') + '\nTotal Kar:  ' + str.tostring(cumreturn, '#.##')  + '\nAverage Total Kar:  ' + str.tostring(avgreturn, '#.##')
  +  '\nKarlı Yüzde: ' + str.tostring(cumpbull, '#.## %') +'\nZararlı Yüzde: ' + str.tostring(cumpbear, '#.## %')  + '\nTotal Yüzde: ' + str.tostring(cumpreturn, '#.## %') + '\nAverage Total Yüzde: ' + str.tostring(avgpreturn, '#.## %') 
  + '\nBaşarılı: ' + str.tostring(totalwins, '#') + '\nBaşarısız: ' + str.tostring(totallosses, '#') + '\nTotal İşem Adedi: ' + str.tostring(totaltrades, '#') + '\nBaşarılı/İşlem: ' + str.tostring(totalwins / totaltrades, '#.## %')

// Crossover profit
bullxprofit = (((close - bullentry)/bullentry)*100)
bearxprofit = (((close - bearentry)/bearentry)*-100)
curbullprof = close-bullentry
curbearprof = bearentry-close
tradelabsize = size.normal
tradetime = ta.barssince(bullcross or bearcross)

// Plot Labels
bullentrytt = " Entry: " + (long_short==1?" L @ ":long_short==-1?"  S @ ":na) + str.tostring(truncateprice(bullentry, pricedecimals)) 

bearentrytt = " Entry: " + (long_short==1?" L @ ":long_short==-1?"  S @ ":na) + str.tostring(truncateprice(bearentry, pricedecimals)) 


var label signal = na
if bullcross
    label.new(bar_index,low,yloc=yloc.belowbar,text='\L',textcolor=color.green, style=label.style_arrowup, tooltip=bullentrytt, size = size.large)
    alertsyntax_golong= " L \n" + bullentrytt 
if bearcross
    label.new(bar_index,high,yloc=yloc.abovebar,text='\S',textcolor=color.red, style=label.style_arrowdown, tooltip=bearentrytt, size = size.large)
    alertsyntax_goshort= " S \n" + bearentrytt 

// var label dca3 = na
// if state==1 and long_short==1 and barstate.islast
//     dca3 := label.new(bar_index, y=vwbullse3, text=str.tostring(truncateprice(vwbullse3, pricedecimals)), size=tradelabsize, style=label.style_label_left, color=color.new(color.white,100), textcolor=color.new(color.gray, 0), tooltip="📍: " + str.tostring(truncateprice(vwbullse3, pricedecimals)) + "\n-" + str.tostring(truncateprice(atrMultiplier*0.382, pricedecimals)) + "x " + "ATR " + str.tostring(atrPeriod)) //, tooltip=str.tostring(truncateprice(bullt8profit, pricedecimals)) + " %")
//     label.delete(dca3[1])
// if state==2 and long_short==-1 and barstate.islast
//     dca3 := label.new(bar_index, y=vwbearse3, text=str.tostring(truncateprice(vwbearse3, pricedecimals)), size=tradelabsize, style=label.style_label_left, color=color.new(color.white,100), textcolor=color.new(color.gray, 0), tooltip="📍: " + str.tostring(truncateprice(vwbearse3, pricedecimals)) + "\n-" + str.tostring(truncateprice(atrMultiplier*0.382, pricedecimals)) + "x " + "ATR " + str.tostring(atrPeriod)) //, tooltip=str.tostring(truncateprice(beart8profit, pricedecimals)) + " %")
//     label.delete(dca3[1])

//------------Reset long_short if SL/TP hit during bar------------------------//
tpreset = true 
longclose = longtphit or longstophit 
shortclose = shorttphit or shortstophit

bullstopp = ((vwbullse3 - bullentry)/bullentry)*100
bearstopp = ((bearentry - vwbearse3)/bearentry)*100
bulltpp = ((ATRbulltp1 - bullentry)/bullentry)*100
beartpp = ((bearentry - ATRbeartp1)/bearentry)*100


long_short := (long_short == 1 or long_short == 0) and (longclose) and tpreset ? 0 : (long_short == -1 or long_short == 0) and (shortclose) and tpreset ? 0 : long_short

bgcol2 = state==1 and state[1]==2 ?color.green : state==2 and state[1]==1 ? color.red :na
// Candle Color Logic
var color candle_col = na
if bullcross
    candle_col := brightgreen
if bearcross
    candle_col := brightred

// Plot Candles
plotcandle(open, high, low, close, title = 'Title', color = candle_col, wickcolor = candle_col, bordercolor = candle_col)

// Plot Trend State
barcolor(state==1 and rsi>50?brightgreen: state==1 and rsi<50?darkgreen: state==2 and rsi<50 ?brightred: state==2 and rsi>50 ?darkred:color.new(color.from_gradient(rsi, ts2, ts1, brightred, brightgreen),0),title="Chart Bar Color", display = showbc ? display.all : display.none, editable=false)

// // Alarmları etkinleştirme ayarları
// enableKARalarm = input.bool(true, title="KAR AL Alarm", group="Alarm Ayarları")
// enableTrendAlarm = input.bool(true, title="Ana Trend Alarm", group="Alarm Ayarları")

// // trend Alarm Koşulları
// TrendAlarmal= state==1 and state[1]==2
// TrendAlarmsat= state==2 and state[1]==1

// if enableTrendAlarm
//     if (TrendAlarmal)
//         alert("TRENDE GİRİŞ!", alert.freq_once_per_bar_close)
//     if TrendAlarmsat
//         alert('TREND STOP!', alert.freq_once_per_bar_close)

// TPal = ta.crossover(high, ATRbulltp1) and longBar2

// if enableKARalarm
//     if (TPal)
//         alert("Kar AL!", alert.freq_once_per_bar_close)


// Günlük değişim hesaplama değişkeni kaldırıldı

// Bullcross ile tekrar giriş (ilk giriş olmayan durumlarda)
// NOT: İlk bullcross dışındaki bullcross sinyallerinde işleme girmek için
// waitingForPrice = true ve cycleActive = false olmalı


// Ana parametreler
bullCrossTutar = input.float(title="Bullcross Giriş Tutarı (TL)", defval=15000, minval=1)
azalmaCarpani = input.float(title="Diğer Girişlerde Azalma Oranı (%)", defval=10, minval=0, maxval=100)

var float islemLotu = na      
var float sonGirisLotu = na   
var int pozisyonDurumu = 0    
var bool ilkGiris = true      // İlk giriş kontrolü için değişken
var float digerGirisTutari = bullCrossTutar  // Diğer girişler için tutar, başlangıçta bull tutarı

// Lot hesaplama fonksiyonu
lotHesapla(tutar) =>
    math.floor(tutar / close)

APIKEY = input.string(title="API Key", defval="")
TOKEN = input.string(title="TOKEN", defval="")

// Mevcut Barın Zamanı
currentTime = time

// Strateji sadece belirtilen tarih aralığında çalışacak
isInDateRange = (currentTime >= startDate and currentTime <= endDate)

// Parametreler
// reentryBars = 4
// atrMultLow =0.8
// atrMultMed = 2
// atrMultHigh = 2.9
// minProfitTarget = 0.7
// maxProfitTarget = 3

reentryBars = input.int(4, title="Reentry Bars", minval=1)
atrMultLow = input.float(0.8, title="ATR Multiplier Low", minval=0.1, step=0.1)
atrMultMed = input.float(2.0, title="ATR Multiplier Medium", minval=0.1, step=0.1)
atrMultHigh = input.float(2.9, title="ATR Multiplier High", minval=0.1, step=0.1)
minProfitTarget = input.float(0.7, title="Minimum Profit Target", minval=0.1, step=0.1)
maxProfitTarget = input.float(3.0, title="Maximum Profit Target", minval=0.1, step=0.1)

// ATR hesaplama
atrPercent = (atr / hlc3) * 100

// VWMA Hesaplama (Sadece VWMA tipi kullanılacak)
slowPeriod = 20  // VWMA için varsayılan yavaş periyot
fastPeriod = 10  // VWMA için varsayılan hızlı periyot

// VWMA hesaplamaları
slowMA = ta.vwma(close, slowPeriod)
fastMA = ta.vwma(close, fastPeriod)

// Volatilite Hesaplama
maSpread = math.abs((fastMA - slowMA) / slowMA * 100)

// Değişkenler
var bool positionActive = false    
var bool tpHit = false            
var bool reentry = false          
var bool cycleActive = false      
var float longtphit_price = na    
var float cycleEntry_price = na   
var float lastProfit_price = na   
var float currentProfitTarget = na 
var int bars_since_tp = na        
var int above_longtphit_count = 0 
var int cycleCount = 0            
var bool waitingForPrice = false 

// Alarm değişkenleri
var bool longEntryAlert = na
var bool tpExitAlert = na
var bool reentryAlert = na
var bool bearExitAlert = na
var bool cycleTpAlert = na
var bool waitingAlert = na

// Yeni değişkenler
var bool lastSignalBear = false
var float entryPrice = na
var float currentProfit = na
var string profitText = na
var line currentEntryLine = na
var int entryBarIndex = na

// Take profit seviyelerini tanımla
tp1_level = input.float(1.5, title="Take Profit 1 (%)", minval=0.1, step=0.1)
tp2_level = input.float(2.5, title="Take Profit 2 (%)", minval=0.1, step=0.1)
tp3_level = input.float(3.5, title="Take Profit 3 (%)", minval=0.1, step=0.1)

// 60 dakikalık EMA için input
h1TimeFrame = input.string("60", "EMA Periyodu (Dakika)", options=["60"])

// EMA hesaplamaları
h1Ema34 = request.security(syminfo.tickerid, h1TimeFrame, ta.ema(close, 14))

showH1Ema = input.bool(true, "60dk EMA 34 Göster")


emaWidth = input.int(2, "EMA Çizgi Kalınlığı", minval=1, maxval=4)

plot(showH1Ema ? h1Ema34 : na, title="60dk EMA 34", color=red, linewidth=emaWidth)

// Değişkenler

var float tp1_price = na
var float tp2_price = na
var float tp3_price = na
var bool tp1_hit = false
var bool tp2_hit = false






h1EmaColor = input.color(color.yellow, "60dk EMA 34 Renk")



plot(showH1Ema ? h1Ema34 : na, title="60dk EMA 34", color=red, linewidth=emaWidth)




// Sinyal durumlarını güncelle
if bearcross
    lastSignalBear := true
if bullcross
    lastSignalBear := false

// Long pozisyon girişi
if (isInDateRange and bullcross and close > h1Ema34)
    strategy.entry("Long", strategy.long, qty=sonGirisLotu)
    alert('{"name": "🚀' + "Giriş" + '", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "mktbest", "price": "' + str.tostring(close) + '", "quantity": "' + str.tostring(sonGirisLotu) + '", "timeInForce": "day", "apiKey": "' + APIKEY + '", "token": "' + TOKEN + '"}', alert.freq_once_per_bar_close)
    
    entryPrice := close
    tp1_price := close * (1 + tp1_level / 100)
    tp2_price := close * (1 + tp2_level / 100)
    tp3_price := close * (1 + tp3_level / 100)
    positionActive := true
    tp1_hit := false
    tp2_hit := false
    entryBarIndex := bar_index
    
    // Giriş çizgisi ve etiketi
    currentEntryLine := line.new(bar_index, close, bar_index + 1, close, color=color.green, width=2)
    label.new(x=bar_index, y=close, text="Giriş: " + str.tostring(close), style=label.style_label_right, xloc=xloc.bar_index, size=size.normal, color=color.new(color.green, 0), textcolor=color.white)

// Take Profit 1
if (isInDateRange and positionActive and not tp1_hit and high >= tp1_price)
    strategy.exit("TP1", "Long", qty=math.round(sonGirisLotu * 0.33), limit=tp1_price)
    alert('{"name": "💸' + "TP1" + '", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "mktbest", "price": "' + str.tostring(tp1_price) + '", "quantity": "' + str.tostring(sonGirisLotu * 0.33) + '", "timeInForce": "day", "apiKey": "' + APIKEY + '", "token": "' + TOKEN + '"}', alert.freq_once_per_bar_close)
    tp1_hit := true
    
    // TP1 çizgisi ve etiketi
    line.new(bar_index, tp1_price, entryBarIndex, tp1_price, color=color.red, width=2)
    label.new(x=bar_index, y=tp1_price, text="TP1: " + str.tostring(tp1_price) + " (%" + str.tostring(tp1_level) + ")", style=label.style_label_left, xloc=xloc.bar_index, size=size.normal, color=color.new(color.red, 0), textcolor=color.white)

// Take Profit 2
if (isInDateRange and positionActive and tp1_hit and not tp2_hit and high >= tp2_price)
    strategy.exit("TP2", "Long", qty=math.round(sonGirisLotu * 0.33), limit=tp2_price)
    alert('{"name": "💸' + "TP2" + '", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "mktbest", "price": "' + str.tostring(tp2_price) + '", "quantity": "' + str.tostring(sonGirisLotu * 0.33) + '", "timeInForce": "day", "apiKey": "' + APIKEY + '", "token": "' + TOKEN + '"}', alert.freq_once_per_bar_close)
    tp2_hit := true
    
    // TP2 çizgisi ve etiketi
    line.new(bar_index, tp2_price, entryBarIndex, tp2_price, color=color.red, width=2)
    label.new(x=bar_index, y=tp2_price, text="TP2: " + str.tostring(tp2_price) + " (%" + str.tostring(tp2_level) + ")", style=label.style_label_left, xloc=xloc.bar_index, size=size.normal, color=color.new(color.red, 0), textcolor=color.white)

// Take Profit 3
if (isInDateRange and positionActive and tp2_hit and high >= tp3_price)
    strategy.exit("TP3", "Long", qty=math.round(sonGirisLotu * 0.34), limit=tp3_price)
    alert('{"name": "💸' + "TP3" + '", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "mktbest", "price": "' + str.tostring(tp3_price) + '", "quantity": "' + str.tostring(sonGirisLotu * 0.34) + '", "timeInForce": "day", "apiKey": "' + APIKEY + '", "token": "' + TOKEN + '"}', alert.freq_once_per_bar_close)
    positionActive := false
    
    // TP3 çizgisi ve etiketi
    line.new(bar_index, tp3_price, entryBarIndex, tp3_price, color=color.red, width=2)
    label.new(x=bar_index, y=tp3_price, text="TP3: " + str.tostring(tp3_price) + " (%" + str.tostring(tp3_level) + ")", style=label.style_label_left, xloc=xloc.bar_index, size=size.normal, color=color.new(color.red, 0), textcolor=color.white)

// Bearcross ile çıkış
if (isInDateRange and bearcross and positionActive)
    strategy.close("Long")
    alert('{"name": "💸' + "Son Çıkış" + '", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "mktbest", "price": "' + str.tostring(close) + '", "quantity": "' + str.tostring(sonGirisLotu * (tp2_hit ? 0.34 : tp1_hit ? 0.67 : 1.0)) + '", "timeInForce": "day", "apiKey": "' + APIKEY + '", "token": "' + TOKEN + '"}', alert.freq_once_per_bar_close)
    positionActive := false
    
    // Çıkış çizgisi ve etiketi
    line.set_x2(currentEntryLine, bar_index)
    line.new(bar_index, close, entryBarIndex, close, color=color.red, width=2)
    label.new(x=bar_index, y=close, text="Son Çıkış: " + str.tostring(close), style=label.style_label_left, xloc=xloc.bar_index, size=size.normal, color=color.new(color.red, 0), textcolor=color.white)

// Her barda aktif pozisyon için çizgiyi uzat
if positionActive and not na(currentEntryLine)
    line.set_x2(currentEntryLine, bar_index + 1)
// Sabit bir mesaj içeren alertcondition



// // Plot volatilite göstergeleri
// plotchar(currentProfitTarget, "Kar Hedefi %", "•", location.top, color.blue, size=size.tiny)
// plotchar(maSpread, "Volatilite", "•", location.top, color.purple, size=size.tiny)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// // LONG pozisyonları için giriş ve çıkış koşulları
// if (bullcross)
//     strategy.entry("Long", strategy.long)

// if (bearcross)
//     strategy.close("Long")

// SHORT pozisyonlarını devre dışı bırakma
// if (bearcross)
//     strategy.entry("Short", strategy.short)

// if (shorttphit or shortstophit)
//     strategy.close("Short")


// Kullanıcı Ayarı - Tabloyu Göster/Gizle
show_table = input.bool(defval=true, title="Tabloyu Göster")

// Değişken tanımlamaları
var float peakEquity = na
var float maxDrawdownValue = 0.0
var float maxDrawdownPercent = 0.0
var float firstTradePrice = na
var table tablePerformance = table.new(position=position.bottom_left, columns=2, rows=10, border_color=color.gray, border_width=2, bgcolor=color.rgb(0, 0, 0), frame_color=color.rgb(71, 71, 71), frame_width=1)

// 📌 Metrikler Hesaplamaları
totalTrades = strategy.closedtrades
openTrades = strategy.opentrades
closedTrades = totalTrades - openTrades
winTrades = strategy.wintrades
loseTrades = strategy.losstrades

netProfit = strategy.netprofit
initialCapital = strategy.initial_capital
netProfitPercent = (netProfit / initialCapital) * 100

profitFactor = strategy.grossloss == 0 ? na : math.abs(strategy.grossprofit / strategy.grossloss)
percentProfitable = totalTrades == 0 ? na : (winTrades / totalTrades) * 100

// Drawdown hesaplamaları
peakEquity := na(peakEquity) ? strategy.equity : math.max(peakEquity, strategy.equity)
drawdown = peakEquity - strategy.equity

if drawdown > maxDrawdownValue
    maxDrawdownValue := drawdown
    maxDrawdownPercent := (drawdown / peakEquity) * 100

// Buy & Hold hesaplamaları
if na(firstTradePrice) and strategy.position_size != 0
    firstTradePrice := close

buyHoldReturnPercent = na(firstTradePrice) ? na : ((close - firstTradePrice) / firstTradePrice) * 100
buyHoldReturnAmount = na(firstTradePrice) ? na : ((close / firstTradePrice) * initialCapital) - initialCapital

// Eğer yeni bir maksimum kayıp oluşursa güncelle
if drawdown > maxDrawdownValue
    maxDrawdownValue := drawdown
    maxDrawdownPercent := (maxDrawdownValue / peakEquity) * 100  // Yüzde olarak hesapla

// 🔹 **Buy & Hold Getirisi (Tutar ve Yüzde)**
if na(firstTradePrice) and strategy.position_size != 0
    firstTradePrice := close  // İlk işlem anındaki kapanış fiyatını al

 
// Tabloya Ekleme
if (bar_index % 5 == 0) and show_table
    // Strateji İsmi
    table.cell(tablePerformance, 0, 0, "⚙️ STRATEJİ: Kule Dönence", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    
    // Net Kâr + Yüzdesi
    table.cell(tablePerformance, 0, 1, "NET KAZANÇ", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 1, str.tostring(netProfit, "#.##") + " TRY (" + str.tostring(netProfitPercent, "#.##") + "%)", bgcolor=netProfit > 0 ? color.rgb(0, 150, 0) : color.rgb(150, 0, 0), text_color=color.white)

    // Maksimum Kayıp + Yüzdesi
    table.cell(tablePerformance, 0, 2, "MAKS. KAYIP", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 2, str.tostring(maxDrawdownValue, "#.##") + " TRY (" + str.tostring(maxDrawdownPercent, "#.##") + "%)", bgcolor=color.rgb(150, 0, 0), text_color=color.white)

    // Karlılık Oranı
    table.cell(tablePerformance, 0, 3, "KARLI %", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 3, str.tostring(percentProfitable, "#.##") + "%", 
              bgcolor=color.rgb(0, 0, 150), text_color=color.white)

    // Al Tut
    table.cell(tablePerformance, 0, 4, "AL TUT", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 4, str.tostring(buyHoldReturnAmount, "#.##") + " TRY (" + str.tostring(buyHoldReturnPercent, "#.##") + "%)",  bgcolor=buyHoldReturnAmount > 0 ? color.rgb(0, 150, 0) : color.rgb(150, 0, 0), text_color=color.white)

    // Kazanç Katsayısı
    table.cell(tablePerformance, 0, 5, "KAZANÇ KTS.", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 5, str.tostring(profitFactor, "#.##"), bgcolor=color.rgb(0, 0, 150), text_color=color.white)

    // Açık Pozisyonlar
    table.cell(tablePerformance, 0, 6, "AÇIK PZS.", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 6, str.tostring(openTrades), bgcolor=color.rgb(0, 0, 150), text_color=color.white)

    // Kapanmış Pozisyonlar
    table.cell(tablePerformance, 0, 7, "KAPANMIŞ PZS.", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 7, str.tostring(closedTrades), bgcolor=color.rgb(0, 0, 150), text_color=color.white)

    // Kazançlı Pozisyonlar
    table.cell(tablePerformance, 0, 8, "KARLI İŞL.", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 8, str.tostring(winTrades), bgcolor=color.rgb(0, 150, 0), text_color=color.white)

    // Kayıplı Pozisyonlar
    table.cell(tablePerformance, 0, 9, "ZARARLI İŞL.", bgcolor=color.rgb(27, 27, 27), text_color=color.white)
    table.cell(tablePerformance, 1, 9, str.tostring(loseTrades), bgcolor=color.rgb(150, 0, 0), text_color=color.white)

//@strategy_alert_message {{strategy.order.alert_message}}
Editor is loading...
Leave a Comment