AlertaScript
Pine Script'ten AlertaScript'e geçiş: adım adım rehber
Pine Script biliyorsanız dönüştürücüye gerek yok: kodunuz AlertaScript'te çalışır. Desteklenmeyenler ve test edilmiş üç örnek.
Pine Script® ile indikatör ya da strateji yazdıysanız, bunları AlertaChart'ta çalıştırmak için ne bir dönüştürücüye ne de yeni bir dile ihtiyacınız var. AlertaScript; ta.ema gibi ad alanlı çağrılar, diziler, map'ler, kullanıcı tipleri ve stratejiler dahil Pine uyumlu geniş bir sözdizimini kabul eder. İşe kodunuzu editöre olduğu gibi yapıştırarak başlarsınız.
Bu rehber, scriptlerini taşımayı düşünen yatırımcılar için: ilk beş dakikada ne göreceğiniz, nelerin değişmeden çalıştığı, nelerin sessizce boş döndüğü ve AlertaChart'ın iki script motorunda da test ettiğimiz üç eksiksiz örnek. Aynı konunun başvuru sürümü, her örnekte "Editörde aç" düğmesiyle, dokümandaki Pine uyumluluğu ve geçiş sayfasında.
Neden dönüştürücüye gerek yok?
Dönüştürücüler, platformların çoğu başka bir dil konuştuğu için var. AlertaScript aynı sözdizimini okur; editör yapıştırdığınız kodu değiştirmeden çalıştırır. Doküman fonksiyonları ayırt etmek için alerta. önekiyle yazar (alerta.ta.ema), ama orijinal adlar da çalışır, aynı hesaba çözülür ve adlandırma uyarısı vermez. Mevcut scriptinizin //@version satırı yerinde kalabilir. Bu, hiçbir şeye dokunmayacağınız anlamına gelmez: bazı fonksiyonlar küçük bir düzeltme isteyebilir, editör de bunun hangi satırda gerektiğini gösterir.
indicator("EMA yazımları", overlay=true)
orijinal = ta.ema(close, 20)
onekli = alerta.ta.ema(close, 20)
plot(orijinal, "Pine uyumlu yazım")
plot(onekli, "AlertaScript yazımı", color=color.blue)İki çizgi de aynı EMA'dır ve üst üste biner.
İlk beş dakika
- Bir grafik açın ve İndikatörler menüsünden AlertaScript editörünü açın. Grafik görünür kalırken taşıyabileceğiniz bir penceredir.
- Scriptinizi hiçbir şeyini değiştirmeden yapıştırın ve Çalıştır'a basın.
- Mesajları okuyun. Hatalar satırıyla birlikte gelir. Uyarı, scriptin çalıştığını ama bir değeri sağlayamadığını söyler; not edin ve aşağıdaki tabloya bakın.
- Hatasız biten bir çalıştırma scripti kütüphanenize, Komutlarım altına da kaydeder; uyarılar bunu engellemez.
- Girdileri, her indikatörde olduğu gibi grafikteki satırın dişlisinden değiştirin.
Grafiği AlertaScript editörüyle açın →Trader
AlertaScript Trader paketinden itibaren kullanılabilir; script koşullarına alarm kurmak ise Pro ve Elite paketlerde. Paketleri fiyatlandırma sayfasında karşılaştırabilirsiniz. Editör, script kütüphanesi ve paylaşım Yardım Merkezi'ndeki AlertaScript makalesinde anlatılıyor.
Değişmeden çalışanlar, çalışmayanlar
Sorun nadiren sözdizimidir; çoğu zaman veridir. Aşağıdaki sınırlar dokümandaki limitler sayfasından ve motorun kendisinden:
| Scriptiniz şunu kullanıyorsa | Ne olur? |
|---|---|
ta.*, math.*, str.*, diziler, map'ler, matrisler, tipler, strategy.* | Çalışır. Bir çağrı hata verirse referansta bildiğiniz adla arayın. |
Başka zaman dilimi veya sembol için request.security | Sembol AlertaChart'ta varsa ve o dönem için geçmişi varsa çalışır. |
request.financial, request.earnings, request.dividends, request.splits | Temel veri (bilanço, kâr, temettü) akışı olmadığı için na döner. Çağrı ignore_invalid_symbol = true geçmiyorsa uyarı görürsünüz. |
request.seed, request.quandl | Desteklenmez; uyarıyla na döner. |
syminfo.current_contract | Desteklenmez; sözleşme kodu vermez. |
Footprint veya açık pozisyon (open interest) verisi (request.footprint, BINANCE:BTCUSDT.P_OI gibi semboller) | Pro ve Elite paketlerde, desteklenen piyasa ve zaman dilimlerinde gelir; diğer paketlerde uyarıyla na döner. Ayrıntı: order flow verisi. |
Bunlara dayanan bir script yine çalışır, yalnızca boş bir çizgi çizer. Geçişi hata olmamasına değil, çıktıya bakarak kontrol etmenizin sebebi bu.
Taşıdıktan sonra üç kontrol
- Girdiler.
input.int,input.floatveyainput.timeframeile tanımlanan her değer, grafikteki satırın dişlisinde bir ayara dönüşür. Varsayılan değerin doğru geldiğini veminval/maxvalsınırlarının ayarı beklediğiniz aralıkta tuttuğunu orada deneyin. - Çıktının yeri.
indicator(...)ya dastrategy(...)satırındakioverlaydeğeri çizimin nereye düşeceğini belirler:overlay=truefiyat grafiğinin üstüne,overlay=falseayrı bir panele. Bir çizgi beklemediğiniz yerde çıkıyorsa ilk bakılacak yer burasıdır. - Alarm başlıkları. Her
alertconditionbaşlığı, Alarm Oluştur penceresindeki koşul listesine olduğu gibi gelir. Birbirine benzeyen başlıklar doğru koşulu bulmayı zorlaştırır; kısa ve ayırt edici adlar verin.
Örnek 1: EMA kesişim stratejisi
9 periyotluk EMA 21 periyotluk EMA'yı yukarı kesince long açılır, ters kesişimde pozisyon kapanır; ortalama giriş fiyatının %2 altında da koruyucu bir stop var. strategy(...) içindeki varsayılanlar (10.000 başlangıç sermayesi, emir başına özsermayenin %10'u, %0,1 komisyon) strateji test panelinin başlangıç ayarlarıdır.
//@version=5
strategy("EMA 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)
hizliUzunluk = input.int(9, "Hızlı EMA uzunluğu", minval=1)
yavasUzunluk = input.int(21, "Yavaş EMA uzunluğu", minval=2)
stopYuzde = input.float(2.0, "Zarar durdur (%)", minval=0.1, step=0.1)
hizli = ta.ema(close, hizliUzunluk)
yavas = ta.ema(close, yavasUzunluk)
yukariKesti = ta.crossover(hizli, yavas)
asagiKesti = ta.crossunder(hizli, yavas)
if yukariKesti
strategy.entry("Long", strategy.long)
if asagiKesti
strategy.close("Long", comment="EMA aşağı kesti")
// Koruyucu stop: ortalama giriş fiyatından hesaplanan mutlak bir fiyat.
if strategy.position_size > 0
strategy.exit("Stop", "Long", stop=strategy.position_avg_price * (1 - stopYuzde / 100))
plot(hizli, "Hızlı EMA", color=color.teal)
plot(yavas, "Yavaş EMA", color=color.orange)
plotshape(yukariKesti, title="Yukarı kesişim", style=shape.triangleup, location=location.belowbar, color=color.teal, size=size.tiny)- Sonuçlar grafiğin altındaki strateji test panelinde açılır: önce temel istatistikler (toplam K/Z, maksimum düşüş, kârlı işlemler, kâr faktörü), sonra işlem listesi. Strateji ayarları başlangıç sermayesini, emir büyüklüğünü, piramitlemeyi, komisyonu ve kaymayı koda dokunmadan değiştirir.
- Simülasyonda sinyal mumunda verilen emir bir sonraki mumun açılışında gerçekleşir; işaret ile gerçekleşme fiyatı bu yüzden farklıdır.
stop=mutlak bir fiyattır, girdinin fiyata çevrilmesi bu yüzden.profit=veloss=ise tik cinsinden mesafedir.- Strateji borsaya emir göndermez. Geçmiş veride yapılan bir test gelecek için kesin bir şey söylemez.
Örnek 2: alarm koşullu RSI uyumsuzluğu
Kendi panelinde çalışan bir indikatör; RSI pivotlarını fiyatla karşılaştırır. Fiyat daha düşük bir dip yaparken RSI daha yüksek bir dip yapıyorsa pozitif, fiyat daha yüksek bir tepe yaparken RSI daha düşük bir tepe yapıyorsa negatif uyumsuzluk işaretlenir. Her durum adlandırılmış bir alertcondition'dır.
//@version=5
indicator("RSI uyumsuzluk bulucu", overlay=false)
rsiUzunluk = input.int(14, "RSI uzunluğu", minval=2)
pivotMum = input.int(5, "Pivotun iki yanındaki mum sayısı", minval=1)
rsi = ta.rsi(close, rsiUzunluk)
// Bir pivot ancak oluştuktan pivotMum mum sonra kesinleşir.
rsiDip = ta.pivotlow(rsi, pivotMum, pivotMum)
rsiTepe = ta.pivothigh(rsi, pivotMum, pivotMum)
yeniDip = not na(rsiDip)
yeniTepe = not na(rsiTepe)
// Aynı türden bir önceki pivotta RSI ve fiyat.
oncekiRsiDip = ta.valuewhen(yeniDip, rsi[pivotMum], 1)
oncekiFiyatDip = ta.valuewhen(yeniDip, low[pivotMum], 1)
oncekiRsiTepe = ta.valuewhen(yeniTepe, rsi[pivotMum], 1)
oncekiFiyatTepe = ta.valuewhen(yeniTepe, high[pivotMum], 1)
// Fiyat daha düşük dip yaparken RSI daha yüksek dip yapar (pozitif); tepelerde tersi (negatif).
pozitif = yeniDip and low[pivotMum] < oncekiFiyatDip and rsi[pivotMum] > oncekiRsiDip
negatif = yeniTepe and high[pivotMum] > oncekiFiyatTepe and rsi[pivotMum] < oncekiRsiTepe
plot(rsi, "RSI", color=color.purple)
hline(70, "Üst seviye")
hline(30, "Alt seviye")
plot(pozitif ? rsi[pivotMum] : na, "Pozitif uyumsuzluk", color=color.green, style=plot.style_circles, linewidth=4, offset=-pivotMum)
plot(negatif ? rsi[pivotMum] : na, "Negatif uyumsuzluk", color=color.red, style=plot.style_circles, linewidth=4, offset=-pivotMum)
alertcondition(pozitif, "Pozitif RSI uyumsuzluğu", "{{ticker}}: pozitif RSI uyumsuzluğu kesinleşti")
alertcondition(negatif, "Negatif RSI uyumsuzluğu", "{{ticker}}: negatif RSI uyumsuzluğu kesinleşti")- Pivot ancak beş mum sonra (varsayılan girdi) kesinleşir; canlı grafikte işaret beş mum geç görünür,
offsetonu pivot mumuna geri taşır. - Bildirim almak için (script alarmları Pro ve Elite paketlerde) Alarm Oluştur penceresini açın, kaynak olarak Script'i, ardından bu scripti seçin; koşulu Script uyarıları listesinde başlığıyla bulun.
{{ticker}}sembol adıyla değiştirilir. - Pencere bunu açıkça yazar: script alarmları uygulama açıkken değerlendirilir, henüz sunucuda 7/24 çalışmaz. Fiyat alarmları Yardım Merkezi: Alarmlar makalesinde.
Örnek 3: üst zaman dilimi trend filtresi
request.security ifadenin tamamını istenen zaman diliminde hesaplar (burada 4 saatlik mumların 50 periyotluk EMA'sı) ve sonucu grafiğinizle hizalar. Tek çağrı iki değeri birden demet (tuple) olarak döndürür.
//@version=5
indicator("Üst zaman dilimi trend filtresi", overlay=true)
ustZaman = input.timeframe("240", "Üst zaman dilimi")
emaUzunluk = input.int(50, "Üst zaman dilimindeki EMA uzunluğu", minval=1)
// Tek istek iki değeri birden döndürür; ikisi de üst zaman diliminin kendi mumlarıyla hesaplanır.
[ustEma, ustKapanis] = request.security(syminfo.tickerid, ustZaman, [ta.ema(close, emaUzunluk), close], lookahead=barmerge.lookahead_off)
yukariTrend = ustKapanis > ustEma
plot(ustEma, "Üst zaman dilimi EMA", color=yukariTrend ? color.teal : color.red, linewidth=2)
bgcolor(yukariTrend ? color.new(color.teal, 92) : color.new(color.red, 92), title="Trend arka planı")- 4 saatlik mumlarla hesaplanan EMA, 1 saatlik grafikte 4 saatlik kapanışların ortalamasını almakla aynı şey değildir.
lookahead_offgelecek mum kullanmaz. Mevcut 4 saatlik mum kapanmadan değeri değişebilir.- Zaman dilimini dişliden değiştirin:
input.timeframeonu bir ayara dönüştürür.
Bilmeniz gereken farklar
- Canlı ve kapanmış mum. Scriptler mum oluşurken yeniden hesaplanır; bir kesişim kapanıştan önce görünüp kaybolabilir. Kural kapanışı beklemeliyse
barstate.isconfirmedkullanın. - Veri. Aynı borsayı, sembolü ve zaman dilimini karşılaştırın. İki borsadaki BTC/USDT iki ayrı fiyat serisidir; kod aynı olsa da indikatör değerleri farklı çıkar.
- Geçmiş. Grafiğin ne kadar geriye gittiği piyasaya ve veri kaynağına bağlıdır; uzun geriye bakışlar başka yerdekinden daha geç başlayabilir.
- Kaynaklar. Döngüler ve çizim nesneleri sınırlıdır. Limitler sayfası sabit sayı yayımlamaz; her mumda yeni nesne üretmek yerine gerekmeyenleri silin.
Sık karşılaşılan sorunlar
- "Unknown function" (bilinmeyen fonksiyon): referansta orijinal adla ve
alerta.yazımıyla arayın. Yüklenmemiş bir kütüphaneye yapılan çağrı ise hata değil, uyarıylanadöndürür. - Boş çizgi: yeterli geçmişi olmayan ilk mumlar,
nadönen bir istek ya da kendi panelinde açılan bir osilatör. - Başka yerdekinden farklı işlemler: önce miktar, komisyon, kayma ve test aralığını eşitleyin, sonra yukarıdaki gerçekleşme kuralına bakın.
Tekrarlanabilir bir hata için dokümandaki sorun giderme sayfası, hatayı küçük bir örneğe indirmeyi anlatır.
Sonraki adımlar
- Her örnekte "Editörde aç" düğmesi olan başvuru sayfası: Pine uyumluluğu ve geçiş.
- Başka yatırımcıların paylaştığı, tek tıkla kurulan scriptler: Yardım Merkezi: Topluluk.
- Grafikte fiyata göre hacmi okumak: hacim profili rehberi; emir akışı verisini scriptte okumak: footprint grafiği rehberi ve dokümandaki order flow verisi.
Kaynaklar
- Pine uyumluluğu ve geçiş — AlertaScript dokümanı (erişim 5 Ekim 2026)
- Limitler — AlertaScript dokümanı (erişim 5 Ekim 2026)
- Stratejiler ve backtest — AlertaScript dokümanı (erişim 5 Ekim 2026)
- Çoklu sembol ve zaman dilimi — AlertaScript dokümanı (erişim 5 Ekim 2026)
- AlertaScript: kendi indikatör ve stratejileriniz — AlertaChart Yardım Merkezi (erişim 5 Ekim 2026)
Bu rehber nasıl hazırlandı? Yapay zekâ yardımıyla AlertaChart Yardım Merkezi'nden ve kaynak kodundan taslak olarak yazıldı; ürün bilgileri koda ve Yardım Merkezi'ne göre kontrol edildi; dış bilgiler belirtilen birincil kaynaklardan alındı.
Değişiklikler · Sürüm 1.0
- · 1.0 — İlk sürüm.