(window.webpackJsonp=window.webpackJsonp||[]).push([[99],{"4NSu":function(e,t,a){"use strict";a.r(t),a.d(t,"_frontmatter",(function(){return d})),a.d(t,"default",(function(){return p}));var n=a("Fcif"),l=a("dV/x"),r=(a("mXGw"),a("/FXl")),i=a("TjRS"),b=a("wCAC");a("l1C2");const c=["components"],d={};void 0!==d&&d&&d===Object(d)&&Object.isExtensible(d)&&!Object.prototype.hasOwnProperty.call(d,"__filemeta")&&Object.defineProperty(d,"__filemeta",{configurable:!0,value:{name:"_frontmatter",filename:"src/components/tr/Scripting.mdx"}});const o={_frontmatter:d},m=i.a;function p(e){let{components:t}=e,a=Object(l.a)(e,c);return Object(r.b)(m,Object(n.a)({},o,a,{components:t,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"özel-göstergeler-için-api"},"Özel göstergeler için API"),Object(r.b)(b.e,{mdxType:"Lead"},"Kendi göstergelerinizi JavaScript ile yazın, bunları grafiğin yanında güvenli bir sandbox içinde çalıştırın ve diğer kullanıcılarla paylaşın. API size piyasa verilerini (mumlar, emir defterleri, kümeler, likidasyonlar, türev verileri), çizim araçlarını, teknik analiz yardımcılarını ve alarmları sunar."),Object(r.b)("h2",{id:"yapay-zekâ-ile-gösterge-oluşturma"},"Yapay zekâ ile gösterge oluşturma"),Object(r.b)("p",null,"API'nin tamamı, dil modelleri için tek bir metin dosyası olarak da mevcuttur: ",Object(r.b)("a",{parentName:"p",href:"../../public/AI-scripting.txt"},"AI-scripting.txt"),". Bu dosyayı ChatGPT, Claude, Gemini veya başka bir LLM'e ekleyin ve istediğiniz göstergeyi tarif edin."),Object(r.b)("p",null,"Örnek istem:"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-text"},"Read the attached [AI-scripting.txt] https://mobchart.com/docs/public/AI-scripting.txt file and use it as the only reference for the MobChart scripting API.\n\nCreate a custom indicator that plots a 20-period EMA and a 50-period EMA on the chart. Color the candles green when EMA20 is above EMA50 and red otherwise.\n\nUse only the documented API. Do not invent functions. Return the complete indicator code.\n")),Object(r.b)("h2",{id:"sandbox-ve-sınırlar"},"Sandbox ve sınırlar"),Object(r.b)(b.b,{type:"warning",title:"Geçerli sınırlar",mdxType:"Callout"},Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"Script'ler güvenli bir JavaScript sandbox'ı içinde çalışır."),Object(r.b)("li",{parentName:"ul"},"Bir script'in çalışma süresi sınırı ",Object(r.b)("inlineCode",{parentName:"li"},"1500ms"),"'dir."),Object(r.b)("li",{parentName:"ul"},"Döndürülen veri dizileri en fazla ",Object(r.b)("strong",{parentName:"li"},"5000")," elemanla sınırlıdır, bu nedenle bir gösterge ",Object(r.b)("strong",{parentName:"li"},"5000 mumdan")," daha geriye bakamaz."),Object(r.b)("li",{parentName:"ul"},"Tek bir göstergede en fazla ",Object(r.b)("strong",{parentName:"li"},"8 veri kaynağı isteğine")," izin verilir."),Object(r.b)("li",{parentName:"ul"},"Tek bir çalıştırmada en fazla ",Object(r.b)("strong",{parentName:"li"},"3 HTTP isteğine")," (",Object(r.b)("inlineCode",{parentName:"li"},"http.get")," / ",Object(r.b)("inlineCode",{parentName:"li"},"http.post"),") izin verilir, bkz. ",Object(r.b)("strong",{parentName:"li"},"HTTP İstekleri"),"."))),Object(r.b)("h2",{id:"gösterge-geliştirme"},"Gösterge Geliştirme"),Object(r.b)("p",null,"Gösterge geliştirme, göstergenin etkinleştirileceği grafiğin yanına yerleştirilebilen ayrı bir widget içinde yapılır."),Object(r.b)(b.f,{src:"../../public/chart_code.png",mdxType:"Screenshot"}),Object(r.b)("h2",{id:"gösterge-oluşturma"},"Gösterge Oluşturma"),Object(r.b)("h3",{id:"definetitle-description-type-ispublic-ispubliccode-options"},Object(r.b)("inlineCode",{parentName:"h3"},"define(title, description, type, isPublic, isPublicCode, options)")),Object(r.b)("p",null,"Göstergeyi sisteme kaydeder."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Parametre"),Object(r.b)("th",{parentName:"tr",align:null},"Tür"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"title")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")),Object(r.b)("td",{parentName:"tr",align:null},"Gösterge adı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"description")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")),Object(r.b)("td",{parentName:"tr",align:null},"Kısa açıklama")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"type")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"'onchart'")," ","|"," ",Object(r.b)("inlineCode",{parentName:"td"},"'offchart'")),Object(r.b)("td",{parentName:"tr",align:null},"Göstergenin yerleşimi (grafik üzerinde veya ayrı bir panelde)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"isPublic")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"true")," ","|"," ",Object(r.b)("inlineCode",{parentName:"td"},"false")),Object(r.b)("td",{parentName:"tr",align:null},"Göstergenin herkese açık olup olmadığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"isPublicCode")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"true")," ","|"," ",Object(r.b)("inlineCode",{parentName:"td"},"false")),Object(r.b)("td",{parentName:"tr",align:null},"Kaynak kodun herkese açık olup olmadığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"options")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"object")," (isteğe bağlı)"),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"{ fullRange, warmup }"),", aşağıya bakın")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'define("My Indicator", "Shows EMA line", "onchart", true, false);\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Hesaplama aralığı.")," Varsayılan olarak bir script, grafiğin yalnızca hesaplama gerektiren kısmını hesaplar: geriye kaydırarak yüklenen mumlar veya yenilemede en son mumlar, ayrıca bunlardan önceki, hesaplamalar için gereken ancak döndürülmeyen ",Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"warmup"))," kadar geçmiş mum (varsayılan 500). Göstergeniz daha fazla veya daha az geçmişe ihtiyaç duyuyorsa ",Object(r.b)("inlineCode",{parentName:"p"},"warmup")," değerini belirtin, örneğin bir EMA(200) için ",Object(r.b)("inlineCode",{parentName:"p"},"{ warmup: 200 }"),". Değerleri veya şekilleri ",Object(r.b)("strong",{parentName:"p"},"görünür aralığın tamamına")," bağlı olan bir script (ilk görünür mumdan itibaren VWAP, kümülatif delta, pencere maksimumundaki bir etiket, grafik boyunca çizilen seviyeler) ",Object(r.b)("inlineCode",{parentName:"p"},"{ fullRange: true }")," belirtmelidir, aksi takdirde daha fazla geçmiş yüklendikten sonra sonuçları hatalı olur. Mod, script her kaydedildiğinde ",Object(r.b)("inlineCode",{parentName:"p"},"define()")," üzerinden okunur: ",Object(r.b)("inlineCode",{parentName:"p"},"fullRange")," olmadan kaydedilmiş bir script kısmi olarak hesaplanır, bu nedenle mevcut kümülatif script'leri düzenlerken bu bayrağı ekleyin. Kısmi script'ler parçalar halinde de yüklenir: uzun bir geçmiş üzerinde böyle bir script'i açtığınızda grafik önce en yeni 500 mumu (veya daha fazlaysa ",Object(r.b)("inlineCode",{parentName:"p"},"warmup")," kadar mumu) ister ve daha eski kısımlar birer istekle ardından gelir, böylece görünür kısım hemen görüntülenir. ",Object(r.b)("inlineCode",{parentName:"p"},"fullRange")," olan script'ler her zaman tüm aralık üzerinde tek bir istekte hesaplanır."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'define("Window max", "Label at the highest visible high", "onchart", true, true, { fullRange: true });\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"onchart")," ve ",Object(r.b)("strong",{parentName:"p"},"offchart")," için gösterge yerleşimi:"),Object(r.b)(b.f,{src:"../../public/onchart_offchart.png",mdxType:"Screenshot"}),Object(r.b)("h2",{id:"giriş-parametreleri"},"Giriş Parametreleri"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"input"))," ve ",Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"style"))," sınıfları, kullanıcı tarafından yapılandırılabilen ayarlar oluşturmanızı sağlar (PineScript'teki ",Object(r.b)("inlineCode",{parentName:"p"},"input()")," işlevine benzer)."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number(title, defaultValue, min, max, step)")),Object(r.b)("td",{parentName:"tr",align:null},"Sayısal giriş")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"range(title, defaultValue, min, max, step)")),Object(r.b)("td",{parentName:"tr",align:null},"Aralık girişi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"select(title, defaultValue, values)")),Object(r.b)("td",{parentName:"tr",align:null},"Açılır liste seçimi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"color(title, defaultValue)")),Object(r.b)("td",{parentName:"tr",align:null},"Renk seçici")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"boolean(title, defaultValue)")),Object(r.b)("td",{parentName:"tr",align:null},"Mantıksal (boolean) giriş")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Ana parametreler için örnek (input):")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const length = input.number("Period", 14, 1, 100, 1);\nconst type = input.select("Type", \'sma\', [\'sma\', \'ema\']);\nconst color = input.color("Line Color", "#FF0000");\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Veya görsel parametreler için (style):")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const length = style.number("Size", 14, 1, 100, 1);\nconst color = style.select("Background Color", \'#FF0000\', ["#FF0000", "#AA0000", "#BB0000"]);\nconst color = style.color("Background Color", "#FF0000");\n')),Object(r.b)(b.f,{src:"../../public/input_style.png",mdxType:"Screenshot"}),Object(r.b)("h2",{id:"veri-kaynakları"},"Veri Kaynakları"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"source"))," sınıfı piyasa verilerini sunucudan alır. Mum tabanlı metotlar aynı parametreleri alır; iki canlı anlık görüntü ise farklıdır: ",Object(r.b)("inlineCode",{parentName:"p"},"orderbook()")," bir borsa ve bir ticker, ",Object(r.b)("inlineCode",{parentName:"p"},"levels()")," ise bir borsa ve bir ayarlar nesnesi alır."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Parametre"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"exchange"),", ",Object(r.b)("inlineCode",{parentName:"td"},"ticker"),", ",Object(r.b)("inlineCode",{parentName:"td"},"timeframe")),Object(r.b)("td",{parentName:"tr",align:null},"Varsayılan olarak göstergenin açıldığı grafiğin değerlerini alır. Başka bir piyasanın verilerini almak için farklı değerler verin.")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"lookback")),Object(r.b)("td",{parentName:"tr",align:null},"Geçerli tarihten itibaren geçmiş mum sayısı, ",Object(r.b)("strong",{parentName:"td"},"en fazla 5000"),".")))),Object(r.b)(b.b,{type:"note",title:"Veriler grafik mumlarına hizalanır",mdxType:"Callout"},Object(r.b)("p",null,"Grafik zaman dilimindeki ",Object(r.b)("inlineCode",{parentName:"p"},"ohlcv()"),", ",Object(r.b)("inlineCode",{parentName:"p"},"depths()"),", ",Object(r.b)("inlineCode",{parentName:"p"},"clusters()"),", ",Object(r.b)("inlineCode",{parentName:"p"},"liquidations()")," ve ",Object(r.b)("inlineCode",{parentName:"p"},"moreData()")," ",Object(r.b)("strong",{parentName:"p"},"her grafik mumu için bir kayıt")," döndürür: ",Object(r.b)("inlineCode",{parentName:"p"},"depths()[i]"),", ",Object(r.b)("inlineCode",{parentName:"p"},"ohlcv()[i]")," mumunun emir defteridir, ",Object(r.b)("inlineCode",{parentName:"p"},"moreData()[i]")," onun türev verilerini içerir ve bu böyle devam eder. Bir kaynağın bir mum için kaydı olmadığında (örneğin emir defteri geçmişi mum geçmişinden kısa olduğunda) kayıt ",Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"null"))," olur, bu yüzden bunu her zaman kontrol edin. ",Object(r.b)("inlineCode",{parentName:"p"},"lookback")," ile veya başka bir zaman dilimi için istenen veriler olduğu gibi döndürülür ve ",Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"startTime"))," ile eşleştirilmelidir. Grafik piyasasının ",Object(r.b)("inlineCode",{parentName:"p"},"ohlcv()")," verisi yalnızca sunucunun zaten yüklediği mumları içerir, asla ",Object(r.b)("inlineCode",{parentName:"p"},"null")," içermez; daha eski geçmiş hâlâ yüklenirken gösterge otomatik olarak yeniden hesaplanır.")),Object(r.b)("h3",{id:"ohlcvexchange-ticker-timeframe-lookback"},Object(r.b)("inlineCode",{parentName:"h3"},"ohlcv(exchange, ticker, timeframe, lookback?)")),Object(r.b)("p",null,"Mum verileri."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'[\n {\n "open": 115886.17,\n "high": 115911.96,\n "low": 115764.27,\n "close": 115815.16,\n "volume": 228.41528,\n "startTime": 1757699100000\n },\n {...},\n ...\n] \n')),Object(r.b)("h3",{id:"depthsexchange-ticker-timeframe-lookback"},Object(r.b)("inlineCode",{parentName:"h3"},"depths(exchange, ticker, timeframe, lookback?)")),Object(r.b)("p",null,"Geçmiş emir defteri anlık görüntüleri, her mum için bir tane. Yalnızca en büyük limit emirler saklanır (ısı haritasının arkasındaki veriler)."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'[\n {\n "data": {\n "asks": {\n "109425": 5.467,\n "109495": 3.564,\n ...\n },\n "bids": {\n "33000": 3.746,\n "35000": 16.49,\n ...\n }\n },\n "startTime": 1757699100000\n },\n {...},\n ...\n]\n\n')),Object(r.b)("h3",{id:"clustersexchange-ticker-timeframe-lookback"},Object(r.b)("inlineCode",{parentName:"h3"},"clusters(exchange, ticker, timeframe, lookback?)")),Object(r.b)("p",null,"Küme (footprint) verileri: mumun her fiyat seviyesindeki alış ve satış hacmi."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'[\n {\n "data": {\n "totalBuy": 16053385,\n "totalSell": 20490989,\n "0.8654": { "buy": 286845, "sell": 336689 },\n "0.8653": { "buy": 271848, "sell": 259167 },\n "0.8652": { "buy": 318814, "sell": 373497 },\n ...\n },\n "startTime": 1757699100000\n },\n {...},\n ...\n]\n\n')),Object(r.b)("h3",{id:"liquidationsexchange-ticker-timeframe-lookback"},Object(r.b)("inlineCode",{parentName:"h3"},"liquidations(exchange, ticker, timeframe, lookback?)")),Object(r.b)("p",null,"Mumun her fiyat seviyesindeki likidasyon hacmi (yalnızca vadeli işlem piyasaları). Biçimi ",Object(r.b)("inlineCode",{parentName:"p"},"clusters()")," ile aynıdır."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'[\n {\n "data": {\n "totalBuy": 16053385,\n "totalSell": 20490989,\n "0.8654": { "buy": 286845, "sell": 336689 },\n "0.8653": { "buy": 271848, "sell": 259167 },\n "0.8652": { "buy": 318814, "sell": 373497 },\n ...\n },\n "startTime": 1757699100000\n },\n {...},\n ...\n]\n\n')),Object(r.b)("h3",{id:"moredataexchange-ticker-timeframe-lookback"},Object(r.b)("inlineCode",{parentName:"h3"},"moreData(exchange, ticker, timeframe, lookback?)")),Object(r.b)("p",null,"Mum başına türev verileri: fonlama oranı, açık pozisyon (OI) mumu, long/short oranları (yalnızca vadeli işlem piyasaları)."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'[\n { \n "data": {\n "FR": 0.00003777, // Fonlama oranı\n "OI": { // Açık pozisyon (OI) mumu\n "open": 85645.708,\n "close": 83496.225,\n "high": 85801.04,\n "low": 83397.918\n },\n "LS": { "l": 0.5426, "s": 0.4574 }, // Long/Short oranı\n "taLS": { "l": 0.552, "s": 0.448 }, // En iyi trader\'ların hesap oranı\n "tpLS": { "l": 0.5996, "s": 0.4004 } // En iyi trader\'ların pozisyon oranı\n },\n "startTime": 1757699100000\n },\n {...},\n ...\n]\n\n')),Object(r.b)("h3",{id:"orderbookexchange-ticker"},Object(r.b)("inlineCode",{parentName:"h3"},"orderbook(exchange, ticker)")),Object(r.b)("p",null,"Canlı emir defteri anlık görüntüsü: mumlara bağlı olmayan, güncel tam defter."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'{\n "asks": {\n "109425": 5.467,\n "109495": 3.564,\n ...\n },\n "bids": {\n "109400": 1.2,\n "109390": 0.8,\n ...\n }\n}\n\n')),Object(r.b)("p",null,"Seviyeler sıralı değildir; defterle çalışmak için ",Object(r.b)("inlineCode",{parentName:"p"},"ta")," emir defteri yardımcılarını (",Object(r.b)("inlineCode",{parentName:"p"},"ta.bestBid"),", ",Object(r.b)("inlineCode",{parentName:"p"},"ta.sumBids"),", ...) kullanın.\nMumların geçmiş defterleri ",Object(r.b)("inlineCode",{parentName:"p"},"depths()")," üzerinden gelir: ",Object(r.b)("inlineCode",{parentName:"p"},"depths()[i].data")," aynı biçimdedir, ancak orada yalnızca en büyük limit emirler saklanır."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},"const candles = source.ohlcv(); // exchange, ticker ve timeframe parametreleri varsayılan olarak geçerli grafiğin değerlerini alır.\nconst closes = candles.map(c => c.close);\n")),Object(r.b)("h3",{id:"levelsexchange-settings"},Object(r.b)("inlineCode",{parentName:"h3"},"levels(exchange, settings?)")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Likidite tarayıcısının")," seviyeleri: bir borsadaki büyük bekleyen limit emirler, tarayıcı sayfasındaki ayarlarla aynı şekilde filtrelenir. Canlı veridir, mumlara bağlı değildir. Bir plan olmadan yakınlık %1 ile, ömür 60 dakika ile ve sonuç 200 seviye ile sınırlıdır; bir planla 2000 seviyeye kadar. En büyük emirler önce gelir. Bir veri kaynağı isteği olarak sayılır."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'{\n "BTCUSDT": {\n "asks": {\n "109500": {\n "price": 109500,\n "quantity": 42.5, // baz varlık cinsinden büyüklük\n "quantityUSDT": 4653750, // kote para birimi cinsinden büyüklük\n "distance": 0.62, // güncel fiyattan uzaklık, yüzde\n "duration": 184, // emrin kaç dakikadır beklediği\n "touches": 2,\n "currentTouches": 1,\n "filledPercent": 12.4,\n "strength": 95.5, // yüzde, tarayıcıya bakın\n "diversity": 11,\n "isContinuous": true,\n "date": "2026-10-10T06:12:03.000Z"\n },\n ...\n },\n "bids": { ... },\n "volume1hTotal": 183000000\n },\n ...\n}\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Ayarlar")," (tümü isteğe bağlı):"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Ayar"),Object(r.b)("th",{parentName:"tr",align:null},"Varsayılan"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"tickers")),Object(r.b)("td",{parentName:"tr",align:null},"tüm ticker'lar"),Object(r.b)("td",{parentName:"tr",align:null},"borsanın yalnızca bu ticker'ları")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"exclude")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"[]")),Object(r.b)("td",{parentName:"tr",align:null},"atlanacak ticker'lar")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"type")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"all"')),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"all"'),", ",Object(r.b)("inlineCode",{parentName:"td"},'"bids"')," veya ",Object(r.b)("inlineCode",{parentName:"td"},'"asks"'))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"nearness")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"5")),Object(r.b)("td",{parentName:"tr",align:null},"güncel fiyattan en fazla uzaklık, yüzde")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"size")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"100000")),Object(r.b)("td",{parentName:"tr",align:null},"kote para birimi cinsinden en küçük emir büyüklüğü")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"lifespan")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0")),Object(r.b)("td",{parentName:"tr",align:null},"emrin en az kaç dakikadır beklediği")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"touches"),", ",Object(r.b)("inlineCode",{parentName:"td"},"currentTouches")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0")),Object(r.b)("td",{parentName:"tr",align:null},"seviyenin / mevcut emrin en az dokunma sayısı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"filled")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0")),Object(r.b)("td",{parentName:"tr",align:null},"emrin en az dolmuş kısmı, yüzde")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"strength"),", ",Object(r.b)("inlineCode",{parentName:"td"},"diversity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0")),Object(r.b)("td",{parentName:"tr",align:null},"tarayıcıdaki gibi en az güç (yüzde) ve çeşitlilik")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"continuousOnly")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"false")),Object(r.b)("td",{parentName:"tr",align:null},"kaybolup geri gelen emirleri atla")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"volume1h")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0")),Object(r.b)("td",{parentName:"tr",align:null},"ticker'ın kote para birimi cinsinden en az 1 saatlik hacmi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"spotAndFutures")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"false")),Object(r.b)("td",{parentName:"tr",align:null},"yalnızca hem spot hem de vadeli piyasada bulunan ticker'lar")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"limit")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"500")),Object(r.b)("td",{parentName:"tr",align:null},"en fazla seviye sayısı, en büyükler önce (en fazla 2000)")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'// grafik piyasasının fiyatı etrafındaki büyük emirler, büyüklük ve ömürle etiketlenmiş yatay çizgiler olarak\nconst candles = await source.ohlcv();\nconst lastDate = candles.at(-1).startTime;\nconst levels = await source.levels(currentExchange, { tickers: [currentTicker], nearness: 3, size: 300000, lifespan: 30 });\nconst own = levels[currentTicker] || { asks: {}, bids: {} };\nfor (const [type, color] of [["asks", "#ef5350"], ["bids", "#26a69a"]]) {\n for (const [price, level] of Object.entries(own[type])) {\n plot.horizontalLine(`${type} ${price}`, +price, color, 0.8, Math.min(4, 1 + level.quantityUSDT / 1e6));\n plot.text(`${type} ${price} label`, `${(level.quantityUSDT / 1e6).toFixed(2)}M · ${level.duration}m`, lastDate, +price, 10, color);\n }\n}\n')),Object(r.b)("h2",{id:"http-i̇stekleri"},"HTTP İstekleri"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"http"))," sınıfı harici HTTP API'lerine istek gönderir ve yanıtı döndürür; böylece bir gösterge ",Object(r.b)("inlineCode",{parentName:"p"},"source")," içinde bulunmayan verileri kullanabilir: kendi sunucunuz, herkese açık bir REST API, bir zincir üstü (on-chain) metrik sağlayıcısı, ...\n",Object(r.b)("inlineCode",{parentName:"p"},"source.*")," gibi bu çağrılar da senkron işlevler olarak yazılır, ",Object(r.b)("inlineCode",{parentName:"p"},"await")," gerekmez."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"get(url, options?)")),Object(r.b)("td",{parentName:"tr",align:null},"GET isteği")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"post(url, body?, options?)")),Object(r.b)("td",{parentName:"tr",align:null},"POST isteği. Nesne veya dizi olan ",Object(r.b)("inlineCode",{parentName:"td"},"body")," JSON olarak gönderilir (",Object(r.b)("inlineCode",{parentName:"td"},"Content-Type: application/json"),"), string olduğu gibi gönderilir")))),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"options")," değeri ",Object(r.b)("inlineCode",{parentName:"p"},"{ headers: { name: value } }")," biçimindedir — en fazla ",Object(r.b)("strong",{parentName:"p"},"10")," özel başlık (örneğin ",Object(r.b)("inlineCode",{parentName:"p"},"Authorization")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"x-api-key"),")."),Object(r.b)("p",null,"Her iki metot da aynı yanıt nesnesini döndürür ve ",Object(r.b)("strong",{parentName:"p"},"asla hata fırlatmaz"),":"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'{\n ok: true, // durum 200–299\n status: 200, // HTTP durumu, istek gönderilmediyse 0\n headers: { "content-type": "application/json", ... },\n data: { ... }, // JSON olarak ayrıştırılmış yanıt gövdesi, gövde JSON değilse null\n text: "...", // ham yanıt gövdesi\n error: null // istek başarısız olduysa nedeni: "timeout", "url not allowed", "too many requests", ...\n}\n')),Object(r.b)(b.b,{type:"warning",title:"Sınırlar ve güvenlik",mdxType:"Callout"},Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"Script çalıştırması başına en fazla ",Object(r.b)("strong",{parentName:"li"},"3 istek")," ve kullanıcı başına ",Object(r.b)("strong",{parentName:"li"},"dakikada 60 istek"),"."),Object(r.b)("li",{parentName:"ul"},"Yalnızca herkese açık ",Object(r.b)("inlineCode",{parentName:"li"},"http://")," / ",Object(r.b)("inlineCode",{parentName:"li"},"https://")," URL'leri. ",Object(r.b)("inlineCode",{parentName:"li"},"localhost"),", özel ağlar ve bulut meta veri adreslerine yapılan istekler reddedilir, yönlendirmeler ",Object(r.b)("strong",{parentName:"li"},"izlenmez")," (",Object(r.b)("inlineCode",{parentName:"li"},"3xx")," yanıtı olduğu gibi döndürülür)."),Object(r.b)("li",{parentName:"ul"},"İstekler MobChart proxy sunucularından gönderilir: hedef API proxy adresini görür, sizin IP adresinizi asla görmez."),Object(r.b)("li",{parentName:"ul"},"Zaman aşımı ",Object(r.b)("strong",{parentName:"li"},"5 saniye"),", istek gövdesi en fazla ",Object(r.b)("strong",{parentName:"li"},"64 KB"),", yanıt en fazla ",Object(r.b)("strong",{parentName:"li"},"512 KB")," (daha büyük yanıtlar ",Object(r.b)("inlineCode",{parentName:"li"},"response too large")," hatasıyla başarısız olur)."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"Host"),", ",Object(r.b)("inlineCode",{parentName:"li"},"Cookie"),", ",Object(r.b)("inlineCode",{parentName:"li"},"Proxy-*"),", ",Object(r.b)("inlineCode",{parentName:"li"},"X-Forwarded-*")," ve diğer bağlantı başlıkları ayarlanamaz, ",Object(r.b)("inlineCode",{parentName:"li"},"Set-Cookie")," asla döndürülmez."),Object(r.b)("li",{parentName:"ul"},"Alarm kontrolleri script'inizi sunucuda düzenli olarak çalıştırır: API her kontrolde çağrılır, hedef API'nin istek sınırlarını göz önünde bulundurun."),Object(r.b)("li",{parentName:"ul"},"Herkese açık bir göstergenin kodu (",Object(r.b)("inlineCode",{parentName:"li"},"isPublicCode = true"),") herkes tarafından görülebilir — API anahtarlarını asla herkese açık koda koymayın."))),Object(r.b)("p",null,"Olası ",Object(r.b)("inlineCode",{parentName:"p"},"error")," değerleri: ",Object(r.b)("inlineCode",{parentName:"p"},"invalid url"),", ",Object(r.b)("inlineCode",{parentName:"p"},"url not allowed"),", ",Object(r.b)("inlineCode",{parentName:"p"},"invalid headers"),", ",Object(r.b)("inlineCode",{parentName:"p"},"invalid body"),", ",Object(r.b)("inlineCode",{parentName:"p"},"body too large"),", ",Object(r.b)("inlineCode",{parentName:"p"},"response too large"),", ",Object(r.b)("inlineCode",{parentName:"p"},"timeout"),", ",Object(r.b)("inlineCode",{parentName:"p"},"too many requests"),", ",Object(r.b)("inlineCode",{parentName:"p"},"rate limit"),", ",Object(r.b)("inlineCode",{parentName:"p"},"busy"),", ",Object(r.b)("inlineCode",{parentName:"p"},"proxy unavailable"),", ",Object(r.b)("inlineCode",{parentName:"p"},"network error"),"."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek (GET):")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'define("Fear & Greed", "Crypto Fear & Greed index", "offchart", true, true);\n\nconst res = http.get("https://api.alternative.me/fng/?limit=30");\nif (!res.ok) logger.log("request failed:", res.status, res.error);\n\n// res.data = { data: [{ value: "71", timestamp: "1757635200" }, ...] }\nconst byDay = {};\n(res.data?.data || []).forEach((row) => { byDay[Number(row.timestamp) * 1000] = Number(row.value); });\n\nconst candles = source.ohlcv();\nconst values = candles.map((c) => c ? byDay[c.startTime - (c.startTime % 86400000)] ?? null : null);\nplot.lineSeries("Fear & Greed", values, "#00C8FF");\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek (POST):")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const candles = source.ohlcv();\nconst last = candles.at(-1);\n\nconst res = http.post(\n "https://example.com/api/signals",\n { exchange: currentExchange, ticker: currentTicker, close: last.close },\n { headers: { "x-api-key": "YOUR_KEY" } } // yalnızca gizli kodda\n);\nlogger.log("signal sent:", res.ok, res.status, res.data);\n')),Object(r.b)("h2",{id:"global-değişkenler"},"Global Değişkenler"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Değişken"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"),Object(r.b)("th",{parentName:"tr",align:null},"Örnek"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"currentExchange")),Object(r.b)("td",{parentName:"tr",align:null},"Grafikteki geçerli borsa"),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"binance"),", ",Object(r.b)("inlineCode",{parentName:"td"},"binanceFutures"),", ",Object(r.b)("inlineCode",{parentName:"td"},"coinbase"),", ...")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"currentTicker")),Object(r.b)("td",{parentName:"tr",align:null},"Grafikteki geçerli ticker (biçim borsaya bağlıdır)"),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"BTCUSDT"),", ",Object(r.b)("inlineCode",{parentName:"td"},"ADA-USD"),", ",Object(r.b)("inlineCode",{parentName:"td"},"BTC/USDC"),", ...")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"currentTimeframe")),Object(r.b)("td",{parentName:"tr",align:null},"Grafikteki geçerli zaman dilimi"),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"1m"),", ",Object(r.b)("inlineCode",{parentName:"td"},"5m"),", ",Object(r.b)("inlineCode",{parentName:"td"},"15m"),", ...")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},"const candles = source.ohlcv(currentExchange, currentTicker, currentTimeframe);\nconst closes = candles.map(c => c.close);\n")),Object(r.b)("h2",{id:"günlük-kaydı"},"Günlük Kaydı"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"logger"))," sınıfı bilgi çıktısı vermek ve hata ayıklamak için kullanılır."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"log(...args)")),Object(r.b)("td",{parentName:"tr",align:null},"Günlüğe bir kayıt ekler (uzunluk ve adet sınırlarıyla)")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const candles = source.ohlcv();\nlogger.log("First candle:", candles?.[0]);\n')),Object(r.b)(b.f,{src:"../../public/code_editor_log.png",mdxType:"Screenshot"}),Object(r.b)("h2",{id:"görselleştirme"},"Görselleştirme"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"plot"))," sınıfı grafik öğelerinin ve veri serilerinin çizilmesinden sorumludur."),Object(r.b)("h3",{id:"geometrik-şekiller"},"Geometrik Şekiller"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"box(title, date1, price1, date2, price2, fill, opacity, stroke, strokeOpacity, strokeWidth)")),Object(r.b)("td",{parentName:"tr",align:null},"Dikdörtgen")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"square(title, date1, price1, size, fill, opacity, stroke, strokeOpacity, strokeWidth)")),Object(r.b)("td",{parentName:"tr",align:null},"Kare")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"diamond(title, date1, price1, size, fill, opacity, stroke, strokeOpacity, strokeWidth)")),Object(r.b)("td",{parentName:"tr",align:null},"Eşkenar dörtgen")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"triangle(title, date1, price1, size, fill, opacity, stroke, strokeOpacity, strokeWidth)")),Object(r.b)("td",{parentName:"tr",align:null},"Üçgen")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"circle(title, date1, price1, radius = 10, fill, opacity, stroke, strokeOpacity, strokeWidth)")),Object(r.b)("td",{parentName:"tr",align:null},"Daire")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"text(title, value, date1, price1, fontSize, fill, opacity)")),Object(r.b)("td",{parentName:"tr",align:null},"Grafik üzerinde metin")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"table(title, rows, options)")),Object(r.b)("td",{parentName:"tr",align:null},"Grafiğin bir köşesine sabitlenmiş tablo, bkz. ",Object(r.b)("a",{parentName:"td",href:"#tablolar"},"Tablolar"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"straightLine(title, date1, price1, date2, price2, stroke, strokeOpacity, strokeWidth, strokeDasharray)")),Object(r.b)("td",{parentName:"tr",align:null},"Düz çizgi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"horizontalLine(title, price1, stroke, strokeOpacity, strokeWidth, strokeDasharray)")),Object(r.b)("td",{parentName:"tr",align:null},"Grafiğin tamamı boyunca yatay çizgi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"verticalLine(title, date1, stroke, strokeOpacity, strokeWidth, strokeDasharray)")),Object(r.b)("td",{parentName:"tr",align:null},"Grafiğin tamamı boyunca dikey çizgi")))),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Parametre"),Object(r.b)("th",{parentName:"tr",align:null},"Veri Türü"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"title")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")),Object(r.b)("td",{parentName:"tr",align:null},"Öğe adı (grafikteki benzersiz tanımlayıcı)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"date1")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")," (zaman damgası, ms)"),Object(r.b)("td",{parentName:"tr",align:null},"Başlangıç zaman damgası")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"price1")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")),Object(r.b)("td",{parentName:"tr",align:null},"Başlangıç fiyatı (Y ekseni koordinatı)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"date2")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")," (zaman damgası, ms)"),Object(r.b)("td",{parentName:"tr",align:null},"Bitiş zaman damgası (çizgiler ve dikdörtgenler için)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"price2")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")),Object(r.b)("td",{parentName:"tr",align:null},"Bitiş fiyatı (çizgiler ve dikdörtgenler için)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"size")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")),Object(r.b)("td",{parentName:"tr",align:null},"Şekil boyutu (piksel)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"radius")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")),Object(r.b)("td",{parentName:"tr",align:null},"Daire yarıçapı (varsayılan 10)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fill")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")," (hex, ör. ",Object(r.b)("inlineCode",{parentName:"td"},'"#FF0000"'),")"),Object(r.b)("td",{parentName:"tr",align:null},"Şeklin dolgu rengi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"opacity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")," (0–1)"),Object(r.b)("td",{parentName:"tr",align:null},"Dolgu opaklığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"stroke")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")," (hex, ör. ",Object(r.b)("inlineCode",{parentName:"td"},'"#000000"'),")"),Object(r.b)("td",{parentName:"tr",align:null},"Kontur rengi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"strokeOpacity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")," (0–1)"),Object(r.b)("td",{parentName:"tr",align:null},"Kontur opaklığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"strokeWidth")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")),Object(r.b)("td",{parentName:"tr",align:null},"Kontur kalınlığı (piksel)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"strokeDasharray")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"array")," (ör. ",Object(r.b)("inlineCode",{parentName:"td"},"[5,5]"),")"),Object(r.b)("td",{parentName:"tr",align:null},"Kesikli çizgi stili")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fontSize")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")),Object(r.b)("td",{parentName:"tr",align:null},"Metin boyutu (piksel)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"value")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")),Object(r.b)("td",{parentName:"tr",align:null},"Metin değeri (",Object(r.b)("inlineCode",{parentName:"td"},"text")," metodu için)")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'plot.text("Text object", "Hello world!", 1757699100000, 115000, 10, "#00C8FF", 0.5);\nplot.straightLine(`${namePrefix} Open`, level.timeStart, level.open, level.timeEnd, level.open, color);\nplot.circle(`${namePrefix} High`, level.timeStart, level.high, 3, color);\n')),Object(r.b)("p",null,"Grafikte en fazla ",Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"3000"))," şekil görüntülenebilir."),Object(r.b)("h3",{id:"veri-serileri"},"Veri Serileri"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"lineSeries(title, values, stroke, strokeOpacity, strokeWidth, strokeDasharray)")),Object(r.b)("td",{parentName:"tr",align:null},"Çizgi grafiği")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"barSeries(title, values, fill, opacity)")),Object(r.b)("td",{parentName:"tr",align:null},"Çubuk grafiği")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"candleSeries(title, openValues, closeValues, highValues, lowValues, fill, opacity)")),Object(r.b)("td",{parentName:"tr",align:null},"Mumlar")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"areaSeries(title, values, fill, opacity, stroke, strokeOpacity, strokeWidth, base)")),Object(r.b)("td",{parentName:"tr",align:null},"Çizgi ile ",Object(r.b)("inlineCode",{parentName:"td"},"base")," arasındaki dolgulu alan (varsayılan: grafiğin alt kenarı)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"bandSeries(title, upperValues, lowerValues, fill, opacity, stroke, strokeOpacity, strokeWidth, step)")),Object(r.b)("td",{parentName:"tr",align:null},"İki seri arasındaki dolgulu bant, her mum kendi rengini ve opaklığını korur")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"profile(title, values, options)")),Object(r.b)("td",{parentName:"tr",align:null},"Görünür mumların hacim profili tarzı histogramı, bkz. ",Object(r.b)("a",{parentName:"td",href:"#profiller"},"Profiller"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"histogram(title, rows, options)")),Object(r.b)("td",{parentName:"tr",align:null},"Profil olarak çizilen hazır bir fiyat haritası, bkz. ",Object(r.b)("a",{parentName:"td",href:"#histogramlar"},"Histogramlar"))))),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Parametre"),Object(r.b)("th",{parentName:"tr",align:null},"Veri Türü"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"values"),", ",Object(r.b)("inlineCode",{parentName:"td"},"upperValues"),", ",Object(r.b)("inlineCode",{parentName:"td"},"lowerValues")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"(number \\| null)[]")),Object(r.b)("td",{parentName:"tr",align:null},"Her mum için bir değer, ",Object(r.b)("inlineCode",{parentName:"td"},"null")," mumu gizler")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fill"),", ",Object(r.b)("inlineCode",{parentName:"td"},"stroke")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"string")," (hex) veya ",Object(r.b)("inlineCode",{parentName:"td"},"function")),Object(r.b)("td",{parentName:"tr",align:null},"Renk ya da mumun rengini döndüren bir işlev: ",Object(r.b)("inlineCode",{parentName:"td"},"lineSeries"),", ",Object(r.b)("inlineCode",{parentName:"td"},"barSeries"),", ",Object(r.b)("inlineCode",{parentName:"td"},"candleSeries")," ve ",Object(r.b)("inlineCode",{parentName:"td"},"areaSeries")," için ",Object(r.b)("inlineCode",{parentName:"td"},"(value, i)"),", ",Object(r.b)("inlineCode",{parentName:"td"},"bandSeries")," için ",Object(r.b)("inlineCode",{parentName:"td"},"(upper, lower, i)"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"opacity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")," (0–1) veya ",Object(r.b)("inlineCode",{parentName:"td"},"function")),Object(r.b)("td",{parentName:"tr",align:null},"Dolgu opaklığı, ",Object(r.b)("inlineCode",{parentName:"td"},"areaSeries")," / ",Object(r.b)("inlineCode",{parentName:"td"},"bandSeries")," için ",Object(r.b)("inlineCode",{parentName:"td"},"(value, i)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"(upper, lower, i)")," işlevi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"base")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number")," ","|"," ",Object(r.b)("inlineCode",{parentName:"td"},"null")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"areaSeries")," taban seviyesi, ",Object(r.b)("inlineCode",{parentName:"td"},"null")," = grafiğin alt kenarı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"step")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"boolean")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"bandSeries")," stili: ",Object(r.b)("inlineCode",{parentName:"td"},"true")," = mum başına bir sütun (varsayılan), ",Object(r.b)("inlineCode",{parentName:"td"},"false")," = kesintisiz bir çokgen")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'plot.lineSeries("EMA", ta.ema(closes, 20), "#00C8FF");\n// her mum kendi rengini korur: kapanış EMA\'nın üzerindeyse yeşil, altındaysa kırmızı\nplot.lineSeries("Close", closes, (v, i) => v > ema[i] ? colorBuy : colorSell);\nplot.barSeries("Premium %", premiumPercents, ((d) => d > 0 ? color1 : color2), 1);\nplot.candleSeries(\n "Candles",\n opens, closes, highs, lows,\n (v, i) => {\n return opens?.[i] > closes?.[i] ? colorBuy : colorSell\n }\n);\nplot.areaSeries("Volume", volumes, "#00C8FF", 0.3);\n// mum başına renklendirilmiş alan, büyük mumlarda daha opak\nplot.areaSeries("Delta", deltas, (v, i) => v >= 0 ? colorBuy : colorSell, (v, i) => Math.min(1, Math.abs(v) / maxDelta));\n\n// kapanış ile onun %1 altı arasındaki baskı bandı, mumun dengesizlik oranına göre renklendirilir ve gölgelendirilir\nplot.bandSeries(\n "Bid pressure",\n closes,\n closes.map(c => c * 0.99),\n (upper, lower, i) => ratios[i] > 0 ? bidColor : askColor,\n (upper, lower, i) => Math.abs(ratios[i]) / 100\n);\n')),Object(r.b)("p",null,"Grafikte en fazla ",Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"20"))," veri serisi görüntülenebilir."),Object(r.b)("h3",{id:"profiller"},"Profiller"),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"plot.profile(title, values, options?)"),", yerleşik hacim profili gibi fiyata göre bir histogram çizer. ",Object(r.b)("inlineCode",{parentName:"p"},"values[i]"),", ",Object(r.b)("inlineCode",{parentName:"p"},"ohlcv()")," içindeki ",Object(r.b)("inlineCode",{parentName:"p"},"i")," mumunun fiyat haritasıdır: ",Object(r.b)("inlineCode",{parentName:"p"},"{ price: value }")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"{ price: { buy, sell } }")," (bir ",Object(r.b)("inlineCode",{parentName:"p"},"clusters()")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"liquidations()")," kaydının ",Object(r.b)("inlineCode",{parentName:"p"},"data")," alanı olduğu gibi verilebilir) ya da satırı olmayan bir mum için ",Object(r.b)("inlineCode",{parentName:"p"},"null"),". ",Object(r.b)("strong",{parentName:"p"},"Grafikte görünen")," mumların satırları, grafiğin kendisinde fiyat adımı başına toplanır; böylece profil yeni bir çalıştırma olmadan kaydırma, yakınlaştırma ve daha fazla yüklemeyi takip eder. Tekil değerler tek renkle çizilir (negatif bir değer ",Object(r.b)("inlineCode",{parentName:"p"},"fill2")," rengini alır), çiftler çubuğu alış ve satış kısımlarına böler ve delta modunu mümkün kılar. ",Object(r.b)("inlineCode",{parentName:"p"},"profile()")," bir alarm tanıtıcısı döndürmez."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Seçenek"),Object(r.b)("th",{parentName:"tr",align:null},"Varsayılan"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"step")),Object(r.b)("td",{parentName:"tr",align:null},"grafiğin tick boyutu"),Object(r.b)("td",{parentName:"tr",align:null},"fiyat birimi cinsinden satır yüksekliği, fiyatlar aşağı doğru bu adıma yuvarlanır")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"orient")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"right"')),Object(r.b)("td",{parentName:"tr",align:null},"çubukların büyüdüğü kenar, ",Object(r.b)("inlineCode",{parentName:"td"},'"right"')," veya ",Object(r.b)("inlineCode",{parentName:"td"},'"left"'))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"width")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"30")),Object(r.b)("td",{parentName:"tr",align:null},"en geniş satır, grafik genişliğinin yüzdesi olarak")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fill")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"#26a69a"')),Object(r.b)("td",{parentName:"tr",align:null},"değerin veya alış kısmının rengi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fill2")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"#ef5350"')),Object(r.b)("td",{parentName:"tr",align:null},"satış kısmının rengi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"opacity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0.6")),Object(r.b)("td",{parentName:"tr",align:null},"çubuk opaklığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"delta")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"false")),Object(r.b)("td",{parentName:"tr",align:null},"toplam yerine ",Object(r.b)("inlineCode",{parentName:"td"},"buy - sell")," çiz, yalnızca çiftler için")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"poc")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"true")),Object(r.b)("td",{parentName:"tr",align:null},"en büyük değere sahip satırda bir çizgi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"valueArea")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"70")),Object(r.b)("td",{parentName:"tr",align:null},"POC çevresinde tam opaklıkla çizilen toplamın yüzdesi, devre dışı bırakmak için ",Object(r.b)("inlineCode",{parentName:"td"},"false"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"valueAreaOpacity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0.3")),Object(r.b)("td",{parentName:"tr",align:null},"değer alanı dışındaki satırların opaklığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"labels")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"true")),Object(r.b)("td",{parentName:"tr",align:null},"yer olduğunda çubukların üzerinde satır toplamları")))),Object(r.b)("p",null,"Sınırlar: çalıştırma başına ",Object(r.b)("strong",{parentName:"p"},"3")," profil, mum başına ",Object(r.b)("strong",{parentName:"p"},"300")," satır, profil başına ",Object(r.b)("strong",{parentName:"p"},"200000")," satır. Sınırları aşan satırlar atılır ve çalıştırma bir not kaydeder."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'// grafiğin hacim profili, yerleşik araçla aynı görünüm\nconst rows = await source.clusters();\nplot.profile("Volume", rows.map((r) => r?.data ?? null), { step: 5 });\n\n// yalnızca büyük işlemler, delta renkli, sol kenarda\nconst minSize = input.number("Min trade size", 50, 0, 100000, 1);\nconst big = rows.map((r) => {\n if (!r?.data) return null;\n const out = {};\n for (const [price, c] of Object.entries(r.data)) {\n if (price === "totalBuy" || price === "totalSell") continue;\n if (c.buy + c.sell >= minSize) out[price] = { buy: c.buy, sell: c.sell };\n }\n return out;\n});\nplot.profile("Large trades", big, { step: 5, delta: true, orient: "left" });\n')),Object(r.b)("h3",{id:"histogramlar"},"Histogramlar"),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"plot.histogram(title, rows, options?)"),", sizin önceden oluşturduğunuz bir histogramı çizer: ",Object(r.b)("strong",{parentName:"p"},"grafiğin tamamı için tek bir fiyat haritası"),", mumlardan hiçbir şey toplanmaz. Satırlar mumlara aitse ve görünüm görünür aralığı takip etmeliyse ",Object(r.b)("inlineCode",{parentName:"p"},"profile()"),", satırlar nihaiyse ",Object(r.b)("inlineCode",{parentName:"p"},"histogram()")," kullanın: bir emir defteri anlık görüntüsü, script'in hesapladığı seviyeler, başka bir piyasanın verileri."),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"rows"),", ",Object(r.b)("inlineCode",{parentName:"p"},"profile()")," için bir mum kaydıyla aynı biçimlere sahiptir: ",Object(r.b)("inlineCode",{parentName:"p"},"{ price: value }"),", ",Object(r.b)("inlineCode",{parentName:"p"},"{ price: { buy, sell } }")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"[price, buy, sell]")," satırlarından oluşan bir liste. Tekil bir değer tek renkle çizilir (negatif bir değer ",Object(r.b)("inlineCode",{parentName:"p"},"fill2")," rengini alır), çiftler çubuğu alış ve satış kısımlarına böler ve delta modunu mümkün kılar. Seçenekler ",Object(r.b)("inlineCode",{parentName:"p"},"profile()")," ile aynıdır, yukarıdaki tabloya bakın."),Object(r.b)("p",null,"Histogram, çalıştırmanın son mumuyla tarihlendirilir ve grafik bir başlığın ",Object(r.b)("strong",{parentName:"p"},"en yeni")," histogramını tutar; böylece daha eski mumlar üzerindeki kısmi çalıştırmalar (geçmiş yüklenirken) asla güncel olanın yerini almaz. Script'in her yenilenmesinde yeniden çizilir, bu nedenle bir emir defteri histogramı canlı defteri takip eder. ",Object(r.b)("inlineCode",{parentName:"p"},"histogram()")," bir alarm tanıtıcısı döndürmez."),Object(r.b)("p",null,"Sınırlar: çalıştırma başına ",Object(r.b)("strong",{parentName:"p"},"3")," histogram, ",Object(r.b)("strong",{parentName:"p"},"5000")," satır. Sınırı aşan satırlar atılır ve çalıştırma bir not kaydeder."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek, emir defteri:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'// sağ kenarda profil olarak canlı emir defteri: alış emirleri alış renginde, satış emirleri satış renginde\nconst book = await source.orderbook();\nconst rows = {};\nfor (const [price, qty] of Object.entries(book.bids)) rows[price] = { buy: qty };\nfor (const [price, qty] of Object.entries(book.asks)) rows[price] = { sell: qty };\nplot.histogram("Order book", rows, { step: 5, width: 25, valueArea: false, poc: false });\n')),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek, kendi seviyeleriniz:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'// kendi histogramınız: son 100 mumun küme hacmi, yakın tarihli mumlar daha ağır basar\nconst rows = await source.clusters();\nconst weighted = {};\nrows.slice(-100).forEach((r, i, arr) => {\n if (!r?.data) return;\n const weight = (i + 1) / arr.length;\n for (const [price, c] of Object.entries(r.data)) {\n if (price === "totalBuy" || price === "totalSell") continue;\n const cell = weighted[price] || (weighted[price] = { buy: 0, sell: 0 });\n cell.buy += (c.buy || 0) * weight;\n cell.sell += (c.sell || 0) * weight;\n }\n});\nplot.histogram("Weighted volume", weighted, { step: 5, orient: "left", delta: true });\n')),Object(r.b)("h3",{id:"tablolar"},"Tablolar"),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"plot.table(title, rows, options?)"),", grafik panelinin bir köşesine sabitlenmiş küçük bir tablo çizer: çoklu zaman dilimi özetleri, yüklenen aralığın istatistikleri, sinyal panoları. ",Object(r.b)("inlineCode",{parentName:"p"},"rows")," satırlardan oluşan bir dizidir, bir satır hücrelerden oluşan bir dizidir ve bir hücre bir string, bir sayı veya ",Object(r.b)("inlineCode",{parentName:"p"},"{ text, color, bg, align, bold }")," olabilir. Aynı köşedeki tablolar sırayla üst üste dizilir. Bir tablo çalıştırmanın son mumuyla tarihlendirilir ve grafik bir başlığın ",Object(r.b)("strong",{parentName:"p"},"en yeni")," tablosunu tutar; böylece daha eski mumlar üzerindeki kısmi çalıştırmalar (geçmiş yüklenirken) asla güncel olanın yerini almaz. Tablolar 500 px'den dar grafiklerde çizilmez. Bir tablo fareyle sürüklenebilir: konum çalışma alanıyla birlikte kaydedilir ve script ",Object(r.b)("inlineCode",{parentName:"p"},"position")," seçeneğini değiştirdiğinde sıfırlanır. ",Object(r.b)("inlineCode",{parentName:"p"},"table()")," bir alarm tanıtıcısı döndürmez."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Seçenek"),Object(r.b)("th",{parentName:"tr",align:null},"Varsayılan"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"position")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"top-right"')),Object(r.b)("td",{parentName:"tr",align:null},"panelin köşesi: ",Object(r.b)("inlineCode",{parentName:"td"},'"top-right"'),", ",Object(r.b)("inlineCode",{parentName:"td"},'"top-left"'),", ",Object(r.b)("inlineCode",{parentName:"td"},'"bottom-right"'),", ",Object(r.b)("inlineCode",{parentName:"td"},'"bottom-left"'))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"header")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"false")),Object(r.b)("td",{parentName:"tr",align:null},"ilk satır gölgeli bir şerit üzerinde kalın çizilir")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fontSize")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"11")),Object(r.b)("td",{parentName:"tr",align:null},"px cinsinden metin boyutu, 8 ile 16 arası")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"color"),", ",Object(r.b)("inlineCode",{parentName:"td"},"bg"),", ",Object(r.b)("inlineCode",{parentName:"td"},"border")),Object(r.b)("td",{parentName:"tr",align:null},"temaya göre"),Object(r.b)("td",{parentName:"tr",align:null},"varsayılan metin, panel ve ızgara renkleri; bir hücre ",Object(r.b)("inlineCode",{parentName:"td"},"color")," ve ",Object(r.b)("inlineCode",{parentName:"td"},"bg")," değerlerini geçersiz kılabilir")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"opacity")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"0.85")),Object(r.b)("td",{parentName:"tr",align:null},"panel opaklığı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"align")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},'"left"')),Object(r.b)("td",{parentName:"tr",align:null},"varsayılan hücre hizalaması, ",Object(r.b)("inlineCode",{parentName:"td"},'"left"'),", ",Object(r.b)("inlineCode",{parentName:"td"},'"center"')," veya ",Object(r.b)("inlineCode",{parentName:"td"},'"right"'))))),Object(r.b)("p",null,"Sınırlar: çalıştırma başına ",Object(r.b)("strong",{parentName:"p"},"3")," tablo, ",Object(r.b)("strong",{parentName:"p"},"50")," satır, ",Object(r.b)("strong",{parentName:"p"},"10")," sütun, hücre başına ",Object(r.b)("strong",{parentName:"p"},"100")," karakter. Daha uzun metin üç noktayla kesilir, bir sütun grafik genişliğinin en fazla %30'unu kaplar."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const candles = await source.ohlcv();\nconst closes = candles.map((c) => c.close);\nconst rsi = ta.rsi(closes, 14);\nconst last = rsi.at(-1);\nconst change = (closes.at(-1) / closes.at(-25) - 1) * 100;\n\nplot.table("Stats", [\n ["Metric", "Value"],\n ["RSI 14", { text: last.toFixed(1), color: last > 70 ? "#ef5350" : last < 30 ? "#26a69a" : undefined }],\n ["Change 24 bars", { text: change.toFixed(2) + "%", align: "right" }],\n ["Volume", candles.slice(-24).reduce((s, c) => s + c.volume, 0).toFixed(0)],\n], { position: "top-right", header: true });\n')),Object(r.b)("h2",{id:"teknik-analiz"},"Teknik Analiz"),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"ta"))," sınıfı PineScript v5 ",Object(r.b)("inlineCode",{parentName:"p"},"ta.*")," işlevlerini uygular. Pine mum mum çalışır; burada ise her işlev serilerin tamamını alır (diziler, mum başına bir değer, en eskisi önce) ve doğrudan çizilebilen aynı uzunlukta bir seri döndürür. Periyot henüz dolmamışken değerler ",Object(r.b)("inlineCode",{parentName:"p"},"null")," olur ve ",Object(r.b)("inlineCode",{parentName:"p"},"null")," girdiler Pine'daki ",Object(r.b)("inlineCode",{parentName:"p"},"na")," gibi yayılır. ",Object(r.b)("inlineCode",{parentName:"p"},"high"),", ",Object(r.b)("inlineCode",{parentName:"p"},"low"),", ",Object(r.b)("inlineCode",{parentName:"p"},"close")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"volume")," değerlerini örtük olarak okuyan Pine işlevleri bu dizileri argüman olarak alır."),Object(r.b)("p",null,"Birden fazla seri döndüren işlevler (",Object(r.b)("inlineCode",{parentName:"p"},"bb"),", ",Object(r.b)("inlineCode",{parentName:"p"},"kc"),", ",Object(r.b)("inlineCode",{parentName:"p"},"macd"),", ",Object(r.b)("inlineCode",{parentName:"p"},"stoch"),", ",Object(r.b)("inlineCode",{parentName:"p"},"dmi"),", ",Object(r.b)("inlineCode",{parentName:"p"},"supertrend"),") adlandırılmış özelliklere de sahip bir dizi döndürür: ",Object(r.b)("inlineCode",{parentName:"p"},"const [middle, upper, lower] = ta.bb(closes, 20, 2)")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"ta.bb(closes, 20, 2).upper"),"."),Object(r.b)("h3",{id:"yardımcı-i̇şlevler"},"Yardımcı İşlevler"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"highest(values, length)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"lowest(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"length")," mum boyunca en yüksek / en düşük değer")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"highestbars(values, length)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"lowestbars(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"En yüksek / en düşük muma olan uzaklık (0 veya negatif)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"max(values)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"min(values)")),Object(r.b)("td",{parentName:"tr",align:null},"Her muma kadar olan tüm zamanların en yüksek / en düşük değeri")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"range(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"highest - lowest"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"change(values, length = 1)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"values[i] - values[i - length]"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"mom(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Momentum")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"roc(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Değişim oranı, %")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"cum(values)")),Object(r.b)("td",{parentName:"tr",align:null},"Kümülatif toplam")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"rising(values, length)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"falling(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Değer, önceki ",Object(r.b)("inlineCode",{parentName:"td"},"length")," değerin her birinin üzerinde / altında")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"variance(values, length, biased = true)")),Object(r.b)("td",{parentName:"tr",align:null},"Varyans")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"stdev(values, length, biased = true)")),Object(r.b)("td",{parentName:"tr",align:null},"Standart sapma")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"dev(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Ortalama mutlak sapma")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"median(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Medyan")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"mode(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"En sık görülen değer (eşitlikte en küçüğü)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"percentile_linear_interpolation(values, length, percentage)")),Object(r.b)("td",{parentName:"tr",align:null},"Yüzdelik, en yakın iki sıra arasında doğrusal interpolasyon")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"percentile_nearest_rank(values, length, percentage)")),Object(r.b)("td",{parentName:"tr",align:null},"Yüzdelik, en yakın sıra yöntemi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"percentrank(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Önceki ",Object(r.b)("inlineCode",{parentName:"td"},"length")," değerden mevcut değere eşit veya ondan küçük olanların yüzdesi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"correlation(series1, series2, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Korelasyon katsayısı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"crossover(series1, series2)")),Object(r.b)("td",{parentName:"tr",align:null},"Yukarı yönlü kesişim (argümanlardan biri sayı olabilir: ",Object(r.b)("inlineCode",{parentName:"td"},"ta.crossover(rsi, 70)"),")")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"crossunder(series1, series2)")),Object(r.b)("td",{parentName:"tr",align:null},"Aşağı yönlü kesişim")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"cross(series1, series2)")),Object(r.b)("td",{parentName:"tr",align:null},"Herhangi bir kesişim")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"barssince(condition)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"condition")," (boolean dizisi) en son true olduğundan bu yana geçen mum sayısı")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"valuewhen(condition, values, occurrence = 0)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"condition"),", ",Object(r.b)("inlineCode",{parentName:"td"},"occurrence")," kez önce true olduğunda ",Object(r.b)("inlineCode",{parentName:"td"},"values")," değeri")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"pivothigh(values, leftbars, rightbars)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"pivotlow(...)")),Object(r.b)("td",{parentName:"tr",align:null},"Onaylayan mumdaki pivot değeri, pivotun kendisi ",Object(r.b)("inlineCode",{parentName:"td"},"rightbars")," mum öncedir")))),Object(r.b)("h3",{id:"hareketli-ortalamalar"},"Hareketli Ortalamalar"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"sma(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Basit hareketli ortalama")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"ema(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Üssel hareketli ortalama")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"rma(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Wilder hareketli ortalaması (RSI / ATR tarafından kullanılır)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"wma(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Ağırlıklı hareketli ortalama")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"hma(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Hull hareketli ortalaması")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"alma(values, length, offset = 0.85, sigma = 6, floor = false)")),Object(r.b)("td",{parentName:"tr",align:null},"Arnaud Legoux hareketli ortalaması")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"swma(values)")),Object(r.b)("td",{parentName:"tr",align:null},"4 mum üzerinden simetrik ağırlıklı hareketli ortalama")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"vwma(values, volumes, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Hacim ağırlıklı hareketli ortalama")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"linreg(values, length, offset = 0)")),Object(r.b)("td",{parentName:"tr",align:null},"Doğrusal regresyon eğrisi")))),Object(r.b)("h3",{id:"osilatörler"},"Osilatörler"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"rsi(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Göreceli Güç Endeksi (RSI)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"cmo(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Chande Momentum Osilatörü")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"cog(values, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Ağırlık Merkezi (Center of Gravity)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"mfi(values, volumes, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Para Akışı Endeksi (",Object(r.b)("inlineCode",{parentName:"td"},"values")," genellikle hlc3'tür)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"tsi(values, shortLength, longLength)")),Object(r.b)("td",{parentName:"tr",align:null},"Gerçek Güç Endeksi (True Strength Index), -1..1")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"wpr(highs, lows, closes, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Williams %R")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"stoch(highs, lows, closes, period = 14, smoothK = 3, smoothD = 3)")),Object(r.b)("td",{parentName:"tr",align:null},"Stokastik ",Object(r.b)("inlineCode",{parentName:"td"},"[k, d]"),", ",Object(r.b)("inlineCode",{parentName:"td"},"smoothK = 1")," ham değeri verir")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"cci(values, length)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"cci(highs, lows, closes, length)")),Object(r.b)("td",{parentName:"tr",align:null},"Emtia Kanal Endeksi (ikinci biçimde tipik fiyat üzerinden)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"macd(values, fast = 12, slow = 26, signalPeriod = 9)")),Object(r.b)("td",{parentName:"tr",align:null},"MACD ",Object(r.b)("inlineCode",{parentName:"td"},"[macd, signal, histogram]"))))),Object(r.b)("h3",{id:"bantlar-ve-kanallar"},"Bantlar ve Kanallar"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"bb(values, length = 20, mult = 2)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"bollinger(...)")),Object(r.b)("td",{parentName:"tr",align:null},"Bollinger Bantları ",Object(r.b)("inlineCode",{parentName:"td"},"[middle, upper, lower]"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"bbw(values, length, mult)")),Object(r.b)("td",{parentName:"tr",align:null},"Bollinger Bantları genişliği ",Object(r.b)("inlineCode",{parentName:"td"},"(upper - lower) / middle"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"kc(values, highs, lows, closes, length = 20, mult = 2, useTrueRange = true)")),Object(r.b)("td",{parentName:"tr",align:null},"Keltner Kanalları ",Object(r.b)("inlineCode",{parentName:"td"},"[middle, upper, lower]"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"kcw(values, highs, lows, closes, length, mult, useTrueRange)")),Object(r.b)("td",{parentName:"tr",align:null},"Keltner Kanalları genişliği ",Object(r.b)("inlineCode",{parentName:"td"},"(upper - lower) / middle"))))),Object(r.b)("h3",{id:"trend-ve-volatilite"},"Trend ve Volatilite"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"tr(highs, lows, closes, handleNa = false)")),Object(r.b)("td",{parentName:"tr",align:null},"Gerçek aralık (",Object(r.b)("inlineCode",{parentName:"td"},"handleNa = true")," ilk mumda ",Object(r.b)("inlineCode",{parentName:"td"},"high - low")," verir)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"atr(highs, lows, closes, period = 14)")),Object(r.b)("td",{parentName:"tr",align:null},"Ortalama Gerçek Aralık (ATR)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"dmi(highs, lows, closes, diLength = 14, adxSmoothing = 14)")),Object(r.b)("td",{parentName:"tr",align:null},"Yönsel Hareket ",Object(r.b)("inlineCode",{parentName:"td"},"[plus, minus, adx]"))),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"adx(highs, lows, closes, period = 14)")),Object(r.b)("td",{parentName:"tr",align:null},"Ortalama Yönsel Endeks")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"sar(highs, lows, closes, start = 0.02, inc = 0.02, max = 0.2)")),Object(r.b)("td",{parentName:"tr",align:null},"Parabolik SAR")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"supertrend(highs, lows, closes, factor = 3, atrPeriod = 10)")),Object(r.b)("td",{parentName:"tr",align:null},"Supertrend ",Object(r.b)("inlineCode",{parentName:"td"},"[supertrend, direction]"),", direction ",Object(r.b)("inlineCode",{parentName:"td"},"-1")," = yükseliş trendi, ",Object(r.b)("inlineCode",{parentName:"td"},"1")," = düşüş trendi")))),Object(r.b)("h3",{id:"hacim"},"Hacim"),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"vwap(values, volumes, anchor?)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"vwap(highs, lows, closes, volumes, anchor?)")),Object(r.b)("td",{parentName:"tr",align:null},"Kümülatif VWAP (ikinci biçimde tipik fiyat üzerinden), ",Object(r.b)("inlineCode",{parentName:"td"},"anchor")," (boolean dizisi) true olan mumlarda yeniden başlar")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"obv(closes, volumes)")),Object(r.b)("td",{parentName:"tr",align:null},"Denge Hacmi (On Balance Volume)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"accdist(highs, lows, closes, volumes)")),Object(r.b)("td",{parentName:"tr",align:null},"Birikim / Dağılım")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"iii(highs, lows, closes, volumes)")),Object(r.b)("td",{parentName:"tr",align:null},"Gün İçi Yoğunluk Endeksi (Intraday Intensity Index)")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"pvt(closes, volumes)")),Object(r.b)("td",{parentName:"tr",align:null},"Fiyat-Hacim Trendi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"nvi(closes, volumes)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"pvi(closes, volumes)")),Object(r.b)("td",{parentName:"tr",align:null},"Negatif / Pozitif Hacim Endeksi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"wad(highs, lows, closes)")),Object(r.b)("td",{parentName:"tr",align:null},"Williams Birikim / Dağılım")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"wvad(opens, highs, lows, closes, volumes)")),Object(r.b)("td",{parentName:"tr",align:null},"Williams Değişken Birikim / Dağılım")))),Object(r.b)("h3",{id:"emir-defteri-yardımcıları"},"Emir Defteri Yardımcıları"),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"orderbook"),", ",Object(r.b)("inlineCode",{parentName:"p"},"source.orderbook()")," veya ",Object(r.b)("inlineCode",{parentName:"p"},"source.depths()[i].data")," değeridir: ",Object(r.b)("inlineCode",{parentName:"p"},"{asks: {price: quantity}, bids: {price: quantity}}"),"."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"orderbookSide(orderbook, side)")),Object(r.b)("td",{parentName:"tr",align:null},"Bir taraf (",Object(r.b)("inlineCode",{parentName:"td"},"'bids'")," / ",Object(r.b)("inlineCode",{parentName:"td"},"'asks'"),"), en iyi fiyat önce olacak şekilde sıralanmış ",Object(r.b)("inlineCode",{parentName:"td"},"[[price, quantity], ...]")," olarak")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"bestBid(orderbook)")," / ",Object(r.b)("inlineCode",{parentName:"td"},"bestAsk(orderbook)")),Object(r.b)("td",{parentName:"tr",align:null},"En iyi alış / satış fiyatı (boş bir defter için ",Object(r.b)("inlineCode",{parentName:"td"},"null"),")")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"sumBids(orderbook, percent, price, inQuote)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"price")," (varsayılan: en iyi alış) ile ",Object(r.b)("inlineCode",{parentName:"td"},"price * (1 - percent / 100)")," arasındaki kümülatif alış miktarı, ",Object(r.b)("inlineCode",{parentName:"td"},"inQuote = true")," ise ",Object(r.b)("inlineCode",{parentName:"td"},"price * quantity")," toplanır")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"sumAsks(orderbook, percent, price, inQuote)")),Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"price")," (varsayılan: en iyi satış) ile ",Object(r.b)("inlineCode",{parentName:"td"},"price * (1 + percent / 100)")," arasındaki kümülatif satış miktarı")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const candles = source.ohlcv();\nconst closes = candles.map(c => c.close);\nconst rsiValues = ta.rsi(closes, 14);\nplot.lineSeries("RSI", rsiValues, "#00C8FF");\n')),Object(r.b)("h2",{id:"alarmlar"},"Alarmlar"),Object(r.b)("p",null,"Kullanıcılar, grafikteki gösterge ayarlarının ",Object(r.b)("strong",{parentName:"p"},"Alarmlar")," sekmesinden göstergeniz için alarm oluşturabilir.\nAlarmlar sunucu tarafında düzenli olarak kontrol edilir, bildirimler ",Object(r.b)("strong",{parentName:"p"},"Telegram"),"'a ve/veya kullanıcının tanımladığı bir ",Object(r.b)("strong",{parentName:"p"},"Webhook URL"),"'sine gönderilir."),Object(r.b)("h3",{id:"alarm-ayarları--alertinput"},"Alarm Ayarları — ",Object(r.b)("inlineCode",{parentName:"h3"},"alertInput")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},Object(r.b)("inlineCode",{parentName:"strong"},"alertInput"))," sınıfı alarm ayarlarını tanımlar. Tam olarak ",Object(r.b)("inlineCode",{parentName:"p"},"input")," gibi çalışır, ancak alanlar ",Object(r.b)("strong",{parentName:"p"},"Alarmlar")," sekmesinde gösterilir ve her kullanıcı kendi alarmı için kendi değerlerini yapılandırır."),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"alertInput")," tanımı içermeyen script'ler alarmlar için kullanılamaz."),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"number(title, defaultValue, min, max, step)")),Object(r.b)("td",{parentName:"tr",align:null},"Sayısal giriş")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"range(title, defaultValue, min, max, step)")),Object(r.b)("td",{parentName:"tr",align:null},"Aralık girişi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"select(title, defaultValue, values)")),Object(r.b)("td",{parentName:"tr",align:null},"Açılır liste seçimi")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"color(title, defaultValue)")),Object(r.b)("td",{parentName:"tr",align:null},"Renk seçici")),Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"boolean(title, defaultValue)")),Object(r.b)("td",{parentName:"tr",align:null},"Mantıksal (boolean) giriş")))),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const alertVolumeThreshold = alertInput.number("Volume threshold", 1000, 0, 10000000, 1);\n')),Object(r.b)("h3",{id:"alarm-tetikleme--alertfire"},"Alarm Tetikleme — ",Object(r.b)("inlineCode",{parentName:"h3"},"alert.fire")),Object(r.b)("table",null,Object(r.b)("thead",{parentName:"table"},Object(r.b)("tr",{parentName:"thead"},Object(r.b)("th",{parentName:"tr",align:null},"Metot"),Object(r.b)("th",{parentName:"tr",align:null},"Açıklama"))),Object(r.b)("tbody",{parentName:"table"},Object(r.b)("tr",{parentName:"tbody"},Object(r.b)("td",{parentName:"tr",align:null},Object(r.b)("inlineCode",{parentName:"td"},"fire(title, message, date)")),Object(r.b)("td",{parentName:"tr",align:null},"Bir alarm bildirimi tetikler")))),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"Üç parametrenin tümü ",Object(r.b)("strong",{parentName:"li"},"zorunludur")," — ",Object(r.b)("inlineCode",{parentName:"li"},"title"),", ",Object(r.b)("inlineCode",{parentName:"li"},"message")," veya ",Object(r.b)("inlineCode",{parentName:"li"},"date")," eksik olan bir çağrı atlanır (günlüğe bir uyarı yazılır)."),Object(r.b)("li",{parentName:"ul"},"Alarm ",Object(r.b)("strong",{parentName:"li"},"başlığını sabit")," tutun, benzersiz başlıklar üretmeyin. Her başlık çalıştırma başına yalnızca bir kez tetiklenir (çalıştırma başına en fazla ",Object(r.b)("strong",{parentName:"li"},"20")," başlık)."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"date"),", sinyalin ait olduğu mumun ",Object(r.b)("inlineCode",{parentName:"li"},"startTime")," değeridir: aynı başlık yalnızca ",Object(r.b)("strong",{parentName:"li"},"daha yeni")," bir mum için tetiklendiğinde tekrar bildirim gönderir. Kullanıcının alarmını oluşturduğu andan daha eski mumlara ait sinyaller yok sayılır (spam önleme).")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Örnek:")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'if (candle.volume > alertVolumeThreshold) {\n alert.fire("High volume", `vol ${candle.volume}`, candle.startTime);\n}\n')),Object(r.b)("h3",{id:"şekil-alarmları--plotshapealert"},"Şekil Alarmları — ",Object(r.b)("inlineCode",{parentName:"h3"},"plot.(...).alert(...)")),Object(r.b)("p",null,"Tüm geometrik şekiller (",Object(r.b)("inlineCode",{parentName:"p"},"box"),", ",Object(r.b)("inlineCode",{parentName:"p"},"square"),", ",Object(r.b)("inlineCode",{parentName:"p"},"diamond"),", ",Object(r.b)("inlineCode",{parentName:"p"},"triangle"),", ",Object(r.b)("inlineCode",{parentName:"p"},"circle"),", ",Object(r.b)("inlineCode",{parentName:"p"},"straightLine"),", ",Object(r.b)("inlineCode",{parentName:"p"},"horizontalLine"),", ",Object(r.b)("inlineCode",{parentName:"p"},"verticalLine"),", ",Object(r.b)("inlineCode",{parentName:"p"},"text"),") ",Object(r.b)("inlineCode",{parentName:"p"},".alert()")," metoduna sahip bir tanıtıcı döndürür.\nAlarm otomatik olarak şeklin ",Object(r.b)("inlineCode",{parentName:"p"},"date1")," değeriyle tetiklenir, böylece spam önleme mantığı ek kod olmadan çalışır — mum başına sinyaller için önerilen yol budur."),Object(r.b)("p",null,"İki biçim:"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'// basit: şekil yeni bir tarih için her çizildiğinde tetiklenir\nplot.box(...).alert("High volume", `vol ${candle.volume}`);\n\n// callback: atlamak için hiçbir şey döndürmeyin, tetiklemek için [title, message] döndürün\nplot.box(...).alert((shape) => {\n if (candle.volume > alertVolumeThreshold)\n alert.fire("High volume", `vol ${candle.volume}`, candle.startTime);\n});\n')),Object(r.b)("p",null,"Callback şekil verilerini alır (",Object(r.b)("inlineCode",{parentName:"p"},"date1"),", ",Object(r.b)("inlineCode",{parentName:"p"},"price1"),", ",Object(r.b)("inlineCode",{parentName:"p"},"date2"),", ",Object(r.b)("inlineCode",{parentName:"p"},"price2"),", ...)."),Object(r.b)("h3",{id:"seri-alarmları--plotseriesalert"},"Seri Alarmları — ",Object(r.b)("inlineCode",{parentName:"h3"},"plot.(...).alert(...)")),Object(r.b)("p",null,"Veri serileri (",Object(r.b)("inlineCode",{parentName:"p"},"lineSeries"),", ",Object(r.b)("inlineCode",{parentName:"p"},"barSeries"),", ",Object(r.b)("inlineCode",{parentName:"p"},"candleSeries"),", ",Object(r.b)("inlineCode",{parentName:"p"},"areaSeries"),", ",Object(r.b)("inlineCode",{parentName:"p"},"bandSeries"),") de ",Object(r.b)("inlineCode",{parentName:"p"},".alert()")," tanıtıcısını döndürür.\nCallback ",Object(r.b)("strong",{parentName:"p"},"en son veri noktasını")," ve en son mum tarihini alır, alarm bu tarihle tetiklenir."),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"lineSeries")," / ",Object(r.b)("inlineCode",{parentName:"li"},"barSeries")," / ",Object(r.b)("inlineCode",{parentName:"li"},"areaSeries")," — callback son ",Object(r.b)("strong",{parentName:"li"},"değeri")," (bir sayı) alır"),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"candleSeries")," — callback son mumu ",Object(r.b)("inlineCode",{parentName:"li"},"{open, close, high, low}")," alır"),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"bandSeries")," — callback son ",Object(r.b)("inlineCode",{parentName:"li"},"{upper, lower}")," değerini alır")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'plot.lineSeries("RSI", rsiValues, color).alert((rsi, date) => {\n if (rsi > alertRsiThreshold) alert.fire("RSI high", `RSI ${rsi.toFixed(1)}`, latestCandle.startTime);\n});\n')),Object(r.b)("p",null,"Doğru kalmaya devam eden bir koşul ",Object(r.b)("strong",{parentName:"p"},"her yeni mumda")," bir kez bildirim gönderir. Tek seferlik sinyaller için kesişim tarzı koşullar (",Object(r.b)("inlineCode",{parentName:"p"},"ta.crossover"),") kullanın."),Object(r.b)("h3",{id:"tam-örnek"},"Tam Örnek"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const title = "Volume alerts";\nconst description = "Shows boxes on high-volume candles";\ndefine(title, description, "onchart", true, true);\n\nconst color = style.color("Color", "#00C8FF");\nconst volumeThreshold = input.number("Volume threshold", 1000, 0, 10000000, 1);\nconst alertVolumeThreshold = alertInput.number("Alert volume threshold", 5000, 0, 10000000, 1);\nconst alertCloseThreshold = alertInput.number("Alert close threshold", 100000, 0, 10000000, 1);\n\nconst candles = source.ohlcv();\nconst latestCandle = candles.at(-1);\nconst closes = candles.map(c => c.close);\n\n// seri alarmı: en son kapanışı kontrol eder\nplot.lineSeries("Closes", closes, color).alert((close, date) => {\n if (close > alertCloseThreshold) alert.fire("Close above threshold", `close ${close}`, latestCandle.startTime);\n});\n\nfor (let i = 0; i < candles.length; i++) {\n const candle = candles[i];\n\n if (candle.volume > volumeThreshold) {\n const right = i < candles.length - 1 ? candles[i + 1].startTime : candle.startTime + 60000;\n\n // şekil alarmı: kullanıcının alarm eşiğine göre kontrol edilir\n plot.box(`Volume ${i}`, candle.startTime, candle.high, right, candle.low, "#00C8FF", 0.3)\n .alert(() => {\n if (candle.volume > alertVolumeThreshold)\n alert.fire("High volume", `vol ${candle.volume}`, candle.startTime);\n });\n }\n}\n')),Object(r.b)("h2",{id:"gösterge-örnekleri"},"Gösterge örnekleri"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const title = "Your first indicator";\nconst description = "Shows closes lines on the chart";\nconst indicatorType = "onchart";\n\ndefine(title, description, indicatorType, true, true);\n\nconst color = input.color("Line Color", "#00C8FF");\nconst candles = source.ohlcv();\nconst closes = candles.map(c => c.close);\nplot.lineSeries("Closes", closes, color);\n\n')),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'define("Example Indicator", "Demonstrates basic plotting", "onchart", true, true);\n\nconst color = input.color("Line Color", "#00FF99");\nconst candles = source.ohlcv();\nconst closes = candles.map(c => c.close);\n\nconst ema20 = ta.ema(closes, 20);\nplot.lineSeries("EMA 20", ema20, color);\n\n')),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const title = "Colored Volume Bars"; \nconst description = "Volumes colored based on candle direction."; \nconst indicatorType = "onchart"; \nconst isPublic = true; \nconst isPublicCode = true; \n\ndefine(title, description, indicatorType, isPublic, isPublicCode); \n\n// OHLC mumlarını al\nconst candles = source.ohlcv(); \n\nconst colorUp = style.color("Color 1", "#2BB462"); // Yükselen fiyatlar için yeşilimsi renk\nconst colorDown = style.color("Color 2", "#FB4C51"); // Düşen fiyatlar için kırmızımsı renk\nconst volumes = candles.map(candle => candle.volume); \n\nplot.barSeries("Volume", volumes, (value, index) => {\n const currentCandle = candles[index]; \n return currentCandle.close >= currentCandle.open ? colorUp : colorDown; \n});\n\n')),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},"define('Coinbase Premium Index', 'Coinbase Premium Index', 'offchart', true, false);\n\nconst color1 = style.color(\"Color 1\", \"#2BB462\");\nconst color2 = style.color(\"Color 2\", \"#FB4C51\");\n\n// OHLC mumlarını al\nconst cbCandles = source.ohlcv('coinbase', 'BTC-USD');\nconst binanceCandles = source.ohlcv('binance', 'BTCUSDT');\n\n// Kapanışları çıkar\nconst cbCloses = cbCandles.map(c => c.close);\nconst binanceCloses = binanceCandles.map(c => c.close);\n\n// --- Coinbase Premium Index hesaplaması ---\nconst premiumPercent = cbCloses.map((cb, i) => {\n const b = binanceCloses[i];\n return ((cb - b) / b) * 100;\n});\n\n// Premium endeksini çiz\nplot.barSeries(\"Premium %\", premiumPercent, ((d) => d > 0 ? color1 : color2)) // Yüzde farkı\n\n")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const title = "Candles";\nconst description = "Simple candles draw";\nconst indicatorType = "offchart";\nconst isPublic = true;\nconst isPublicCode = true;\ndefine(title, description, indicatorType, isPublic, isPublicCode);\n\nconst colorBuy = style.color("Buy Color", "#2BB462");\nconst colorSell = style.color("Sell Color", "#7a3d3f");\nconst candles = source.ohlcv();\nconst closes = candles.map(c => c.close);\nconst opens = candles.map(c => c.open);\nconst highs = candles.map(c => c.high);\nconst lows = candles.map(c => c.low);\nplot.candleSeries(\n "Candles",\n opens, closes, highs, lows,\n (v, i) => {\n return opens?.[i] > closes?.[i] ? colorBuy : colorSell\n }\n);\n\n')),Object(r.b)("p",null,'Order Book Pressure (fiyat çevresindeki alış / satış derinliği dengesizlik bantları, alım satım terminallerindeki "Order Book Pressure" katmanlarına benzer):'),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-js"},'const title = "Order Book Pressure";\nconst description = "Bid / ask depth imbalance bands around the price";\ndefine(title, description, "onchart", true, true);\n\nconst minBidRatio = input.number("Min bid ratio %", 20, 0, 100, 1);\nconst minAskRatio = input.number("Min ask ratio %", 20, 0, 100, 1);\nconst depthFrom = input.select("Depth from", "0%", ["0%", "1%", "2.5%", "5%"]);\nconst depthTo = input.select("Depth to", "5%", ["1%", "2.5%", "5%", "10%"]);\n\nconst bidColor = style.color("Bid fill color", "#a5d6a7");\nconst askColor = style.color("Ask fill color", "#f1627e");\nconst extremeColor = style.color("Extreme color", "#ffff00");\nconst highlight = style.boolean("Highlight extremes", true);\nconst showRef = style.boolean("Show reference lines", true);\n\nconst alertMinRatio = alertInput.number("Alert min |ratio| %", 40, 0, 100, 1);\n\nconst bounds = [1, 2.5, 5, 10]; // kapanıştan % cinsinden derinlik bantları\nconst from = parseFloat(depthFrom);\nconst to = parseFloat(depthTo);\n\nconst candles = source.ohlcv();\nconst depths = source.depths();\nconst liveBook = source.orderbook();\n\n// her mumun emir defteri: depths()[i], candles[i] mumunun anlık görüntüsüdür (en büyük limit emirler), son mum canlı defteri kullanır\nconst lastIndex = candles.length - 1;\nconst books = candles.map((c, i) => {\n if (!c) return null;\n if (i === lastIndex && ta.bestBid(liveBook)) return liveBook;\n return depths[i]?.data || null;\n});\nconst closes = candles.map(c => c ? c.close : null);\n\n// her bandın % cinsinden dengesizlik oranı (pozitif = alışlar baskın, negatif = satışlar baskın)\nconst ratios = bounds.map((upper, b) => {\n const lower = b === 0 ? 0 : bounds[b - 1];\n return candles.map((c, i) => {\n const book = books[i];\n if (!c || !book) return null;\n const bid = ta.sumBids(book, upper, c.close) - ta.sumBids(book, lower, c.close);\n const ask = ta.sumAsks(book, upper, c.close) - ta.sumAsks(book, lower, c.close);\n const total = bid + ask;\n return total > 0 ? ((bid - ask) / total) * 100 : 0;\n });\n});\n\n// daha güçlü oran -> daha opak bant, aşırı oranlar aşırı rengi alır\nconst bandOpacity = (ratio) => Math.min(0.95, Math.abs(ratio || 0) / 70 * 0.95);\nconst bandColor = (ratio) => highlight && Math.abs(ratio || 0) >= 63 ? extremeColor : (ratio >= 0 ? bidColor : askColor);\n\nbounds.forEach((upper, b) => {\n const lower = b === 0 ? 0 : bounds[b - 1];\n if (from > lower || upper > to) return; // bant seçilen derinlik aralığının dışında\n\n const bidUpper = closes.map(c => c != null ? c * (1 - lower / 100) : null);\n const bidLower = closes.map(c => c != null ? c * (1 - upper / 100) : null);\n const askLower = closes.map(c => c != null ? c * (1 + lower / 100) : null);\n const askUpper = closes.map(c => c != null ? c * (1 + upper / 100) : null);\n\n if (showRef) {\n plot.lineSeries(`Bid ${upper}%`, bidLower, bidColor, 0.4);\n plot.lineSeries(`Ask ${upper}%`, askUpper, askColor, 0.4);\n }\n\n // alış baskısı: bant yalnızca alışların minimum oranın üzerinde baskın olduğu mumlarda doldurulur\n plot.bandSeries(\n `Bid pressure ${lower}-${upper}%`,\n bidUpper.map((v, i) => ratios[b][i] >= minBidRatio ? v : null),\n bidLower,\n (upper, lower, i) => bandColor(ratios[b][i]),\n (upper, lower, i) => bandOpacity(ratios[b][i])\n );\n\n // satış baskısı\n plot.bandSeries(\n `Ask pressure ${lower}-${upper}%`,\n askUpper.map((v, i) => ratios[b][i] <= -minAskRatio ? v : null),\n askLower,\n (upper, lower, i) => bandColor(ratios[b][i]),\n (upper, lower, i) => bandOpacity(ratios[b][i])\n );\n\n // son mumda alarm\n const latestRatio = ratios[b][lastIndex];\n if (latestRatio != null && Math.abs(latestRatio) >= alertMinRatio) {\n alert.fire(`Pressure ${lower}-${upper}%`, `ratio ${latestRatio.toFixed(1)}%`, candles[lastIndex].startTime);\n }\n});\n\n')))}void 0!==p&&p&&p===Object(p)&&Object.isExtensible(p)&&!Object.prototype.hasOwnProperty.call(p,"__filemeta")&&Object.defineProperty(p,"__filemeta",{configurable:!0,value:{name:"MDXContent",filename:"src/components/tr/Scripting.mdx"}}),p.isMDXComponent=!0}}]); //# sourceMappingURL=component---src-components-tr-scripting-mdx-b9daab1a40a70bd5a7f4.js.map