CODESCRIPT

İş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.

NOT

Dördü de fiyat panelinde çizer. Hiçbiri ayrı bir alt panel açmaz; alt panel yalnız plot ile mümkündür.

İPUCU

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.

CODESCRIPT
// 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.
CODESCRIPT
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.

İPUCU

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.

CODESCRIPT
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.
CODESCRIPT
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.

DİKKAT

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.

CODESCRIPT
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.

NOT

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.

CODESCRIPT
// 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.

CODESCRIPT
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.

DİKKAT

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.

CODESCRIPT
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.

DİKKAT

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.

CODESCRIPT
// 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.
CODESCRIPT
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.
İPUCU

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.

series
seri
Doğru olduğu barlarda şekil çizilir. Sıfırdan ve na'dan farklı her değer doğru sayılır.
title
metin
İsteğe bağlı. İşaretin adı. Vermezsen shape0 gibi bir ad üretilir.
style
metin
İsteğe bağlı. Şeklin biçimi; varsayılan circle. shape.circle yazımı da geçerlidir.
location
metin
İsteğe bağlı. Şeklin bara göre yeri; varsayılan abovebar. absolute verirsen seri değeri fiyat seviyesi sayılır.
color
renk
İsteğe bağlı. Şeklin rengi; onaltılık kod olarak verilir.
offset
sayı
İsteğe bağlı. İşareti bar ekseninde kaydırır; -1 bir bar geriye alır.
text
metin
İsteğe bağlı. Şeklin yanına yazılacak kısa metin.
textcolor
renk
İsteğe bağlı. Bu metnin rengi.
size
metin ya da sayı
İsteğe bağlı. tiny, small, normal, large, huge ya da 7 ile 40 arası piksel; varsayılan normal.

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.

series
seri
Doğru olduğu barlarda karakter çizilir.
title
metin
İsteğe bağlı. İşaretin adı.
char
metin
İsteğe bağlı. Basılacak tek karakter; vermezsen yıldız simgesi kullanılır.
location
metin
İsteğe bağlı. Karakterin yeri; plotshape ile aynı seçenekler geçerlidir.
color
renk
İsteğe bağlı. Karakterin rengi.
offset
sayı
İsteğe bağlı. Bar ekseninde kaydırma.
text
metin
İsteğe bağlı. Karakterin yanına ek kısa metin.
textcolor
renk
İsteğe bağlı. Bu metnin rengi.
size
metin ya da sayı
İsteğe bağlı. Karakterin boyutu; varsayılan normal.

plotarrow(series, title?, colorup?, colordown?, offset?, minheight?, maxheight?)

Değer döndürmez. İşaretli seriye göre yukarı ya da aşağı ok çizer.

series
seri
Sıfırdan büyükse yukarı, küçükse aşağı ok. 0 ve na olan barlarda ok çizilmez.
title
metin
İsteğe bağlı. Okların adı.
colorup
renk
İsteğe bağlı. Yukarı okların rengi.
colordown
renk
İsteğe bağlı. Aşağı okların rengi.
offset
sayı
İsteğe bağlı. Bar ekseninde kaydırma.
minheight
sayı
İsteğe bağlı. En kısa okun piksel boyu; varsayılan 5.
maxheight
sayı
İsteğe bağlı. En uzun okun piksel boyu; varsayılan 100. Ok boyları bu iki sınır arasında, serinin mutlak değerine göre dağıtılır.

label(price, text, bar?, color?, style?, size?)

Değer döndürmez. Verilen fiyat seviyesine yazılı bir kutu koyar.

price
sayı
Etiketin dikey konumu, fiyat cinsinden.
text
metin
Kutuda görünecek yazı. Sayı göstereceksen str ile metne çevir.
bar
sayı
İsteğe bağlı. Etiketin oturacağı bar. Vermezsen grafiğin son barı kullanılır.
color
renk
İsteğe bağlı. Kutunun arka plan rengi.
style
metin
İsteğe bağlı. Kutunun biçimi; labelup ve labeldown en sık kullanılanlardır.
size
metin ya da sayı
İsteğe bağlı. Yazı boyutu; varsayılan normal.

mark(condition, style?, location?, color?, text?, size?)

Değer döndürmez. Koşulun doğru olduğu barlara sade bir işaret basar.

condition
seri
Doğru olduğu barlarda işaret çizilir.
style
metin
İsteğe bağlı. İşaretin biçimi; varsayılan circle.
location
metin
İsteğe bağlı. İşaretin yeri; varsayılan abovebar.
color
renk
İsteğe bağlı. İşaretin rengi.
text
metin
İsteğe bağlı. İşaretin yanındaki kısa yazı.
size
metin ya da sayı
İsteğe bağlı. İşaretin boyutu; varsayılan normal.