CODESCRIPT

Anahtar sözcükler

24 anahtar sözcük. Dilin kendi kelimeleri — koşul kurma, döngü, değişken tanımlama. Her birinin ne yaptığı ve çalışan örneği.

and

İki koşulun ikisi de doğruysa doğru verir. Bir sinyali daraltmak için kullanılır: hem trend yukarıysa hem de hacim yüksekse gibi. Koşullardan biri yanlışsa sonuç yanlıştır.

İki mantıksal ifadenin ikisi de doğruysa doğru olan mantıksal sonuç.

Not

Mantıksal VE bağlacı (fonksiyon değil, dil anahtar kelimesi). İki koşulu birleştirir; seriler üstünde bar-bar çalışır. Birden çok filtreyi tek şarta indirmede kullanılır.

CODESCRIPT
plot(iff(close > open and rsi(close, 14) > 50, 1, 0))

Hem yükseliş mumu hem RSI 50 üstündeyken 1, aksi hâlde 0 çizer.

false

Yanlış değeri. Bir koşulun karşılığı olarak ya da bir ayarı kapalı duruma getirmek için doğrudan yazılır.

Her zaman yanlış olan mantıksal sabit.

Not

Mantıksal yanlış değeri (dil anahtar kelimesi). Onay kutusu varsayılanı ya da bir dalı geçici kapatmada kullanılır.

CODESCRIPT
plot(iff(false, close, open))

Koşul daima yanlış olduğundan open çizilir.

na

Değeri olmayan yer. Bir gösterge ilk barlarda henüz hesaplanamadığında ya da bir çizim o barda görünmeyecekse `na` olur. Bir değerin boş olup olmadığını `na(x)` ile sorar, boşsa yerine bir sayı koymak için `nz(x, 0)` kullanırsınız. ⚠ `na` ile hesap yapılırsa sonuç da `na` olur.

"Değer yok" anlamına gelen boş değer.

Not

Eksik/tanımsız veriyi gösteren özel değer (dil anahtar kelimesi). Isınma dönemindeki boş bar sonuçları na'dır; bir değeri kasıtlı boş bırakmak ya da çizimde boşluk oluşturmak için de kullanılır. Bir değerin na olup olmadığını na() fonksiyonu sınar.

CODESCRIPT
plot(iff(barIndex < 20, na, close))

İlk 20 barı boş (na) bırakır, sonrasında fiyatı çizer.

not

Bir koşulu tersine çevirir: doğruysa yanlış, yanlışsa doğru yapar. "Şu durum yoksa" biçiminde düşündüğünüz koşulları doğrudan yazmanı sağlar.

Bir mantıksal ifadenin tersini alan sonuç (doğru↔yanlış).

Not

Mantıksal DEĞİL işareti (dil anahtar kelimesi). Bir koşulu tersine çevirir; seriler üstünde bar-bar çalışır.

CODESCRIPT
plot(iff(not (close < open), 1, 0))

Mum düşüş değilken (yani yükseliş/eşit) 1 çizer.

or

İki koşuldan en az biri doğruysa doğru verir. Birden çok kabul edilebilir durumu tek koşulda toplamak için kullanılır. İkisi de yanlışsa sonuç yanlıştır.

İki mantıksal ifadeden en az biri doğruysa doğru olan mantıksal sonuç.

Not

Mantıksal VEYA bağlacı (dil anahtar kelimesi). İki koşuldan herhangi biri sağlanınca sonuç doğru olur; seriler üstünde bar-bar çalışır.

CODESCRIPT
plot(iff(close > open or volume > sma(volume, 20), 1, 0))

Yükseliş mumu ya da ortalama üstü hacim olduğunda 1 çizer.

true

Doğru değeri. Bir koşulun karşılığı olarak ya da bir ayarı açık duruma getirmek için doğrudan yazılır.

Her zaman doğru olan mantıksal sabit.

Not

Mantıksal doğru değeri (dil anahtar kelimesi). Onay kutusu varsayılanı ya da bir koşulu geçici olarak sabit-açık yapmada kullanılır.

CODESCRIPT
plot(iff(true, close, open))

Koşul daima doğru olduğundan close çizilir.

break

Döngüyü olduğu yerde bitirir; kalan turlar çalışmaz. Aradığınız şeyi bulduğunda boşuna dönmeye devam etmemek için kullanılır. Yalnız o anki döngüyü keser, iç içe döngülerde dıştakine dokunmaz.

CODESCRIPT
sayac = 0
for i = 0 to 100 {
    if i > 4 { break }
    sayac := sayac + 1
}
plot(sayac, "beşte durdu")

Aranan bulununca döngüden çıkar, kalan turları atlar.

byfor i = 0 to 10 2 { ... }

`for` döngüsünde sayacın kaçar kaçar artacağını verir. Yazılmazsa birer birer artar. `for i = 0 to 10 by 2` sayacı 0, 2, 4, 6, 8, 10 yapar — her ikinci barı taramak gibi işlerde kullanılır.

