CODESCRIPT

Bekleyen emirler

Bekleyen emir, hemen dolmayan emirdir: bir fiyat seviyesine asılır ve fiyat oraya gelene kadar orada durur. Burada bekleyen emri nasıl kurduğunu, nasıl geri çektiğini ve neden bazen hiç dolmadığını öğrenirsin.

Bir koşul doğduğunda iki seçeneğin var. Ya o anki fiyattan hemen alırsın, ya da fiyata bir seviye söyleyip beklersin. Birincisi piyasa emri, ikincisi bekleyen emirdir.

Bekleyen emir sana daha iyi bir giriş fiyatı arama imkânı verir. Karşılığında bir risk alırsın: fiyat o seviyeye hiç gelmeyebilir ve işlem hiç açılmaz.

Piyasa emri mi, bekleyen emir mi

order tek başına bir piyasa emri kurar. Koşulun doğru olduğu barda seviye aramaz, doğrudan dolar. entryMarket ile birebir aynı işi yapar; ikisi aynı işlevin iki adıdır.

CODESCRIPT
// piyasa emri: kosul dogdugu barda beklemeden dolar
order(crossover(close, sma(close, 20)))
exit(crossunder(close, sma(close, 20)))
plot(sma(close, 20), "SMA20", "#2962ff")

Mavi çizgi 20 barlık ortalamadır. Kapanış bu çizgiyi yukarı kestiğinde bir alış işareti çıkar, aşağı kestiğinde pozisyon kapanır. Beklenen bir seviye olmadığı için her sinyal işleme dönüşür.

DİKKAT

order bir seviyede bekletme yapmaz; yalnızca koşul ve yön alır. Emri bir fiyata asmak istiyorsan enterLong ya da enterShort çağır ve limit veya stop ver.

limit ve stop: iki farklı bekleyiş

Bir girişe limit verirsen daha iyi bir fiyatı beklersin. stop verirsen hareketin doğrulanmasını beklersin. Hangisinin fiyatın altına, hangisinin üstüne düştüğü yöne göre değişir.

  • Uzun girişte limit güncel fiyatın altına asılır; fiyat oraya inerse dolar.
  • Uzun girişte stop güncel fiyatın üstüne asılır; fiyat oraya çıkarsa dolar.
  • Kısa girişte limit fiyatın üstüne, stop fiyatın altına asılır; kural aynen tersine döner.
  • Kısacası limit ucuzu bekler, stop kırılımı bekler.

limit: seviye gelirse al

Aşağıdaki betikte kapanış 20 barlık ortalamanın altına düştüğünde bir alım emri kuruluyor. Emir hemen dolmuyor; ortalamanın yüzde iki altında bekliyor.

CODESCRIPT
// ortalamanin %2 altina asili alim emri
hedef = sma(close, 20) * 0.98
enterLong(crossunder(close, sma(close, 20)), limit=hedef)
exit(crossover(close, sma(close, 50)))
plot(hedef, "bekleyen seviye", "#ff9800")

Turuncu çizgi emrin beklediği seviyedir. Kesişim barında alış işareti çıkmaz; işaret ancak fiyat turuncu çizgiye kadar inerse, emrin dolduğu barda belirir.

stop: kırılırsa al

Stop emri bunun tersini yapar. Fiyat yukarı kırmadan işlem açılmaz. Girişe daha pahalıya girersin ama hareketin başladığını görmüş olursun.

CODESCRIPT
// son 20 barin tepesi kirilirsa al
tepe = highest(high, 20)
enterLong(rsi(close, 14) > 55, stop=tepe)
exit(crossunder(close, sma(close, 20)))
plot(tepe, "kirilim seviyesi", "#2962ff")

Mavi çizgi son 20 barın en yükseğidir. RSI 55'in üstündeyken emir kurulur ve yalnız fiyat bu çizgiyi yukarı kırarsa dolar. Kırılım gelmezse hiç işlem açılmaz.

DİKKAT

Aynı girişe limit ve stop birlikte verilemez. Biri aşağı in der, öteki yukarı kır der; ikisi tek bir emirde anlamlı bir bekleyiş oluşturmaz ve motor net hata verir.

Emri adlandırmak: id

id vermek bekleyen emre bir ad takar. Ad verilince aynı anda birden çok emri listede tutabilir, her birini ayrı ayrı yönetebilirsin. Ad sabit bir metin olmalıdır; bar bar değişen bir ad emri izlenemez kılar.

ocaGroup ise aynı kurulumun iki yüzünü birbirine bağlar. Aynı grup etiketini taşıyan emirlerden biri dolunca kalanlar listeden silinir.

