Intraday Long Stratejisi Çalışmaları - 2
Bir önceki bültende anlatmaya başladığım intraday long stratejisi çalışmalarımı paylaşmaya kaldığım yerden devam ediyorum.
Kısaca hatırlamak gerekirse, stratejinin amacı gün içerisinde çok artan hisse senetlerinin artışlarının bir bölümünü yakalamaktı. Bunu da geri çekilmelerin ardından tekrar artmaya başladığında yapmaya çalışıyordu. Girişler ve çıkışlar 5 dakikalık fiyat hareketlerine göre oluyordu.
İlk senaryoda strateji, giriş için sadece hacmin azalmasını ve bir sonraki 5 dakikalık mumun kırılımını bekliyordu. Fiyat hareketi yukarı devam etmezse, bir önceki 5 dakikanın en düşük fiyatında da zarar kesiyordu. Yukarı devam ederse, hep bir önceki barın düşük fiyatına göre stop/loss’u yukarı kaydırıyordu. Bu senaryonun sonuçlarının iyi gözükmemesinden ötürü, giriş şartlarını değiştirmiştim. Yeni giriş şartları şöyleydi;
hisse senedi fiyatının yeni bir tepe yapmış olması (new high): çıkış yapmış olması bir daha yapabileceğinin göstergesi,
yeni tepeden sonra fiyatın gerilemiş olması (pull back): pozisyona fiyatın pullback yapmasından sonraki çıkışta girilecek,
gerilemenin 3 bardan daha fazla olmaması: gerileme çok fazla olursa konsolidasyon fazı başlamış olma ihtimali yüksek, fiyat yeni bir tepe yapana kadar pozisyona girmemeli.
Geçen hafta değinmeyi unuttuğum bir şart daha vardı;
pozisyonun en baştaki riski %10’dan fazla ise strateji hiç giriş yapmıyor. Yani ilk stop/loss olan bir önceki barın düşük fiyatı, giriş fiyatından %10’dan daha fazla düşük ise, giriş yapılmıyor. Bu tip pozisyonların %90’dan fazla zararla sonuçlandığını gördükten sonra bu şartı koydum. Böylece riski %10’dan fazla olan pozisyonları da elemiş oldum.
Yeni Giriş Şartların Sonuçları
İlk giriş şartlarının sonuçları ile ikinci versiyonunkileri aynı zaman aralığında karşılaştırdım. İlk grafikler birinci şartlar grubunun, ikinci grafikler de ikinci şartlar grubunun sonuçları:
06 Mayıs - 10 Mayıs 2024
Daha fazla programlama yaptıkça Phyton ile grafik çıkartma ve istediğim sonuçları da grafiğe eklemeyi öğrendim. Böylece istediğim sonuçları tek seferde görerek epey zaman kazanmaya başladım.
Yeni versiyonun sonuçları epey farklı. %39 kar ile sonuçlanmış. Yani her pozisyonun büyüklüğü 1000 dolar olsaydı haftayı 390 dolar kar ile kapatacaktı. Yeri de gelmişken ikinci grafiğin altındaki sonuçları inceleyelim. Aslında bu sonuç verileri ile ilgili ayrıntılı bir bülten oluşturacağım. Şimdi kısaca değinmek gerekiyor.
Number of days: Stratejinin çalıştığı gün sayısı. O hafta beş gün de market açıkmış.
Number of unique tickers: Strateji toplamda 90 adet hisse senedinde işlem yapmış. Aynı hisse senedinde farklı günlerde işlem yapmışsa da bunu bir hisse senedi olarak sayıyor.
Number of trades: Toplam trade sayısı 158. Yüksek duruyor, sebebi aslında yukarıdaki sonuç. Şartları sağlayan hisse sayısı da yüksek. Hisse senedi başına 158 / 90 = 1.7555 trade aslında çok değil.
Total return: Geri dönüş %39.33 olmuş. Bu pozisyonların sonuçlarının toplamı. Yani bakiyenin %39.33’ü değil. Bütün pozisyonların getirisinin toplamı. 1000 dolarlık alış yapılıyorsa, hafta sonunda 393 dolar kazanç elde edilmiş oluyor.
Average winner: Kazanan tradelerin ortalaması %3.10. Yani kazanan tradeler ortalama olarak %3.10 yukarı hareket etmiş. Aslında buraya en çok hareket eden 3 trade de eklenebilir.
Average loser: Kaybeden tradelerin ortalama kaybı %2.04. En çok kaybedenin 10% olduğunu giriş şartlarından biliyoruz.
RRR (Risk reward ratio): Ödül/risk oranı kavramını Trading Stratejisi adlı bültende ayrıntılı açıklamıştım. Yukarıdaki iki parametrenin oranı yani ortalama kazanç / ortalama kayıp 1.52 olmuş.
Success rate: Kazanç oranı yani kazanan tradelerin bütün tradelere oranı %44 olmuş. Bu parametre ödül/risk oranı ile çok ilişkili. 100 tradein 44’ü kazanıyor (56’sı kaybediyor) ve kazanlar 1.52 birim kazanırken kaybedenler 1 birim kaybediyor. Bu kombinasyon uzun vadede karlılığı sağlıyor.
Max drawdown: Drawdown (düşüş) bakiyenin pozisyonlar boyunca yaşadığı düşüştür. Bu stratejide bu hafta içerisinde 158 poziyon açılıp kapanırken en yüksek zarar toplamda %58.77 olmuş. Yani pozisyonların 1000 olduğu durumda bakiye en çok 587.7 dolar eksiye düşmüş. Eğer pozisyonlar bakiyenin 10% ile açılıyorsa, 10000 dolarlık bir bakiyede %5.87’lik düşüşe denk gelir, bu da kabullenilebilir bir yüzde.
Max open trades: Bu da aynı anda en çok açık pozisyon sayısını belirtiyor. Günden güne trade edildiği için bir gün içerisinde tek seferde en çok 5 pozisyon açık olmuş. Her pozisyonun 1000 dolar olduğu varsayılırsa, 5000 dolara (buying power) ihtiyaç duyulur. Bu değer ne kadar bakiye ayırmak göz önüne alınır.
Ne kadar toplam getiri pozitif kapanmışsa da kümülatif getiri grafiğinin 40. ve 120. tradeler arasındaki düşüşü pek iyi gözükmüyor. İstenilen sonuç, sert düşüşlerin olmadığı ivmenin çok hızlı olmasa da hep yukarı doğru hareket eden bir getiri grafiği. Ancak bu sadece bir haftanın sonucu, sadece buna göre karar vermek olmaz. O nedenle diğer haftalara da bakalım.
22 Nisan - 26 Nisan 2024
Burada grafik istenildiği gibi ve ilkine nazaran çok daha stabil gözüküyor. Toplam getiri daha iyi, trade sayısı daha az. Kümülatif getiri çok hareketli değil, en çok düşüş %39 makul ve aynı anda dörten fazla pozisyon açılmamış. Sadece bir hafta iyi sonuç verdi diye karar verilemez, o nedenle diğer haftaların sonuçlarını incelemeye devam edilmeli. İlk versiyonda yaptığım gibi daha uzun bir süreye bakıyorum.
11 Mart - 29 Mart 2024
Burada da sonuç epey iyi çıkmış. Tekrar edeyim; %612 getiri bakiyeye göre değil, pozisyonların toplam hareketi. Yani her pozisyonda 1000 dolarlık alım yapılırsa, 350 trade sonunda 6120 dolar kar edilmiş olacak. 10000 dolarlık bir bakiyede yani bakiyenin %10’u ile pozisyon açılması halinde getiri %61.2 olur, ki bu da epey iyi bir sonuç.
Aylık Backtestler
Yeni versiyon aynı haftalarda bir önceki versiyondan çok daha iyi sonuç verdi. Artık tamamen yeni versiyona odaklanabilir, optimizasyonu bu versiyonda yapabilirim. Bu stratejisinin uzun vadede de iyi sonuçlar verip vermediğini görmek için 2024 yılının geçmiş aylarında bu stratejiyi uyguluyorum. Sonuçlar şöyle;
Ocak 2024
Şubat 2024
Mart 2024
Nisan 2024
Aydan aya getiriler oldukça iyi. Günde 25-30 arası pozisyon açılıyor. Bu miktar robot ile trade edilmesi durumunda çok değil. Hiç bir ay neredeyse getiri eksi bölgeye hiç girmemiş. Ortalama en yüksek drawdown %40’larda. Pozisyon büyüklüğü bakiyenin %10’u olması durumunda bu %4’lere denk gelir. Ayrıca bu kardan düşüş oluyor. Bu nedenle psikolojik olarak çok negatif etkilemez.
Burada vurgulanması gereken, sonuçlara herhangi bir masrafın dahil olmadığıdır. Broker komisyonları, routing ücretleri işin içine girince karlılık değişecektir. Broker komisyonları brokerdan brokera değişiklik gösterir. Örneğin robot ile trade etme özelliği olan ve Türkiye’de ikamet edenlerin hesap açabileceği bir broker olan Interactive Brokers’ın komisyon oranı toplam trade edilen hisse miktarına göre de değişiklik gösteriyor. Minimum hisse başına 0.35 dolar, maksimum pozisyon miktarının %1’i arasında değişiyor. Yani komisyon oranını en yukarıdan hesaplayıp %1 gibi düşünebiliriz. %1’lik bir komisyon bu durumlarda karlılığı çok etkilemiyor. Karlılığı asıl etkileyecek ve masraf olarak düşünülmesi gereken, fiyattaki kaymadır (slippage).
Slippage (Fiyatta Kayma) Nedir?
Likitedesi yeterli olmayan veya çok hareketli marketlerde, market emri verildiği an (veya herhangi bir emrin tetiklendiği an) ile emrin tamamının gerçekleşmesine kadar geçen süredeki fiyat farklılığına kayma (slippage) denir. Bu durum iki şekilde oluşabilir.
İlki, yeterli likidite olmaması durumu yani işlem yapılması istenilen miktarın karşılığının olmaması durumunda, bir sonraki fiyattan işlem yapılmaya devam edileceği için istenilen fiyat değişmiş olacaktır. Örneğin, 1 dolardan 1000 adet hisse için market alış emri verildiğini düşünelim. Eğer 1 dolardan 1000 adet hisse arzı mevcut değilse, öncelikle 1 dolardan arzı mevcut olan hisseler alınacak, sonra bir üst fiyattaki hisseler alınacak ve bu 1000 tane hisse satın alınmış olana kadar devam edecektir. Böylece ortalama alış fiyatı 1 doların üstünde olacaktır. Gene örneğin bu ortalama 1.03 dolar olursa beklenenden %3 fazla olmuş olacak bu pozisyonun hareketini -%3 kadar etkileyecektir. Bunu backtestte görmek ne yazık ki olanaksızdır.
İkincisi de, çok hızlı hareket eden yani volatilitesi yüksek marketlerde, işlem tamamlanana kadarki süredeki fiyat değişimidir. Yani gene 1 dolardan 1000 adet hisse için market alış emri verildiğinde, bu 1000 adet hissenin alışı tamamlanana kadar geçen süre ne kadar saliseler kadar olsa bile, o arada fiyat 1 dolardaki arzın hepsi alınmış ve market alış fiyatı 1 doların üstüne çıkabilir. Emir market emri olduğu için fiyattan bağımsız markette hangi fiyat var ise oradan alır, bu şekilde gene 1 dolardan daha yüksek bir ortalama ile alış yapılmış olunabilir. Bunu da gene backtestte görmek ne yazık ki olanaksızdır.
Fiyattaki kaymayı backtestte göremeyebiliriz ancak sabit bir kayma yüzdesini tam kardan düşerek güvenlik marjı oluşturabiliriz. Örneğin yukarıdaki sonuçlar gibi %500 gibi sonuçlanan bir ay düşünürsek, %500’ün toplam pozisyon hareketi olduğunu biliyoruz. Eğer pozisyon miktarı sabit ve bakiyenin %10’u kadar olursa, toplam bakiyeye oranla getiri %50 olacaktır. %5’lik bir slippage oranını da göz önüne alırsak ve %1’lik broker komisyonunu da eklersek kar %44’e düşecektir. Aylık getiri olarak hala fazlasıyla iyi olduğu söylenebilir.
Sonraki Adımlar
Backtest sonuçları gayet iyi duruyor. Bu sonuçlar üzerinde optimizasyon yapmak yerine, bu stratejiyi gerçek verilerle denemeye zaman ayırmak daha mantıklı olur. O nedenle artık backtest düzleminde değil, gerçek zamanlı teste doğru ilerleme göstermeliyim.
Backtestteki iyi sonuçlar bu stratejinin kesin karlı olacağı anlamına gelmiyor. Backtest ile live trading arasında çok fark olabilir. Geçmiş veriye bakarak pozisyonlara, canlı veri ile aynı şekilde girileceği varsayılır ancak bu gerçekleşmeyebilir. Ne kadar likiditesi olan marketler test ediliyorsa da gerçekte pozisyonlara giriş yapılamayabilir. Giriş yapılan pozisyonlardan istenildiği gibi çıkış yapılamayabilir. Çeşitli teknik aksaklıklar oluşabilir. Backtest yapılan zaman dilimlerinde hiç görülmemiş durumlarla karşılaşılabilir.
Bu nedenle bir sonraki adım, forward testing denilen gerçek veri ile ancak gerçekten alış yapmadan test etme süreci. Burada market açıkken, canlı market verisine göre hisse senetlerini filtreleyip, gereken şartların sağlanıp sağlanmadığını kontrol edip, pozisyona giriş yapıyor gibi gene veri toplanır. Bir nevi backtest geçmiş verilerle değil de canlı verilerle yapılıyor gibi.
Benzer sonuçlar çıkıyorsa, bir sonraki adım artık broker ile bağlantıya geçip otomatik trading sistemini kurmak olur. Bağlantının kurulduğu, pozisyonlara giriş çıkışın gerçekleştiği emin olunduktan sonra, gene yeterli bir süre boyunca olabildiğince ufak alışlar yaparak sistem yeterli süre test edilir. Çıkan sonuçların değerlendirmesine göre, hatalar düzeltilir ve değişiklikler yapılır.
Ne tip sorunlarla karşılaşılacağını ne yazık ki bilemiyorum ama karşıma çıkınca paylaşacağım. Bu işin üstünde olduğum ve daha zaman alabileceği için, bir sonraki bülten bununla ilgili olmayabilir, ancak sonuçlar çıktıkça bu seri başlığı ile devam ederek yaşadıklarımı ve sonuçları yazacağım.