CODESCRIPT

Fiyat verisi ve seriler

Her betik barlar üzerinde çalışır. Bir barın hangi fiyatları taşıdığını ve bu fiyatlara neden seri dendiğini kavrarsan, kalan her şey yerine oturur.

Grafikteki her mum bir bardır. Bar, belirli bir zaman aralığında olan biteni dört fiyatla özetler. Betiğin bu barları soldan sağa tek tek dolaşır; her barda kodunun tamamı bir kez çalışır.

Bir barın fiyatları

Beş temel seri her barda hazır bekler. Adını yazman yeterlidir; ayrıca tanımlaman gereken bir şey yoktur.

  • open — barın açıldığı ilk fiyat.
  • high — bar boyunca görülen en yüksek fiyat, fitilin tepesi.
  • low — en düşük fiyat, fitilin dibi.
  • close — barın kapandığı son fiyat. Kuralların çoğu buna dayanır.
  • volume — bar boyunca el değiştiren miktar.
CODESCRIPT
// bir barin govdesi: kapanis eksi acilis
govde = close - open
// barin tam araligi: en yuksek eksi en dusuk
aralik = high - low
plot(govde, "govde", "#2962ff", "olcu")
plot(aralik, "aralik", "#ff9800", "olcu")

Alttaki olcu panosunda iki çizgi: mavi olan gövde boyunu işaretiyle birlikte verir (yükseliş barında pozitif, düşüşte negatif), turuncu olan fitiller dahil bar aralığını gösterir.

İPUCU

close en sık başvuracağın kaynaktır. Gösterge çağrılarının çoğunda ilk argüman olarak onu görürsün: sma(close, 20).

Seri mi, tek sayı mı?

Seri, her bar için ayrı bir değer taşıyan bir sütundur. Tek sayı ise bütün barlarda aynı kalır. Bu ayrımı baştan kavramak, sonradan çıkacak birçok karışıklığı önler.

Bir seriyi sayıyla karşılaştırırsan sonuç yine seri olur: bar başına bir doğru ya da yanlış. Bu yüzden koşullar da birer seridir; bir barda doğru, ötekinde yanlış olabilirler.

CODESCRIPT
// sma bir SERI dondurur: her barda ayri bir deger
ortalama = sma(close, 20)
// esik tek bir SAYIdir: butun barlarda ayni kalir
esik = 70
// seriyi sayiyla karsilastirinca sonuc yine seridir
asiri = rsi(close, 14) > esik
plot(ortalama, "SMA20", "#2962ff")
plotshape(asiri, style="circle", location="abovebar", color="#ef5350")

Fiyat panosunda mavi bir SMA20 çizgisi; RSI değerinin 70'i aştığı barların üstünde kırmızı birer daire.

DİKKAT

plot yalnız sayısal seri çizer. Tek bir sayı verirsen düz bir yatay çizgi elde edersin; sabit bir seviye çizmek istiyorsan hline daha uygundur.

Türetilmiş fiyat kaynakları

Kapanış bazen tek başına fazla gürültülüdür; tek bir fitil ucu kuralı bozabilir. Barın fiyatlarını ortalayan üç hazır seri bu işi senin yerine yapar.

  • hl2 — (high + low) / 2, barın orta fiyatı.
  • hlc3 — (high + low + close) / 3, kapanışı da tartan tipik fiyat.
  • ohlc4 — (open + high + low + close) / 4, dört fiyatı eşit tartan en pürüzsüz kaynak.
CODESCRIPT
// ayni uzunluk, uc farkli kaynak
plot(sma(close, 20), "close", "#787b86")
plot(sma(hl2, 20), "hl2", "#2962ff")
plot(sma(ohlc4, 20), "ohlc4", "#26a69a")

Fiyat panosunda birbirine çok yakın üç ortalama çizgisi. Gri olan en çok kıpırdar, yeşil olan en yumuşak seyreder.

NOT

Türetilmiş kaynaklar gürültüyü azaltır ama tepkiyi geciktirir. Kırılım kurallarında genelde close, kanal ve zarf göstergelerinde hl2 daha iyi oturur.

Geçmiş barı okumak

