Kapatmak için ESC'ye basın

ChatGPT Pine Script Hataları: TradingView Kodunu Düzeltin

Her gün yerel algo-trade sohbetlerinde sıradan bir "kutsal kase" efsanesi türeiyor. Senaryo hep aynı: biri ChatGPT'den kendine bir indikatör ya da hazır bot yazmasını istiyor, yapay zeka iki yüz satır kodu önünüze seriyor, TradingView minimal bir düşüşle (drawdown) yıllık efsanevi %800 kâr gösteriyor ve bu harikayı gerçek hesapta çalıştırmaya kalktığınız anda borsa bakiyeniz üç işlem seansında buharlaşıyor. Ya da daha kolayı: kod derlenmeyi bile reddediyor, çünkü terminal doğada asla var olmamış değişkenler yüzünden hata veriyor.

Eğer stratejinizi yapay zeka aracılığıyla otomatikleştirmeye bir kez bile çalıştıysanız, bu duvara kesinlikle çarpmışsınızdır. Gelin ders kitabı teorilerini bir kenara bırakıp dil modellerinin neden sürekli var olmayan sözdizimleri uydurduğunu, bu hallüsinasyonları nasıl yakalayacağınızı ve yapay zekaya görsel illüzyonlar yerine nasıl çalışan kod ürettirebileceğinizi masaya yatıralım.

Mimari Çöküş: Yapay Zeka Neden Pine Script Uyduruyor?

ChatGPT kod derlemez. Matematiği anlamaz, TradingView motorunun nasıl çalıştığını bilmez ve yürütme bağlamını (execution context) kavramaktan uzaktır. Dil modeli, yalnızca eğitildiği veri kümesine dayanarak en muhtemel bir sonraki karakteri tahmin eder.

İşte asıl tuzak burada yatıyor. Yapay zekanın eğitim veri setine tam anlamıyla vahşi bir karışım girmiş durumda:

  • Modern terminalde hatalara yol açan, çoktan eskimiş antik Pine Script v2, v3 ve v4 betikleri.
  • Yazarların temel fonksiyonları fütursuzca ezdiği (override ettiği) GitHub'daki binlerce özel kütüphane.
  • Python, C++ ve MQL5 kod parçacıkları.

Yapay zekadan "dinamik aşırı alım bölgelerine sahip adaptif bir RSI yaz"isini istediğinizde model; Python'dan aşina olduğu fonksiyon adını alır, bunu eski Pine Script v3 sözdizimiyle harmanlar, işin içine havalı bir ta. öneki ekler ve size ta.optimized_rsi() gibi bir yapı sunar.

Yapay zeka için bu gayet uyumlu ve mantıklı görünür. TradingView derleyicisi içinse bu mutlak bir çöptür.

ChatGPT'nin En Popüler 4 Olmayan Değişkeni ve Ölümcül Hallüsinasyonu

1. ta. İsim Alanındaki (Namespace) Hayali Sarmalayıcılar

Pine Script'in beşinci versiyonunda tüm teknik indikatörler ta. modülüne taşındı. Sinir ağı bu kuralı benimsedi, ancak bu öneki rastgele her yere yapıştırmaya başladı.

  • Yapay Zekanın Uydurdukları: ta.supertrend_indicator(), ta.smart_macd(), ta.volume_accumulator().
  • Gerçekte Olan: Yerleşik Supertrend fonksiyonu, tek satırlık hazır şık bir indikatör yerine iki değerden oluşan bir demet (tuple) döndürür: [value, direction] = ta.supertrend(factor, period).

2. request.security ile Zamanda Yolculuk (Look-ahead Bias)

Bu, sinir ağlarının en tehlikeli günahıdır. İndikatör, sırf ChatGPT üst zaman diliminden (timeframe) gelen veri sorgusunu hatalı yazdığı için backtest üzerinde uzay çağı kârları çizer.

  • Yapay Zekanın Uydurdukları: request.security(syminfo.tickerid, "D", close)
  • İşin Püf Noktası: Çubuk birleştirme parametreleri barmerge.lookahead_off açıkça belirtilmediğinde, sabah 10:00'daki 5 dakikalık grafik stratejisi günlük mumun saat 23:59'da hangi fiyattan kapanacağını şimdiden "bilir". Tarihsel verilerde bu %99 karlı işlem kazandırır. Gerçek piyasada ise anında tasfiyedir (margin call), çünkü an itibarıyla geleceği kimse bilmez.

