Algoritmik trading, alım ve satım kararlarının önceden belirlenmiş kurallara göre bilgisayar tarafından uygulanmasıdır. İşleme giriş, pozisyon büyüklüğü, stop ve çıkış koşulları bu kuralların parçalarıdır. Benim için algoritmik trading'in en değerli tarafı, bir işlem fikrini ölçülebilir ve tekrar test edilebilir hâle getirmesi.
Borsa İstanbul, döviz pariteleri ve endeksler üzerine yaptığım çalışmalarda hareketli ortalamaları, fiyat kırılımlarını, hacim filtrelerini ve ATR stoplarını değerlendirdim. Küçük pozisyonla başlayıp sonradan ekleme yapmak gibi farklı işlem modelleri üzerinde de çalıştım.
Bu süreçte üzerinde en çok durduğum konu şu oldu: Geçmişte kazançlı görünen bir stratejinin, hangi koşullarda ve hangi riskle o sonucu ürettiğini anlamak.
Algoritmik trading nasıl çalışır?
Önce işlem fikrini açık kurallara dönüştürürüm. Ardından bu kuralları kodlayıp geçmiş veriler üzerinde sınarım.
Örneğin, "Fiyat güçlenince alacağım" ifadesi benim için anlaşılır olabilir. Ancak bilgisayarın bunu uygulayabilmesi için güçlenmeyi tanımlamam gerekir.
Dört saatlik mumun 20 dönemlik üssel hareketli ortalamanın üzerinde kapanması bir giriş koşulu olabilir. Önceki 20 mumun en yüksek fiyatının aşılması ise farklı bir koşuldur. Bu iki yaklaşım farklı zamanlarda işlem açabilir.
Giriş koşulunun ardından pozisyon miktarını, stop seviyesini ve çıkış kuralını belirlerim. Açık pozisyon varken yeni sinyal geldiğinde ne yapılacağı da önceden belli olmalıdır.
Benim açımdan stratejinin tamamlanması, bu soruların cevabının netleşmesiyle başlar.
Algoritmik işlem stratejilerinde trend takibi
Çalışmalarımın önemli bir bölümünü oluşturuyor. Amacım, belirlenen koşullarda bir fiyat hareketine katılmak ve çıkış sinyali oluşana kadar pozisyonu taşımak.
Hareketli ortalama kırılımıyla giriş yapmak, fiyat belirli bir ortalamanın altında kapandığında çıkmak bu yaklaşımın örneklerinden biri. Ancak kullandığım ortalama tek başına bütün sistemi tanımlamıyor. Stop, pozisyon büyüklüğü ve işlem maliyetleri de sonucu etkiliyor.
En çok uğraştığım sorunlardan biri yatay piyasada art arda stop olmak. Fiyat ortalamanın üzerine çıkıp giriş sinyali oluşturuyor, ardından tekrar aşağı dönüyor. Bu hareket tekrarlandığında küçük kayıplar birikiyor.
Bu nedenle bir stratejiyi geliştirirken hangi koşullarda işlem açmayacağımı da belirlemeye çalışıyorum.
ADX ve hacim filtreleri işe yarar mı?
Ben bu sorunun cevabını karşılaştırmalı testle arıyorum.
ADX, trendin gücünü değerlendirmeye yardımcı olur. Tek başına fiyatın yükseleceğini veya düşeceğini söylemez. Bu nedenle ADX'i yön sinyali olarak yorumlamıyorum. Fidelity — teknik göstergeler rehberi
Hacim filtresiyle de giriş anındaki işlem aktivitesini değerlendirmeyi amaçlıyorum. Fakat filtre eklenince stratejinin mutlaka iyileşeceğini varsaymıyorum. Bazı zararlı işlemler elenirken kazançlı işlemler de kaçabilir.
Benim için doğru karşılaştırma, aynı stratejiyi aynı dönemde ve aynı maliyetlerle filtreli ve filtresiz çalıştırmak. Sonrasında net kâra, maksimum düşüşe ve işlem sayısına birlikte bakmak.
ATR ile stop belirlerken
Fiyatın oynaklığını dikkate alıyorum. ATR, belirli bir dönemdeki fiyat hareketlerinin genişliğini ölçer; yön tahmini yapmaz. Fidelity — ATR göstergesi
Örneğin giriş fiyatım yüz lira, ATR iki lira ve stop mesafem ATR'nin iki buçuk katıysa başlangıç stopum doksan beş lira olur.
Burada önemli olan, stop mesafesiyle pozisyon büyüklüğünü birlikte hesaplamak. Stop genişlediğinde aynı miktarda pozisyon taşımaya devam edersem planladığım parasal risk artar.
Başlangıç stopunun sabit kalıp kalmayacağını ve iz süren stopun nasıl güncelleneceğini de ayrıca tanımlarım. Bu kuralların belirsiz olması, beklediğimden farklı işlemler oluşmasına neden olabilir.
Pozisyon büyüklüğü ve risk yönetimi
Algoritmik trading'de en çok önem verdiğim konulardan biri.
Hesabımın yüzde biriyle pozisyon açmak, hesabımın yüzde birini riske etmekle aynı şey değil.
Yüz bin liralık bir hesapta işlem başına bin lira risk ayırdığımı düşünelim. Hisseyi yüz liradan alıp doksan beş liraya stop koyuyorsam hisse başına planlanan risk beş liradır.
| Örnek hesaplama | Tutar |
|---|---|
| Hesap büyüklüğü | 100.000 TL |
| Planlanan işlem riski | 1.000 TL |
| Hisse başına stop mesafesi | 5 TL |
| Pozisyon miktarı | 200 adet |
| Pozisyon tutarı | 20.000 TL |
Bu hesap komisyon ve fiyat kaymasını içermez. Stop seviyesinden daha kötü bir fiyatta çıkarsam gerçek kayıp daha yüksek olabilir.
Döviz ve endeks işlemlerinde sözleşme özellikleri ve hesap para birimi de hesaba katılır. Bu yüzden farklı ürünlerde aynı lot miktarını kullanmayı, aynı riski almak olarak değerlendirmiyorum.
Kademeli alım stratejisinde
Önce küçük pozisyon açıp belirlenen teyit koşulu oluştuğunda ekleme yapmayı araştırdım.
Bu yaklaşım, başarısız ilk sinyallerde daha küçük pozisyon taşımayı sağlayabilir. Ancak fiyat hemen hızlanırsa hareketin ilk bölümünden daha az kazanç elde edilir. Daha yüksek fiyattan yapılan ekleme de ortalama maliyeti yükseltir.
Bu nedenle yalnızca "Küçük alıp sonra ekleyeceğim" demek yeterli değil. Eklemenin hangi koşulda, hangi miktarda ve hangi stopla yapılacağını belirlemek gerekiyor.
Benim değerlendirdiğim esas konu, bütün pozisyonun toplam riski. İlk emrin küçük olması, eklemelerden sonra da riskin küçük kalacağı anlamına gelmiyor.
Backtest nedir?
Bir stratejinin geçmiş piyasa verileri üzerinde nasıl sonuç üreteceğini simüle etmektir.
TradingView ve MetaTrader üzerinde test yaparken kullanılan veriyi, emirlerin gerçekleşme varsayımlarını ve maliyetleri dikkate almak gerekir. TradingView işlemleri bir aracı kurum simülatörüyle modeller. MetaTrader ise farklı ayrıntı seviyelerinde test yöntemleri sunar. TradingView — strateji kavramları
Ben bir sonuç ekranına baktığımda önce işlemlerin nasıl oluştuğunu anlamak istiyorum. Sinyal mum kapanışında mı hesaplanmış? Emir hangi fiyattan gerçekleşmiş? Komisyon ve fiyat kayması eklenmiş mi?
Gelecekte öğrenilecek bir bilgiyi geçmişte biliniyormuş gibi kullanmak da sonucu bozabilir. Örneğin henüz kapanmamış günlük mumun nihai kapanış değerini kullanarak işlem açmak, geleceğe bakma yanlılığı oluşturabilir. TradingView — geleceğe bakma (lookahead)
Backtest optimizasyonunda aşırı uyum riski
Özellikle dikkat ettiğim bir konu.
Ortalama uzunluğunu, stop çarpanını ve filtre eşiklerini sürekli değiştirerek geçmişte çok iyi görünen bir kombinasyon bulabilirim. Ancak bu kombinasyon geçmişteki tesadüflere uyum sağlamış olabilir. Çok sayıda deneme arasından en iyi sonucu seçmek, gelecekteki performans beklentisini olduğundan yüksek gösterebilir. Bailey — backtest olasılığı
Bu yüzden stratejiyi geliştirdiğim veriyle değerlendirdiğim veriyi ayırmayı önemsiyorum. Kuralları bir dönemde belirleyip daha önce ayar yapmak için kullanmadığım sonraki dönemde sınamak istiyorum.
Walk-forward, yani yürüyen pencere yaklaşımında bu süreç zaman boyunca tekrarlanır. Her aşamada geçmiş verilerle ayar yapılır ve sonraki dönem değerlendirilir.
Bir algoritmik trading stratejisinin başarısını
Yalnızca toplam kârla ölçmüyorum.
Maksimum düşüş, hesabın gördüğü zirveden ne kadar gerilediğini gösterir. Kâr faktörü, kazançlı işlemlerin toplamını zararlı işlemlerin mutlak toplamıyla karşılaştırır. İşlem sayısı ve kârın kaç işleme dağıldığı da sonucun değerlendirilmesinde önemlidir.
Kazanma oranı yüksek bir sistem büyük kayıplar üretebilir. Daha düşük kazanma oranına sahip bir sistem ise kazançlı işlemleri yeterince büyükse olumlu sonuç verebilir.
Benim için belirleyici olan, bu ölçülerin birlikte nasıl bir tablo oluşturduğu.
Sabit sermaye ve bileşik getiri karşılaştırmasında
Kullanılan yöntemin açık olmasını istiyorum.
Her işlemde sabit iki yüz bin liralık pozisyon açmakla büyüyen hesabın belirli yüzdesiyle işlem yapmak farklıdır. Bir milyon liralık hesapta iki yüz bin lira kullanıyorsam, getiriyi toplam hesap üzerinden mi yoksa kullanılan tutar üzerinden mi ifade ettiğim belli olmalıdır.
Al ve tut karşılaştırmasında da aynı dönemi, aynı başlangıç sermayesini ve tutarlı maliyet varsayımlarını kullanmak gerekir.
Kendi algoritmik trading sistemimi geliştirirken
Hedefim, yazdığım işlem fikrinin doğru anlaşılması ve kurallara uygun uygulanması.
Doğal dille yazdığım stratejinin koda çevrilmesi işimi kolaylaştırabilir. Ancak "Trend güçlenince ekle" gibi belirsiz ifadelerin önce açık koşullara dönüştürülmesi gerekiyor.
Geçmiş testin ardından gerçek zamanlı demo takibini de önemli görüyorum. Canlı uygulamada bağlantı kesintileri, reddedilen emirler ve yanlış pozisyon miktarı gibi sorunların yönetilmesi gerekiyor.
Benim kurmak istediğim sistemin neden işlem açtığı anlaşılmalı, riski hesaplanabilmeli ve sonuçları denetlenebilmeli. Bir stratejiye güvenebilmem için hangi koşullarda kazandığını ve hangi koşullarda kaybettiğini açıklayabilmem gerekiyor.