Kısa cevap: Pine Script, TradingView'ın grafik üzerinde çalışan indikatör, strateji ve alarm koşulları yazmak için geliştirdiği programlama dilidir. Scriptler TradingView sunucularında çalışır; güncel sürüm v6'dır ve dil borsaya doğrudan emir gönderemez.
Pine Script, TradingView'ın geliştirdiği ve grafik üzerinde çalışan indikatör, strateji ve alarm koşulları yazmak için kullanılan programlama dilidir. Scriptler kullanıcının bilgisayarında değil TradingView'ın sunucularında çalışır; Ekim 2026 itibarıyla güncel sürüm, Kasım 2024'te yayımlanan Pine Script v6'dır. Dil grafik analizi ve strateji testi için tasarlanmıştır, borsaya doğrudan emir gönderemez.
Pine Script ne işe yarar?
Kod, TradingView grafiğindeki Pine Editor'de yazılır; kaydedilen scriptler TradingView'ın sunucularında saklanır. Grafiğe eklenen bir script fiyat verisi üzerinde hesaplama yapar ve sonucu çizgi, şekil, etiket veya tablo olarak grafikte gösterir. Başlıca kullanım alanları şunlardır:
- Platformda hazır bulunmayan özel bir indikatör yazmak,
- kaynak kodu açık olan yerleşik indikatörleri kopyalayıp değiştirmek,
- bir alım-satım kuralını geçmiş veri üzerinde test etmek,
- belirli bir koşul gerçekleştiğinde tetiklenecek alarm tanımlamak.
TradingView dili bilinçli olarak hafif tutar ve onu genel amaçlı bir programlama diline büyük olasılıkla dönüştürmeyeceğini belirtir. Hesaplamalar bulutta yapıldığı için çalışma süresi, bellek, script boyutu ve ek sembollerden istenen veri miktarı sınırlıdır.
Her script ilk satırda //@version=6 ifadesiyle hangi sürümle yazıldığını belirtir. TradingView, yeni özelliklerin yalnızca v6'ya ekleneceğini açıklamıştır; sürüm notlarına göre dile 2026'da da düzenli olarak yeni özellikler eklendi. Sürüm ve özellikler değişebileceğinden güncel durum resmi sürüm notlarından kontrol edilmelidir.
Pine Script'te indikatör, strateji ve kütüphane farkı
Script türü, koddaki ilk bildirim satırıyla belirlenir:
indicator(): Hesaplama yapar ve grafik çizer. Alım-satım simülasyonu yapmaz;alertcondition()vealert()ile alarm koşulu üretebilir.strategy(): İndikatörün yapabildiklerine ek olarakstrategy.entry(),strategy.exit()vestrategy.close()gibi emir komutlarına erişir. Bu emirler gerçek değildir; TradingView'ın broker emülatörü tarafından simüle edilir.library(): Başka scriptlerin içe aktarıp kullanabileceği yeniden kullanılabilir fonksiyonlar içerir.
Script, grafikteki her çubukta (mumda) baştan sona bir kez çalışır. Geçmiş çubuklarda yalnızca kapanmış veri kullanılırken, henüz kapanmamış canlı çubukta indikatörler fiyat her güncellendiğinde yeniden hesaplanır. Stratejiler ise varsayılan olarak canlı çubukta yalnızca çubuk kapanışında çalışır. Geçmiş ve canlı çubuk arasındaki bu fark, aşağıda anlatılan repainting sorununun temel kaynağıdır.
Pine Script alarm kodu örneği
Aşağıdaki varsayımsal örnek, 20 ve 50 periyotluk basit hareketli ortalamaları çizer ve kısa ortalama uzun ortalamayı yukarı kestiğinde alarm koşulu üretir. Örnek yalnızca söz dizimini göstermek içindir, bir işlem sinyali önerisi değildir.
//@version=6
indicator("Varsayımsal SMA kesişim alarmı", overlay = true)
hizli = ta.sma(close, 20)
yavas = ta.sma(close, 50)
yukariKesisim = ta.crossover(hizli, yavas)
plot(hizli, "SMA 20", color.blue)
plot(yavas, "SMA 50", color.orange)
plotshape(yukariKesisim, "Kesişim", shape.triangleup, location.belowbar, color.green)
// 1. yol: Create Alert penceresinde seçilebilen koşul
alertcondition(yukariKesisim, "Yukarı kesişim", "{{ticker}}: SMA 20, SMA 50'yi yukarı kesti")
// 2. yol: mesajı kodda oluşturulan, yalnızca çubuk kapanışında tetiklenen alarm
if yukariKesisim
alert(syminfo.ticker + " yukarı kesişim, kapanış: " + str.tostring(close), alert.freq_once_per_bar_close)
ta.crossover(), iki seri kesiştiği çubukta true değerini döndürür. Örnekte alarm üretmenin iki yolu birlikte gösterilmiştir; uygulamada genellikle biri seçilir:
alertcondition(), alarm oluşturma penceresindeki "Condition" listesine seçilebilir bir koşul ekler. Mesajı sabit bir metindir, ancak{{ticker}}gibi yer tutucular alarm anındaki değerlerle doldurulur. Yalnızca indikatörlerde çalışır; bir stratejide derlenir ama ondan alarm oluşturulamaz.alert(), mesajı çalışma anında oluşturabilir ve hem indikatörlerde hem stratejilerde kullanılabilir. Sıklığı kod içinde belirlenir: varsayılanalert.freq_once_per_barçubuk başına ilk çağrıda,alert.freq_once_per_bar_closeyalnızca çubuk kapandığında,alert.freq_allher çağrıda tetikler.
Kodun alarm koşulu üretmesi tek başına yeterli değildir; alarmı kullanıcı TradingView arayüzündeki alarm oluşturma penceresinden kurar. Alarm kurulduğu anda scriptin, girdilerinin, sembolün ve zaman diliminin bir kopyası kaydedilir. Kod sonradan değiştirilirse mevcut alarm eski haliyle çalışmaya devam eder; değişikliğin geçerli olması için alarmın silinip yeniden kurulması gerekir. Alarmlar TradingView sunucularında çalıştığından kullanıcının oturumunun açık kalması gerekmez.
Pine Script ile strateji testi nasıl yapılır?
Aynı mantık, indicator() yerine strategy() kullanılarak simüle edilen alım-satım kurallarına dönüştürülebilir. Aşağıdaki örnekte başlangıç sermayesi 10.000 birim, işlem büyüklüğü sermayenin %10'u ve komisyon %0,1 olarak varsayılmıştır:
//@version=6
strategy("Varsayımsal SMA kesişim stratejisi", overlay = true,
initial_capital = 10000, default_qty_type = strategy.percent_of_equity,
default_qty_value = 10, commission_type = strategy.commission.percent,
commission_value = 0.1)
hizli = ta.sma(close, 20)
yavas = ta.sma(close, 50)
if ta.crossover(hizli, yavas)
strategy.entry("Uzun", strategy.long)
if ta.crossunder(hizli, yavas)
strategy.close("Uzun")
Strateji grafiğe eklendiğinde broker emülatörü emirleri geçmiş çubuklar üzerinde simüle eder. Varsayılan ayarlarda bir piyasa emri, sinyalin oluştuğu çubuk kapandıktan sonra bir sonraki çubuğun açılış fiyatından gerçekleşmiş sayılır. Sonuçlar grafiğin alt panelindeki Strategy Report'ta (önceki adıyla Strategy Tester) toplam kâr/zarar, maksimum düşüş, kârlı işlem oranı, kâr faktörü ve işlem listesi gibi ölçütlerle gösterilir.
Raporun anlamlı olması için ayarlar gerçekçi olmalıdır:
- Sermaye ve maliyet: Kodda belirtilmezse başlangıç sermayesi 1.000.000 birim kabul edilir ve hiç komisyon uygulanmaz. Komisyon ve kayma girilmeyen bir test, gerçekte elde edilemeyecek bir sonuç gösterebilir.
- Çubuk içi hareket: Emülatör varsayılan olarak yalnızca grafik verisini kullanır ve bir çubuğun içinde fiyatın hangi sırayla hareket ettiğini bilemez. Premium ve Ultimate planlarda "Bar detalization" ayarı, daha küçük zaman dilimi verisiyle bu tahmini iyileştirir.
- Grafik türü: Heikin Ashi, Renko gibi standart dışı grafiklerde elde edilen sonuçlar genellikle gerçek piyasa koşullarını yansıtmaz; test standart mum grafiğinde yapılmalıdır.
Aşırı uyum, ileriye bakma hatası ve yetersiz veri gibi genel tuzaklar backtest nedir yazısında ayrıntılı olarak ele alınıyor. Geçmiş test sonucu, stratejinin gelecekte aynı sonucu vereceğini göstermez.
Pine Script'in sınırları nelerdir?
- Doğrudan emir gönderemez. TradingView'ın resmi SSS sayfasına göre Pine Script stratejileri ve indikatörleri borsalara doğrudan emir veremez. Gerçek emir için alarm mesajının TradingView webhook ile bir köprü servisine iletilmesi ve bu servisin borsa API'si üzerinden emir göndermesi gerekir.
- Kaynaklar sınırlıdır. Resmi kılavuza göre bir scriptin tüm çubuklardaki toplam çalışma süresi temel hesaplarda 20 saniye, diğer hesaplarda 40 saniyedir; tek bir çubuktaki bir döngü 500 milisaniyeyi aşamaz ve bir script en fazla 64 plot kullanabilir.
- Geçmiş veri plana bağlıdır. Grafikte yüklenen geçmiş çubuk sayısı, veri mevcutsa plana göre en az 5.000 ile 40.000 arasında değişir. Strateji testinde en fazla 9.000 emir raporlanır; Deep Backtesting ile bu sınır 1.000.000'a çıkar.
Bu değerler Ekim 2026 itibarıyla resmi kılavuzda yer alan sınırlardır ve TradingView tarafından değiştirilebilir.
Alarmdan emre uzanan zincirde köprü servisinin kurulması, güvenliği ve izlenmesi Pine Script'in dışında kalan ayrı bir yazılım işidir. Fincode bu tür altyapıları TradingView otomasyonu kapsamında geliştirir. Saniyeler içinde karar veren stratejilerde ise veriyi doğrudan borsa API'sinden alan bir algoritmik işlem sistemi daha uygun olabilir.
Repainting nedir? Geçmişte kusursuz görünen sinyaller
Repainting, bir scriptin geçmiş çubuklarda ve canlı çubukta farklı sonuç üretmesidir. Bu durumda grafikte geçmişe bakıldığında çok isabetli görünen sinyaller, gerçek zamanda aynı şekilde oluşmamış olabilir. Sık görülen nedenler şunlardır:
- Kapanmamış çubuk: Canlı çubuğun yüksek, düşük ve kapanış değerleri çubuk kapanana kadar değişir. Gün içinde oluşan bir kesişim, kapanışta ortadan kalkabilir.
- Üst zaman dilimi verisi:
request.security()ilebarmerge.lookahead_onayarı[1]kaydırması olmadan kullanıldığında, geçmiş çubuklarda o anda bilinmeyen gelecek veri okunur. - Geriye çizim:
ta.pivothigh(5, 5)gibi fonksiyonlar bir tepe noktasını beş çubuk sonra tespit eder, ancak işaret tepe çubuğuna çizilir; sinyal gerçek zamanda biliniyormuş gibi görünür. - Her fiyat hareketinde hesaplama: Stratejilerde
calc_on_every_tick = trueayarı, canlı çubuklarda geçmiş test sırasında oluşmayan emirlere yol açabilir.
Riski azaltmanın yolları da resmi kılavuzda açıklanır: sinyalleri barstate.isconfirmed ile yalnızca kapanmış çubukta üretmek, önceki çubuğun değerlerini (close[1] gibi) kullanmak ve alarmları çubuk kapanışında tetiklemek. Bu yöntemler sinyali bir çubuk geciktirir, ancak geçmiş test ile canlı davranışı birbirine yaklaştırır. Bir scriptin repaint edip etmediğini anlamanın pratik yolu, bir süre canlı çubuklarda ürettiği sinyalleri kaydedip daha sonra grafikte görünenlerle karşılaştırmaktır.
Pine Script nasıl öğrenilir?
- Resmi kullanım kılavuzu (User Manual): "Primer" bölümü, ilk indikatör ve ilk stratejiyi adım adım anlatır; ardından yürütme modeli, alarmlar ve stratejiler konuları gelir.
- Referans kılavuzu (Reference Manual): Tüm fonksiyonları, değişkenleri ve anahtar kelimeleri parametreleriyle listeler.
- Yerleşik indikatörler: TradingView'ın yerleşik indikatörlerinin çoğunun kodu açıktır; kaynak kodu simgesiyle Pine Editor'de açılabilir, "Create a working copy" ile kopyası oluşturulup değiştirilerek denenebilir.
- Açık kaynak topluluk scriptleri: Örnek olarak yararlıdır, ancak kalite farklılık gösterir; repainting ve gerçekçi olmayan test ayarları açısından incelenmelidir.
- Soru-cevap kanalları: Resmi belgeler, PineCoders Telegram sohbet grubunu ve Stack Overflow'daki pine-script etiketini önerir.
İnternette karşılaşılan eski örnekler v4 veya v5 ile yazılmış olabilir. Bu kodlar v6'da değişiklik gerektirebilir; resmi kılavuzdaki geçiş rehberleri sürümler arasındaki farkları listeler.
Sık sorulan sorular
Pine Script'in güncel sürümü hangisi?
Ekim 2026 itibarıyla güncel sürüm, Kasım 2024'te yayımlanan Pine Script v6'dır. TradingView yeni özellikleri yalnızca bu sürüme eklediğini belirtir; güncel durum resmi sürüm notlarından kontrol edilebilir.
Pine Script ile otomatik al-sat yapılabilir mi?
Doğrudan yapılamaz. Pine Script alarm üretir; alarm mesajı webhook ile kullanıcının ya da hizmet aldığı tarafın sunucusundaki bir servise iletilir ve emri bu servis borsa API'si üzerinden gönderir.
alertcondition() ile alert() arasındaki fark nedir?
alertcondition() yalnızca indikatörlerde çalışır, sabit mesaj kullanır ve sıklığı alarm penceresinde seçilir. alert() hem indikatörlerde hem stratejilerde kullanılabilir, mesajı çalışma anında oluşturabilir ve sıklığı kodda belirlenir.
Strateji raporundaki iyi sonuç canlıda da tekrarlanır mı?
Bunun bir garantisi yoktur. Repainting, eksik komisyon ve kayma, çubuk içi hareketin bilinmemesi ve aşırı uyum, test sonucunu gerçekte olacağından iyi gösterebilir. Bu nedenle bir stratejinin canlı ortamda kullanılmadan önce bir süre test ortamında veya kâğıt üzerinde işlemle (paper trading) izlenmesi yaygın bir uygulamadır.
Kaynaklar
- TradingView: Welcome to Pine Script v6
- TradingView: Pine Script release notes
- TradingView: Pine Script alerts
- TradingView: Pine Script strategies
- TradingView: Repainting
- TradingView: Pine Script limitations
- TradingView: Pine Script FAQ, strategies
- TradingView: Strategy properties
- TradingView: Strategy Report, how to start
- TradingView: Pine Script first steps
- TradingView: Where can I get more information?
Bu yazı genel bilgilendirme amaçlıdır ve yatırım tavsiyesi niteliği taşımaz. Örneklerdeki rakamlar varsayımsaldır; belirli bir fon veya hisse için öneri değildir.