CODESCRIPT
toplam = 0.0
for i = 0 to 10 by 2 {
    toplam := toplam + close[i]
}
plot(toplam, "iki barda bir")

Sayacı ikişer artırır: 0, 2, 4, 6, 8, 10.

continue

Döngünün o turunu yarıda keser ve bir sonraki tura geçer. Belirli ögeleri atlamak istediğinde, koşulu `if` ile yazıp `continue` demek, bütün gövdeyi `if` içine almaktan daha okunaklı olur.

CODESCRIPT
sayac = 0
for i = 0 to 9 {
    if i % 2 == 0 { continue }
    sayac := sayac + 1
}
plot(sayac, "tek sayılar")

O turu atlar ama döngüyü bitirmez.

elifif ... { ... } koşul { ... }

Bir önceki koşul tutmadıysa yeni bir koşul dener. Peş peşe kaç tane yazılabilirse yazılır; ilk tutan çalışır, geri kalanlara bakılmaz. Sonuna `else` eklerseniz hiçbiri tutmadığında çalışacak dalı da vermiş olursunuz.

CODESCRIPT
yon = 0
if close > open {
    yon := 1
} elif close < open {
    yon := -1
}
plot(yon, "yön")

İkinci bir koşul sınar; ilki tutmazsa buraya bakar.

elseif ... { ... } { ... }

`if` koşulu yanlış çıktığında çalışacak satırları verir. Tek başına yazılmaz, hep bir `if` bloğunun hemen ardından gelir. Arada başka koşullar da olacaksa `elif` ile sıralanır ve `else` en sona kalır: yukarıdakilerin hiçbiri tutmadıysa o çalışır.

CODESCRIPT
yon = 0
if close > open {
    yon := 1
} else {
    yon := -1
}
plot(yon, "yön")

Koşul tutmadığında çalışacak dalı gösterir: yön +1 ya da -1 olur.

enum Ad { SECENEK }

Sınırlı sayıda seçeneği adlandırarak tanımlar. Yön, durum ya da tür gibi birkaç değerden birini alan şeyleri sayı veya metinle taşımak yerine adıyla taşırsınız: yanlış yazım kolayca fark edilir ve okuyan ne anlama geldiğini tahmin etmek zorunda kalmaz.

CODESCRIPT
enum Yon {
    YUKARI
    ASAGI
}
y = close > open ? Yon.YUKARI : Yon.ASAGI
plot(close, "fiyat")

Sınırlı sayıda seçeneği adlandırır.

fn ad(parametreler) { ... }

Kendi işlevini tanımlar: bir adı, aldığı değerleri ve küme parantezi içinde ne yapacağını yazarsınız. Aynı hesabı kodun birkaç yerinde tekrarlıyorsanız bir kez `fn` ile yazıp adıyla çağırmak hem kısaltır hem tek yerden düzeltmeni sağlar. Sonucu `return` ile geri verirsiniz.

CODESCRIPT
fn ortalama(a, b) {
    return (a + b) / 2
}
plot(ortalama(high, low), "orta")

Kendi işlevini tanımlar ve grafikte kullanır.

for i = başlangıç to bitiş [by adım] { ... }

Bir sayacı baştan sona artırarak aynı satırları tekrar tekrar çalıştırır. Kaç tur döneceğini önceden biliyorsanız bunu kullanırsınız — son on barı taramak, bir diziyi baştan sona geçmek gibi. Sayacın nereden nereye gideceğini `to`, kaçar kaçar artacağını `by` belirler. Kaç tur süreceği belli değilse `while` daha uygundur.

CODESCRIPT
toplam = 0.0
for i = 0 to 4 {
    toplam := toplam + close[i]
}
plot(toplam / 5, "beş barın ortalaması")

// ikişer atlayarak: for i = 0 to 10 by 2 { ... }

Son beş barın kapanışını toplayıp ortalamasını çizer; yorumda ikişer atlayan biçim.

if koşul { ... }

Bir koşul doğruysa küme parantezi içindeki satırları çalıştırır, yanlışsa atlar. Grafiğe bir şey çizmeyi ya da bir hesabı yalnız belirli barlarda yapmak istediğinde buna uzanırsınız. Koşulun yanlış olduğu durumda başka bir şey yapılacaksa `else`, üçüncü bir ihtimal varsa `elif` eklenir. Tek bir değer seçmek için ise `?` daha kısa yazılır.

CODESCRIPT
yon = 0
if close > open {
    yon := 1
} elif close < open {
    yon := -1
} else {
    yon := 0
}
plot(yon, "yön")

Yükselen barda 1, düşende -1, eşitte 0 çizer; üç dal da tek örnekte.

infor öge dizi { ... }

Bir dizinin ögeleri üzerinde sırayla döner; her turda öge doğrudan elinde olur, sırasını ayrıca hesaplamana gerek kalmaz. Dizinin kaç öge taşıdığını bilmeden de yazabilirsiniz, döngü diziyi bitirince durur.