Kuralların çoğu şu an ile az önce arasındaki farka bakar. Bir serinin geçmiş değerine iki yoldan ulaşırsın ve ikisi de aynı sonucu verir.

  • close[1] — köşeli parantez içindeki sayı kaç bar geriye gidileceğini söyler. close[0] içinde bulunduğun bardır.
  • prev(close, 1) — aynı işin işlev biçimi. Geriye kaç bar gidileceği hesaplanan bir değerse okunaklı kalır.
CODESCRIPT
// koseli parantez: sayi kac bar geriye gidilecegini soyler
oncekiKapanis = close[1]
// ayni degeri prev de verir
ayniDeger = prev(close, 1)
// ikisi her barda esit oldugu icin fark hep sifirdir
plot(oncekiKapanis - ayniDeger, "fark", "#787b86", "fark")
// ust uste iki yukselen kapanis
plotshape(close > close[1] and close[1] > close[2], style="triangleup", location="belowbar", color="#26a69a")

Alttaki fark panosunda tam sıfırda düz bir çizgi — iki yazımın aynı değeri verdiğinin kanıtı. Fiyat panosunda ise art arda iki kez yükselen kapanışın altında yeşil üçgenler.

prev(source, n=1)

n bar önceki değeri taşıyan seri.

source
seri
Geçmiş değeri okunacak seri.
n
sayı
Kaç bar geriye gidileceği. Verilmezse 1 sayılır.

change(source, n=1)

Serinin şimdiki değeri ile n bar öncesi arasındaki fark.

source
seri
Değişimi ölçülecek seri.
n
sayı
Karşılaştırmanın kaç bar geriye bakacağı. Verilmezse 1 sayılır.
DİKKAT

Geriye ne kadar bakarsan betiğin o kadar geç ısınır. close[3] yazdıysan ilk üç barda okunacak bir değer yoktur; sonuç oralarda na kalır.

Seriler boşluk da taşır

Bir serinin her barda sayı taşıması şart değildir. Değerin olmadığı yerde na durur ve na bir hesaba girerse sonucu da na yapar. Kural burada hata vermez, sessizce boş kalır; boşluğu doldurmak için nz kullanırsın.

CODESCRIPT
// ilk 19 barda pencere dolmaz: sma na tasir
ortalama = sma(close, 20)
// na yerine 0 koy; cizgi bosluk yerine sifirdan baslar
plot(nz(ortalama, 0), "ortalama", "#2962ff")
// hacim eksik gelirse 0 say, sonra ortalamasiyla kiyasla
yogun = nz(volume, 0) > sma(volume, 20) * 2
plotshape(yogun, style="circle", location="bottom", color="#ff9800")

Ortalama çizgisi ilk on dokuz barda boşluk bırakmak yerine sıfırdan başlar, sonra fiyata oturur. Hacmin ortalamasının iki katını aştığı barlarda panonun altında turuncu daireler belirir.

İPUCU

nz(volume, 0) yazmak, hacmin eksik geldiği barlarda kuralın kopmasını önler. Boş değerin bütün ayrıntısı kendi konusunda ele alınır; burada bilmen gereken, serinin boşluk taşıyabildiğidir.

Zaman bilgisi serileri

Her barın bir de zaman kimliği vardır: hangi saatte, hangi gün, hangi ay oluştuğu. Bunları ayrı seriler halinde okursun ve hepsi sembolün bağlı olduğu borsanın saat dilimine göre hesaplanır.

  • hour — barın saati, 0 ile 23 arasında.
  • minute — barın dakikası, 0 ile 59 arasında.
  • dayofweek — haftanın günü; Pazar 1, Cumartesi 7. dayofweek.monday gibi adlandırılmış sabitler de kullanılabilir.
  • dayofmonth — ayın kaçıncı günü.
  • month ve year — ay (1-12) ve yıl.
  • weekofyear — yılın kaçıncı haftası.

Bunları çoğunlukla süzgeç olarak kullanırsın: işlemi belirli saatlere kısıtlamak, seansın ilk dakikalarını atlamak, ay başında bir sayacı sıfırlamak gibi.

