Piyasa zamanlaması ne zaman alalım satalım? Matlab uygulaması

Adnan Salih 06 Mayıs 2016, 10:55

 

Son yazılarımızda piyasanın pahalı olduğunu dile getirmiştik. Mayıs ayı bu sene borsa için problem ayı oldu, düşüşler %10'lara yaklaştı.

Piyasanın pahalı olduğu iddiasına dayanak yaptığımız göstergeler:

  • Toplu olarak RSI(14):
    • Toplam Hisse Sayısı RSI(14)>55
    • Toplam Hisse Sayısı RSI(14)<50
  • Ortalamalar:
    • Ortalamaların üstünde/altındaki hisse sayıları
  • Hisselerin toplam momentumu
    • 75 günlük log fiyatın zamana karşı eğimi toplamları


Bugün son sıradaki yöntemi Matlab kullanarak test edeceğiz. Kodun daha sade ve anlaşılabilir olması için ise eğim değerlerini Excel kullanarak hesaplayıp Matlab ortamına aktaracağız.

Sistem kısa ve uzun pozisyon taşıyacak, BİST100 endeksine yatırım yapacak.

Önce gerekli veriyi yükleyeceğiz:

load('xu100only.mat','Date','slope','XU100');

İşlem kuralları:

longlevel=-0.15/100;

shortlevel=0.25/100;

tradeclose=0;

longsEntry = (slope

longsExit= ( slope>tradeclose );

shortsEntry = ( slope>shortlevel);

shortsExit = ( slope<tradeclose) ;

Eğer toplu eğim -%0,15 altına düştüyse alım yapacağız, bu değer sıfır üstüne çıktığında pozisyonlardan çıkacağız

Toplu eğim %0,25 üstüne çıktığında ise kısa pozisyon alacağız, yine sıfırın altına geldiğinde kapatacağız.

Sıfır değerini ortalama olarak kabul edip, momentumun da sıfırın etrafında dalgalandığını varsayıyoruz.

Uzun ve kısa pozisyonları belirledikten sonra getirileri hesaplıyoruz:

pdiff=XU100-lag(XU100);%Fiyatları log olarak aktardığımız için fark alıyoruz

pdiff(1)=0;

pdiff(isnan(pdiff))=0;

points=pdiff.*lag(numUnits);

pointslong=pdiff.*lag(numUnitsLong);

pointsshort=pdiff.*lag(numUnitsShort);

Dikkat ettiğimiz nokta dünün pozisyonu bugünün getirisi ile çarpılmalı yoksa strateji yanlış sonuç üretir. Bunu da lag fonksiyonu ile hallettik.

Sistemin en yüksek ulaştığı değerlerden sonra düştüğü noktaları ve buradan ne kadar sürede geri geldiğini de hesaplamamız gerekir (peak to valley)

for t=2:length(cumulpoints)

    highwatermark(t)=max(highwatermark(t-1), cumulpoints(t));

    drawdown(t)=(cumulpoints(t))-(highwatermark(t)); % drawdown on each day

    if (drawdown(t)==0)

        drawdownduration(t)=0;

    else

        drawdownduration(t)=drawdownduration(t-1)+1;

    end

end

maxDD=min(drawdown); % maximum drawdown

maxDDD=max(drawdownduration); % maximum drawdown duration

Kodları çalıştırdıktan sonra elde ettiğimiz rakamlar:

(29 Nisan 2013-02 Mayıs 2016)

Toplam Bileşik Getiri: %63,84

Yıllık Ortalama Getiri: %17,84

Sharpe Rasyosu: 1,21

Tepeden aşağı en fazla düşüş: %16

Düşüşten kurtulma süresi: 129 gün (Bu portföyün eski en yüksek değerine ulaştığı gün sayısı)

Yatırımda olmadığımız sürelerde faiz elde etmedik.

Sistem ve BİST100 kümülatif getirilerine bakalım:

Max DD ne olmuş grafikten inceleyim:

Sistemin uzun/kısa bileşimine de bakalım hangi taraf daha iyi:

Sistem uzun düz çizgiler döneminde herhangi bir işlem yapmıyor bu da endeksin yeterince uç noktalara gitmediği anlamını taşır.

Sistem son olarak “sat sinyali üretmiş” durumda ki bunu da yazmıştık.

Piyasa gidecek/düşecek x,y,z göstegesi şu değerde bu değerde demenin çok büyük bir anlamı olmadığına inanıyorum. Bu göstergeler geçmiş veri ile test edilmeden ne kadar anlamlı oldukları tartışılamaz.

Bizim oluşturduğumuz gösterge ise ilk grafikte görüleceği üzere BİST100'e nazaran çok daha başarılı. Dolayısı ile iddiamızı matematiksel gerçekler ile desteklemiş oluyoruz. Önümüzdeki hafta aynı kod bloğunu kullanarak diğer iki göstergeye de eğileceğiz.

Kodları hazırlarken Ernie Chan’in kitaplarından yararlandım.

İyi hafta sonları.

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

Diğer Yazıları