Untitled
unknown
plain_text
10 months ago
178 kB
10
Indexable
//@version=5
//@strategy_alert_message {{strategy.order.alert_message}}
import TradingView/Strategy/3
strategy('✅'
, shorttitle = '✅'
, overlay = true
, calc_on_order_fills = false
, commission_value = 0.01
, initial_capital = 100000
, default_qty_value = 1
, default_qty_type = strategy.percent_of_equity
, slippage = 10
, use_bar_magnifier = false
, fill_orders_on_standard_ohlc = true
, max_lines_count = 500
, max_labels_count = 500
, pyramiding = 1000
, calc_on_every_tick = true
, close_entries_rule = "ANY")
YONTEM2r = input.string("", title="Strateji Adınızı Buraya Yazabilirsiniz.", group="💻 ÖNEMLİ")
var bool[] gridShowBuyOrder = array.new_bool()
var bool[] gridShowSellOrder = array.new_bool()
var bool activate_ranges = true
var int start = 0
var int finish = 0
var bool basla = false
var bool bitir = false
if activate_ranges
start := input.time(title = '🕐 Başlangıç Tarihi ve Saati', defval = timestamp('21 January 2025'), group='/---GRİD BAŞLANGIÇ AYARLARI---/')
finish := input.time(title = '🕑 Bitiş Tarihi ve Saati',defval = timestamp('31 August 2025'), group='/---GRİD BAŞLANGIÇ AYARLARI---/')
close_at_end_time = input.bool(defval = false, title = "⚠️ Bitiş tarihinde Tüm Pozisyonlar Kapatılsın mı ?", group='/---GRİD BAŞLANGIÇ AYARLARI---/')
apikey = input.string(defval="", title="✉️ ApiKey Gir", group = '///////////---ARACI KURUM AYARI---///////////')
token = input.string(defval="", title="💻 Token Bilgilerini Gir ", group = '///////////---ARACI KURUM AYARI---///////////')
alim_yontemi = input.string(title="Alım Yöntemi", defval="mktbest",options=["mktbest", "lmt"],tooltip="İşlem açılış yöntemini seçin", group="⚡️ STRATEJİ EMİR TİPİ SEÇİM AYARLARI")
tabloGoster = input.bool(false, "📌 İşlem Tablosunu Göster/Gizle LİMİT", group='/////////////////---TABLO AYARLARI---/////////////////')
tabloGoster1 = input.bool(false, "📌 Takip Tablosunu Göster/Gizle LİMİT", group='/////////////////---TABLO AYARLARI---/////////////////')
var int userGridCount = input.int(title="📌 Alt Grid Emir Sayısı", defval=1, minval=1, maxval=3, tooltip="Kaç alt grid seviyesine AL emri gönderilecek (1-3 arası)", group='/////////////////---LİMİT YÖNTEM AYARLARI---/////////////////')
var int userUpperGridCount = input.int(title="📌 1.Grup Üst Grid Emir Sayısı", defval=1, minval=1, maxval=10, tooltip="Kaç üst grid seviyesine SAT emri gönderilecek (1-10 arası)", group='/////////////////---LİMİT YÖNTEM AYARLARI---/////////////////')
var int userUpperGridCount10 = input.int(title="📌 2.Grup Üst Grid Emir Sayısı", defval=0, minval=0, maxval=10, tooltip="Kaç üst grid seviyesine SAT emri gönderilecek (1-10 arası)", group='/////////////////---LİMİT YÖNTEM AYARLARI---/////////////////')
[btcTime] = request.security(syminfo.tickerid, "1", [time], lookahead=barmerge.lookahead_on)
var firstFinish = input.time(title='🕑 İlk Sat Emirlerinin Gönderileceği Tarih', defval=timestamp('2025-02-05 10:01:00'), group='--ZAMAN AYARLARI--')
var firstFinish99 = input.time(title='🕑 İlk Al Emirlerinin Gönderileceği Tarih', defval=timestamp('2025-02-05 10:01:00'), group='--ZAMAN AYARLARI--')
var secondFinish = input.time(title='🕑 1.Toplu Sat Emirlerinin Gönderileceği Tarih', defval=timestamp('2025-02-05 10:05:00'), group='--ZAMAN AYARLARI--')
var secondFinish10 = input.time(title='🕑 2.Toplu Sat-1 Emirlerinin Gönderileceği Tarih', defval=timestamp('2025-02-05 10:09:00'), group='--ZAMAN AYARLARI--')
var secondFinish60 = input.time(title='🕑 2.Toplu Sat-2 Emirlerinin Gönderileceği Tarih', defval=timestamp('2025-02-05 10:09:00'), group='--ZAMAN AYARLARI--')
var firstFinish10 = input.time(title='🕑 Giriş Yapılacak Tarih', defval=timestamp('2025-02-05 10:00:00'), group='--ZAMAN AYARLARI--')
isOrderTime() =>
btcHour = hour(btcTime)
btcMinute = minute(btcTime)
targetHour = hour(firstFinish)
targetMinute = minute(firstFinish)
btcHour == targetHour and btcMinute == targetMinute
isOrderTime1() =>
btcHour = hour(btcTime)
btcMinute = minute(btcTime)
targetHour = hour(secondFinish)
targetMinute = minute(secondFinish)
btcHour == targetHour and btcMinute == targetMinute
isOrderTime2() =>
btcHour = hour(btcTime)
btcMinute = minute(btcTime)
targetHour = hour(secondFinish10)
targetMinute = minute(secondFinish10)
btcHour == targetHour and btcMinute == targetMinute
isOrderTime60() =>
btcHour = hour(btcTime)
btcMinute = minute(btcTime)
targetHour = hour(secondFinish60)
targetMinute = minute(secondFinish60)
btcHour == targetHour and btcMinute == targetMinute
isOrderTime80() =>
btcHour = hour(btcTime)
btcMinute = minute(btcTime)
targetHour = hour(firstFinish99)
targetMinute = minute(firstFinish99)
btcHour == targetHour and btcMinute == targetMinute
isEntryTime() =>
btcHour = hour(btcTime)
btcMinute = minute(btcTime)
targetHour = hour(firstFinish10)
targetMinute = minute(firstFinish10)
btcHour == targetHour and btcMinute == targetMinute
var MAX_ROWS = input.int(25, "Tablo Satır Sayısı",
minval=5, maxval=50,
tooltip="Tabloda gösterilecek maksimum satır sayısını belirler (5-50 arası)", group='/////////////////---LİMİT YÖNTEM AYARLARI---/////////////////')
report_aktif_pasif = input.bool(false, title="✓ Aktif/Pasif Bilgisi Al", group='/---MKTBEST RAPOR AYARLARI---/')
report_detayli = input.bool(false, title="✓ Detaylı İşlem Bilgisi Al", group='/---MKTBEST RAPOR AYARLARI---/')
report_islem = input.bool(true, title="✓ Açık İşlem Bilgilerini Detaylandır", group='/---MKTBEST RAPOR AYARLARI---/')
historical_days = input.int(title="📊 Grid Fiyat Simgelerini Ayarla", defval=3, minval=1, maxval=365, group="LABEL AYARI")
var float longGridInterval = 0.0
var float shortGridInterval = 0.0
var float grid_aralik = 0.0
var float son_tetiklenen_fiyat = na
showTable = input.bool(false, title="💻 Pc İçin Tabloyu Açar Kapatır MKTBEST", group='/////////////////---TABLO AYARLARI---/////////////////')
showTable99 = input.bool(false, title="📲 Mobil İçin Tabloyu Açar Kapatır MKTBEST", group='/////////////////---TABLO AYARLARI---/////////////////')
komisyon = input.float(title="💰 İşlem Komisyon %", defval=0.01, minval=0.0, step=0.001, tooltip="Alış ve satış işlemleri için uygulanacak komisyon oranı" , group='/////////////////---SİSTEM AYARLARI---/////////////////')
calcCommission(float quantity, float price) =>
float commission = quantity * price * (komisyon/100 )
commission
getTotalCommission() =>
float total = 0.0
if strategy.position_size != 0
total += calcCommission(math.abs(strategy.position_size), close)
if strategy.closedtrades > 0
for i = 0 to strategy.closedtrades - 1
entry_comm = calcCommission(math.abs(strategy.closedtrades.size(i)), strategy.closedtrades.entry_price(i))
exit_comm = calcCommission(math.abs(strategy.closedtrades.size(i)), strategy.closedtrades.exit_price(i))
total += entry_comm + exit_comm
total
YONTEM2 = ""
string alarm_ismi1 = "Long🔺"
string alarm_ismi2 = "Long🔻"
string alarm_ismi3 = "STOP OLDU"
string alarm_ismi4 = "KAR ALINDI"
string alarm_ismi5 = "Short🔺"
string alarm_ismi6 = "Short🔻"
string alarm_ismi7 = "Zaman Doldu Long İşlemler"
string alarm_ismi8 = "Zaman Doldu Yatay İşlemler"
string alarm_ismi9 = "Zaman Doldu Short İşlemler"
var float longEntryTime = na
var float shortEntryTime = na
var float pnl = 0.0
var bool islem_yapilabilir = true
var bool hedefe_ulasildi = false
var int bekleyenEmirler = 0
if time >= start and time <= finish
pnl := strategy.netprofit
enable_profit_loss_close = input.bool(defval = false, title = "Kar/Zarar Seviyesinde Kapatmayı Etkinleştir", group = '///////////---MKTBEST KAR/ZARAR AYARLARI---///////////')
profit_target = input.float(defval = 5000, title = "Kar Hedefi", group = '///////////---MKTBEST KAR/ZARAR AYARLARI---///////////')
loss_limit = input.float(defval = -1500, title = "Zarar Limiti", group = '///////////---MKTBEST KAR/ZARAR AYARLARI---///////////')
s = input.session(title='🕐 Tetik İşlem Saati', defval='1000-1800', group = '///////////---MKTBEST BAŞLAMA AYARI---///////////')
startHour = 10
endHour = 17
endMinute = 58
currentHour = hour(time)
currentMinute = minute(time)
isTradingAllowed = (currentHour > startHour or (currentHour == startHour and currentMinute >= 0)) and (currentHour < endHour or (currentHour == endHour and currentMinute <= endMinute))
window() =>
time >= start and time <= finish ? true : false
truncate_to_symbol_decimals(value) =>
decimals = math.ceil(-math.log10(syminfo.mintick))
multiplier = math.pow(10, decimals)
truncatedValue = math.floor(value * multiplier) / multiplier
truncatedValue
symbol_min_move() =>
min_move_decimals = math.ceil(-math.log10(syminfo.mintick))
min_move_decimals
symbol_decimal_str(number) =>
result = ""
for i=0 to number-1
result += "0"
result
var float investment = 100000
var string order_size = "SABİT"
fix_cl_per_level = input.float(title="💰 Kontrat / Lot sayısı", defval=50, minval=0, group='/////////////////---SİSTEM AYARLARI---/////////////////')
gridLevels = input.int(title="🪜 Izgara / Grid Sayısı ", defval=100, minval=2, group='/////////////////---SİSTEM AYARLARI---/////////////////')
var string distributionType = "RAKAMSAL"
mode = input.string(title="🔺🔻İşlem Yönü", defval="Uzun", options=["Yatay", "Uzun", "Kısa"], group='/////////////////---SİSTEM AYARLARI---/////////////////')
entry_condition = input.string(title="🪂 İşlem Yöntemi", defval="Malsız Başla", options=["Mal ile Başla","Malsız Başla"], group = '///////////---MKTBEST BAŞLAMA AYARI---///////////')
var string grid_calculation = "SABİT GRİD"
var bool enable_levels = true
var topLevel_raw = input.price(title="⚡️Yatay ve Kısa da Tepe / Uzunda Tepe Fiyatı", defval=100, group='/////////////////---İŞLEM AYARLARI---/////////////////')
var referencePrice = input.price(title="⚡️Uzunda Tepe / Yatayda Referans Fiyatı/Kısada Tepe Fiyatı", defval=100, group='/////////////////---İŞLEM AYARLARI---/////////////////')
var bottomLevel_raw = input.price(title="⚡️Uzunda ve Yatayda Dip Fiyatı /Kısada dip fiyatı", defval=50, group='/////////////////---İŞLEM AYARLARI---/////////////////')
var int biriktirilmis_lot = 0
var int onceki_kapanan_islem_sayisi = 0
var float total_value = 0.0
var float average_price = 0.0
lotStrategy = input.string(title="📈 Lot Hesaplama Stratejisi", defval="SABİT", options=["SABİT","ZAMAN BAZLI"],group = '///////////---LOT AYARLARI---///////////')
maxLotOran = 100000
minLotOran = 1
var int zamanBazliAcilisOran = input.int(title="⏰ Açılış Saati Lot Adedi (10:00-11:00)", defval=10, minval=1, maxval=10000,group='///////////---LOT AYARLARI---///////////')
var int zamanBazliNormalOran = input.int(title="⏰ Normal Saat Lot Adedi (11:00-16:00)", defval=50, minval=1, maxval=10000,group='///////////---LOT AYARLARI---///////////')
var int zamanBazliKapanisOran = input.int(title="⏰ Kapanış Saati Lot Adedi (16:00-18:00)", defval=25, minval=1, maxval=10000,group='///////////---LOT AYARLARI---///////////')
calculateLotSize(string strategy, float baseLot, int gridLevel, float currentPrice, float refPrice) =>
int result = int(baseLot)
if strategy == "SABİT"
result := int(baseLot)
else if strategy == "ZAMAN BAZLI"
int curHour = hour(time)
if curHour >= 10 and curHour < 11
result := zamanBazliAcilisOran
else if curHour >= 11 and curHour < 16
result := zamanBazliNormalOran
else if curHour >= 16 and curHour < 18
result := zamanBazliKapanisOran
else
result := zamanBazliAcilisOran
math.max(math.min(result, maxLotOran), minLotOran)
periodicReportEnabled = input.bool(title="⏰ Periyodik Rapor Gönderimi", defval=false, group='///////////---ALARM AYARLARI---///////////')
waitPeriods = input.int(title="⏰ Kaç Periyod Beklensin", defval=4, minval=1, tooltip="Her kaç periyodda bir rapor gönderilsin? Örnek: 4 girilirse, 1dk'lık grafikteyken her 4 dakikada bir rapor gönderilir.", group='///////////---ALARM AYARLARI---///////////')
alarm_saat = input.int(title="⏰ Alarm Saati", defval=10, minval=0, maxval=23, group='///////////---ALARM AYARLARI---///////////')
alarm_dakika = input.int(title="⏰ Alarm Dakikası", defval=5, minval=0, maxval=59, group='///////////---ALARM AYARLARI---///////////')
sembol_degeri = close
start12 = time[1]
mode := (topLevel_raw<referencePrice) ? "Uzun" : mode
mode := (bottomLevel_raw>referencePrice) ? "Kısa" : mode
topLevel = mode == "Uzun" ? referencePrice : topLevel_raw
bottomLevel = mode == "Kısa" ? referencePrice : bottomLevel_raw
enable_tp_sl = input.bool(title='Stop Aktif Olsun Mu ?', defval=false, group='/////////////////---MKTBEST STOP AYARLARI---/////////////////')
stop_mode = input.string(title="🛑 Stop Yöntemi", defval="Tekrar İşlem Açmaz", options=["Tekrar İşlem Açabilir", "Tekrar İşlem Açmaz"], group='/////////////////---MKTBEST STOP AYARLARI---/////////////////')
upperLimit = input.price(title="🛑 Stop Tepe Fiyatı", defval=100, group='/////////////////---MKTBEST STOP AYARLARI---/////////////////')
lowerLimit = input.price(title="🛑 Stop Alt Fiyatı", defval=50, group='/////////////////---MKTBEST STOP AYARLARI---/////////////////')
closeAllPositions1() =>
if mode == "Yatay"
if (strategy.position_size > 0)
strategy.cancel_all()
strategy.close("Buy@", comment="Long Pozisyonlar Kapatıldı", alert_message='{"name": "' + alarm_ismi2 + ' Stop Tetiklendi. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔻 [LONG-STOP] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
if (strategy.position_size < 0)
strategy.cancel_all()
strategy.close("Sell@", comment="Short Pozisyonlar Kapatıldı", alert_message='{"name": "' + alarm_ismi6 + ' Stop Tetiklendi. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔺 [SHORT-STOP] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
else
if (strategy.position_size > 0)
strategy.cancel_all()
strategy.close_all(comment= stop_mode + "- ZARAR STOP", immediately=true, alert_message='{"name": "' + alarm_ismi3 + ' Stop Tetiklendi. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔻 [LONG-STOP] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
if (strategy.position_size < 0)
strategy.cancel_all()
strategy.close_all(comment= stop_mode + "+ KAR AL STOP", immediately=true, alert_message='{"name": "' + alarm_ismi4 + ' Stop Tetiklendi. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔺 [SHORT-STOP] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
var one_time_trigger = false
priceHitsLimits() =>
hit = one_time_trigger == false ? false : true
if (close >= upperLimit or close <= lowerLimit) and enable_tp_sl and window()
strategy.cancel_all()
closeAllPositions1()
hit := true
alert_message = '{"name": "' + alarm_ismi3 + ' Stop Tetiklendi. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🛑 [STOP] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}'
hit
if stop_mode == "Tekrar İşlem Açmaz" and priceHitsLimits() and one_time_trigger == false
one_time_trigger := true
roundToMinMove(price) =>
minPriceMove = syminfo.minmove / 100
multiplier = 1 / minPriceMove
math.round(price * multiplier) / multiplier
var gridLevelsArray = array.new_float()
var longLevelsArray = array.new_float()
var shortLevelsArray = array.new_float()
calcGridLevels(float top, float bottom, float ref, int gridCount) =>
var levels = array.new_float()
array.clear(levels)
float totalRange = top - bottom
float gridStep = totalRange / (gridCount - 1)
if mode == "Uzun"
for i = 0 to gridCount - 1
float baseLevel = ref - (i * gridStep)
if baseLevel >= bottom
float roundedLevel = baseLevel
if baseLevel < 20.00
roundedLevel := math.round(baseLevel * 100) / 100
else if baseLevel < 50.00
roundedLevel := math.round(baseLevel * 50) / 50
else if baseLevel < 100.00
roundedLevel := math.round(baseLevel * 20) / 20
else if baseLevel < 250.00
roundedLevel := math.round(baseLevel * 10) / 10
else if baseLevel < 500.00
roundedLevel := math.round(baseLevel * 4) / 4
else if baseLevel < 1000.00
roundedLevel := math.round(baseLevel * 2) / 2
else
roundedLevel := math.round(baseLevel)
array.push(levels, roundedLevel)
else if mode == "Kısa"
for i = 0 to gridCount - 1
float baseLevel = top - (i * gridStep)
if baseLevel >= ref
float roundedLevel = baseLevel
if baseLevel < 20.00
roundedLevel := math.round(baseLevel * 100) / 100
else if baseLevel < 50.00
roundedLevel := math.round(baseLevel * 50) / 50
else if baseLevel < 100.00
roundedLevel := math.round(baseLevel * 20) / 20
else if baseLevel < 250.00
roundedLevel := math.round(baseLevel * 10) / 10
else if baseLevel < 500.00
roundedLevel := math.round(baseLevel * 4) / 4
else if baseLevel < 1000.00
roundedLevel := math.round(baseLevel * 2) / 2
else
roundedLevel := math.round(baseLevel)
array.push(levels, roundedLevel)
if array.size(levels) != gridCount
// Eksik grid varsa tamamla
float step = (top - bottom) / (gridCount - 1)
array.clear(levels)
for i = 0 to gridCount - 1
float baseLevel = bottom + (step * i)
float roundedLevel = baseLevel
if baseLevel < 20.00
roundedLevel := math.round(baseLevel * 100) / 100
else if baseLevel < 50.00
roundedLevel := math.round(baseLevel * 50) / 50
else if baseLevel < 100.00
roundedLevel := math.round(baseLevel * 20) / 20
else if baseLevel < 250.00
roundedLevel := math.round(baseLevel * 10) / 10
else if baseLevel < 500.00
roundedLevel := math.round(baseLevel * 4) / 4
else if baseLevel < 1000.00
roundedLevel := math.round(baseLevel * 2) / 2
else
roundedLevel := math.round(baseLevel)
array.push(levels, roundedLevel)
levels
var float[] storedLongGrids = array.new_float()
var float[] storedShortGrids = array.new_float()
var bool gridsPricesStored = false
if barstate.isfirst
gridLevelsArray := calcGridLevels(topLevel, bottomLevel, referencePrice, gridLevels)
if array.size(gridLevelsArray) > 0
if mode == "Yatay" or mode == "Uzun"
array.clear(storedLongGrids)
for i = 0 to array.size(gridLevelsArray) - 1
float level = array.get(gridLevelsArray, i)
if not na(level) and level <= referencePrice
array.push(storedLongGrids, level)
if mode == "Yatay" or mode == "Kısa"
array.clear(storedShortGrids)
for i = 0 to array.size(gridLevelsArray) - 1
float level = array.get(gridLevelsArray, i)
if not na(level) and level >= referencePrice
array.push(storedShortGrids, level)
gridsPricesStored := true
if gridsPricesStored
for i = 0 to array.size(storedLongGrids) - 1
price = array.get(storedLongGrids, i)
for i = 0 to array.size(storedShortGrids) - 1
price = array.get(storedShortGrids, i)
var int startBarTime = na
var int finishBarTime = finish
var first_qty = float(0)
var is_first_grid_calculation_completed = false
var int bars_back_time = na
if time >= start and time[1] < start
bars_back_time := 1000 * 20 * 1 * historical_days
startBarTime := time - bars_back_time
first_qty := investment*1/close
if is_first_grid_calculation_completed == false and window()
gridLevelsArray := calcGridLevels(topLevel, bottomLevel, referencePrice, gridLevels)
if array.size(gridLevelsArray) > 0
array.clear(storedLongGrids)
array.clear(storedShortGrids)
array.clear(longLevelsArray)
array.clear(shortLevelsArray)
for i = 0 to array.size(gridLevelsArray) - 1
if not na(array.get(gridLevelsArray, i))
float level = array.get(gridLevelsArray, i)
float roundedLevel = level
if level < 20.00
roundedLevel := math.round(level * 100) / 100 // 0.01 adım
else if level < 50.00
roundedLevel := math.round(level * 50) / 50 // 0.02 adım
else if level < 100.00
roundedLevel := math.round(level * 20) / 20 // 0.05 adım
else if level < 250.00
roundedLevel := math.round(level * 10) / 10 // 0.10 adım
else if level < 500.00
roundedLevel := math.round(level * 4) / 4 // 0.25 adım
else if level < 1000.00
roundedLevel := math.round(level * 2) / 2 // 0.50 adım
else
roundedLevel := math.round(level) // 1.00 adım
if mode == "Yatay" or mode == "Uzun"
if roundedLevel <= referencePrice
array.push(longLevelsArray, roundedLevel)
array.push(storedLongGrids, roundedLevel)
if mode == "Yatay" or mode == "Kısa"
if roundedLevel >= referencePrice
array.push(shortLevelsArray, roundedLevel)
array.push(storedShortGrids, roundedLevel)
is_first_grid_calculation_completed := true
levelHasOpenTrade(level_comment) =>
hasTrade = false
for tradeId = 0 to strategy.opentrades - 1
if strategy.opentrades.entry_comment(tradeId) == level_comment
hasTrade := true
break
hasTrade
t1 = time(timeframe.period, s)
var bool[] gridHasActiveBuyOrder = array.new_bool()
var bool[] gridHasActiveSellOrder = array.new_bool()
var bool[] gridHasPosition = array.new_bool()
var bool initialOrdersSent = false
var bool initialOrdersSent1 = false
var bool initialOrdersSent2 = false
var bool initialOrdersSent5 = false
var bool initialOrdersSent3 = false
var bool initialOrdersSent7 = false
var bool initialOrdersSent8 = false
var bool initialOrdersSent4 = false
pozisyonVarMi(float fiyat_seviyesi) =>
var sonuc = false
if strategy.position_size > 0
for i = 0 to strategy.opentrades - 1
if math.abs(strategy.opentrades.entry_price(i) - fiyat_seviyesi) < syminfo.mintick
sonuc := true
break
sonuc
emirVarMi(float fiyat_seviyesi) =>
var sonuc = false
if strategy.opentrades > 0
for i = 0 to strategy.opentrades - 1
float tradePrice = strategy.opentrades.entry_price(i)
string comment = strategy.opentrades.entry_comment(i)
if (str.contains(comment, "LONG") or str.contains(comment, "SAT")) and
math.abs(tradePrice - fiyat_seviyesi) < syminfo.mintick
sonuc := true
break
sonuc
arrayIndexValid(int index, array<bool> arr) =>
index >= 0 and index < array.size(arr)
arrayIndexValidFloat(int index, array<float> arr) =>
index >= 0 and index < array.size(arr)
getCurrentGridIndex(float currentPrice, array<float> levels) =>
var int gridIndex = -1
int maxIndex = array.size(levels) - 1
if maxIndex <= 0
gridIndex := -1
else
for i = 0 to maxIndex - 1
if arrayIndexValidFloat(i, levels) and arrayIndexValidFloat(i + 1, levels)
float upperLevel = array.get(levels, i)
float lowerLevel = array.get(levels, i + 1)
if currentPrice <= upperLevel and currentPrice >= lowerLevel
gridIndex := i
break
gridIndex
var MAX_TABLE_ROWS = 25 // Maksimum satır sayısı
var table gridTable = table.new(position.bottom_left, columns=4, rows=MAX_TABLE_ROWS+1, bgcolor=color.rgb(24, 24, 27), border_width=1)
// =================== EMOJİLER VE SEMBOLLER ===================
var string EMOJI_TIME = "🕐" // Saat için emoji
var string EMOJI_BUY = "🟢 Emir" // Yeşil daire - AL işaretleri için
var string EMOJI_SELL = "🔴 Emir" // Kırmızı daire - SAT işaretleri için
var string EMOJI_POSITION = "⭐" // Yıldız - Pozisyon için
var string EMOJI_ENTRY = "📥" // Giriş işlemi için
var string EMOJI_EXIT = "📤" // Çıkış işlemi için
var string EMOJI_PRICE = "💰" // Para - Fiyat kolonu için
var string EMOJI_TYPE = "📊" // Grafik - İşlem tipi için
var string EMOJI_STATUS = "🔄" // Dönen oklar - Durum için
var string EMOJI_MARKET = "🔵 Piyasa" // Piyasa emirleri için
var string EMOJI_LIMIT_BUY = "🟢 Limit" // Limit AL emirleri için
var string EMOJI_LIMIT_SELL = "🔴 Limit" // Limit SAT emirleri için
var string EMOJI_CLOSE = "🟠 Kapandı" // Kapanan işlemler için
var string EMOJI_INDEPENDENT = "⭐" // Bağımsız pozisyonlar için
var string EMOJI_UPPER_GRID = "🔴 Piyasa Emir" // Üst grid işlemleri için
// =================== BAĞIMSIZ POZİSYONLAR İÇİN REFERANS ARRAY'LER ===================
var bool[] independentPositions = array.new_bool(0)
var float[] independentLevels = array.new_float(0)
// =================== VERİ SAKLAMAK İÇİN ARRAY'LER ===================
var float[] priceHistory = array.new_float()
var float[] entryPriceHistory = array.new_float()
var string[] typeHistory = array.new_string()
var string[] statusHistory = array.new_string()
var string[] timeHistory = array.new_string() // Yeni eklenen zaman array'i
// Önceki durumları saklamak için array'ler
var bool[] lastCheckedBuyOrders = array.new_bool()
var bool[] lastCheckedSellOrders = array.new_bool()
var bool[] lastCheckedPositions = array.new_bool()
var float[] positionEntryPrices = array.new_float()
var bool[] lastCheckedIndependentPositions = array.new_bool()
var float[] independentEntryPrices = array.new_float()
// Tablo başlıkları (sadece bir kez oluşturulacak)
if tabloGoster
table.cell(gridTable, 0, 1, EMOJI_TIME + " Zaman", text_size=size.small, text_color=color.white, bgcolor=color.rgb(99, 16, 116))
table.cell(gridTable, 1, 1, EMOJI_PRICE + " Fiyat ", text_size=size.small, text_color=color.white, bgcolor=color.rgb(99, 16, 116))
table.cell(gridTable, 2, 1, EMOJI_TYPE + " İşlem", text_size=size.small, text_color=color.white, bgcolor=color.rgb(99, 16, 116))
table.cell(gridTable, 3, 1, EMOJI_STATUS + " Durum", text_size=size.small, text_color=color.white, bgcolor=color.rgb(99, 16, 116))
// =================== YARDIMCI FONKSİYONLAR ===================
// Array'leri yönetmek için yardımcı fonksiyon
managePushToArray(arr, value) =>
if array.size(arr) >= MAX_TABLE_ROWS
array.shift(arr)
array.push(arr, value)
// Saat formatını oluşturan fonksiyon
formatTime() =>
hour = hour(time)
minute = minute(time)
second = second(time)
hourStr = hour < 10 ? "0" + str.tostring(hour) : str.tostring(hour)
minuteStr = minute < 10 ? "0" + str.tostring(minute) : str.tostring(minute)
secondStr = second < 10 ? "0" + str.tostring(second) : str.tostring(second)
hourStr + ":" + minuteStr + ":" + secondStr
// =================== YENİ VERİ EKLEME FONKSİYONU ===================
addNewEntry(float price, string type, string status, float entryPrice = na) =>
currentTime = formatTime()
managePushToArray(timeHistory, currentTime)
managePushToArray(typeHistory, type)
managePushToArray(statusHistory, status)
managePushToArray(priceHistory, price)
managePushToArray(entryPriceHistory, entryPrice)
// Tabloyu güncelle
for i = 0 to math.min(MAX_TABLE_ROWS - 2, array.size(priceHistory) - 1)
int rowIndex = i + 2
int arrayIndex = array.size(priceHistory) - 1 - i
// Zaman kolonu
table.cell(gridTable, 0, rowIndex, array.get(timeHistory, arrayIndex),
text_size=size.small, text_color=color.white, bgcolor=color.rgb(24, 24, 27))
// Fiyat kolonu
float currentPrice = array.get(priceHistory, arrayIndex)
float entryPriceValue = array.get(entryPriceHistory, arrayIndex)
string priceDisplay = ""
string currentType = array.get(typeHistory, arrayIndex)
if currentType == "🔵 Limit ⭐" or currentType == EMOJI_CLOSE
priceDisplay := str.tostring(entryPriceValue, "#.00") + " ➜ " + str.tostring(currentPrice, "#.00")
else
priceDisplay := str.tostring(currentPrice, "#.00")
table.cell(gridTable, 1, rowIndex, priceDisplay,
text_size=size.small, text_color=color.white, bgcolor=color.rgb(24, 24, 27))
// İşlem tipi kolonu
table.cell(gridTable, 2, rowIndex, array.get(typeHistory, arrayIndex),
text_size=size.small, text_color=color.white, bgcolor=color.rgb(24, 24, 27))
// Durum kolonu
table.cell(gridTable, 3, rowIndex, array.get(statusHistory, arrayIndex),
text_size=size.small, text_color=color.white, bgcolor=color.rgb(24, 24, 27))
// Kalan boş satırları temizle
for i = math.min(array.size(priceHistory) + 2, MAX_TABLE_ROWS) to MAX_TABLE_ROWS
if tabloGoster
table.cell(gridTable, 0, i, "", text_size=size.small, bgcolor=color.rgb(0, 0, 0))
table.cell(gridTable, 1, i, "", text_size=size.small, bgcolor=color.rgb(0, 0, 0))
table.cell(gridTable, 2, i, "", text_size=size.small, bgcolor=color.rgb(0, 0, 0))
table.cell(gridTable, 3, i, "", text_size=size.small, bgcolor=color.rgb(0, 0, 0))
// =================== ARRAY BOYUTLARINI GÜNCELLEME ===================
updateArraySizes() =>
if array.size(gridHasActiveBuyOrder) != array.size(lastCheckedBuyOrders) or
array.size(independentPositions) != array.size(lastCheckedIndependentPositions)
array.clear(lastCheckedBuyOrders)
array.clear(lastCheckedSellOrders)
array.clear(lastCheckedPositions)
array.clear(positionEntryPrices)
array.clear(lastCheckedIndependentPositions)
array.clear(independentEntryPrices)
for i = 0 to array.size(gridHasActiveBuyOrder) - 1
array.push(lastCheckedBuyOrders, false)
array.push(lastCheckedSellOrders, false)
array.push(lastCheckedPositions, false)
array.push(positionEntryPrices, 0.0)
for i = 0 to array.size(independentPositions) - 1
array.push(lastCheckedIndependentPositions, false)
array.push(independentEntryPrices, 0.0)
// =================== DURUM DEĞİŞİKLİKLERİNİ KONTROL EDEN FONKSİYON ===================
checkStateChanges() =>
if tabloGoster
if array.size(gridHasActiveBuyOrder) > 0
for i = 0 to array.size(gridHasActiveBuyOrder) - 1
if arrayIndexValid(i, gridHasActiveBuyOrder) and arrayIndexValid(i, gridHasActiveSellOrder) and arrayIndexValid(i, gridHasPosition) and arrayIndexValidFloat(i, longLevelsArray)
float price = array.get(longLevelsArray, i)
bool currentBuy = array.get(gridHasActiveBuyOrder, i)
bool prevBuyState = i < array.size(lastCheckedBuyOrders) ? array.get(lastCheckedBuyOrders, i) : false
if currentBuy and not prevBuyState
addNewEntry(price, EMOJI_BUY, "⏳")
bool currentSell = array.get(gridHasActiveSellOrder, i)
bool prevSellState = i < array.size(lastCheckedSellOrders) ? array.get(lastCheckedSellOrders, i) : false
if currentSell and not prevSellState
addNewEntry(price, EMOJI_SELL, "⏳")
bool currentPos = array.get(gridHasPosition, i)
bool prevPosState = i < array.size(lastCheckedPositions) ? array.get(lastCheckedPositions, i) : false
if currentPos and not prevPosState
addNewEntry(price, "🔵 Limit ⭐", "⚡ Aktif")
array.set(positionEntryPrices, i, price)
if not currentPos and prevPosState
float entryPrice = array.get(positionEntryPrices, i)
float exitPrice = array.get(longLevelsArray, i - 1)
addNewEntry(exitPrice, EMOJI_CLOSE, "✅ Tamamlandı", entryPrice)
array.set(positionEntryPrices, i, 0.0)
if array.size(independentPositions) > 0
for i = 0 to array.size(independentPositions) - 1
bool currentIndependent = array.get(independentPositions, i)
bool prevIndependentState = i < array.size(lastCheckedIndependentPositions) ? array.get(lastCheckedIndependentPositions, i) : false
if currentIndependent and not prevIndependentState
float currentPrice = close
addNewEntry(currentPrice, EMOJI_MARKET + " " + EMOJI_INDEPENDENT, "⚡ Aktif")
array.set(independentEntryPrices, i, currentPrice)
if array.size(gridHasActiveBuyOrder) > 0
for i = 0 to array.size(gridHasActiveBuyOrder) - 1
if i < array.size(lastCheckedBuyOrders) and i < array.size(lastCheckedSellOrders) and i < array.size(lastCheckedPositions)
array.set(lastCheckedBuyOrders, i, array.get(gridHasActiveBuyOrder, i))
array.set(lastCheckedSellOrders, i, array.get(gridHasActiveSellOrder, i))
array.set(lastCheckedPositions, i, array.get(gridHasPosition, i))
for i = 0 to array.size(independentPositions) - 1
if i < array.size(lastCheckedIndependentPositions)
array.set(lastCheckedIndependentPositions, i, array.get(independentPositions, i))
// =================== TABLO VE ARRAY GÜNCELLEMELERİ ===================
// Ana güncellemeler - Her tick'te çalışacak
if window() and (barstate.isrealtime or barstate.islast) // Her tick'te güncelleme için
updateArraySizes()
checkStateChanges()
var int maxIndependentPositions = 5
hasIndependentPosition() =>
result = false
for i = 0 to array.size(independentPositions) - 1
if array.get(independentPositions, i)
result := true
break
result
var int totalBuyOrders = 0
var int totalSellOrders = 0
var int totalOpenTrades = 0
var int totalClosedTrades = 0
bool letTapeRunInput = input.bool(true, "Kayma Aktif", tooltip="Aktif olduğunda yazı kayar, pasif olduğunda sabit kalır", group='/////////////////---LİMİT YÖNTEM AYARLARI---/////////////////')
int offsetInput = input.int(0, "Başlangıç Konumu", tooltip="Yazının başlangıç pozisyonunu belirler", group='/////////////////---LİMİT YÖNTEM AYARLARI---/////////////////')
type Stat
string name
varip float value
varip string valueStr
varip float change
varip string changeStr
varip int upDown
makeStats() =>
array<Stat> stats = array.new<Stat>()
stats.push(Stat.new("Toplam AL Emirleri"))
stats.push(Stat.new("Toplam SAT Emirleri"))
stats.push(Stat.new("Açık Pozisyonlar"))
stats.push(Stat.new("Kapalı Pozisyonlar"))
stats
method update(Stat this) =>
float currentValue = 0.0
if this.name == "Toplam AL Emirleri"
currentValue := float(totalBuyOrders)
else if this.name == "Toplam SAT Emirleri"
currentValue := float(totalSellOrders)
else if this.name == "Açık Pozisyonlar"
currentValue := float(totalOpenTrades + (strategy.position_size > 0 ? userUpperGridCount+userUpperGridCount10 : 0))
else if this.name == "Kapalı Pozisyonlar"
currentValue := float(totalClosedTrades)
this.upDown := this.value < currentValue ? 1 : this.value > currentValue ? -1 : 0
this.value := currentValue
this.valueStr := str.tostring(currentValue, "#")
this.change := currentValue - this.value[1]
this.changeStr := str.tostring(this.change, "#")
method fillCell(Stat this, series table display, series int startCol, series int cells) =>
table.cell(display, column = startCol, row = 0, text = this.name, text_color = chart.fg_color, text_size = size.normal, text_halign = text.align_left)
table.cell(display, column = (startCol + 1) % cells, row = 0, text = this.valueStr, text_color = this.upDown < 0 ? color.red : this.upDown > 0 ? color.green : #000208, text_size = size.normal, text_halign = text.align_right)
table.cell(display, column = (startCol + 2) % cells, row = 0, text = "|", text_color = chart.fg_color, text_size = size.normal, text_halign = text.align_center)
checkPriceLimit(price, bottomLevel, topLevel) =>
price >= bottomLevel and price <= topLevel
isValidGridLevel(index, array_size) =>
index >= 0 and index < array_size
safeArrayGet(arr, index) =>
if array.size(arr) > 0 and index >= 0 and index < array.size(arr)
array.get(arr, index)
else
float(na)
var int totalSellOrderCount = 0
var string totalSellOrderStatus = ""
var float openingPrice = na
var int gridsInPriceRange = 0
var string priceRangeGridStatus = ""
var float highestGridInRange = na
var float lowestGridInRange = na
var int gridsInUpperRange = 0
var string upperRangeGridStatus = ""
var int currentPriceUpperGridCount = 0
var string currentPriceUpperGridStatus = ""
isTargetTimeReached() =>
int h = hour(time)
int m = minute(time)
h == 10 and m == 0
var bool priceInitialized = false
if isTargetTimeReached() and not priceInitialized
openingPrice := open
priceInitialized := true
var int lastDay = 0
if dayofmonth(time) != lastDay and hour(time) >= 11
lastDay := dayofmonth(time)
priceInitialized := false
calculateTotalSellOrders() =>
int totalOrders = 0
if userUpperGridCount > 0
totalOrders += userUpperGridCount
if userUpperGridCount10 > 0
totalOrders += userUpperGridCount10
int activeSellOrders = 0
if array.size(gridHasActiveSellOrder) > 0
for i = 0 to array.size(gridHasActiveSellOrder) - 1
if array.get(gridHasActiveSellOrder, i)
activeSellOrders += 1
totalOrders += activeSellOrders
string status = "Toplam SAT Emirleri: " + str.tostring(totalOrders) + "\n" +
"1. Grup: " + str.tostring(userUpperGridCount) + "\n" +
"2. Grup: " + str.tostring(userUpperGridCount10) + "\n" +
"Aktif: " + str.tostring(activeSellOrders)
[totalOrders, status]
calculateGridsInPriceRange() =>
if na(openingPrice)
[0, "10:00 açılış fiyatı henüz belirlenmedi", na, na, 0, ""]
else
float upperLimit10 = openingPrice * 1.10
float lowerLimit10 = openingPrice * 0.90
int gridCount = 0
int upperGridCount = 0
float highest = na
float lowest = na
var float[] allGrids = array.new_float(0)
array.clear(allGrids)
if array.size(longLevelsArray) > 0
for i = 0 to array.size(longLevelsArray) - 1
float level = array.get(longLevelsArray, i)
if level >= lowerLimit10 and level <= upperLimit10
array.push(allGrids, level)
if level >= openingPrice and level <= upperLimit10
upperGridCount += 1
if array.size(shortLevelsArray) > 0
for i = 0 to array.size(shortLevelsArray) - 1
float level = array.get(shortLevelsArray, i)
if level >= lowerLimit10 and level <= upperLimit10
array.push(allGrids, level)
if level >= openingPrice and level <= upperLimit10
upperGridCount += 1
gridCount := array.size(allGrids)
if gridCount > 0
array.sort(allGrids)
lowest := array.get(allGrids, 0)
highest := array.get(allGrids, gridCount - 1)
string status = "10:00 Açılış: " + str.tostring(openingPrice, "#.##") + " TL\n" +
"Alt Limit (%10): " + str.tostring(lowerLimit10, "#.##") + " TL\n" +
"Üst Limit (%10): " + str.tostring(upperLimit10, "#.##") + " TL\n" +
"Bu Aralıktaki Grid Sayısı: " + str.tostring(gridCount)
if not na(lowest) and not na(highest)
status += "\nEn Düşük Grid: " + str.tostring(lowest, "#.##") + " TL" +
"\nEn Yüksek Grid: " + str.tostring(highest, "#.##") + " TL"
string upperStatus = "10:00 açılış fiyatı ile %10 üst sınır arasındaki grid sayısı: " + str.tostring(upperGridCount)
[gridCount, status, highest, lowest, upperGridCount, upperStatus]
calculateCurrentPriceToOpeningUpperRange() =>
if na(openingPrice)
[0, "10:00 açılış fiyatı henüz belirlenmedi"]
else
float currentPrice = close
float upperLimit10 = openingPrice * 1.10
int upperGridCount = 0
if array.size(longLevelsArray) > 0
for i = 0 to array.size(longLevelsArray) - 1
float level = array.get(longLevelsArray, i)
if level >= currentPrice and level <= upperLimit10
upperGridCount += 1
if array.size(shortLevelsArray) > 0
for i = 0 to array.size(shortLevelsArray) - 1
float level = array.get(shortLevelsArray, i)
if level >= currentPrice and level <= upperLimit10
upperGridCount += 1
string status = "Anlık Fiyat: " + str.tostring(currentPrice, "#.##") + " TL\n" +
"10:00 Açılış Üst Limiti (%10): " + str.tostring(upperLimit10, "#.##") + " TL\n" +
"Anlık fiyat ile 10:00 açılış fiyatının %10 üst sınırı arasındaki grid sayısı: " + str.tostring(upperGridCount)
[upperGridCount, status]
if barstate.islast and window()
[sellOrderCount, sellOrderStatus] = calculateTotalSellOrders()
totalSellOrderCount := sellOrderCount
totalSellOrderStatus := sellOrderStatus
[inRangeGrids, rangeGridStatus, highGrid, lowGrid, inUpperRangeGrids, upperRangeStatus] = calculateGridsInPriceRange()
gridsInPriceRange := inRangeGrids
priceRangeGridStatus := rangeGridStatus
highestGridInRange := highGrid
lowestGridInRange := lowGrid
gridsInUpperRange := inUpperRangeGrids
upperRangeGridStatus := upperRangeStatus
[currentUpperCount, currentUpperStatus] = calculateCurrentPriceToOpeningUpperRange()
currentPriceUpperGridCount := currentUpperCount
currentPriceUpperGridStatus := currentUpperStatus
var int lastOrderTime1Grid = -1
var int lastOrderTime2Grid = -1
var int lastProcessedSellGrid = -1
var int currentGrid = na
var int maxIndex = na
if window() and not priceHitsLimits() and islem_yapilabilir
exchange_style = true
float currentPrice = close
if alim_yontemi == "lmt"
if not is_first_grid_calculation_completed
gridLevelsArray := calcGridLevels(topLevel, bottomLevel, referencePrice, gridLevels)
if array.size(gridLevelsArray) > 0
array.clear(longLevelsArray)
array.clear(shortLevelsArray)
for i = 0 to array.size(gridLevelsArray) - 1
if arrayIndexValidFloat(i, gridLevelsArray)
float level = array.get(gridLevelsArray, i)
float adjustedLevel = level
if level < 20.00
adjustedLevel := math.round(level * 100) / 100
else if level < 50.00
adjustedLevel := math.round(level * 50) / 50
else if level < 100.00
adjustedLevel := math.round(level * 20) / 20
else if level < 250.00
adjustedLevel := math.round(level * 10) / 10
else if level < 500.00
adjustedLevel := math.round(level * 4) / 4
else if level < 1000.00
adjustedLevel := math.round(level * 2) / 2
else
adjustedLevel := math.round(level)
if checkPriceLimit(adjustedLevel, bottomLevel, topLevel)
if mode == "Yatay" or mode == "Uzun"
if adjustedLevel <= referencePrice
array.push(longLevelsArray, adjustedLevel)
if mode == "Yatay" or mode == "Kısa"
if adjustedLevel >= referencePrice
array.push(shortLevelsArray, adjustedLevel)
is_first_grid_calculation_completed := true
if array.size(gridHasActiveBuyOrder) == 0 and array.size(longLevelsArray) > 0
gridLevels = array.size(longLevelsArray)
array.clear(gridHasActiveBuyOrder)
array.clear(gridHasActiveSellOrder)
array.clear(gridHasPosition)
array.clear(gridShowSellOrder)
array.clear(gridShowBuyOrder)
for i = 0 to gridLevels - 1
array.push(gridHasActiveBuyOrder, false)
array.push(gridHasActiveSellOrder, false)
array.push(gridHasPosition, false)
array.push(gridShowSellOrder, false)
array.push(gridShowBuyOrder, false)
if array.size(independentPositions) == 0
for i = 0 to maxIndependentPositions - 1
array.push(independentPositions, false)
array.push(independentLevels, 0.0)
if isEntryTime() and not initialOrdersSent1 and alim_yontemi == "lmt"
var bool anyOrderPlaced = false
int availableIndex = -1
for i = 0 to array.size(independentPositions) - 1
if not array.get(independentPositions, i)
availableIndex := i
break
if userUpperGridCount > 0
if availableIndex != -1
array.set(independentPositions, availableIndex, true)
anyOrderPlaced := true
initialOrdersSent1 :=true
alert('{"name": "💸 Piyasa Girişi Başlangıç ' + str.tostring(currentPrice) + '🔵⚡ ","symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "mktbest",' +'"price": "' + str.tostring(fix_cl_per_level * currentPriceUpperGridCount ) + '", "quantity": "' + str.tostring(fix_cl_per_level * (userUpperGridCount+userUpperGridCount10)) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
if anyOrderPlaced
initialOrdersSent := true
if isOrderTime() and initialOrdersSent1 and not initialOrdersSent2 and array.size(longLevelsArray) > 0
float lotPerGrid = fix_cl_per_level
int currentUpperGrid = getCurrentGridIndex(currentPrice, longLevelsArray)
int maxUpperIndex = array.size(longLevelsArray) - 1
var bool anyOrderPlaced = false
if currentUpperGrid != -1 and currentUpperGrid <= maxUpperIndex
if userUpperGridCount >= 1 and (currentUpperGrid - 1) >= 0
if isValidGridLevel(currentUpperGrid - 1, array.size(longLevelsArray))
float sellLevel1 = array.get(longLevelsArray, currentUpperGrid - 1)
if checkPriceLimit(sellLevel1, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel1)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel1) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel1) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent2 := true
array.set(gridHasActiveSellOrder, currentUpperGrid - 1, true)
array.set(gridShowSellOrder, currentUpperGrid - 1, true)
totalSellOrders := totalSellOrders + 1
if userUpperGridCount >= 2 and (currentUpperGrid - 2) >= 0
if isValidGridLevel(currentUpperGrid - 2, array.size(longLevelsArray))
float sellLevel2 = array.get(longLevelsArray, currentUpperGrid - 2)
if checkPriceLimit(sellLevel2, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel2)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel2) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel2) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent2 := true
array.set(gridHasActiveSellOrder, currentUpperGrid - 2, true)
array.set(gridShowSellOrder, currentUpperGrid - 2, true)
totalSellOrders := totalSellOrders + 1
if userUpperGridCount >= 3 and (currentUpperGrid - 3) >= 0
if isValidGridLevel(currentUpperGrid - 3, array.size(longLevelsArray))
float sellLevel3 = array.get(longLevelsArray, currentUpperGrid - 3)
float sellLevel44 = array.get(longLevelsArray, currentUpperGrid - 4)
if checkPriceLimit(sellLevel3, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel3)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel3) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel3) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent2 := true
array.set(gridHasActiveSellOrder, currentUpperGrid - 3, true)
array.set(gridShowSellOrder, currentUpperGrid - 3, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := currentUpperGrid - 3
if isOrderTime80() and initialOrdersSent1 and array.size(longLevelsArray) > 0
var bool anyOrderPlaced = false
int availableIndex = -1
for i = 0 to array.size(independentPositions) - 1
if not array.get(independentPositions, i)
availableIndex := i
break
int maxIndex = array.size(longLevelsArray) - 1
int currentGrid = getCurrentGridIndex(currentPrice, longLevelsArray)
if currentGrid != -1
if userGridCount >= 1 and isValidGridLevel(currentGrid + 1, array.size(longLevelsArray))
if userGridCount >= 1
if currentGrid + 1 <= maxIndex
float buyLevel = array.get(longLevelsArray, currentGrid + 1)
if checkPriceLimit(buyLevel, bottomLevel, topLevel)
if not emirVarMi(buyLevel) and not pozisyonVarMi(buyLevel)
alert('{"name": "💥 AL Emri 🟢 ' + str.tostring(buyLevel) + ' fiyatından gönderildi","symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(buyLevel) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, currentGrid + 1, true)
array.set(gridShowBuyOrder, currentGrid + 1, true)
anyOrderPlaced := true
totalBuyOrders := totalBuyOrders + 1
if userGridCount >= 2
if currentGrid + 2 <= maxIndex
if userGridCount >= 2 and isValidGridLevel(currentGrid + 2, array.size(longLevelsArray))
float nextBuyLevel = array.get(longLevelsArray, currentGrid + 2)
if checkPriceLimit(nextBuyLevel, bottomLevel, topLevel)
if not emirVarMi(nextBuyLevel) and not pozisyonVarMi(nextBuyLevel)
alert('{"name": "💥 AL Emri 🟢 ' + str.tostring(nextBuyLevel) + ' fiyatından gönderildi","symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(nextBuyLevel) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, currentGrid + 2, true)
array.set(gridShowBuyOrder, currentGrid + 2, true)
anyOrderPlaced := true
totalBuyOrders := totalBuyOrders + 1
if userGridCount >= 3
if currentGrid + 3 <= maxIndex
if userGridCount >= 3 and isValidGridLevel(currentGrid + 3, array.size(longLevelsArray))
float thirdBuyLevel = array.get(longLevelsArray, currentGrid + 3)
if checkPriceLimit(thirdBuyLevel, bottomLevel, topLevel)
if not emirVarMi(thirdBuyLevel) and not pozisyonVarMi(thirdBuyLevel)
alert('{"name": "💥 AL Emri 🟢 ' + str.tostring(thirdBuyLevel) + ' fiyatından gönderildi","symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(thirdBuyLevel) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, currentGrid + 3, true)
array.set(gridShowBuyOrder, currentGrid + 3, true)
anyOrderPlaced := true
totalBuyOrders := totalBuyOrders + 1
if isOrderTime1() and initialOrdersSent1 and initialOrdersSent2 and not initialOrdersSent3 and array.size(longLevelsArray) > 0 and lastProcessedSellGrid != -1
float lotPerGrid = fix_cl_per_level
int nextGrid = lastProcessedSellGrid - 1
if userUpperGridCount >= 4 and nextGrid >= 0
if isValidGridLevel(nextGrid, array.size(longLevelsArray))
float sellLevel4 = array.get(longLevelsArray, nextGrid)
if checkPriceLimit(sellLevel4, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel4)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel4) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel4) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid, true)
array.set(gridShowSellOrder, nextGrid, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid
if userUpperGridCount >= 5 and (nextGrid - 1) >= 0
if isValidGridLevel(nextGrid - 1, array.size(longLevelsArray))
float sellLevel5 = array.get(longLevelsArray, nextGrid - 1)
if checkPriceLimit(sellLevel5, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel5)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel5) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel5) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid - 1, true)
array.set(gridShowSellOrder, nextGrid - 1, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid - 1
if userUpperGridCount >= 6 and (nextGrid - 2) >= 0
if isValidGridLevel(nextGrid - 2, array.size(longLevelsArray))
float sellLevel6 = array.get(longLevelsArray, nextGrid - 2)
if checkPriceLimit(sellLevel6, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel6)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel6) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel6) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid - 2, true)
array.set(gridShowSellOrder, nextGrid - 2, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid - 2
if userUpperGridCount >= 7 and (nextGrid - 3) >= 0
if isValidGridLevel(nextGrid - 3, array.size(longLevelsArray))
float sellLevel7 = array.get(longLevelsArray, nextGrid - 3)
if checkPriceLimit(sellLevel7, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel7)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel7) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel7) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid - 3, true)
array.set(gridShowSellOrder, nextGrid - 3, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid - 3
if userUpperGridCount >= 8 and (nextGrid - 4) >= 0
if isValidGridLevel(nextGrid - 4, array.size(longLevelsArray))
float sellLevel8 = array.get(longLevelsArray, nextGrid - 4)
if checkPriceLimit(sellLevel8, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel8)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel8) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel8) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid - 4, true)
array.set(gridShowSellOrder, nextGrid - 4, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid - 4
if userUpperGridCount >= 9 and (nextGrid - 5) >= 0
if isValidGridLevel(nextGrid - 5, array.size(longLevelsArray))
float sellLevel9 = array.get(longLevelsArray, nextGrid - 5)
if checkPriceLimit(sellLevel9, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel9)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel9) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel9) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid - 5, true)
array.set(gridShowSellOrder, nextGrid - 5, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid - 5
if userUpperGridCount >= 10 and (nextGrid - 6) >= 0
if isValidGridLevel(nextGrid - 6, array.size(longLevelsArray))
float sellLevel10 = array.get(longLevelsArray, nextGrid - 6)
if checkPriceLimit(sellLevel10, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel10)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel10) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel10) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent3 := true
array.set(gridHasActiveSellOrder, nextGrid - 6, true)
array.set(gridShowSellOrder, nextGrid - 6, true)
totalSellOrders := totalSellOrders + 1
lastProcessedSellGrid := nextGrid - 6
if isOrderTime2() and initialOrdersSent1 and initialOrdersSent2 and initialOrdersSent3 and not initialOrdersSent4 and array.size(longLevelsArray) > 0 and lastProcessedSellGrid != -1
float lotPerGrid = fix_cl_per_level
int startLevel20 = lastProcessedSellGrid
if userUpperGridCount10 >= 1
if isValidGridLevel(startLevel20 - 1, array.size(longLevelsArray))
float sellLevel11 = array.get(longLevelsArray, startLevel20 - 1 )
if checkPriceLimit(sellLevel11, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel11)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel11) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel11) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent4 := true
array.set(gridHasActiveSellOrder, startLevel20 - 1, true)
array.set(gridShowSellOrder, startLevel20 - 1, true)
totalSellOrders := totalSellOrders + 1
lastOrderTime2Grid :=startLevel20 - 1
if userUpperGridCount10 >= 2
if isValidGridLevel(startLevel20 - 2, array.size(longLevelsArray))
float sellLevel12 = array.get(longLevelsArray, startLevel20 - 2)
if checkPriceLimit(sellLevel12, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel12)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel12) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel12) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent4 := true
array.set(gridHasActiveSellOrder, startLevel20 - 2, true)
array.set(gridShowSellOrder, startLevel20 - 2, true)
totalSellOrders := totalSellOrders + 1
lastOrderTime2Grid :=startLevel20 - 2
if userUpperGridCount10 >= 3
if isValidGridLevel(startLevel20 - 3, array.size(longLevelsArray))
float sellLevel13 = array.get(longLevelsArray, startLevel20 - 3)
if checkPriceLimit(sellLevel13, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel13)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel13) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel13) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent4 := true
array.set(gridHasActiveSellOrder, startLevel20 - 3, true)
array.set(gridShowSellOrder, startLevel20 - 3, true)
totalSellOrders := totalSellOrders + 1
lastOrderTime2Grid :=startLevel20 - 3
if userUpperGridCount10 >= 4
if isValidGridLevel(startLevel20 - 4, array.size(longLevelsArray))
float sellLevel14 = array.get(longLevelsArray, startLevel20 - 4)
if checkPriceLimit(sellLevel14, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel14)
alert('{"name": "💥SAT Emri 🔴 ' + str.tostring(sellLevel14) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel14) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent4 := true
array.set(gridHasActiveSellOrder, startLevel20 - 4, true)
array.set(gridShowSellOrder, startLevel20 - 4, true)
totalSellOrders := totalSellOrders + 1
lastOrderTime2Grid :=startLevel20 - 4
if userUpperGridCount10 >= 5
if isValidGridLevel(startLevel20 - 5, array.size(longLevelsArray))
float sellLevel15 = array.get(longLevelsArray, startLevel20 - 5)
if checkPriceLimit(sellLevel15, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel15)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel15) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel15) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent4 := true
array.set(gridHasActiveSellOrder, startLevel20 - 5, true)
array.set(gridShowSellOrder, startLevel20 - 5, true)
totalSellOrders := totalSellOrders + 1
lastOrderTime2Grid :=startLevel20 - 5
if isOrderTime60() and initialOrdersSent1 and initialOrdersSent2 and initialOrdersSent3 and initialOrdersSent4 and not initialOrdersSent5 and array.size(longLevelsArray) > 0 and lastOrderTime2Grid != -1
float lotPerGrid = fix_cl_per_level
int startLevel44 = lastOrderTime2Grid
if userUpperGridCount10 >= 6
if isValidGridLevel(startLevel44 - 1, array.size(longLevelsArray))
float sellLevel16 = array.get(longLevelsArray, startLevel44 - 1)
if checkPriceLimit(sellLevel16, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel16)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel16) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel16) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent5 := true
array.set(gridHasActiveSellOrder, startLevel44 - 1, true)
array.set(gridShowSellOrder, startLevel44 - 1, true)
totalSellOrders := totalSellOrders + 1
if userUpperGridCount10 >= 7
if isValidGridLevel(startLevel44 - 2, array.size(longLevelsArray))
float sellLevel17 = array.get(longLevelsArray, startLevel44 - 2)
if checkPriceLimit(sellLevel17, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel17)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel17) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel17) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent5 := true
array.set(gridHasActiveSellOrder, startLevel44 - 2, true)
array.set(gridShowSellOrder, startLevel44 - 2, true)
totalSellOrders := totalSellOrders + 1
if userUpperGridCount10 >= 8
if isValidGridLevel(startLevel44 - 3, array.size(longLevelsArray))
float sellLevel18 = array.get(longLevelsArray, startLevel44 - 3)
if checkPriceLimit(sellLevel18, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel18)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel18) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel18) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent5 := true
array.set(gridHasActiveSellOrder, startLevel44 - 3, true)
array.set(gridShowSellOrder, startLevel44 - 3, true)
totalSellOrders := totalSellOrders + 1
if userUpperGridCount10 >= 9
if isValidGridLevel(startLevel44 - 4, array.size(longLevelsArray))
float sellLevel19 = array.get(longLevelsArray, startLevel44 - 4)
if checkPriceLimit(sellLevel19, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel19)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel19) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel19) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent5 := true
array.set(gridHasActiveSellOrder, startLevel44 - 4, true)
array.set(gridShowSellOrder, startLevel44 - 4, true)
totalSellOrders := totalSellOrders + 1
if userUpperGridCount10 >= 10
if isValidGridLevel(startLevel44 - 5, array.size(longLevelsArray))
float sellLevel20 = array.get(longLevelsArray, startLevel44 - 5)
if checkPriceLimit(sellLevel20, bottomLevel, topLevel)
if not pozisyonVarMi(sellLevel20)
alert('{"name": "💥 SAT Emri 🔴 ' + str.tostring(sellLevel20) + ' fiyatından gönderildi",\"symbol\": \"' + syminfo.ticker + '\", \"orderSide\": \"sell\", \"orderType\": \"lmt\", ' +'\"price\": \"' + str.tostring(sellLevel20) + '\", \"quantity\": \"' + str.tostring(lotPerGrid) +'\", \"timeInForce\": \"day\", \"apiKey\": \"' + apikey + '\",\"token\":\"' + token + '\"}')
initialOrdersSent5 := true
array.set(gridHasActiveSellOrder, startLevel44 - 5, true)
array.set(gridShowSellOrder, startLevel44 - 5, true)
totalSellOrders := totalSellOrders + 1
if array.size(longLevelsArray) > 0
maxIndex = array.size(longLevelsArray) - 1
for i = 0 to maxIndex
if arrayIndexValid(i, gridHasActiveSellOrder) and arrayIndexValidFloat(i, longLevelsArray)
exitLevel33 = array.get(longLevelsArray, i)
if array.get(gridHasActiveSellOrder, i)
if high > exitLevel33
var currentGridIndex = getCurrentGridIndex(high, longLevelsArray)
var previousGridIndex = getCurrentGridIndex(exitLevel33, longLevelsArray)
var gridDifference = currentGridIndex - previousGridIndex
array.set(gridHasActiveSellOrder, i, false)
array.set(gridShowSellOrder, i, false)
if isValidGridLevel(i + 1, array.size(longLevelsArray)) and not array.get(gridHasActiveBuyOrder, i + 1) and not emirVarMi(array.get(longLevelsArray, i + 1)) and gridDifference < 1
float buyLevelzz = array.get(longLevelsArray, i + 1)
alert('{"name": "💥 ' + str.tostring(exitLevel33) + ' SATIŞ Gerçekleşti ve 🔴 ' + str.tostring(buyLevelzz) + ' bu fiyata al emri gönderildi 🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' + '"price": "' + str.tostring(buyLevelzz) + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 1, true)
array.set(gridShowBuyOrder, i + 1, true)
totalBuyOrders := totalBuyOrders + 1
if array.size(longLevelsArray) > 0
maxIndex = array.size(longLevelsArray) - 1
for i = 0 to maxIndex
if arrayIndexValid(i, gridHasActiveBuyOrder) and
arrayIndexValid(i, gridHasPosition) and
arrayIndexValidFloat(i, longLevelsArray)
tradeLevel = array.get(longLevelsArray, i)
var lastTradeTime = array.new_int(array.size(longLevelsArray), 0)
// İlk kontrol: Gerçekten bu grid seviyesinde aktif bir AL emri var mı?
if array.get(gridHasActiveBuyOrder, i) and not array.get(gridHasPosition, i)
// İkinci kontrol: Fiyat bu grid seviyesinin altına düştü mü?
if low < tradeLevel
// Büyük düşüşleri kontrol etmek için grid farklarını hesaplama
var currentGridIndex = getCurrentGridIndex(low, longLevelsArray)
var previousGridIndex = getCurrentGridIndex(tradeLevel, longLevelsArray)
var gridDifference = previousGridIndex - currentGridIndex
var currentTime = time
var timeElapsed = currentTime - array.get(lastTradeTime, i)
// Önemli: Burada pozisyonun olmadığı, zaman aralığının uygun olduğu VE
// grid seviyesinde AL emrinin aktif olduğunu kontrol ediyoruz
if not pozisyonVarMi(tradeLevel) and timeElapsed >= 1 and array.get(gridHasActiveBuyOrder, i)
array.set(lastTradeTime, i, currentTime)
// Pozisyon yoksa açalım
if not array.get(gridHasPosition, i)
array.set(gridHasPosition, i, true)
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
// Pozisyon açıldığında ilgili SAT/AL emirlerini oluşturalım
if array.get(gridHasPosition, i)
float satgonder = na
float gonder1 = na
float gonder2 = na
float gonder3 = na
// Sat emri fiyatını hesaplama (bir üst grid)
if i > 0 and i - 1 < array.size(longLevelsArray)
satgonder := array.get(longLevelsArray, i - 1)
// Alt gridler için al emri fiyatlarını hesaplama
if i + 1 < array.size(longLevelsArray)
gonder1 := array.get(longLevelsArray, i + 1)
if i + 2 < array.size(longLevelsArray)
gonder2 := array.get(longLevelsArray, i + 2)
if i + 3 < array.size(longLevelsArray)
gonder3 := array.get(longLevelsArray, i + 3)
// Sat emirlerini gönderme
if not na(satgonder) and i > 0 and isValidGridLevel(i - 1, array.size(longLevelsArray))
if not array.get(gridHasActiveSellOrder, i - 1) and not emirVarMi(satgonder)
alert('{"name": "🔥 ' + str.tostring(tradeLevel) + ' Fiyatından Pozisyona Girildi 🔵 ve ' + str.tostring(satgonder) + ' Fiyatına SAT Emri Gönderildi 🔴", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "lmt", ' + '"price": "' + str.tostring(satgonder) + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveSellOrder, i - 1, true)
array.set(gridShowSellOrder, i - 1, true)
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
totalSellOrders := totalSellOrders + 1
totalOpenTrades := totalOpenTrades + 1
// Alt grid seviyelerine al emirleri gönderme
if not na(gonder1) and isValidGridLevel(i + 1, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 1) and not emirVarMi(gonder1)
alert('{"name": "🔥 ' + str.tostring(gonder1) + '🔵🟢 Pozisyon Sonrası AL Emri Gönderildi ", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder1) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 1, true)
array.set(gridShowBuyOrder, i + 1, true)
totalBuyOrders := totalBuyOrders + 1
if not na(gonder2) and isValidGridLevel(i + 2, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 2) and not emirVarMi(gonder2)
alert('{"name": "🔥 ' + str.tostring(gonder2) + '🔵🟢 Pozisyon Sonrası AL Emri Gönderildi", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder2) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 2, true)
array.set(gridShowBuyOrder, i + 2, true)
totalBuyOrders := totalBuyOrders + 1
if not na(gonder3) and isValidGridLevel(i + 3, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 3) and not emirVarMi(gonder3)
alert('{"name": "🔥 ' + str.tostring(gonder3) + '🔵🟢 Pozisyon Sonrası AL Emri Gönderildi", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder3) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 3, true)
array.set(gridShowBuyOrder, i + 3, true)
totalBuyOrders := totalBuyOrders + 1
if array.get(gridHasPosition, i) and i > 0
exitLevel22 = array.get(longLevelsArray, i - 1)
exitLevel33 = array.get(longLevelsArray, i)
if high > exitLevel22
totalClosedTrades := totalClosedTrades + 1
array.set(gridHasPosition, i, false)
array.set(gridHasActiveSellOrder, i - 1, false)
array.set(gridShowSellOrder,i - 1, false)
if not emirVarMi(array.get(longLevelsArray, i)) and high < exitLevel33
array.set(gridHasActiveBuyOrder, i, true)
array.set(gridShowBuyOrder, i, true)
totalBuyOrders := totalBuyOrders + 1
alert('{"name": "' + str.tostring(exitLevel22) + '🟠 ✅ Pozisyon Kapatıldı ' + str.tostring(array.get(longLevelsArray, i)) + ' 🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", "price": "' + str.tostring(array.get(longLevelsArray, i)) + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
if window() and not priceHitsLimits() and islem_yapilabilir
exchange_style = (grid_calculation == 'SABİT GRİD')
if mode == "Yatay" or mode == "Uzun" and alim_yontemi == "mktbest"
for i = 0 to array.size(longLevelsArray) - 1
level = roundToMinMove(array.get(longLevelsArray, i))
level_str = str.tostring(level)
entry_level_comment = "Long" + str.tostring(i+1)
exit_level_comment = "Long Tp" + str.tostring(i+1)
condition = entry_condition == 'Malsız Başla' ? close > level : true
if condition and not levelHasOpenTrade(entry_level_comment)
tp_level = float(na)
if i > 1
nextLevel = array.get(longLevelsArray, i-1)
nextNextLevel = array.get(longLevelsArray, i -2)
tp_level := exchange_style ? nextLevel : nextNextLevel
else if i == 1
highestLongLevel = array.get(longLevelsArray, i - 1)
tp_level := exchange_style ? highestLongLevel : (highestLongLevel + referencePrice) / 2
else if i == 0 and mode == "Yatay"
tp_level := exchange_style ? referencePrice : (referencePrice + array.get(shortLevelsArray, 0)) / 2
else if i == 0 and mode == "Uzun"
highestLongLevel = array.get(longLevelsArray, i)
last_dff = referencePrice - (highestLongLevel + referencePrice) / 2
tp_level := exchange_style ? referencePrice : referencePrice + last_dff
if not na(tp_level)
qty = calculateLotSize(lotStrategy, fix_cl_per_level, i, level, referencePrice)
float commission = qty * level * (komisyon / 100)
sell_qty_long = qty
float exit_commission = sell_qty_long * tp_level * (komisyon / 100)
float total_commission = commission + exit_commission
string pnlText = "Son Fiyat: " + str.tostring(close, "#.##") + " TL\n"
if strategy.closedtrades == 0
pnlText += "Tamamlanan Islemler K/Z: ₺0.00\n" + "Acik Islemler K/Z: ₺" + str.tostring(strategy.openprofit, "#.##") + "\n" + "Toplam Komisyon: ₺" + str.tostring(total_commission, "#.##") + "\n" + "Toplam K/Z: ₺" + str.tostring(strategy.openprofit - total_commission, "#.##")
else
float total = strategy.netprofit + strategy.openprofit - total_commission
pnlText += "Tamamlanan Islemler K/Z: ₺" + str.tostring(strategy.netprofit, "#.##") + "\n" + "Acik Islemler K/Z: ₺" + str.tostring(strategy.openprofit, "#.##") + "\n" + "Toplam Komisyon: ₺" + str.tostring(total_commission, "#.##") + "\n" + "Toplam K/Z: ₺" + str.tostring(total, "#.##")
longEntryTime := time
strategy.entry(id="Buy@" + level_str, direction = strategy.long, qty = qty, comment=entry_level_comment , limit=level, alert_message = '{"name": "' + alarm_ismi1 + ' Grid-' + str.tostring(array.size(longLevelsArray) - i) + ' Fiyat: ' + str.tostring(level, "#.##") + ' 🚀 [LONG] Emir Gönderildi | ' + pnlText + '", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri) + '", "quantity": "' + str.tostring(qty) + '", "timeInForce": "day", "apiKey": "' + str.tostring(apikey) + '", "timenow":"{{timenow}}"}')
strategy.exit(id=("TP@" + level_str), from_entry = ("Buy@" + level_str), comment=exit_level_comment , limit=tp_level, qty=sell_qty_long, alert_message = '{"name": "' + alarm_ismi2 + ' Grid-' + str.tostring(array.size(longLevelsArray) - i) + ' Fiyat: ' + str.tostring(tp_level, "#.##") + ' 🚀 [LONG-EXIT] Emir Gönderildi | ' + pnlText + ' Biriktirilen Lot: ' + str.tostring(biriktirilmis_lot) + '", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri) + '", "quantity": "' + str.tostring(sell_qty_long) + '", "timeInForce": "day", "apiKey": "' + str.tostring(apikey) + '", "timenow":"{{timenow}}"}')
if mode == "Yatay" or mode == "Kısa" and alim_yontemi == "mktbest"
for i = 0 to array.size(shortLevelsArray) - 1
level = roundToMinMove(array.get(shortLevelsArray, i))
level_str = str.tostring(level)
entry_level_comment = "Short" + str.tostring(i+1)
exit_level_comment = "Short Tp" + str.tostring(i+1)
condition = entry_condition == 'Malsız Başla' ? close < level : true
if condition and not levelHasOpenTrade(entry_level_comment)
tp_level = float(na)
if i > 1
prevLevel = array.get(shortLevelsArray, i - 1)
prevPrevLevel = array.get(shortLevelsArray, i - 2)
tp_level := exchange_style ? prevLevel : (prevLevel + prevPrevLevel) / 2
else if i == 1
lowestShortLevel = array.get(shortLevelsArray, i - 1)
tp_level := exchange_style ? lowestShortLevel : (lowestShortLevel + referencePrice) / 2
else if i == 0 and mode == "Yatay"
tp_level := exchange_style ? referencePrice : (referencePrice + array.get(longLevelsArray, 0)) / 2
else if i == 0 and mode == "Kısa"
lowestShortLevel = array.get(shortLevelsArray, i)
last_dff = (lowestShortLevel + referencePrice) / 2 - referencePrice
tp_level := exchange_style ? referencePrice : referencePrice - last_dff
if not na(tp_level)
qty = calculateLotSize(lotStrategy, fix_cl_per_level, i, level, referencePrice)
shortEntryTime := time
float commission = qty * level * (komisyon / 100)
float exit_commission = qty * tp_level * (komisyon / 100)
float total_commission = commission + exit_commission
string karZararText = ""
if strategy.closedtrades == 0
karZararText := "Tamamlanan: ₺0.00\n" +
"Acik: ₺" + str.tostring(strategy.openprofit, "#.##") + "\n" +
"Toplam Komisyon: ₺" + str.tostring(total_commission, "#.##") + "\n" +
"Toplam: ₺" + str.tostring(strategy.openprofit - total_commission, "#.##")
else
float overallPnL = strategy.netprofit + strategy.openprofit - total_commission
karZararText := "Tamamlanan: ₺" + str.tostring(strategy.netprofit, "#.##") + "\n" +
"Acik: ₺" + str.tostring(strategy.openprofit, "#.##") + "\n" +
"Toplam Komisyon: ₺" + str.tostring(total_commission, "#.##") + "\n" +
"Toplam: ₺" + str.tostring(overallPnL, "#.##")
strategy.entry(id = ("Sell@" + level_str), direction = strategy.short, qty = qty, comment=entry_level_comment , limit=level, alert_message = '{"name": "' + alarm_ismi5 + ' Grid-' + str.tostring(i + 1) + ' Fiyat: ' + str.tostring(level, "#.##") + ' 🚀 [SHORT] Emir Gönderildi | ' + karZararText + '", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri) + '", "quantity": "' + str.tostring(qty) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
strategy.exit(id = ("TP@" + level_str), from_entry = ("Sell@" + level_str), comment = exit_level_comment , limit=tp_level, alert_message = '{"name": "' + alarm_ismi6 + ' Grid-' + str.tostring(i + 1) + ' Fiyat: ' + str.tostring(tp_level, "#.##") + ' 🚀 [SHORT-EXIT] Emir Gönderildi | ' + karZararText + '", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri) + '", "quantity": "' + str.tostring(qty) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
else
if not window() and close_at_end_time and alim_yontemi == "mktbest"
if strategy.position_size != 0
strategy.cancel_all()
if mode == "Uzun" and strategy.position_size > 0
strategy.close_all(comment = 'Ayarlanan Süre Doldu ve Tüm İşlemler Kapatıldı ' + '(' + str.tostring(mode) + ' MOD)',immediately=true,alert_message='{"name": "' + alarm_ismi7 + ' Süre Doldu. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔻 [LONG-SÜRE] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
else if mode == "Yatay"
if strategy.position_size > 0
strategy.close_all(comment = 'Ayarlanan Süre Doldu ve Tüm İşlemler Kapatıldı ' + '(' + str.tostring(mode) + ' MOD)',immediately=true,alert_message='{"name": "' + alarm_ismi8 + ' Süre Doldu. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔻 [YATAY-LONG-SÜRE] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
if strategy.position_size < 0
strategy.close_all(comment = 'Ayarlanan Süre Doldu ve Tüm İşlemler Kapatıldı ' + '(' + str.tostring(mode) + ' MOD)',immediately=true,alert_message='{"name": "' + alarm_ismi8 + ' Süre Doldu. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔺 [YATAY-SHORT-SÜRE] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
else if mode == "Kısa" and strategy.position_size < 0
strategy.close_all(comment = 'Ayarlanan Süre Doldu ve Tüm İşlemler Kapatıldı ' + '(' + str.tostring(mode) + ' MOD)',immediately=true,alert_message='{"name": "' + alarm_ismi9 + ' Süre Doldu. Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔺 [SHORT-SÜRE] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
bar_before_last = last_bar_time - timeframe.in_seconds(timeframe.period)*1000
format_date(timestamp) =>
date_str = str.tostring(dayofmonth(timestamp)) + "-" + str.tostring(month(timestamp)) + "-" + str.tostring(year(timestamp))
hour_str = str.tostring(hour(timestamp))
minute_str = str.tostring(minute(timestamp))
minute_str := minute(timestamp) < 10 ? "0" + minute_str : minute_str
date_str + "\n" + hour_str + ":" + minute_str
start_date_formatted = format_date(start)
finish_date_formatted = format_date(finish)
closeAllPositionsLong() =>
strategy.cancel_all()
strategy.close_all(comment = 'Kar/Zarar Seviyesi Ulaştı ve Tüm Long İşlemler Kapatıldı', immediately = true, alert_message='{"name": "Kar/Zarar Kapatma ⚠️ Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔻 [LONG-KZ] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
closeAllPositionsShort() =>
strategy.cancel_all()
strategy.close_all(comment = 'Kar/Zarar Seviyesi Ulaştı ve Tüm Short İşlemler Kapatıldı', immediately = true, alert_message='{"name": "Kar/Zarar Kapatma ⚠️ Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔺 [SHORT-KZ] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
closeAllPositionsYatay() =>
strategy.cancel_all()
if (strategy.position_size > 0)
strategy.close_all(comment = 'Kar/Zarar Seviyesi Ulaştı ve Tüm Yatay Long İşlemler Kapatıldı', immediately = true, alert_message='{"name": "Kar/Zarar Kapatma ⚠️ Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔻 [YATAY-LONG-KZ] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "sell", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
else if (strategy.position_size < 0)
strategy.close_all(comment = 'Kar/Zarar Seviyesi Ulaştı ve Tüm Yatay Short İşlemler Kapatıldı', immediately = true, alert_message='{"name": "Kar/Zarar Kapatma ⚠️ Fiyat: ' + str.tostring(sembol_degeri, "#.##") + ' 🔺 [YATAY-SHORT-KZ] Emir Gönderildi ", "symbol": "' + "{{ticker}}" + '", "orderSide": "buy", "orderType": "' + str.tostring(alim_yontemi) + '", "price": "' + str.tostring(sembol_degeri, "#.##") + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
uzun_grid = input.color(title="Uzun Grid Rengi", defval=color.rgb(151, 161, 159), group="Grid Renk Ayarları")
kisa_grid = input.color(title="Kisa Grid Rengi", defval=color.rgb(179, 190, 19), group="Grid Renk Ayarları")
uzun_grid_cizgi = input.color(title="Uzun Grid Çizgi Rengi", defval=color.rgb(6, 7, 7), group="Grid Renk Ayarları")
kisa_grid_cizgi = input.color(title="Kisa Grid Çizgi Rengi", defval=color.rgb(6, 7, 7), group="Grid Renk Ayarları")
if window()
var int total_grids = gridLevels + 1
var int middle_grid = math.ceil(total_grids / 2)
if mode == "Yatay"
line.new(x1=startBarTime, y1=referencePrice, x2=finishBarTime, y2=referencePrice, xloc=xloc.bar_time, width=1, color=#1120e7, style=line.style_solid)
formatted_referencePrice = str.tostring(referencePrice, "#.##")
label.new(x=startBarTime, y=referencePrice, xloc=xloc.bar_time, text="🔄 Grid-Dönüş Bölgesi: " + formatted_referencePrice + " TL", style=label.style_label_right, color=#1120e7, textcolor=color.white, size=size.small)
label.new(x=finishBarTime, y=referencePrice, xloc=xloc.bar_time, text="🔄 Grid-Dönüş Bölgesi: " + formatted_referencePrice + " TL", style=label.style_label_left, color=#1120e7, textcolor=color.white, size=size.small)
if mode == "Yatay" or mode == "Uzun"
var bool has_any_orders = false
if alim_yontemi == "lmt"
for i = 0 to array.size(longLevelsArray) - 1
if array.size(gridHasActiveBuyOrder) > i and array.size(gridHasActiveSellOrder) > i
if array.get(gridHasActiveBuyOrder, i) or array.get(gridHasActiveSellOrder, i) or array.get(gridHasPosition, i)
has_any_orders := true
break
for i = 0 to array.size(longLevelsArray) - 1
level = roundToMinMove(array.get(longLevelsArray, i))
formatted_level = str.tostring(level, "#.##")
string base_label_text = "GRİD " + str.tostring(i + 1) + "\n" +
formatted_level + " TL"
string position_label_text = "GRİD " + str.tostring(i + 1) + "\n" + formatted_level + " TL\n"
if alim_yontemi == "mktbest"
line.new(x1=startBarTime, y1=level, x2=finishBarTime, y2=level, xloc=xloc.bar_time, width=1, color=uzun_grid_cizgi, style=line.style_dotted)
label.new(x=startBarTime, y=level, xloc=xloc.bar_time, text=base_label_text, style=label.style_label_center, color=uzun_grid, size=size.small, textcolor=#0c0c0c, textalign=text.align_left)
label.new(x=finishBarTime, y=level, xloc=xloc.bar_time, text=base_label_text, style=label.style_label_center, color=uzun_grid, size=size.small, textcolor=#0c0c0c, textalign=text.align_left)
else if alim_yontemi == "lmt"
line.new(x1=startBarTime, y1=level, x2=finishBarTime, y2=level, xloc=xloc.bar_time, width=1, color=uzun_grid_cizgi, style=line.style_dotted)
label.new(x=startBarTime, y=level, xloc=xloc.bar_time, text=base_label_text, style=label.style_label_center, color=uzun_grid, size=size.small, textcolor=#0c0c0c, textalign=text.align_center)
label.new(x=finishBarTime, y=level, xloc=xloc.bar_time, text=base_label_text, style=label.style_label_center, color=uzun_grid, size=size.small, textcolor=#0c0c0c, textalign=text.align_center)
if (mode == "Yatay" or mode == "Kısa")
for i = 0 to array.size(shortLevelsArray) - 1
style_decision = (i == array.size(shortLevelsArray) - 1) ? line.style_dotted : line.style_dashed
level = roundToMinMove(array.get(shortLevelsArray, i))
level_str = str.tostring(level)
decimals_to_show = "0." + symbol_decimal_str(symbol_min_move())
label_color2 = kisa_grid
label_color200 = kisa_grid_cizgi
formatted_level1 = str.tostring(level, "#.##")
grid_text1 = "🔻 "
string base_label_text1 = "GRİD " + str.tostring(i + 1) + "\n" + formatted_level1 + " TL"
line.new(x1=startBarTime, y1=level, x2=finishBarTime, y2=level, xloc=xloc.bar_time, width=1, color=label_color200, style=line.style_dotted)
label.new(x=finishBarTime, y=level, xloc=xloc.bar_time, text=base_label_text1, style=label.style_label_center, color=label_color2, size=size.small, textcolor=#0c0c0c, textalign=text.align_center)
label.new(x=startBarTime, y=level, xloc=xloc.bar_time, text=base_label_text1, style=label.style_label_center, color=label_color2, size=size.small, textcolor=#0c0c0c, textalign=text.align_center)
if mode == "Kısa" and i == 0 and (grid_calculation != 'SABİT GRİD')
new_trigger_line = ((3 * referencePrice - level) / 2)
line.new(x1=startBarTime, y1=new_trigger_line, x2=finishBarTime, y2=new_trigger_line, xloc=xloc.bar_time, width=1, color=label_color200, style=line.style_dotted)
label.new(x=finishBarTime, y=new_trigger_line, xloc=xloc.bar_time, text=str.tostring(new_trigger_line, decimals_to_show + grid_text1), style=label.style_label_center, color=color.rgb(255, 153, 0, 77), size=size.small, textcolor=#0c0c0c, textalign=text.align_right)
label.new(x=startBarTime, y=new_trigger_line, xloc=xloc.bar_time, text=str.tostring(i, "GRİD" + grid_text1), style=label.style_label_center, color=color.rgb(255, 153, 0, 77), size=size.small, textcolor=#0c0c0c, textalign=text.align_right)
if entry_condition == "Mal ile Başla"
label_color2000 = kisa_grid_cizgi
line.new(x1=startBarTime, y1=referencePrice, x2=finishBarTime, y2=referencePrice, xloc=xloc.bar_time, width=1, color=label_color2000, style=line.style_dotted)
label.new(x=finishBarTime, y=referencePrice, xloc=xloc.bar_time, text="MAL ALARAK BAŞLADIĞINDA SON SATIŞ YERİ==>" + str.tostring(referencePrice), style=label.style_label_center, color=#be0461, textcolor=#0c0c0c, size=size.small, textalign=text.align_right)
label.new(x=startBarTime, y=referencePrice, xloc=xloc.bar_time, text="MAL ALARAK BAŞLADIĞINDA SON SATIŞ YERİ==>" + str.tostring(referencePrice), style=label.style_label_center, color=#be0461, textcolor=#0c0c0c, size=size.small, textalign=text.align_right)
if enable_tp_sl
if mode == "Yatay"
line.new(x1=startBarTime, y1=upperLimit, x2=finishBarTime, y2=upperLimit, xloc=xloc.bar_time, width=3, color=#dd0808fb, style=line.style_solid)
line.new(x1=startBarTime, y1=lowerLimit, x2=finishBarTime, y2=lowerLimit, xloc=xloc.bar_time, width=3, color=#dd0808fb, style=line.style_solid)
label.new(x=finishBarTime, y=upperLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI: " + str.tostring(upperLimit, "#.##") + " TL (" + stop_mode + ")", style=label.style_label_left, color=#dd0808fb, textcolor=color.rgb(252, 252, 252), size=size.small)
label.new(x=finishBarTime, y=lowerLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI: " + str.tostring(lowerLimit, "#.##") + " TL (" + stop_mode + ")", style=label.style_label_left, color=#dd0808fb, textcolor=color.rgb(255, 255, 255), size=size.small)
else if mode == "Uzun"
line.new(x1=startBarTime, y1=upperLimit, x2=finishBarTime, y2=upperLimit, xloc=xloc.bar_time, width=1, color=color.teal, style=line.style_dashed)
line.new(x1=startBarTime, y1=lowerLimit, x2=finishBarTime, y2=lowerLimit, xloc=xloc.bar_time, width=1, color=color.teal, style=line.style_dashed)
label.new(x=finishBarTime, y=upperLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI " + str.tostring(upperLimit, "#.##") + " TL", style=label.style_label_left, color=color.teal, textcolor=#0c0c0c, size=size.small)
label.new(x=startBarTime, y=upperLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI " + str.tostring(upperLimit, "#.##") + " TL", style=label.style_label_right, color=color.teal, textcolor=#0c0c0c, size=size.small)
label.new(x=finishBarTime, y=lowerLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI " + str.tostring(lowerLimit, "#.##") + " TL", style=label.style_label_left, color=#be0461, textcolor=#0c0c0c, size=size.small)
label.new(x=startBarTime, y=lowerLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI " + str.tostring(lowerLimit, "#.##") + " TL", style=label.style_label_right, color=#be0461, textcolor=#0c0c0c, size=size.small)
else if mode == "Kısa"
line.new(x1=startBarTime, y1=upperLimit, x2=finishBarTime, y2=upperLimit, xloc=xloc.bar_time, width=2, color=color.red, style=line.style_solid)
line.new(x1=startBarTime, y1=lowerLimit, x2=finishBarTime, y2=lowerLimit, xloc=xloc.bar_time, width=2, color=color.lime, style=line.style_solid)
label.new(x=finishBarTime, y=upperLimit, xloc=xloc.bar_time, text="ROBOT STOP FİYATI", style=label.style_label_left, color=color.red, textcolor=#0c0c0c, size=size.small)
label.new(x=finishBarTime, y=lowerLimit, xloc=xloc.bar_time, text="KAR AL ROBOT STOP FİYATI", style=label.style_label_left, color=color.lime, textcolor=color.black, size=size.small)
hasOpenPosition(price, isLong) =>
result = false
for tradeId = 0 to strategy.opentrades - 1
trade_price = strategy.opentrades.entry_price(tradeId)
trade_size = strategy.opentrades.size(tradeId)
if math.abs(trade_price - price) < 0.01
if (isLong and trade_size > 0) or (not isLong and trade_size < 0)
result := true
break
result
calcGridIntervals(arr) =>
if array.size(arr) < 2
0.0
else
total_percentage = 0.0
count = 0
for i = 0 to array.size(arr) - 2
current_level = array.get(arr, i)
next_level = array.get(arr, i + 1)
if not na(current_level) and not na(next_level) and current_level != 0
percentage = math.abs((next_level - current_level) / current_level * 100)
total_percentage += percentage
count += 1
count > 0 ? total_percentage / count : 0.0
tablo_baslik_rengi = input.color(title="Tablo Başlık Rengi", defval=color.rgb(54, 58, 69), group="Tablo Renk Ayarları")
tablo_yazi_rengi = input.color(title="Tablo Yazı Rengi", defval=color.rgb(12, 12, 12), group="Tablo Renk Ayarları")
tablo_arkaplan = input.color(title="Tablo Arkaplan", defval=#ffffff, group="Tablo Renk Ayarları")
tablo_arkaplan_yazi = input.color(title="Tablo Arkaplan Yazı Rengi", defval=color.rgb(255, 252, 252), group="Tablo Renk Ayarları")
var float dunkuKapanis = na
var int sonGun = na
tablo_boyutu = input.string(title="📊 Tablo Boyutu", defval="Normal", options=["Normal", "Small", "Tiny"], group = "///////////---TABLO AYARLARI---///////////")
atr = ta.atr(14)
natr = (atr / close) * 100
if showTable
var currentSize = size.normal
if tablo_boyutu == "Small"
currentSize := size.small
else if tablo_boyutu == "Tiny"
currentSize := size.tiny
var table infoTable = table.new(position.top_right, 20, 2, bgcolor=tablo_arkaplan)
table.cell(infoTable, 0, 0, "Sembol"+"\n"+"Bilgisi", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 1, 0, "Açık"+"\n"+"İşlemler", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 2, 0, "Kapalı İşlemler"+ "\n"+ "Toplam İşlemler", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 3, 0, "Son Fiyat"+"\n"+"Kar-Zarar", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 4, 0, "Kar/Zarar"+ "\n"+" Hedefleri", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 5, 0, "Başlangıç"+"\n"+" Bitiş", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 6, 0, "Zamanda Kapama"+"\n"+"Şart Durumu", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 7, 0, "Durum", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 8, 0, "Grid Arası"+"\n"+"Mesafe", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
string symbolText = syminfo.ticker + "\n" + syminfo.description + "\n" + timeframe.period + "\n" +"Min. Fiyat Adımı: " + str.tostring(syminfo.minmove/100) + "\n" +"İşlem: " + mode + "\n" +"Atr TL : " + str.tostring(atr, "#.##") + "\n" +"NAtr % : " + str.tostring(natr, "#.##")
table.cell(infoTable, 0, 1, symbolText, text_color=tablo_yazi_rengi, text_size=currentSize)
string positionText = str.tostring(strategy.opentrades) + " İşlem"
if strategy.opentrades > 0
positionText += "\n"
if strategy.position_size > 0
positionText += "Long: " + str.tostring(strategy.position_size, "#.##") + "\n"
else if strategy.position_size < 0
positionText += "Short: " + str.tostring(math.abs(strategy.position_size), "#.##") + "\n"
positionText += "Aktif:\n"
float level = na
for tradeId = 0 to strategy.opentrades - 1
string comment = strategy.opentrades.entry_comment(tradeId)
float entryPrice = strategy.opentrades.entry_price(tradeId)
if str.startswith(comment, "Long")
string gridNumberStr = str.substring(comment, 4)
int gridNumber = int(str.tonumber(gridNumberStr))
if gridNumber > 0 and gridNumber <= array.size(longLevelsArray)
int arrayIndex = gridNumber - 1
level := roundToMinMove(array.get(longLevelsArray, arrayIndex))
entryPrice := level
else if str.startswith(comment, "Short")
string gridNumberStr = str.substring(comment, 5)
int gridNumber = int(str.tonumber(gridNumberStr))
if gridNumber > 0 and gridNumber <= array.size(shortLevelsArray)
int arrayIndex = gridNumber - 1
level := roundToMinMove(array.get(shortLevelsArray, arrayIndex))
entryPrice := level
positionText += comment + " -> " + str.tostring(entryPrice, "#.##") + " TL"
if tradeId < strategy.opentrades - 1
positionText += "\n"
table.cell(infoTable, 1, 1, positionText, text_color=tablo_yazi_rengi, text_size=currentSize)
string closedTradesText = str.tostring(strategy.closedtrades) + " İşlem"
int totalTrades = strategy.opentrades + strategy.closedtrades
string totalTradesText = str.tostring(totalTrades) + " İşlem"
table.cell(infoTable, 2, 1, closedTradesText + "\n" + totalTradesText, text_color=tablo_yazi_rengi, text_size=currentSize)
string pnlText = "Son Fiyat: " + str.tostring(close, "#.##") + " TL\n"
float total_commission = getTotalCommission()
pnlText += "Tamamlanan Islemler K/Z: ₺" + str.tostring(strategy.netprofit, "#.##") + "\n" +
"Acik Islemler K/Z: ₺" + str.tostring(strategy.openprofit, "#.##") + "\n" +
"Toplam Komisyon: ₺" + str.tostring(total_commission, "#.##") + "\n" +
"Toplam K/Z: ₺" + str.tostring(strategy.netprofit + strategy.openprofit - total_commission, "#.##")
table.cell(infoTable, 3, 1, pnlText, text_color=tablo_yazi_rengi, text_size=currentSize)
string karZararText = enable_profit_loss_close ? "✅ Aktif\nKar: ₺" + str.tostring(profit_target) + "\nZarar: ₺" + str.tostring(loss_limit) :"❌ Pasif"
table.cell(infoTable, 4, 1, karZararText, text_color=tablo_yazi_rengi, text_size=currentSize)
string dateText = "Başlangıç:\n" + start_date_formatted + "\n\nBitiş:\n" + finish_date_formatted
table.cell(infoTable, 5, 1, dateText, text_color=tablo_yazi_rengi, text_size=currentSize)
string zamanKapamaText = close_at_end_time ? "✅ Aktif" : "❌ Pasif"
table.cell(infoTable, 6, 1, zamanKapamaText, text_color=tablo_yazi_rengi, text_size=currentSize)
string durumText = ""
if hedefe_ulasildi
durumText := "Tekrar\nİşlem Açmaz\nHedefe Ulaştı\nTebrik Ederim\n\n🎯"
else if not window() and close_at_end_time
durumText := "Tekrar\nİşlem Açmaz\nHedef Saatine Ulaştı\nTebrik Ederim\n\n🎯"
else
durumText := "İşlem\nDevam\nEdiyor\n\n🪂"
table.cell(infoTable, 7, 1, durumText, text_color=tablo_yazi_rengi, text_size=currentSize)
// Grid intervals
var float longGridInterval = 0.0
var float shortGridInterval = 0.0
if mode == "Uzun" or mode == "Yatay"
longGridInterval := calcGridIntervals(longLevelsArray)
if mode == "Kısa" or mode == "Yatay"
shortGridInterval := calcGridIntervals(shortLevelsArray)
string intervalText = ""
if mode == "Uzun"
intervalText := "Long Gridler:\n%" + str.tostring(longGridInterval, "#.##")
else if mode == "Kısa"
intervalText := "Short Gridler:\n%" + str.tostring(shortGridInterval, "#.##")
else if mode == "Yatay"
intervalText := "Long 🔺: %" + str.tostring(longGridInterval, "#.##") + "\n\nShort 🔻: %" + str.tostring(shortGridInterval, "#.##")
table.cell(infoTable, 8, 1, intervalText, text_color=tablo_yazi_rengi, text_size=currentSize)
table.cell(infoTable, 9, 0, "Lot Stratejisi", text_color=tablo_arkaplan_yazi, bgcolor=tablo_baslik_rengi, text_size=currentSize)
table.cell(infoTable, 9, 1, lotStrategy, text_color=tablo_yazi_rengi, text_size=currentSize)
float totalPnL = strategy.netprofit
float openPnL = strategy.openprofit
float total_commission = getTotalCommission()
float overallPnL = totalPnL + openPnL - total_commission
if enable_profit_loss_close and ((overallPnL <= loss_limit) or (overallPnL >= profit_target))
if mode == "Uzun"
closeAllPositionsLong()
pnl := 0.0
islem_yapilabilir := false
hedefe_ulasildi := true
else if mode == "Kısa"
closeAllPositionsShort()
pnl := 0.0
islem_yapilabilir := false
hedefe_ulasildi := true
else if mode == "Yatay"
closeAllPositionsYatay()
pnl := 0.0
islem_yapilabilir := false
hedefe_ulasildi := true
var int last_report_time = 0
var report_interval = waitPeriods * timeframe.multiplier * 60
var int start_time = time
var int bar_count = 0
var bool first_run = true
stop_durumu = enable_tp_sl ? "✅ Aktif" : "❌ Pasif"
kz_durumu = enable_profit_loss_close ? "✅ Aktif" : "❌ Pasif"
zaman_durumu = close_at_end_time ? "✅ Aktif" : "❌ Pasif"
calcRuntime() =>
if window()
float total_minutes = (time - start_time) / (1000 * 60)
int hours = math.floor(total_minutes / 60)
int mins = math.floor(total_minutes % 60)
[hours, mins]
[0, 0]
getOpenTradesInfo() =>
string openTradesInfo = ""
if strategy.opentrades > 0
openTradesInfo := "\n📌 Açık İşlemler:\n"
for tradeId = 0 to strategy.opentrades - 1
comment = strategy.opentrades.entry_comment(tradeId)
price = strategy.opentrades.entry_price(tradeId)
openTradesInfo += "- " + comment + ": " + str.tostring(price, "#.##") + " TL\n"
openTradesInfo
if barstate.isconfirmed and periodicReportEnabled
if first_run and window()
start_time := time
first_run := false
if window()
bar_count := bar_count + 1
if (time - last_report_time >= report_interval * 1000)
last_report_time := time
[runtime_hours, runtime_mins] = calcRuntime()
float kapanan_islemler = strategy.closedtrades
float kapanan_tutar = strategy.netprofit
float acik_islemler = strategy.opentrades
float acik_tutar = strategy.openprofit
float total_commission = getTotalCommission()
float kar_zarar = strategy.netprofit + strategy.openprofit
float max_kazanc = nz(strategy.max_runup, 0.0)
float max_kayip = nz(strategy.max_drawdown, 0.0)
float total100 = strategy.closedtrades == 0 ? strategy.openprofit - total_commission : strategy.netprofit + strategy.openprofit - total_commission
if report_aktif_pasif
string aktif_pasif_txt = '{\nSembol: ' + syminfo.ticker + '\nPeriyot: ' + timeframe.period + '\nStop Durumu: ' + stop_durumu + '\nKar/Zarar Durumu: ' + kz_durumu + '\nZaman Kapatma: ' + zaman_durumu + '\nGrid Modu: ' + mode + '\nLot Stratejisi: ' + lotStrategy + '\n⏰ ' + str.tostring(waitPeriods) + ' periyod sonra tekrar rapor alacaksınız.}'
alert(aktif_pasif_txt)
if report_detayli
string detayli_txt = '{\n🏢 ' + syminfo.ticker + '\n✔️ Kapanan İşlemler: ' + str.tostring(kapanan_islemler, "#") + ' adet / ' + (kapanan_islemler == 0 ? '0.00' : str.tostring(strategy.netprofit, "#.##")) + ' TL' + '\n⚡️ Açık İşlemler: ' + str.tostring(acik_islemler, "#") + ' adet / ' + str.tostring(acik_tutar, "#.##") + ' TL' + '\n💰 Toplam Komisyon: ' + str.tostring(total_commission, "#.##") + ' TL' + '\n💵 Toplam K/Z: ₺' + str.tostring(total100, "#.##") + ' TL' + '\n⏰ ' + str.tostring(waitPeriods) + ' periyod sonra tekrar rapor alacaksınız.}'
alert(detayli_txt)
if report_islem
string islem_txt = '{\n🏢 ' + syminfo.ticker + '\n⚡️ Açık İşlemler: ' + str.tostring(acik_islemler, "#") + ' adet / ' + str.tostring(acik_tutar, "#.##") + ' TL' + getOpenTradesInfo() + '\n💵 Toplam K/Z: ₺' + str.tostring(total100, "#.##") + ' TL' + '\n⏰ ' + str.tostring(waitPeriods) + ' periyod sonra tekrar rapor alacaksınız.}'
alert(islem_txt)
var currentYear = year(timenow)
var currentMonth = month(timenow)
var currentDay = dayofmonth(timenow)
var sifir_saat = input.int(title="🕐 Sıfırlama Saati", defval=17, minval=0, maxval=23, group="⏰ ZAMAN AYARLARI")
var sifir_dakika = input.int(title="🕐 Sıfırlama Dakikası", defval=58, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var sifir_saniye = input.int(title="🕐 Sıfırlama Saniyesi", defval=0, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var kayit_saat = input.int(title="🕐 Kayıt Saati", defval=17, minval=0, maxval=23, group="⏰ ZAMAN AYARLARI")
var kayit_dakika = input.int(title="🕐 Kayıt Dakikası", defval=59, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var kayit_saniye = input.int(title="🕐 Kayıt Saniyesi", defval=0, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var al_emir_saat = input.int(title="🕐 AL Emir Saati", defval=10, minval=0, maxval=23, group="⏰ ZAMAN AYARLARI")
var al_emir_dakika = input.int(title="🕐 AL Emir Dakikası", defval=3, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var al_emir_saniye = input.int(title="🕐 AL Emir Saniyesi", defval=0, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var sat_emir1_saat = input.int(title="🕐 1.SAT Emir Saati", defval=10, minval=0, maxval=23, group="⏰ ZAMAN AYARLARI")
var sat_emir1_dakika = input.int(title="🕐 1.SAT Emir Dakikası", defval=0, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var sat_emir1_saniye = input.int(title="🕐 1.SAT Emir Saniyesi", defval=0, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var sat_emir2_saat = input.int(title="🕐 2.SAT Emir Saati", defval=10, minval=0, maxval=23, group="⏰ ZAMAN AYARLARI")
var sat_emir2_dakika = input.int(title="🕐 2.SAT Emir Dakikası", defval=3, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var sat_emir2_saniye = input.int(title="🕐 2.SAT Emir Saniyesi", defval=0, minval=0, maxval=59, group="⏰ ZAMAN AYARLARI")
var sifir = timestamp(currentYear, currentMonth, currentDay, sifir_saat, sifir_dakika, sifir_saniye)
var firstFinish101 = timestamp(currentYear, currentMonth, currentDay, kayit_saat, kayit_dakika, kayit_saniye)
var secondFinish100 = timestamp(currentYear, currentMonth, currentDay, sat_emir1_saat, sat_emir1_dakika, sat_emir1_saniye)
var thirdFinish10 = timestamp(currentYear, currentMonth, currentDay, sat_emir2_saat, sat_emir2_dakika, sat_emir2_saniye)
var qq = timestamp(currentYear, currentMonth, currentDay, al_emir_saat, al_emir_dakika, al_emir_saniye)
isqq() => //al emirleri
btcHour = hour(time)
btcMinute = minute(time)
targetHour = hour(qq)
targetMinute = minute(qq)
btcHour == targetHour and btcMinute == targetMinute
issifirTime() => //sıfırlama
btcHour = hour(time)
btcMinute = minute(time)
targetHour = hour(sifir)
targetMinute = minute(sifir)
btcHour == targetHour and btcMinute == targetMinute
isSaveTime() => //kayıt
btcHour = hour(time)
btcMinute = minute(time)
targetHour = hour(firstFinish101)
targetMinute = minute(firstFinish101)
btcHour == targetHour and btcMinute == targetMinute
isFirstSendTime() => //1.sat
btcHour = hour(time)
btcMinute = minute(time)
targetHour = hour(secondFinish100)
targetMinute = minute(secondFinish100)
btcHour == targetHour and btcMinute == targetMinute
isSecondSendTime() => //2.sat
btcHour = hour(time)
btcMinute = minute(time)
targetHour = hour(thirdFinish10)
targetMinute = minute(thirdFinish10)
btcHour == targetHour and btcMinute == targetMinute
findGridsBetween(float startPrice, float endPrice, array<float> gridLevels) =>
int[] levels = array.new_int()
if na(gridLevels) or array.size(gridLevels) == 0 or
na(gridHasActiveBuyOrder) or array.size(gridHasActiveBuyOrder) == 0 or
na(gridHasPosition) or array.size(gridHasPosition) == 0
levels // Return empty array
else
if startPrice > endPrice // Fiyat düşmüş
for i = 0 to array.size(gridLevels) - 1
float level = array.get(gridLevels, i)
if not na(level) and
arrayIndexValid(i, gridHasActiveBuyOrder) and
arrayIndexValid(i, gridHasPosition) and
level < startPrice and
level > endPrice and
array.get(gridHasActiveBuyOrder, i) and
not array.get(gridHasPosition, i)
array.push(levels, i)
else if startPrice < endPrice // Fiyat yükselmiş
for i = 0 to array.size(gridLevels) - 2
float level = array.get(gridLevels, i)
if not na(level) and
arrayIndexValid(i, gridHasActiveSellOrder) and
arrayIndexValid(i + 1, gridHasPosition) and
level > startPrice and
level < endPrice and
array.get(gridHasActiveSellOrder, i) and
array.get(gridHasPosition, i + 1)
array.push(levels, i)
levels
var float[] savedSellOrders = array.new_float(0)
var bool ordersSaved = false
var bool[] firstBatchSent = array.new_bool(10, false)
var bool[] secondBatchSent = array.new_bool(10, false)
var bool[] buyOrdersSent = array.new_bool(2, false)
var bool canSendOrders = false
var float[] savedOrders = array.new_float(0)
if isSaveTime() and not ordersSaved and array.size(longLevelsArray) > 0 and alim_yontemi == "lmt"
array.clear(savedSellOrders)
// Aktif SAT emirlerini kaydet
for i = 0 to array.size(longLevelsArray) - 1
if array.get(gridHasActiveSellOrder, i)
float sellLevel = array.get(longLevelsArray, i)
if array.size(savedSellOrders) < 20
array.push(savedSellOrders, sellLevel)
alert('{"name": "⚡️ Gün Sonu Bildirimi", "message": "Aktif SAT emirleri kaydedildi. Yarın sabah saat 10:00\'da otomatik olarak yeniden gönderilecektir. İyi akşamlar dilerim. 🌙"}')
canSendOrders := true
ordersSaved := true
// TÜM grid durumlarını tam olarak sıfırla (en önemli değişiklik burada)
for i = 0 to array.size(gridHasActiveBuyOrder) - 1
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
for i = 0 to array.size(gridHasActiveSellOrder) - 1
// SAT emirlerini false yap ama kaydettiğimiz bilgileri unutma
array.set(gridHasActiveSellOrder, i, false)
array.set(gridShowSellOrder, i, false)
for i = 0 to array.size(gridHasPosition) - 1
array.set(gridHasPosition, i, false)
if isFirstSendTime() and ordersSaved and alim_yontemi == "lmt" and canSendOrders
if array.size(savedSellOrders) >= 1 and not array.get(firstBatchSent, 0)
float sellLevel1 = array.get(savedSellOrders, 0)
alert('{"name": "' + str.tostring(sellLevel1) + ' 🔴 1.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel1) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 0, true)
if array.size(savedSellOrders) >= 2 and not array.get(firstBatchSent, 1)
float sellLevel2 = array.get(savedSellOrders, 1)
alert('{"name": "' + str.tostring(sellLevel2) + ' 🔴 2.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel2) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 1, true)
if array.size(savedSellOrders) >= 3 and not array.get(firstBatchSent, 2)
float sellLevel3 = array.get(savedSellOrders, 2)
alert('{"name": "' + str.tostring(sellLevel3) + ' 🔴 3.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel3) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 2, true)
if array.size(savedSellOrders) >= 4 and not array.get(firstBatchSent, 3)
float sellLevel4 = array.get(savedSellOrders, 3)
alert('{"name": "' + str.tostring(sellLevel4) + ' 🔴 4.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel4) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 3, true)
if array.size(savedSellOrders) >= 5 and not array.get(firstBatchSent, 4)
float sellLevel5 = array.get(savedSellOrders, 4)
alert('{"name": "' + str.tostring(sellLevel5) + ' 🔴 5.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel5) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 4, true)
if array.size(savedSellOrders) >= 6 and not array.get(firstBatchSent, 5)
float sellLevel6 = array.get(savedSellOrders, 5)
alert('{"name": "' + str.tostring(sellLevel6) + ' 🔴 6.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel6) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 5, true)
if array.size(savedSellOrders) >= 7 and not array.get(firstBatchSent, 6)
float sellLevel7 = array.get(savedSellOrders, 6)
alert('{"name": "' + str.tostring(sellLevel7) + ' 🔴 7.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel7) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 6, true)
if array.size(savedSellOrders) >= 8 and not array.get(firstBatchSent, 7)
float sellLevel8 = array.get(savedSellOrders, 7)
alert('{"name": "' + str.tostring(sellLevel8) + ' 🔴 8.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel8) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 7, true)
if array.size(savedSellOrders) >= 9 and not array.get(firstBatchSent, 8)
float sellLevel9 = array.get(savedSellOrders, 8)
alert('{"name": "' + str.tostring(sellLevel9) + ' 🔴 9.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel9) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 8, true)
if array.get(firstBatchSent, 8)
alert('{"name": "⚡️ Bilgilendirme", "message": "İlk grup SAT emirleri başarıyla gönderildi. İkinci grup emirler 3 dakika sonra gönderilecektir."}')
if isSecondSendTime() and ordersSaved and alim_yontemi == "lmt" and array.size(savedSellOrders) > 10 and canSendOrders
if array.size(savedSellOrders) >= 10 and not array.get(firstBatchSent, 9)
float sellLevel10 = array.get(savedSellOrders, 9)
alert('{"name": "' + str.tostring(sellLevel10) + ' 🔴 10.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "lmt", ' +'"price": "' + str.tostring(sellLevel10) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(firstBatchSent, 9, true)
if array.size(savedSellOrders) >= 11 and not array.get(secondBatchSent, 0)
float sellLevel11 = array.get(savedSellOrders, 10)
alert('{"name": "' + str.tostring(sellLevel11) + ' 🔴 11.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel11) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 0, true)
if array.size(savedSellOrders) >= 12 and not array.get(secondBatchSent, 1)
float sellLevel12 = array.get(savedSellOrders, 11)
alert('{"name": "' + str.tostring(sellLevel12) + ' 🔴 12.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel12) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 1, true)
if array.size(savedSellOrders) >= 13 and not array.get(secondBatchSent, 2)
float sellLevel13 = array.get(savedSellOrders, 12)
alert('{"name": "' + str.tostring(sellLevel13) + ' 🔴 13.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel13) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 2, true)
if array.size(savedSellOrders) >= 14 and not array.get(secondBatchSent, 3)
float sellLevel14 = array.get(savedSellOrders, 13)
alert('{"name": "' + str.tostring(sellLevel14) + ' 🔴 14.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel14) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 3, true)
if array.size(savedSellOrders) >= 15 and not array.get(secondBatchSent, 4)
float sellLevel15 = array.get(savedSellOrders, 14)
alert('{"name": "' + str.tostring(sellLevel15) + ' 🔴 15.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel15) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 4, true)
if array.size(savedSellOrders) >= 16 and not array.get(secondBatchSent, 5)
float sellLevel16 = array.get(savedSellOrders, 15)
alert('{"name": "' + str.tostring(sellLevel16) + ' 🔴 16.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel16) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 5, true)
if array.size(savedSellOrders) >= 17 and not array.get(secondBatchSent, 6)
float sellLevel17 = array.get(savedSellOrders, 16)
alert('{"name": "' + str.tostring(sellLevel17) + ' 🔴 17.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel17) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 6, true)
if array.size(savedSellOrders) >= 18 and not array.get(secondBatchSent, 7)
float sellLevel18 = array.get(savedSellOrders, 17)
alert('{"name": "' + str.tostring(sellLevel18) + ' 🔴 18.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel18) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 7, true)
if array.size(savedSellOrders) >= 19 and not array.get(secondBatchSent, 8)
float sellLevel19 = array.get(savedSellOrders, 18)
alert('{"name": "' + str.tostring(sellLevel19) + ' 🔴 19.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel19) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 8, true)
if array.size(savedSellOrders) >= 20 and not array.get(secondBatchSent, 9)
float sellLevel20 = array.get(savedSellOrders, 19)
alert('{"name": "' + str.tostring(sellLevel20) + ' 🔴 20.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker +
'", "orderSide": "sell", "orderType": "lmt", ' +
'"price": "' + str.tostring(sellLevel20) +
'", "quantity": "' + str.tostring(fix_cl_per_level) +
'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(secondBatchSent, 9, true)
if array.get(secondBatchSent, 9)
alert('{"name": "⚡️ Bilgilendirme", "message": "İkinci grup SAT emirleri başarıyla gönderildi. Tüm işlemler tamamlandı."}')
if isqq() and array.size(longLevelsArray) > 0 and alim_yontemi == "lmt" and canSendOrders
int currentGridIndex = getCurrentGridIndex(close, longLevelsArray)
if currentGridIndex != -1
if isValidGridLevel(currentGridIndex + 1, array.size(longLevelsArray)) and not array.get(buyOrdersSent, 0)
float buyLevel1 = array.get(longLevelsArray, currentGridIndex + 1)
alert('{"name": "' + str.tostring(buyLevel1) + ' 🟢 1.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(buyLevel1) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(buyOrdersSent, 0, true)
array.set(gridHasActiveBuyOrder, currentGridIndex + 1, true)
array.set(gridShowBuyOrder, currentGridIndex + 1, true)
if isValidGridLevel(currentGridIndex + 2, array.size(longLevelsArray)) and not array.get(buyOrdersSent, 1)
float buyLevel2 = array.get(longLevelsArray, currentGridIndex + 2)
alert('{"name": "' + str.tostring(buyLevel2) + ' 🟢 2.Kayıt Edilen Emir", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(buyLevel2) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(buyOrdersSent, 1, true)
array.set(gridHasActiveBuyOrder, currentGridIndex + 2, true)
array.set(gridShowBuyOrder, currentGridIndex + 2, true)
if array.get(buyOrdersSent, 0) and array.get(buyOrdersSent, 1)
ordersSaved := false // Kayıt durumunu sıfırla
canSendOrders := false // Gün içi normal moda dön
for i = 0 to array.size(buyOrdersSent) - 1
array.set(buyOrdersSent, i, false)
for i = 0 to array.size(firstBatchSent) - 1
array.set(firstBatchSent, i, false)
for i = 0 to array.size(secondBatchSent) - 1
array.set(secondBatchSent, i, false)
alert('{"name": "⚡️ AL Emirleri Tamamlandı", "message": "Tüm kaydedilen AL emirleri başarıyla gönderildi. Sistem normal çalışma moduna geçti."}')
// Fiyat düşüşüne göre AL emirleri için gridleri bulma
findBuyGridsBetween(float startPrice, float endPrice, array<float> gridLevels) =>
int[] levels = array.new_int()
for i = 0 to array.size(gridLevels) - 1
float level = array.get(gridLevels, i)
if level < startPrice and level >= endPrice and array.get(gridHasActiveBuyOrder, i) and not array.get(gridHasPosition, i)
array.push(levels, i)
levels
// Fiyat yükselişine göre SAT emirleri için gridleri bulma
findSellGridsBetween(float startPrice, float endPrice, array<float> gridLevels) =>
int[] levels = array.new_int()
for i = 0 to array.size(gridLevels) - 1
float level = array.get(gridLevels, i)
if level > startPrice and level <= endPrice and array.get(gridHasPosition, i) and i > 0
array.push(levels, i)
levels
// Ana işlem bloğu
if array.size(longLevelsArray) > 0 and (not ordersSaved or (ordersSaved and array.get(buyOrdersSent, 0) and array.get(buyOrdersSent, 1)))
maxIndex = array.size(longLevelsArray) - 1
// Ani fiyat hareketlerini ele almak için eklenen kod
float previousClose = close[1]
float currentLow = low
float currentHigh = high
var bool aniHareketOldu = false
// Fiyat düşmüşse ve aktif AL emirleri varsa
if currentLow < previousClose
var int[] crossedLevels = findGridsBetween(previousClose, currentLow, longLevelsArray)
if array.size(crossedLevels) > 0
aniHareketOldu := true
for j = 0 to array.size(crossedLevels) - 1
int i = array.get(crossedLevels, j)
if i <= maxIndex and arrayIndexValid(i, gridHasActiveBuyOrder) and
arrayIndexValid(i, gridHasPosition) and
arrayIndexValidFloat(i, longLevelsArray)
tradeLevel = array.get(longLevelsArray, i)
var lastTradeTime = array.new_int(array.size(longLevelsArray), 0)
// İlk kontrol: Gerçekten bu grid seviyesinde aktif bir AL emri var mı?
if array.get(gridHasActiveBuyOrder, i) and not array.get(gridHasPosition, i)
var currentTime = time
var timeElapsed = currentTime - array.get(lastTradeTime, i)
// Pozisyon yoksa açalım
if not pozisyonVarMi(tradeLevel) and timeElapsed >= 1
array.set(lastTradeTime, i, currentTime)
if not array.get(gridHasPosition, i)
array.set(gridHasPosition, i, true)
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
// Pozisyon açıldığında ilgili SAT/AL emirlerini oluşturalım
if array.get(gridHasPosition, i)
float satgonder = na
float gonder1 = na
float gonder2 = na
float gonder3 = na
// Sat emri fiyatını hesaplama (bir üst grid)
if i > 0 and i - 1 < array.size(longLevelsArray)
satgonder := array.get(longLevelsArray, i - 1)
// Alt gridler için al emri fiyatlarını hesaplama
if i + 1 < array.size(longLevelsArray)
gonder1 := array.get(longLevelsArray, i + 1)
if i + 2 < array.size(longLevelsArray)
gonder2 := array.get(longLevelsArray, i + 2)
if i + 3 < array.size(longLevelsArray)
gonder3 := array.get(longLevelsArray, i + 3)
// Sat emirlerini gönderme
if not na(satgonder) and i > 0 and isValidGridLevel(i - 1, array.size(longLevelsArray))
if not array.get(gridHasActiveSellOrder, i - 1) and not emirVarMi(satgonder)
alert('{"name": "' + str.tostring(tradeLevel) + ' 🔵⚡ İşlemde >> ' + str.tostring(satgonder) + ' 🔴⏳ Emir", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "lmt", ' +'"price": "' + str.tostring(satgonder) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveSellOrder, i - 1, true)
array.set(gridShowSellOrder, i - 1, true)
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
totalSellOrders := totalSellOrders + 1
totalOpenTrades := totalOpenTrades + 1
// Alt grid seviyelerine al emirleri gönderme
if not na(gonder1) and isValidGridLevel(i + 1, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 1) and not emirVarMi(gonder1)
alert('{"name": "' + str.tostring(gonder1) + '🔵🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder1) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 1, true)
array.set(gridShowBuyOrder, i + 1, true)
totalBuyOrders := totalBuyOrders + 1
if not na(gonder2) and isValidGridLevel(i + 2, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 2) and not emirVarMi(gonder2)
alert('{"name": "' + str.tostring(gonder2) + '🔵🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder2) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 2, true)
array.set(gridShowBuyOrder, i + 2, true)
totalBuyOrders := totalBuyOrders + 1
if not na(gonder3) and isValidGridLevel(i + 3, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 3) and not emirVarMi(gonder3)
alert('{"name": "' + str.tostring(gonder3) + '🔵🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder3) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 3, true)
array.set(gridShowBuyOrder, i + 3, true)
totalBuyOrders := totalBuyOrders + 1
// İşlem kapatma kısmı için de benzer bir mantık eklenebilir
if currentHigh > previousClose
var int[] crossedSellLevels = findGridsBetween(previousClose, currentHigh, longLevelsArray)
if array.size(crossedSellLevels) > 0
aniHareketOldu := true
for j = 0 to array.size(crossedSellLevels) - 1
int i = array.get(crossedSellLevels, j)
if i <= maxIndex and arrayIndexValid(i, gridHasPosition) and arrayIndexValidFloat(i, longLevelsArray)
if array.get(gridHasPosition, i) and i > 0
exitLevel22 = array.get(longLevelsArray, i - 1)
exitLevel33 = array.get(longLevelsArray, i)
if high > exitLevel22
totalClosedTrades := totalClosedTrades + 1
array.set(gridHasPosition, i, false)
array.set(gridHasActiveSellOrder, i - 1, false)
array.set(gridShowSellOrder,i - 1, false)
if not emirVarMi(array.get(longLevelsArray, i)) and high < exitLevel33
array.set(gridHasActiveBuyOrder, i, true)
array.set(gridShowBuyOrder, i, true)
totalBuyOrders := totalBuyOrders + 1
alert('{"name": "' + str.tostring(exitLevel22) + '🟠⚡ İşlem Kapandı >> ' + str.tostring(array.get(longLevelsArray, i)) + ' 🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", "price": "' + str.tostring(array.get(longLevelsArray, i)) + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
// Eğer ani hareket tespit edilmediyse, normal işlem açma/kapama mantığı çalışır
if not aniHareketOldu
for i = 0 to maxIndex
if arrayIndexValid(i, gridHasActiveBuyOrder) and
arrayIndexValid(i, gridHasPosition) and
arrayIndexValidFloat(i, longLevelsArray)
tradeLevel = array.get(longLevelsArray, i)
var lastTradeTime = array.new_int(array.size(longLevelsArray), 0)
// İlk kontrol: Gerçekten bu grid seviyesinde aktif bir AL emri var mı?
if array.get(gridHasActiveBuyOrder, i) and not array.get(gridHasPosition, i)
// İkinci kontrol: Fiyat bu grid seviyesinin altına düştü mü?
if low < tradeLevel
// Büyük düşüşleri kontrol etmek için grid farklarını hesaplama
var currentGridIndex = getCurrentGridIndex(low, longLevelsArray)
var previousGridIndex = getCurrentGridIndex(tradeLevel, longLevelsArray)
var gridDifference = previousGridIndex - currentGridIndex
var currentTime = time
var timeElapsed = currentTime - array.get(lastTradeTime, i)
// Önemli: Burada pozisyonun olmadığı, zaman aralığının uygun olduğu VE
// grid seviyesinde AL emrinin aktif olduğunu kontrol ediyoruz
if not pozisyonVarMi(tradeLevel) and timeElapsed >= 1 and array.get(gridHasActiveBuyOrder, i)
array.set(lastTradeTime, i, currentTime)
// Pozisyon yoksa açalım
if not array.get(gridHasPosition, i)
array.set(gridHasPosition, i, true)
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
// Pozisyon açıldığında ilgili SAT/AL emirlerini oluşturalım
if array.get(gridHasPosition, i)
float satgonder = na
float gonder1 = na
float gonder2 = na
float gonder3 = na
// Sat emri fiyatını hesaplama (bir üst grid)
if i > 0 and i - 1 < array.size(longLevelsArray)
satgonder := array.get(longLevelsArray, i - 1)
// Alt gridler için al emri fiyatlarını hesaplama
if i + 1 < array.size(longLevelsArray)
gonder1 := array.get(longLevelsArray, i + 1)
if i + 2 < array.size(longLevelsArray)
gonder2 := array.get(longLevelsArray, i + 2)
if i + 3 < array.size(longLevelsArray)
gonder3 := array.get(longLevelsArray, i + 3)
// Sat emirlerini gönderme
if not na(satgonder) and i > 0 and isValidGridLevel(i - 1, array.size(longLevelsArray))
if not array.get(gridHasActiveSellOrder, i - 1) and not emirVarMi(satgonder)
alert('{"name": "' + str.tostring(tradeLevel) + ' 🔵⚡ İşlemde >> ' + str.tostring(satgonder) + ' 🔴⏳ Emir", "symbol": "' + syminfo.ticker + '", "orderSide": "sell", "orderType": "lmt", ' +'"price": "' + str.tostring(satgonder) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveSellOrder, i - 1, true)
array.set(gridShowSellOrder, i - 1, true)
array.set(gridHasActiveBuyOrder, i, false)
array.set(gridShowBuyOrder, i, false)
totalSellOrders := totalSellOrders + 1
totalOpenTrades := totalOpenTrades + 1
// Alt grid seviyelerine al emirleri gönderme
if not na(gonder1) and isValidGridLevel(i + 1, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 1) and not emirVarMi(gonder1)
alert('{"name": "' + str.tostring(gonder1) + '🔵🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder1) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 1, true)
array.set(gridShowBuyOrder, i + 1, true)
totalBuyOrders := totalBuyOrders + 1
if not na(gonder2) and isValidGridLevel(i + 2, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 2) and not emirVarMi(gonder2)
alert('{"name": "' + str.tostring(gonder2) + '🔵🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder2) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 2, true)
array.set(gridShowBuyOrder, i + 2, true)
totalBuyOrders := totalBuyOrders + 1
if not na(gonder3) and isValidGridLevel(i + 3, array.size(longLevelsArray))
if not array.get(gridHasActiveBuyOrder, i + 3) and not emirVarMi(gonder3)
alert('{"name": "' + str.tostring(gonder3) + '🔵🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", ' +'"price": "' + str.tostring(gonder3) + '", "quantity": "' + str.tostring(fix_cl_per_level) +'", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
array.set(gridHasActiveBuyOrder, i + 3, true)
array.set(gridShowBuyOrder, i + 3, true)
totalBuyOrders := totalBuyOrders + 1
// İşlem kapama kısmı için normal mantık
if array.get(gridHasPosition, i) and i > 0
exitLevel22 = array.get(longLevelsArray, i - 1)
exitLevel33 = array.get(longLevelsArray, i)
if high > exitLevel22
totalClosedTrades := totalClosedTrades + 1
array.set(gridHasPosition, i, false)
array.set(gridHasActiveSellOrder, i - 1, false)
array.set(gridShowSellOrder,i - 1, false)
if not emirVarMi(array.get(longLevelsArray, i)) and high < exitLevel33
array.set(gridHasActiveBuyOrder, i, true)
array.set(gridShowBuyOrder, i, true)
totalBuyOrders := totalBuyOrders + 1
alert('{"name": "' + str.tostring(exitLevel22) + '🟠⚡ İşlem Kapandı >> ' + str.tostring(array.get(longLevelsArray, i)) + ' 🟢", "symbol": "' + syminfo.ticker + '", "orderSide": "buy", "orderType": "lmt", "price": "' + str.tostring(array.get(longLevelsArray, i)) + '", "quantity": "' + str.tostring(fix_cl_per_level) + '", "timeInForce": "day", "apiKey": "' + apikey + '","token":"' + token + '"}')
getTotalActiveBuyOrders() =>
int count = 0
if array.size(gridHasActiveBuyOrder) > 0
for i = 0 to array.size(gridHasActiveBuyOrder) - 1
if array.get(gridHasActiveBuyOrder, i)
count += 1
count
getTotalActiveSellOrders() =>
int count = 0
if array.size(gridHasActiveSellOrder) > 0
for i = 0 to array.size(gridHasActiveSellOrder) - 1
if array.get(gridHasActiveSellOrder, i)
count += 1
count
getTotalActivePositions() =>
int count = 0
if array.size(gridHasPosition) > 0
for i = 0 to array.size(gridHasPosition) - 1
if array.get(gridHasPosition, i)
count += 1
count
var showTradeTable = input.bool(false, "📊 İşlem Tablosunu Göster", group="Tablo Ayarları")
// Tablo renk ayarları
var color TABLE_BG_COLOR = color.new(color.rgb(28, 28, 28), 0)
var color HEADER_BG_COLOR = color.rgb(38, 46, 56)
var color TEXT_COLOR = color.white
var color POSITIVE_COLOR = color.rgb(0, 255, 0)
var color NEGATIVE_COLOR = color.rgb(255, 0, 0)
var label[] buyLabels = array.new_label()
var label[] sellLabels = array.new_label()
color orderTime1Color = color.red
color orderTime2Color = color.orange
color orderTime3Color = color.yellow
color orderTime4Color = color.lime
plotBuyOrders() =>
if window() and showTradeTable and array.size(gridHasActiveBuyOrder) > 0
for i = 0 to array.size(gridHasActiveBuyOrder) - 1
if array.get(gridHasActiveBuyOrder, i) and array.size(longLevelsArray) > i
float level = array.get(longLevelsArray, i)
lbl = label.new(bar_index, level, "AL", color=color.green, style=label.style_label_up, size=size.tiny)
array.push(buyLabels, lbl)
plotSellOrders() =>
if window() and showTradeTable and array.size(gridHasActiveSellOrder) > 0
for i = 0 to array.size(gridHasActiveSellOrder) - 1
if array.get(gridHasActiveSellOrder, i) and array.size(longLevelsArray) > i
float level = array.get(longLevelsArray, i)
color labelColor = color.red
if i >= 0 and i <= 3
labelColor := orderTime1Color
else if i >= 4 and i <= 9
labelColor := orderTime2Color
else if i >= 10 and i <= 14
labelColor := orderTime3Color
else if i >= 15 and i <= 19
labelColor := orderTime4Color
lbl = label.new(bar_index, level, "SAT", color=labelColor, style=label.style_label_down, size=size.tiny)
array.push(sellLabels, lbl)
if isqq()
if array.size(buyLabels) > 0
for i = 0 to array.size(buyLabels) - 1
label.delete(array.get(buyLabels, i))
array.clear(buyLabels)
if array.size(sellLabels) > 0
for i = 0 to array.size(sellLabels) - 1
label.delete(array.get(sellLabels, i))
array.clear(sellLabels)
var label[] positionLabels = array.new_label()
plotActivePositions() =>
if window() and showTradeTable and array.size(gridHasPosition) > 0
for i = 0 to array.size(gridHasPosition) - 1
if array.get(gridHasPosition, i) and array.size(longLevelsArray) > i
float level = array.get(longLevelsArray, i)
label.new(bar_index, level, "POZ", color=color.blue, style=label.style_label_right, size=size.tiny)
plotBuyOrders()
plotSellOrders()
plotActivePositions()
if barstate.islast and tabloGoster1
// Color Palette
color darkBgColor = color.new(color.rgb(18, 18, 18), 0)
color headerBgColor = color.rgb(30, 40, 50)
color subHeaderBgColor = color.rgb(40, 50, 60)
color textColor = color.white
color primaryHighlightColor = color.rgb(65, 105, 225)
color positiveColor = color.rgb(0, 200, 100)
color negativeColor = color.rgb(220, 50, 50)
color neutralColor = color.rgb(180, 180, 180)
// Create Table
var table masterTable = table.new(position.top_right, 5, 30, bgcolor=darkBgColor, border_width=1)
// Header
table.cell(masterTable, 0, 0, "🔍 LMT Stratejisi Detay Raporu", bgcolor=headerBgColor, text_color=textColor, text_size=size.small)
table.cell(masterTable, 1, 0, "", bgcolor=headerBgColor)
table.cell(masterTable, 2, 0, "", bgcolor=headerBgColor)
table.cell(masterTable, 3, 0, "", bgcolor=headerBgColor)
table.cell(masterTable, 4, 0, "", bgcolor=headerBgColor)
// Trading Parameters Section
table.cell(masterTable, 0, 1, "📊 Strateji Parametreleri", bgcolor=subHeaderBgColor, text_color=textColor, text_size=size.small)
table.cell(masterTable, 1, 1, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 2, 1, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 3, 1, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 4, 1, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 0, 2, "İşlem Modu", text_color=textColor)
table.cell(masterTable, 1, 2, mode, text_color=primaryHighlightColor)
table.cell(masterTable, 0, 3, "Lot Stratejisi", text_color=textColor)
table.cell(masterTable, 1, 3, lotStrategy, text_color=primaryHighlightColor)
table.cell(masterTable, 2, 2, "Grid Hesaplama", text_color=textColor)
table.cell(masterTable, 3, 2, grid_calculation, text_color=primaryHighlightColor)
table.cell(masterTable, 2, 3, "Referans Fiyat", text_color=textColor)
table.cell(masterTable, 3, 3, str.tostring(referencePrice, "#.##") + " TL", text_color=neutralColor,tooltip="Stratejinin hesaplandığı referans fiyat")
// Grid Information Section
table.cell(masterTable, 0, 4, "🏁 Grid Bilgileri", bgcolor=subHeaderBgColor, text_color=textColor, text_size=size.small)
table.cell(masterTable, 1, 4, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 2, 4, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 3, 4, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 4, 4, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 0, 5, "Toplam Grid Sayısı", text_color=textColor)
table.cell(masterTable, 1, 5, str.tostring(gridLevels), text_color=primaryHighlightColor)
table.cell(masterTable, 2, 5, "Grid Aralığı (%)", text_color=textColor)
float longGridInterval = calcGridIntervals(longLevelsArray)
table.cell(masterTable, 3, 5, str.tostring(longGridInterval, "#.##"), text_color=longGridInterval > 0 ? positiveColor : negativeColor)
table.cell(masterTable, 0, 6, "10:00 Açılış Fiyatı", text_color=textColor)
table.cell(masterTable, 1, 6, str.tostring(openingPrice, "#.##") + " TL", text_color=neutralColor,tooltip="Alt Limit: " + str.tostring(openingPrice * 0.90, "#.##") + " TL\nÜst Limit: " + str.tostring(openingPrice * 1.10, "#.##") + " TL")
table.cell(masterTable, 2, 6, "Grid Aralığı (±%10)", text_color=textColor)
table.cell(masterTable, 3, 6, str.tostring(gridsInPriceRange), text_color=primaryHighlightColor, tooltip=priceRangeGridStatus)
table.cell(masterTable, 0, 7, "En Yüksek Grid", text_color=textColor)
table.cell(masterTable, 1, 7, na(highestGridInRange) ? "-" : str.tostring(highestGridInRange, "#.##") + " TL", text_color=positiveColor)
table.cell(masterTable, 2, 7, "En Düşük Grid", text_color=textColor)
table.cell(masterTable, 3, 7, na(lowestGridInRange) ? "-" : str.tostring(lowestGridInRange, "#.##") + " TL", text_color=negativeColor)
// Order Information Section
table.cell(masterTable, 0, 8, "📈 Emir Bilgileri", bgcolor=subHeaderBgColor, text_color=textColor, text_size=size.small)
table.cell(masterTable, 1, 8, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 2, 8, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 3, 8, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 4, 8, "", bgcolor=subHeaderBgColor)
table.cell(masterTable, 0, 9, "Toplam SAT Emirleri", text_color=textColor)
table.cell(masterTable, 1, 9, str.tostring(totalSellOrderCount), text_color=primaryHighlightColor, tooltip=totalSellOrderStatus)
table.cell(masterTable, 2, 9, "Aktif İşlemler", text_color=textColor)
int remainingUpperGridOrders = userUpperGridCount + userUpperGridCount10 - totalClosedTrades
remainingUpperGridOrders := math.max(remainingUpperGridOrders, 0)
int totalActivePositions = remainingUpperGridOrders + getTotalActivePositions()
table.cell(masterTable, 3, 9, str.tostring(totalActivePositions), text_color=totalActivePositions > 0 ? positiveColor : negativeColor)
table.cell(masterTable, 0, 10, "Kapanan İşlemler", text_color=textColor)
table.cell(masterTable, 1, 10, str.tostring(totalClosedTrades), text_color=primaryHighlightColor)Editor is loading...
Leave a Comment