3. strategy.entry İçinde Olmayan Emir Özellikleri İcat Etmek

Dinamik pozisyon boyutlandırmasını ayarlamaya çalışırken ChatGPT, API'de asla bulunmayan argümanları düzenli olarak uydurur.

  • Yapay Zekanın Uydurdukları: strategy.entry("Long", strategy.long, risk_percent=2.0, max_slippage=3)
  • Gerçekte Olan: Risk yönetimi ya strategy() notasyonunda tanımlanır ya da qty argümanı aracılığıyla matematiksel olarak hesaplanır. Emir çağrısının içinde hiçbir risk_percent parametresi yoktur.

4. Var Olmayan Zaman Dilimleri ve Veri Tipleri

Yapay zeka, fonksiyona zaman dilimi aktarırken "15m" veya "1h" yazmayı sever. Ancak Pine Script, dakika için "15" ve saat için "60" veya "240" stringlerini kullanmanızı kesin olarak şart koşar. Küçük bir detay mı? Evet, ama betik daha derleme aşamasındayken bu yüzden çökecektir.

Basitçe Açıklama: Hayalet Kod vs. Çalışan Kod

Konuyu bir kez ve forall kapatmak için iki örneğe göz atın. Birincisi, ChatGPT'nin varsayılan olarak ürettiği tipik bir "Frankenstein" yaratığıdır. İkincisi ise çalışan mantığa sahip, Pine Script v5 tabanlı temiz ve derlenebilir koddur.

ChatGPT Çöpü (Derlenmez ve Hallüsinasyon Görür):

//@version=5
strategy("AI Hallucination Strategy", overlay=true)
// Hata 1: Pine Script'te ta.custom_adaptive_rsi fonksiyonu bulunmuyor
rsi_val = ta.custom_adaptive_rsi(close, 14, 80, 20)
// Hata 2: Yanlış imza (ta.supertrend, source olmaksızın factor ve atrPeriod alır)
// ve demet sonucu tek bir değişkene atanmış
st_val = ta.supertrend(close, 3.0, 10)
// Hata 3: [1] kaydırması olmadan lookahead_on - geçmişte EMA gelecekten çekilir
daily_ema = request.security(syminfo.tickerid, "D", ta.ema(close, 200), barmerge.gaps_off, barmerge.lookahead_on)
if (ta.crossover(rsi_val, 50) and close > daily_ema)
    // Hata 4: strategy.entry'nin risk_level parametresi yoktur
    strategy.entry("Buy", strategy.long, risk_level=1.5)

Pine Script v5 Üzerinde Çalışan Pro Kod:

