İşaret ve şekil koymak
Bir gösterge çizgisi her barda bir değer taşır. Sen çoğu zaman değeri değil olayı ararsın: kesişimin olduğu bar, hacmin patladığı bar. Bu sayfa o olayları grafiğe basmanın yollarını anlatır.
Neden ayrı bir araç?
plot bir seriyi bar bar birleştirip kesintisiz bir çizgi yapar. Olaylar ise seyrektir. Yüz barın üçünde doğru olan bir koşulu çizgiyle göstermeye çalışırsan hiçbir şey anlaşılmaz.
İşaret araçları tam tersini yapar. Koşul doğruysa o bara tek bir şey basarlar, yanlışsa hiçbir şey çizmezler. Dört araç vardır: plotshape şekil basar, plotchar harf basar, plotarrow boyu değere göre değişen ok çizer, label serbest yazı bırakır.
Dördü de fiyat panelinde çizer. Hiçbiri ayrı bir alt panel açmaz; alt panel yalnız plot ile mümkündür.
Bir işaret koymadan önce şunu sor: bu koşul her barda mı doğru, yoksa arada bir mi? Her barda doğruysa aslında işaret değil çizgi istiyorsundur.
plotshape: koşul barına şekil basmak
En sık kullanacağın araç budur. İlk argümanı doğru ya da yanlış değer üreten bir seridir. Doğru olan her barda bir şekil çizilir.
// 20 barlik ortalamayi yukari kesen barlari isaretle ortalama = sma(close, 20) alSinyali = crossover(close, ortalama) plot(ortalama, "SMA20", "#787b86") plotshape(alSinyali, "al", style="triangleup", location="belowbar", color="#26a69a")
Gri SMA20 çizgisi ve fiyatın bu çizgiyi yukarı kestiği barların altında yeşil üçgenler. Diğer barlarda hiçbir işaret yoktur.
crossover yalnız kesişimin gerçekleştiği barda doğrudur, sonraki barlarda değil. Bu yüzden üçgenler tek tek belirir, sıra hâlinde yığılmaz.
Şekil seçenekleri
style şeklin biçimini belirler. Vermezsen circle kullanılır.
- arrowup ve arrowdown — yön iddiası güçlü; giriş ve çıkış sinyalleri için.
- triangleup ve triangledown — küçük ölçekte bile okunur; kesişimler için en temiz seçim.
- circle, square, diamond — nötr biçimler; yön söylemeden bir barı işaretlerler.
- cross ve xcross — iptal, geçersizleşme, zarar-kes gibi olumsuz olaylar için.
- flag — tek başına duran, dikkat çekmesi gereken bir olay için.
- labelup ve labeldown — içine kısa metin sığdırabilen kutu şekiller.
İki yazım da geçerlidir ve aynı sonucu verir: style="triangleup" ya da style=shape.triangleup.
Konum seçenekleri
location şeklin bara göre nereye oturacağını söyler. Vermezsen abovebar kullanılır.
- abovebar — barın yüksek ucunun hemen üstü.
- belowbar — barın düşük ucunun hemen altı.
- top ve bottom — panelin üst ya da alt kenarında sabit bir şerit; fiyat nereye giderse gitsin aynı hizada kalır.
- absolute — seriye verdiğin sayıyı fiyat seviyesi kabul eder ve şekli tam oraya koyar.
hizli = sma(close, 10) yavas = sma(close, 30) // yukari kesisim: isaret barin ALTINDA ve yukari bakiyor plotshape(crossover(hizli, yavas), "al", style="triangleup", location="belowbar", color="#26a69a") // asagi kesisim: isaret barin USTUNDE ve asagi bakiyor plotshape(crossunder(hizli, yavas), "sat", style="triangledown", location="abovebar", color="#ef5350")
Hızlı ortalama yavaşını yukarı keserse barın altında yeşil üçgen, aşağı keserse barın üstünde kırmızı üçgen çıkar.
Yönü eşleştir: yukarı sinyal belowbar ile ve yukarı bakan şekille, aşağı sinyal abovebar ile ve aşağı bakan şekille gider. Ters kurulum grafiği bir anda okunmaz hâle getirir.
absolute biraz farklı çalışır. Doğru-yanlış yerine sayı verirsin; şekil o fiyata oturur. Sayı yerine na verdiğin barlarda hiçbir şey çizilmez, yani hem konumu hem koşulu tek seriyle anlatmış olursun.
sinyal = crossover(close, sma(close, 20)) // sinyal barinda dip seviyenin yuzde bir altini hedefle, digerlerinde bos birak seviye = iff(sinyal, low * 0.99, na) plotshape(seviye, "al", style="triangleup", location="absolute", color="#26a69a")
Kesişim barlarında, o barın dip seviyesinin yüzde bir altına oturmuş yeşil üçgenler. Kesişim olmayan barlar boş kalır.
Metin, boyut ve kaydırma
Şeklin yanına kısa bir yazı koyabilirsin. text yazının kendisidir, textcolor rengidir. size hem şeklin hem yanındaki yazının boyutunu belirler.
- size için hazır adlar: tiny, small, normal, large, huge. Vermezsen normal olur.
- Sayı da verebilirsin; 7 ile 40 arası piksel olarak yorumlanır.
- offset işareti bar ekseninde kaydırır. offset=-1 şekli bir bar geriye alır.
guc = rsi(close, 14) // asiri alim barina kutu sekil ve iki harflik yazi koy plotshape(guc > 70, "asiri alim", style="labeldown", location="abovebar", color="#ef5350", text="AA", textcolor="#ffffff", size="small")
Momentum ölçüsünün 70'i aştığı barların üstünde, içinde beyaz AA yazan küçük kırmızı kutular.
text kısa tutulmak içindir: iki üç harf, en fazla bir kelime. Uzun yazı işaretleri üst üste bindirir ve barları görünmez yapar. Cümle yazacaksan label kullan.
plotchar: harf ya da simge koymak
plotshape'in şekil listesi sabittir. Listede olmayan bir işaret istiyorsan plotchar seçtiğin karakteri basar. Kullanımı plotshape ile aynıdır; style yerine char alır.
ortHacim = sma(volume, 20) // hacim ortalamanin iki katini asarsa panelin ust kenarina H harfi koy plotchar(volume > ortHacim * 2, "hacim", char="H", location="top", color="#ff9800")
Hacmin yirmi barlık ortalamasının iki katını aştığı barlarda, panelin üst kenarında turuncu H harfleri.
Burada location="top" kullanıldı. Harf fiyata değil panelin üst kenarına oturur; böylece mumların üstünü kapatmaz ve okuma sırası bozulmaz.
char tek karakter içindir; hiç vermezsen yıldız simgesi kullanılır. Birden çok kelime yazacaksan plotchar değil label doğru araçtır.
plotarrow: yönü ve büyüklüğü birlikte göstermek
plotshape ve plotchar sabit boyda çizer; bir sinyalin ne kadar güçlü olduğunu anlatmazlar. plotarrow verdiğin sayının işaretinden yönü, mutlak değerinden boyu alır. Tek seri hem hangi tarafa hem ne kadar sorusunu birden cevaplar.
// govde buyudukce ok uzar; yon govdenin isaretinden gelir govde = close - open plotarrow(govde, "govde", colorup="#26a69a", colordown="#ef5350", minheight=6, maxheight=60)
Her barda bir ok: yükselen barlarda yukarı yeşil, düşen barlarda aşağı kırmızı. Ok boyu gövdenin büyüklüğüyle orantılıdır.
Değeri 0 ya da na olan barlarda ok çizilmez. Bunu süzgeç olarak kullan: zayıf sinyalleri na yaparsan grafikte yalnız güçlü olanlar kalır.
momentum = rsi(close, 14) - 50 // zayif momentumu na yap; na olan barda ok cizilmez secilmis = iff(abs(momentum) > 15, momentum, na) plotarrow(secilmis, "momentum", colorup="#26a69a", colordown="#ef5350")
Momentum ölçüsünün orta noktadan 15'ten fazla uzaklaştığı barlarda ok; arada kalan barlar boş. Ok sayısı belirgin biçimde azalır.
plotarrow'a mutlak değer verme. abs ile sarılmış bir seri hep pozitiftir; bütün oklar yukarı bakar ve yön bilgisi tümüyle kaybolur.
label: bara yazı bırakmak
Şekil ve harf sabit bir anlam taşır. Hesaplanmış bir sayıyı, bir seviyeyi ya da bir cümleyi göstermek istiyorsan label gerekir. label bir fiyat seviyesi ile bir metin alır ve oraya kutulu bir yazı koyar.
hizli = ema(close, 12) yavas = ema(close, 26) // grafigin son barina tek bir ozet notu birak if barstate.islast { label(close, "Fark: " + str(round(hizli - yavas, 2)), color="#2962ff", style="labeldown", size="small") }
Grafiğin son barında, iki üstel ortalama arasındaki farkı iki ondalıkla yazan tek bir mavi etiket.
label'a bar vermezsen etiket her zaman grafiğin son barına düşer. Koşul yüz kere doğru olsa bile yüz etiket aynı noktaya yığılır ve bar bar okuma imkânı kalmaz. Her sinyalde yazı istiyorsan label değil, plotshape'in text argümanı doğru araçtır.
Bu yüzden label'ın en doğru işi tek seferlik özettir: son barda duran bir not, bir seviye, bir sonuç. barstate.islast koşulu tam olarak bunu sağlar.
mark: tek satırlık kısa yol
mark, plotshape'in sadeleştirilmiş hâlidir. Koşul, biçim, konum, renk ve kısa metin alır. offset ve textcolor gibi ince ayarları yoktur; buna karşılık bir sinyali görünür yapmak için tek satır yeter.
// tek satirda sinyal isareti: ince ayar yok, hiz var mark(crossover(close, sma(close, 50)), style="triangleup", location="belowbar", color="#26a69a", text="AL") mark(crossunder(close, sma(close, 50)), style="triangledown", location="abovebar", color="#ef5350", text="SAT")
Elli barlık ortalamanın yukarı kesildiği barların altında AL yazılı yeşil üçgen, aşağı kesildiği barların üstünde SAT yazılı kırmızı üçgen.
Bir betik yazarken mark ile başlayıp sinyalin doğru barlarda tetiklendiğinden emin olduktan sonra plotshape'e geçmek işini kolaylaştırır. İkisi de aynı biçim adlarını kullanır; geçiş tek satırlık iştir.
Hangisi ne zaman?
Karar aslında tek soruya bakar: ne göstermek istiyorsun?
- Her barda güncellenen sürekli bir değer — plot.
- Seyrek bir olay ve sabit bir anlam — plotshape.
- Hazır şekiller arasında olmayan bir simge — plotchar.
- Yön ve şiddet birlikte — plotarrow.
- Değişen metin ya da hesaplanmış bir sayı — label.
- Az kodla hızlı bir işaret — mark.
hizli = ema(close, 12) yavas = ema(close, 26) al = crossover(hizli, yavas) sat = crossunder(hizli, yavas) hacimli = volume > sma(volume, 20) * 1.5 // surekli deger -> cizgi plot(hizli, "EMA12", "#26a69a") plot(yavas, "EMA26", "#ef5350") // seyrek olay -> sekil plotshape(al, "al", style="triangleup", location="belowbar", color="#26a69a") plotshape(sat, "sat", style="triangledown", location="abovebar", color="#ef5350") // ikinci kosul -> harf plotchar(hacimli, "hacim", char="H", location="top", color="#ff9800") // tek seferlik ozet -> etiket if barstate.islast { label(close, "Fark: " + str(round(hizli - yavas, 2)), color="#2962ff", style="labeldown", size="small") }
İki üstel ortalama çizgisi, kesişim barlarında yeşil ve kırmızı üçgenler, hacimli barlarda panelin üstünde H harfleri ve son barda tek bir özet etiketi.
Bu betikte dört aracın dördü de var, ama hiçbiri diğerinin işini yapmıyor. Grafiği kalabalıklaştırmadan zengin tutmanın yolu budur.
Sık yapılan hatalar
- Koşul yerine sayı vermek. plotshape sıfırdan farklı her değeri doğru sayar; yanlışlıkla close - open verirsen neredeyse her bara şekil basılır.
- style ya da location adını yanlış yazmak. Betik hata vermez, ama işaret beklediğin gibi görünmez. Adları listeden birebir kopyala.
- Her barda doğru olan bir koşula işaret bağlamak. Önce koşulu daralt; işaret sayısı yüzü geçiyorsa büyük ihtimalle yanlış şeyi işaretliyorsun.
- label'ı bar vermeden bir koşulun içinde çağırmak. Etiketler son barda üst üste biner ve hiçbiri okunmaz.
- plotarrow'u süzmeden kullanmak. Her bar bir ok demektir; fiyat okların arasında kaybolur.
Her işaretine bir title ver. Adsız bıraktığın işaretler shape0, shape1 diye anılır; üç dört tane olunca hangisinin hangi kural olduğunu sen de karıştırırsın.
İşlev özeti
plotshape(series, title?, style?, location?, color?, offset?, text?, textcolor?, size?)
Değer döndürmez. Koşulun doğru olduğu barlara şekil basar.
plotchar(series, title?, char?, location?, color?, offset?, text?, textcolor?, size?)
Değer döndürmez. Koşulun doğru olduğu barlara tek bir karakter basar.
plotarrow(series, title?, colorup?, colordown?, offset?, minheight?, maxheight?)
Değer döndürmez. İşaretli seriye göre yukarı ya da aşağı ok çizer.
label(price, text, bar?, color?, style?, size?)
Değer döndürmez. Verilen fiyat seviyesine yazılı bir kutu koyar.
mark(condition, style?, location?, color?, text?, size?)
Değer döndürmez. Koşulun doğru olduğu barlara sade bir işaret basar.