CODESCRIPT
// barin saati 0 ile 23 arasinda bir sayidir
sabahSaati = hour >= 8 and hour < 12
// haftanin gunu: Pazar 1, Cumartesi 7
haftaSonu = dayofweek == 1 or dayofweek == 7
plotshape(sabahSaati, style="circle", location="bottom", color="#2962ff")
plotshape(haftaSonu, style="square", location="top", color="#787b86")

Sabah 08:00 ile 12:00 arasındaki barların altında mavi daireler, hafta sonuna düşen barların üstünde gri kareler görürsün.

CODESCRIPT
// bu barin ayi onceki bardan farkliysa ayin ilk bari demektir
yeniAy = month != month[1]
// gecenin ilk saatlerinde giris yapma
sakinSaat = hour < 6
enterLong(crossover(close, sma(close, 20)) and not sakinSaat)
exit(crossunder(close, sma(close, 20)))
plotshape(yeniAy, style="flag", location="top", color="#ff9800")

Her ayın ilk barında panonun üstünde turuncu bir bayrak. Alım yalnız kapanış 20 barlık ortalamayı yukarı kestiğinde ve saat 06:00'dan sonraysa açılır; aşağı kesişimde pozisyon kapanır.

NOT

Kripto barları UTC saatine göre gelir ve işlem kesilmediği için hafta sonu da bar üretilir. Saat süzgecini yazmadan önce hangi saat diliminde çalıştığını bir kez doğrula; yanlış dilimde yazılmış bir süzgeç sessizce yanlış barları eler.

Barın diğer kimlik bilgileri

Zamanın yanında birkaç bilgi daha okunabilir. Bunlar nokta yazımıyla gelir ve genelde kuralı sınırlamak için kullanılır.

  • barstate.islast — son bar mı. barstate.isconfirmed — bar kapandı mı.
  • timeframe.isdaily, timeframe.isintraday — grafiğin hangi zaman diliminde olduğu. timeframe.period o dilimin metnini verir.
  • syminfo.ticker — sembolün kodu. syminfo.mintick — en küçük fiyat adımı.
  • session.ismarket — barın normal seansa düşüp düşmediği.
CODESCRIPT
// grafik gunluk mu, gun-ici mi
gunluk = timeframe.isdaily
plot(iff(gunluk, 1, 0), "gunluk mu", "#787b86", "bilgi")
// son bara bir elmas birak
plotshape(barstate.islast, style="diamond", location="top", color="#2962ff")

Alttaki bilgi panosunda düz bir çizgi: günlük grafikte 1, diğer dilimlerde 0. Grafiğin en sağındaki son barın üstünde mavi bir elmas.

iff(condition, ifTrue, ifFalse)

Her bar için koşula göre seçilmiş değerlerden oluşan seri.

condition
mantıksal
Her barda sınanan koşul; kendisi de seri olabilir.
ifTrue
seri
Koşul doğruyken alınacak değer.
ifFalse
seri
Koşul yanlışken alınacak değer.

Sık yapılan hatalar

  • Seriyi tek sayı sanmak. ortalama = sma(close, 20) satırı bir değer değil, bar başına bir değer üretir; sonucu tek bir sayı gibi okuyunca kural beklenmedik davranır.
  • İlk barları unutmak. Pencere dolmadan gösterge na taşır; kural o barlarda sessizce çalışmaz. Gerekiyorsa nz ile koru.
  • close[1] ile prev(close, 1) arasında fark aramak. İkisi aynı değeri verir; hangisini yazacağın okunaklılık meselesidir.
  • Türetilmiş kaynağı gereksiz yere seçmek. ohlc4 üzerine kurulmuş bir kırılım kuralı geç tepki verir, çünkü fitilin ucu ortalamanın içinde erir.
  • Saat süzgecini yanlış saat dilimine göre yazmak. Süzgeç hata vermez, sadece istemediğin barları eler; geriye dönük sınamada bu sessizce yanlış sonuca yol açar.
  • Koşulu bar kapanmadan kesin saymak. Oluşmakta olan barda değerler hâlâ değişebilir; kesinlik gerekiyorsa barstate.isconfirmed ile birlikte kullan.