CODESCRIPT
// iki senaryo ayni anda bekler: dipten alim ve kirilimdan alim
dip = sma(close, 20) * 0.98
kirilim = highest(high, 20)
enterLong(rsi(close, 14) < 45, id="dip", limit=dip, ocaGroup="kurulum")
enterLong(rsi(close, 14) < 45, id="kirilim", stop=kirilim, ocaGroup="kurulum")
exit(crossunder(close, sma(close, 50)))

RSI 45'in altına inince iki emir birden kurulur: biri fiyat düşerse, öteki fiyat yükselirse dolar. Aynı ocaGroup verildiği için biri dolduğu an öteki silinir ve tek bir işlem açılır.

NOT

Aynı id ile ikinci bir emir verirsen yeni emir eskisinin yerine geçer, iki ayrı emir oluşmaz. İki emri birlikte bekletmek istiyorsan iki ayrı ad kullan. Hiç ad vermezsen tek bir bekleyen emir yuvası vardır ve o emir yalnızca açık pozisyon yokken dolar.

Emri geri çekmek: cancel ve cancelAll

Kurduğun emir artık istemediğin bir emirse geri çekersin. cancel yalnız adını verdiğin emri siler. cancelAll bekleyen ne varsa hepsini birden temizler.

CODESCRIPT
// kurulum bozulursa bekleyen emri geri cek
dip = sma(close, 20) * 0.98
enterLong(crossunder(close, sma(close, 20)), id="dip", limit=dip)
cancel("dip", rsi(close, 14) > 60)
exit(crossover(close, sma(close, 50)))

dip emri kurulur ve fiyatı bekler. RSI 60'ı aşarsa emir listeden silinir; fiyat sonradan seviyeye inse bile artık dolmaz ve o senaryonun alış işareti hiç çıkmaz.

CODESCRIPT
// gun donmeden once hem bekleyen girisi hem bekleyen cikisi temizle
enterLong(crossunder(close, sma(close, 20)), id="dip", limit=sma(close, 20) * 0.98)
exit(true, id="hedef", limit=close * 1.05)
exit(crossunder(close, sma(close, 50)))
cancelAll(hour == 23)

Gün içinde hem bekleyen bir alım hem de yüzde beş yukarıda bir kâr-al seviyesi listede durur. Saat 23 barında cancelAll ikisini birden siler. Açık pozisyon varsa yerinde kalır ve yalnız ortalama kesişimiyle kapanır.

DİKKAT

cancel ve cancelAll açık bir pozisyonu kapatmaz. İkisi de yalnız henüz dolmamış emirleri siler; pozisyondan çıkmak için exit ya da closeAll kullanırsın. Dikkat: cancelAll bekleyen çıkış emirlerini de siler, yani kâr-al ve zarar-kes koruman da kalkar.

Emir neden dolmadı

Grafikte bekleyen emri görüyorsun ama alış işareti yok. Bu çoğu zaman bir hata değil, kuralın sonucudur. Sık sebepler şunlardır.

  • Emir bu barda yeni kuruldu. Kurulduğu barda dolmaz, en erken bir sonraki barda dolabilir.
  • Fiyat seviyeye hiç gelmedi. Bekleyen emir ancak fiyat o seviyeden gerçekten geçerse dolar.
  • Aynı barda önce başka bir seviye görüldü ve aynı ocaGroup içindeki kardeş emir iptal oldu.
  • cancel ya da cancelAll çalıştı ve emir listeden kalktı.
  • Aynı id ile ikinci bir emir verdin; eskisi silindi, artık bekleyen yeni seviyedir.
  • Adsız bekleyen emir kullandın ve pozisyon açıktı. Adsız emir yalnız pozisyon yokken dolar.

Kurulduğu barda dolmaz

Motor her barı önce açılıştan geçirir, sonra betiğini çalıştırır. Betik bir bekleyen emir kurduğunda o barın fiyat yolu çoktan geçmiştir. Bu yüzden emir en erken bir sonraki barda denenir.

Kural geriye dönük sınamanın dürüst kalmasını sağlar. Aksi hâlde barın tamamını görüp aynı barın içinde işlem yapmış olurdun; sonuçlar gerçekte elde edemeyeceğin kadar iyi çıkardı.

Fiyat seviyeye hiç gelmedi

En sık sebep budur ve en kolay doğrulanandır. Seviyeyi çizdirip fiyatın ona değdiği barları işaretlersen sorunun cevabını gözünle görürsün.