CODESCRIPT
d = arrayNewFloat()
arrayPush(d, close)
arrayPush(d, open)
toplam = 0.0
for deger in d { toplam := toplam + deger }
plot(toplam, "dizi toplamı")

Dizinin bütün ögelerini baştan sona gezer.

method ad(Tip alıcı, ...) { ... }

Bir türe kendi işlevini ekler; ilk aldığı değer o türden bir nesnedir ve işlev `nesne.ad()` biçiminde çağrılır. Aynı hesabı o türe ait her nesne için tekrarlamak yerine bir kez yazmış olursunuz. Türün kendisiyle birlikte okunduğu için kod de derli toplu kalır.

CODESCRIPT
type Kutu {
    float alt = na
    float ust = na
}
method yukseklik(Kutu k) {
    return k.ust - k.alt
}
kk = Kutu.new(low, high)
plot(kk.yukseklik(), "yükseklik")

Bir türe kendi işlevini bağlar, nokta ile çağrılır.

return değer

İşlevin sonucunu geri verir ve o işlevi orada bitirir. Altında kalan satırlar çalışmaz, bu yüzden bir koşula bağlı erken çıkış için de kullanılır. Yalnız `fn` ya da `method` gövdesinde yazılır; kodun ana gövdesinde yeri yoktur.

CODESCRIPT
fn ikiKat(x) {
    return x * 2
}
plot(ikiKat(close), "iki katı")

İşlevin geri vereceği değeri belirler.

switch değer { seçenek => sonuç }

Bir değeri sırayla seçeneklerle karşılaştırır ve ilk tutanın karşılığını verir. Aynı değeri üst üste `if` ile denemek yerine tek yerde toplar. Karşılığı olmayan durumlar için sona seçeneksiz bir satır yazarsınız; hiçbiri tutmazsa o çalışır.

CODESCRIPT
yon = close > open ? 1 : close < open ? -1 : 0
metin = switch yon {
    1 => "yukarı"
    -1 => "aşağı"
    => "yatay"
}
plot(close, "fiyat")

Bir değerin birkaç olası hâlini tek yapıda ayırır.

tofor i = 0 9 { ... }

`for` döngüsünde sayacın nereye kadar gideceğini söyler ve o değer de dahildir: `for i = 0 to 4` beş tur döner (0, 1, 2, 3, 4). Bitiş değeri sabit olmak zorunda değil, hesaplanmış bir sayı da olabilir.

CODESCRIPT
toplam = 0.0
for i = 0 to 9 { toplam := toplam + close[i] }
plot(toplam / 10, "on barın toplamı")

Sayacın nereye kadar gideceğini söyler; bitiş değeri de dahildir.

type Ad { tip alan = varsayılan }

Birbirine ait değerleri tek bir kayıtta toplamak için kendi türünü tanımlar. Her alanın türü ve başlangıç değeri yazılır. Tanımladıktan sonra `Ad.new(...)` ile örnek üretir, alanlarına `nesne.alan` diye erişirsiniz. Bir bölgeyi, bir sinyali ya da bir seviyeyi tek parça hâlinde taşımak istediğinde işini kolaylaştırır.

CODESCRIPT
type Nokta {
    int bar = 0
    float fiyat = na
}
n = Nokta.new(barIndex, close)
plot(n.fiyat, "nokta")

Kendi kayıt türünü tanımlar: alanları bir arada tutar.

var ad = değer

Değişkeni yalnız ilk barda kurar ve değerini sonraki barlara taşır. `var` olmadan yazılan bir değişken her barda sıfırdan hesaplanır; sayaç tutmak, bir zirveyi hatırlamak ya da bir durumu barlar boyunca korumak istiyorsanız `var` gerekir. Kurulduktan sonra değeri `:=` ile değiştirilir, `=` ile değil.

CODESCRIPT
var sayac = 0
sayac := sayac + 1
plot(sayac, "bar sayısı")

Sayaç her barda sıfırlanmaz, bar boyunca birikir.

varip ad = değer

`var` gibi değişkeni bir kez kurar, ama bar içinde yapılan değişiklikler de korunur. Canlı grafikte bar henüz kapanmadan gelen her fiyat güncellemesinde değer birikmeye devam eder; `var` ise barın kapanışını bekler. Bar içi hareketi izleyen sayaçlarda işe yarar.

CODESCRIPT
varip enYuksek = high
if high > enYuksek { enYuksek := high }
plot(enYuksek, "zirve")

Değer bar içi güncellemelerde de korunur, yeni barda sıfırlanmaz.

while koşul { ... }

Koşul doğru kaldığı sürece aynı satırları tekrar çalıştırır. Kaç tur döneceği önceden belli değilse bunu kullanırsınız; belliyse `for` daha uygundur. ⚠ İçeride koşulu değiştiren bir satır yoksa döngü hiç bitmez — örnekteki `sayac := sayac + 1` satırı tam bunun için var.

CODESCRIPT
sayac = 0
while sayac < 3 { sayac := sayac + 1 }
plot(sayac, "sayaç")

Koşul doğru kaldığı sürece döner; kaç tur süreceği önceden belli değil.