Kaldıraçlı istatiksel strateji BİST100

Adnan Salih 22 Haziran 2017, 08:59

 

Dünkü yazıda sadece uzun pozisyon alan istatiksel bir strateji üzerinde çalışmıştım.
Bu stratejiyi nasıl kullanabilirsiniz?
Matlab kodunu dün paylaşmıştım.
Gerekli olan yardımcı fonksiyonlar ve veriyi de isteyenler ile paylaşacağım.
Veri ve fonksiyonları aldıktan sonra kullanan okuyucularımızın yapması gereken tek şey BİST bültenlerinden günlük kapanışları girmek ve modeli çalıştırmak.
Modeli çalıştırdıktan sonra finalLong isimli vektörü açtığınızda uzun veya ikinci uzun pozisyon görünecek, bir şey yoksa sıfır görünecek.

Bugün stratejiye kısa pozisyon ve kaldıraç ilave edeceğim.
Model aynı:
Alım Satım sıklığı: Günlük
Kaldıraç ve Kısa: İsteğe bağlı
Ortalama: 40 gün
Volatilite (Standart Sapma): 20 gün
Fiyat: Günlük
Borsada işlem gören 100 hissenin her gün için ortalaması ve volatilitesi hesaplanacak. Bu değerler ve fiyat kullanılarak z skor hesaplanacak. Z skor hesabı:
(Fiyat-Ortalama) /Standart Sapma
Bu değer tüm hisseler için hesaplanacak ve bir matris oluşturulacak.
Bu matriste belirlediğimiz alt-üst değerlerin altında / üstünde kalan hisse sayılarını bulacağız.
Hisse sayılarını bulduktan sonra kriterlerimizi uygulayıp alım satım kararlarını vereceğiz.
Zskor -2 civarına gerilemişse o hisse irtifa kaybediyor demektir. Bu tip hisseler borsada çoğunlukta ise o zaman iyi bir satış sonrasında diplerdeyiz diyebiliriz.
Alım yöntemi:
BİST100 hisselerinden zskoru -2 ve altına gerilemiş hisse sayısı 50 ve üstünde olursa alım yapacağız.
Pozisyon Çıkış:
BİST100 hisselerinden zskoru 2 ve üstüne yükselmiş hisse sayısı 25 ve üstünde olursa satım yapacağız.
Borsa her zaman diplere ya da tepelere yönelmiyor bazen daha küçük düzeltmeler yapabiliyor. Sisteme momentum kriteri de ekleyelim.
İkinci alım:
BİST100 hisselerinden zskoru 2 ve üstüne yükselmiş hisse sayısı 30’u yukarı keserse al.
Bu pozisyonu ya yükselen hisse sayısı 50’nin üzerine geçerse ya da ilk giriş koşulu bozulursa sat.
Açık satış yöntemi:
Z skor değeri +2 üstüne çıkmış hisse sayısı 66’dan fazla olduğunda açık sat
Z skor değeri -2 altına düşen hisse sayısı 1’den fazla olduğunda açık pozisyon kapat.
BİST momentum aldı mı yürümeye devam ediyor, o yüzden kısa pozisyonlarda azami dikkat gerekiyor. Harika bir stratejiyi bozmak için gereksiz açık satış ve kaldıraç eklemek ilave olarak stop loss kullanmak en iyi yöntemlerdir.
Kaldıraç ayarlamak için kod içerisinde birtakım değişiklikler yapmak gerekti:
thres1=-2;%fiyatları gerilemiş ve volatilitesi artmış hisseler için
thres2=2;%fiyatları yükselmiş volatilitesi azalmış hisseler için

shortLeverage=1; %Kısa istemiyorsak sıfır olmalı
longLeverage=1;%Kaldıraç kullanmak istiyorsak rakam yükseltilmeli

lookback=20;%volatilite süresi
lookback2=40;%ortalama süresi

buyNumber=50;%z skor değeri düşmüş hisse sayısı
buyExitNumber=25;%z skor değeri artmış hisse sayısı
sellNumber=66;
sellExitNumber=1;

Kod bloğuna kısa için bir parametre ve uzun pozisyonlarda kaldıraç bir başka parametre ekledim.
Parametreleri aşağıdaki gibi kullandım:

buy=belowThres>buyNumber;%alım kriteri
exitBuy=aboveThres>buyExitNumber;%uzun pozisyon çıkış kriteri
buy2=lag(aboveThres)<buy2&aboveThres>buy2;%momentum alım kriteri
buy2Exit=lag(aboveThres)<buy2Exit&aboveThres>buy2Exit...%momentum alımdan çıkış kriteri
|(lag(aboveThres)>buy2&aboveThres<buy2);

sell=aboveThres>sellNumber;%satım kriteri
exitSell=belowThres>sellExitNumber;%kısa pozisyon çıkış kriteri

%buradan itibaren alım sinyalleri işleme
buySignal=NaN(size(belowThres));
buySignal(buy)=1;
buySignal(exitBuy)=0;
buySignal(buy2)=1;
buySignal(buy2Exit)=0;

sellSignal=NaN(size(aboveThres));
sellSignal(sell)=-1;
sellSignal(exitSell)=0;

finalLong=fillMissingData(buySignal);
finalShort=fillMissingData(sellSignal);

finalLong(isnan(finalLong))=0;
finalShort(isnan(finalShort))=0;
bistRet=u100./lag(u100)-1;
bistRet(isinf(bistRet))=0;

%portföy günlük getiri
portRetDaily=lag(finalLong*longLeverage+shortLeverage*finalShort).*bistRet;

Hemen kısa pozisyonlar ile kar zararı inceleyelim:
Orijinal Strateji Yıllık ortalama getiri 0.2185 sharpe rasyosu: 1.7786
En büyük düşüş -0.0784 oldu. Bu kayıp: 98 gün sonra geri alındı

BİST Al-Taşı Yıllık ortalama getiri 0.0820 sharpe rasyosu: 0.4937
En büyük düşüş -0.2624 oldu. Bu kayıp: 510 gün sonra geri alındı
Strateji genelinde %1,5 civarında bir iyileşme oldu.
Kaldıracı 2 olarak ayarlayalım:
Orijinal Strateji Yıllık ortalama getiri 0.4654
En büyük düşüş -0.1569 oldu. Bu kayıp: 98 gün sonra geri alındı
Kaldıracı artırmak getiriyi anlamlı şekilde artırdı.
Kaldıracı 10x yapalım:
Orijinal Strateji Yıllık ortalama getiri 3.0318
En büyük düşüş -0.7844 oldu. Bu kayıp: 98 gün sonra geri alındı
Kaldıraç 10 kat kullandığımızda getiri çok yükseldi. Bununla birlikte getiri tek kriter olamaz. En yüksek değerden gerileme %78’e vardı. Stratejiyi tam bu düşüşten önce başlattığınızı ve kapitalin %78’ini kaybettiğinizi düşünün herhalde iyi hissetmezdiniz. Getiri grafiğini inceleyelim:

Müthiş risk almak istiyoruz, kaldıracı 100’e çıkaralım:
Orijinal Strateji Yıllık ortalama getiri 0.3917
En büyük düşüş -7.8444 oldu. Bu kayıp: 98 gün sonra geri alındı
Sistem patladı, sermayeden 8 kat fazla kaybettik!
Grafiği inceleyelim:

Aşırı kaldıraç tek bir sonuca yol açıyor: Sermayenin misliyle yitirilmesi. Bu bağlamda foreks sistemlerinde aşırı kaldıraç ile işlem yapılmasını hala daha savunanlar var ise bunun anlamsız olduğunu bir daha kanıtlamış oluyoruz.
Stratejiyi kısa ve kaldıraç ilave ederek çalıştırdığımızda sonuçlar biraz daha iyileşti. En iyi kaldıraç seviyesi ise 2x olarak görünüyor.
Stratejinin eğitim amaçlı olduğunu, tavsiye içermediğini ve kullanmak isterseniz kendi sorumluluğunuzda olduğunu hatırlatmak isterim.

Sayfada yer alan bilgiler tavsiye niteliği taşımayıp yatırım danışmanlığı kapsamında değildir. Yatırımcı profilinize uymayabilir.

Yorumlar

  • can d.26 Haziran 2017 09:45Kaldıracı yarım Rolling Kelly'e göre günlük dinamik ayarlasak, kelly negatifken pozisyon almasak drawdown ve getiri nasıl değişir acaba, Model mükemmeleşebilir mi ?

    (%0,00) (%100,00)

Diğer Yazıları