CODESCRIPT
// bekleyen seviyeyi ciz ve fiyatin degdigi barlari isaretle
seviye = sma(close, 20) * 0.98
enterLong(crossunder(close, sma(close, 20)), id="dip", limit=seviye)
exit(crossover(close, sma(close, 50)))
plot(seviye, "bekleyen seviye", "#ff9800")
mark(low <= seviye, shape.circle, location.belowbar, "#26a69a", "degdi")

Turuncu çizgi emrin beklediği seviyedir. Altında yeşil daire çıkan barlarda fiyat oraya inmiştir. Hiç daire görmüyorsan emrin dolmamasının sebebi bellidir: fiyat o seviyeye hiç uğramamıştır.

İPUCU

Bir emir dolmuyorsa önce seviyeyi çizdir. Seviye grafiğin çok uzağında kalıyorsa sorun emirde değil, seviyeyi üreten hesaptadır; çarpanı fiyata yaklaştır.

Bar içinde önce başka seviye görüldü

Bir bar tek bir fiyat değildir. Açılıştan kapanışa bir yol izler ve bekleyen emirler bu yol boyunca sırayla denetlenir. İki seviyen aynı barda görülürse yolda önce gelen dolar.

  • Yükselen barda yol şudur: açılış, dip, tepe, kapanış.
  • Düşen barda yol şudur: açılış, tepe, dip, kapanış.
  • İki seviye de aynı barda görülürse yolda önce gelen dolar, öteki iptal olur.
  • Tam eşitlikte zarar-kes önce çalışır; bu, ihtiyatlı tarafta kalmak için konmuş bir kuraldır.
NOT

Fiyatın bir barın içinde gerçekte hangi sırayla dolaştığını bar verisi söylemez; yol yukarıdaki iki kurala göre varsayılır. Bu yüzden iki seviyenin de aynı barda göründüğü durumlarda sonucu tek bir bara bakarak değil, çok sayıda örneğe bakarak değerlendir.

Bar içinde denetim sırası

Aynı bar içinde birden çok şey olabilecekse motor şu sırayla bakar. Bekleyen giriş emirleri en sonda gelir; yani önlerinde bir çıkış dolduysa tablo çoktan değişmiş olabilir.

  • Önce pozisyonun kendi zarar-kes, kâr-al ve iz-süren stop seviyeleri denetlenir.
  • Sonra id ile kurulmuş bekleyen çıkış emirleri denetlenir.
  • En son bekleyen giriş emirleri denetlenir.

Emir hangi fiyattan dolar

Emir dolduğunda fiyat her zaman yazdığın seviye olmaz. Bar seviyenin ötesinde açılırsa emir açılış fiyatından dolar; yani beklediğinden daha iyi bir fiyat alırsın. Bar seviyenin berisinde açılıp seviyeye sonradan gelirse emir tam seviyeden dolar.

  • limit emrinde kayma uygulanmaz; beklediğin fiyattan ya da daha iyisinden dolarsın.
  • stop emrinde kayma hareketin yönünde uygulanır, çünkü seviyeyi çoktan geçmiş bir harekete katılıyorsun.
  • Kayma oranını slippage ile, işlem masrafını commission ile ayarlarsın.
NOT

Ayarlarda limit emirleri için bir doğrulama payı tanımlıysa fiyatın seviyeye değmesi yetmez; seviyeyi o pay kadar aşması gerekir. Emir inatla dolmuyorsa bu ayarı da denetle.

İşlev özeti

cancel(id[, when])

Değer döndürmez. Verdiğin adı taşıyan bekleyen emri listeden siler.

id
metin
İptal edilecek emrin adı. Sabit metin olmalı; bar bar değişen bir ad kullanılamaz. Aynı ad hem bekleyen girişte hem bekleyen çıkışta aranır.
when
koşul
İsteğe bağlı. İptalin hangi barda çalışacağı. Vermezsen her barda çalışır. Böyle bir emir yoksa hiçbir şey olmaz.

cancelAll([when])

Değer döndürmez. Bekleyen tüm giriş ve çıkış emirlerini birlikte temizler; açık pozisyona dokunmaz.

when
koşul
İsteğe bağlı. Temizliğin hangi barda çalışacağı. Vermezsen her barda çalışır, bu da hiçbir emrin bekleyememesi demektir.

order(koşul, yön?)

Değer döndürmez. Koşulun doğru olduğu barda piyasa emri yönlendirir. entryMarket ile birebir aynı işlevdir.

koşul
koşul
Doğru olduğu barda pozisyona girilir. Seviye almadığı için bekleme olmaz.
yön
metin
İsteğe bağlı. short verirsen kısa, vermezsen uzun girilir. Zarar-kes ve kâr-al gibi risk ayarları için enterLong ya da enterShort kullan.