//@version=5
strategy("Clean Quantitative Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Tiplendirilmiş giriş parametreleri
rsi_len   = input.int(14, title="RSI Length", minval=1)
st_factor = input.float(3.0, title="Supertrend Factor", step=0.1)
st_period = input.int(10, title="Supertrend Period", minval=1)
// 1. Standart RSI
rsi_val = ta.rsi(close, rsi_len)
// 2. Supertrend çizgiyi ve yönü döndürür (-1 = yükseliş trendi, 1 = düşüş trendi)
[st_line, st_dir] = ta.supertrend(st_factor, st_period)
plot(st_line, "Supertrend", color = st_dir < 0 ? color.green : color.red)
// 3. Geleceğe bakış (lookahead) ve yeniden çizim (repainting) içermeyen günlük EMA:
//    önceki KAPANMIŞ günün değeri ([1]) + lookahead_on - standart güvenli model
daily_ema = request.security(syminfo.tickerid, "D", ta.ema(close, 200)[1], barmerge.gaps_off, barmerge.lookahead_on)
// Sinyaller yalnızca onaylanmış (kapanmış) çubukta verilir
long_condition  = barstate.isconfirmed and ta.crossover(rsi_val, 50)  and close > daily_ema and st_dir < 0
short_condition = barstate.isconfirmed and ta.crossunder(rsi_val, 50) and close < daily_ema and st_dir > 0
// Zıt yöne giriş otomatik olarak pozisyonu tersine çevirir
if (long_condition)
    strategy.entry("Long", strategy.long)
if (short_condition)
    strategy.entry("Short", strategy.short)

Kontrol Listesi: Yapay Zekanın Saçma Kodları Nasıl Filtrelenir?

Eğer sinir ağını kod yazmak için bir çırak gibi kullanıyorsanız, size yüzlerce saat ve tonla sinir kazandıracak birkaç kurala dikkat edin:

  1. Yapay Zekayı Yalnızca Pine Script v5 ile Yazmaya Zorlayın. Komut isteminde (prompt) açıkça belirtin: "Kesinlikle Pine Script v5 kullanın. ta. ve request önekleri olmayan fonksiyonların kullanımı yasaktır. Özel yöntemler uydurmak yasaktır."
  2. Hayalet Fonksiyonları Reference Manual'de Arayın. Kodda ta.something() gibi bilinmeyen bir fonksiyon görürseniz, resmi TradingView başvuru kılavuzunda aramaya üşenmeyin. %90 ihtimalle orada yoktur.
  3. request.security'yi Kontrol Edin. Argümanlara her zaman bakın. Orada barmerge.lookahead_off yoksa, yaptığınız backtest gerçeklikle uzaktan yakından alakası olmayan güzel bir masaldır.
  4. Yapay Zekaya Her Satırı Yorumlatın. Sinir ağı belirli bir operatörün mantığını açıklamak zorunda kaldığında, uydurma fonksiyon isimleriyle hallüsinasyon görme olasılığı çok daha düşük olur.

Risk Yönetimi: Gerçekliğin "Yapay Zeka Kâselerini" Kestiği Yer

ChatGPT'nin kodu mükemmel bir şekilde derlense ve hiçbir sözdizimi hatası içermese bile piyasa mekaniğini asla unutmayın:

  • Kayma (Slippage) ve Komisyonlar. Sinir ağları, stratejileri test ederken borsa spread'ini ve komisyonunu asla hesaba katmaz. 1 dakikalık zaman diliminde günde 1.000 işlem yapan bir betik kağıt üzerinde harika görünür, ancak gerçekte tüm depozitonuzu maker/taker komisyonları olarak borsaya hediye edersiniz. Strateji ayarlarında her zaman manuel olarak komisyonu (işlem başına en az %0.05) ve 2-3 ticklik kaymayı hesaba katın.
  • Dinamik Stop-Loss. %1 veya %2'lik sabit kâr al noktalarını (take-profit) unutun. Piyasa volatilitesini her gün değiştirir. Koruyucu emirleri her zaman ATR aracılığıyla mevcut volatiliteye bağlayın: Stop Loss Price = Entry Price ± (ta.atr(14) × 1.5)

Trading'de ChatGPT'yi kullanabilirsiniz, hatta kullanmalısınız da; ancak yalnızca rutin işlemler için hızlı bir sözdizimi yardımcısı olarak. Mimarinin kendisini ve indikatör mantığının tasarımını yapay zekaya devrettiğiniz anda; garantili olarak bir dizi hallüsinasyon, gelecekten gelme güzel grafikler ve piyasanın daha sonra kendi cebinizden ödemeye mecbur bırakacağı hayali fonksiyonlar satın almış olursunuz.

Bu blog yazısını şununla özetleyin:

FAQ

ChatGPT, eğitim verilerindeki eski Pine Script v3 veya v4 sözdizimini, özel kütüphaneleri ve farklı programlama dillerini karıştırarak olasılıksal token tahmini kullanır. Resmi TradingView API belgelerini doğrulamak yerine ta.optimized_rsi() gibi mantıklı görünen ancak geçersiz fonksiyon isimleri üretir.

Bu hata, request.security() fonksiyonu barmerge.lookahead_off parametresi olmadan üst zaman diliminden veri çektiğinde ortaya çıkar ve geçmiş testlerde gelecekteki kapanış fiyatlarının kullanılmasına izin verir. Çözüm olarak, barmerge.lookahead_off argümanını açıkça ekleyin ve sinyalleri [1] geçmiş çubuk indeksini kullanarak kapatılmış barlar üzerinde çalıştırın.

Eskimiş sözdizimini Pine Script v5 veya v6 standardına güncelleyin, ta. ve strategy. ad alanlarını resmi TradingView Reference Manual ile doğrulayın, hayali parametreleri geçerli girişlerle değiştirin ve yürütme mantığını ham piyasa verileri üzerinde test edin.
Piter Wacker

I am a trading specialist with expertise in market analysis, risk management, and investment strategies. I focus on identifying opportunities, executing trades with discipline, and delivering consistent results.

...

Yorumunuzu paylaşın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlendi *