Sistem geliştirme borsa mı dolar mı?
Sistem geliştirme konusunda geçtiğimiz haftadan bu yana çeşitli konuları aldık.
Sistem geliştirirken çok çeşitli araçlar kullanılabilir: Matriks/Metastock en yaygın kullanılan araç. Metatrader ise foreks tarafında bir başka çok kullanılan program. Excel fiyat/performans ve görsellik alanlarında ön plana çıkıyor, kullanımı nispeten kolay. Matlab, R, Python, C, C++ gibi diller de alım satım sistemi tasarlamada kullanılabiliyor.
Programlama dilleri ile yapılan uygulamalar daha çok performansa dönük ve Excel /Metastock türevlerine göre daha esnek olabiliyorlar.
Sistem tasarlarken öncelikle bir gözlemimiz olması gerekir. Daha önce bu köşede dolar mı borsa mı konulu bir sistem geliştirip kullanmıştım. Bugün bu konuyu daha detaylandırıp aynı zamanda güncelleyeceğim.
Yurtdışı bloglar yatırım sitelerinde en popüler yatırım şekillerinden biri 60/40 portföy olarak nitelenen usuldür.
60/40 nasıl çalışır?
Birbiri ile ters hareket eden birinden para çıktığında diğerine para giden iki varlık sınıfı kullanılır. Amerikan örneklerinde bu SPY ve TLT olur. SPY, SP500 endeksinin borsa yatırım fonu, TLT ise 20 yıl ve üstü Amerikan bonolarına yatırım yapan borsa yatırım fonudur. Amerika’da para bono ve borsa arasında hareket eder.
60/40 sisteminde belirli bir süreye göre fiyat değişimlerine bakılır, hangi varlık sınıfı daha iyi getiri sağlamış ise yine belirlenen süre kadar o varlık sınıfı portföyde %60 oranında taşınır. Diğeri ise %40 olur.
Örnekleyelim.
Sistem son 3 ayın getirisine bakıp bir ay pozisyon taşısın.
SPY: %10
TLT %1
Bu durumda bir ay boyunca portföyde %60 SPY, %40 da TLT olacaktır.
Bu örneği Türkiye’ye uygulayabilir miyiz sorusu ile başlayabiliriz.
Uygulayabiliriz ama Türkiye’de söyle bir sorun var: Uzun vadeli bonolar ile borsa birbirine çok benzer hareket ediyor. Daha açık söylemek gerekirse bonolar güvenli liman olarak algılanmıyor.
Güvenli liman olarak neyi kabul edebiliriz? Doğal seçim mevduat olarak görünüyor. Bir diğer seçim ise dolar olabilir.
Mevduat seçiminde veri toplamak çok zor, ilave olarak mevduat fiyatları çok sıklıkla değişmiyor. Mevduat kullansak o zaman borsa getirisi mevduatı aştığında yatırım yapacağız demek gerekir. Bu da iyi bir sistem olabilir, denenmesi gerekir. Sistem borsa mı mevduat mı olabilir.
USD konusu ise biraz daha makul. Veri elimizde mevcut, borsa ile ters hareket ediyor.
Sistemi tasarlamaya geçebiliriz.
Bugün Matlab kullanacağım.
Matlab çoğu yatırımcımıza zor gelecektir bunun bilincindeyim. Bununla birlikte biraz çalışma ve alıştırma ile öğrenilmeyecek bir uygulama yok.
Veri USDTL ve XU100 kapanış değerlerini içerecek. (27/1/10-23/11/16)
USD tuttuğumuzda faiz getirisi yazmayacağız.
Öncelikle dağılıma kara vermemiz gerekiyor: 60/40 mı yoksa 100/0 mı olsun?
100/0 olarak seçelim:
clear
clc
load('bonoborsa22');
maxBorsa=1;
Kaç günlük fiyat değişimine bakmak gerekiyor sorusunun cevabı 10 olsun:
momentumDay=10;
Günlük getirileri hesaplayalım:
dailyRetBorsa=calcRet(XU100,1);
dailyRetBono=calcRet(dirtyPx,1);%1501 getiri
dailyRetUSD=calcRet(USD,1);%usd getiri
Getirileri hesaplarken calcRet isimli bir fonksiyon ürettim.
Detayına bakalım:
function ret=calcRet(data,ndays)
ret=data./lag(data,ndays)-1;
ret(isinf(ret))=0;
end
Fonksiyonda yer alan lag ibaresi vektörde geriye gidip değerleri almamızı sağlıyor.
İşlemleri kontrol etmek için aşağıdaki satırları yazdım:
dailyReturn=bonoBorsaTrade(XU100,dirtyPx,Date,momentumDay,maxBorsa); %Bono-Borsa Günlük Getiri
dailyReturn2=bonoBorsaTrade(XU100,USD,Date,momentumDay,maxBorsa); %Borsa-USD Günlük Getiri
Yukarıdaki satırlarda da bonoBorsaTrade isimli bir fonksiyon kullandım. Detayına bakalım:
function dailyPortRet=bonoBorsaTrade(asset1px,asset2px,date,nMomentum,maxAsset1)
date=eomdate(date);
asset1Ret=calcRet(asset1px,nMomentum);
asset2Ret=calcRet(asset2px,nMomentum);
asset1daily=calcRet(asset1px,1);
asset2daily=calcRet(asset2px,1);
asset1Long=(asset1Ret>asset2Ret)&datenum(date)>lag(datenum(date));
asset1LongExit=(asset1Ret<asset2Ret)&datenum(date)>lag(datenum(date));
asset1Pay=NaN(length(asset1Long), 1);
asset1Pay(asset1Long)=maxAsset1;
asset1Pay(asset1LongExit)=1-maxAsset1;
asset1Longs=fillMissingData(asset1Pay);
asset2Longs=1-asset1Longs;
asset1Longs(isnan(asset1Longs))=0;
asset2Longs(isnan(asset2Longs))=0;
dailyPortRet=lag(asset1Longs).*(asset1daily)+ lag(asset2Longs).*(asset2daily);%günlük portföy getirisi
dailyPortRet(isnan(dailyPortRet))=0;
end
Fonksiyon 1’nci ve ikinci varlık fiyat serisini alıyor, gerekli tüm hesaplamaları yapıyor. Çıkışta sadece portföy getirisi olan bir vektör getiriyor.
Portföy getirilerini elde ettikten sonra portföy metriklerini elde etmek gerekir. Borsa-dolar ikilisi için aşağıdaki satırları kullandım:
[borsaUsdY,borsaUsdSharpe,maxDD,maxDDD,drawdown]=portMetrics(dailyReturn2);
5 adet çıktı üreten bir fonksiyon kullandım, portMetrics. Detayları:
function [apr,sharpe,maxDD,maxDDD,drawdown]=portMetrics(portRet)
apr=prod(1+portRet).^(252/length(portRet))-1;
sharpe=sqrt(252)*mean(portRet)/std(portRet);
%Max DD Hesaplama - USDBORSA için
cumulpoints=cumsum(portRet);
drawdown=zeros(size(cumulpoints)); % initialize drawdowns to zero.
drawdownduration=zeros(size(cumulpoints)); % initialize drawdown duration to zero.
highwatermark=zeros(size(cumulpoints)); % initialize high watermarks to zero.
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
end
Portföyün en iyi yerinden en kötü yerine olan düşüşünü, bu düşüşten kaç günde çıktığını, yıllık ortalama getirisini, sharpe rasyosunu hesapladık. Grafikte kullanmak üzere drawdown değerlerini de ürettik.
Sistem bu haliyle tamam.
Tüm işlemleri doğru olarak gerçekleştiriyor. Fakat yeterli değil.
Sistemin ne ürettiğini grafik olarak göstermeliyiz
Sistemin metriklerini ekranda göstermeliyiz.
Bunun için de kod satırları ilave etmek gerekiyor. Kalabalık olmaması ve teknik olduğu için göstermeyeceğim. Onun yerine grafiklere bakalım:
Sonuçlara bakalım:
Başlangıç Tarihi: 27/01/2010 Bitiş Tarihi: 23/11/16
Yıllık Portföy Getirileri: BorsaUSD=20.79 USD=13.12 Borsa=5.03 BorsaBono=-0.98
Yıllık Sharpe Rasyoları: BorsaUSD=1.22 USD=1.23 Borsa=0.33 BorsaBono=0.04
En yüksek kayıp (Yüzde): -20.37 Kaybın geri alınması ne kadar sürdü: 178 gün
Sistemi geliştirdikten sonra istediğimiz gibi oynayıp sonuçlara bakabiliriz. 100/0 yerine 120/-20 yapıp sonuçlarına bakalım:
Başlangıç Tarihi: 27/01/2010 Bitiş Tarihi: 23/11/16
Yıllık Portföy Getirileri: BorsaUSD=24.52 USD=13.12 Borsa=5.03 BorsaBono=-3.11
Yıllık Sharpe Rasyoları: BorsaUSD=1.13 USD=1.23 Borsa=0.33 BorsaBono=-0.04
En yüksek kayıp (Yüzde): -25.85 Kaybın geri alınması ne kadar sürdü: 222 gün
Sistem son 3-4 aydır dolar yükselişine pozisyonlanmış durumda borsada yatırım ikincil seviyede.
Kodları incelemek isteyenler bu bağlantıdan indirebilirler.
Bol kazançlar.
Sayfada yer alan bilgiler tavsiye niteliği taşımayıp yatırım danışmanlığı kapsamında değildir. Yatırımcı profilinize uymayabilir.
-
yorumcu25 Kasım 2016 18:19
Keşke sistemin tersini (çok getirende yüksek pozisyon almak yerine az getirende pozisyonu artırmak) da deneyip karşılaştırsaydınız.
-
vatandaş24 Kasım 2016 17:12
Ya hacı, matlap 4000 tl...Kağıt kalem 5 tl ve 30 dk...excel zaten var yani beleş süre 15 dk...Hafıza bedava..
-
ali24 Kasım 2016 12:46
bencede bugüm dolar ve borsa için milat olur. dolar düşer borsa çıkar
-
mali24 Kasım 2016 12:29
Bu kadar karışık analize gerek sıradan insanlar dolardan yana ve kazandıkça kazanıyorlar....
-
ralli24 Kasım 2016 11:48
bugünden sonra borsa doları ezip geçecek.
-
11 Kasım 2024, Pazartesi
Trump’ın zaferi Türkiye’yi nasıl etkileyecek?
Devamını Oku -
06 Kasım 2024, Çarşamba
Trump geliyor, peki piyasalar hazır mı?
Devamını Oku - 28 Ekim 2024, Pazartesi Devamını Oku
-
22 Ekim 2024, Salı
Altın ve gümüşte yükseliş nereye kadar sürecek?
Devamını Oku -
01 Ekim 2024, Salı
Piyasalar sıkıştı, bekle-gör stratejisi hakim
Devamını Oku - 11 Eylül 2024, Çarşamba Devamını Oku
-
12 Ağustos 2024, Pazartesi
Merkez’in faiz sinyali hangi şirketleri etkileyecek?
Devamını Oku -
06 Ağustos 2024, Salı
Finansal dalgalanmanın ortasında neler oluyor?
Devamını Oku -
23 Temmuz 2024, Salı
TCMB’nin faiz kararı ve piyasaların seyri
Devamını Oku -
01 Temmuz 2024, Pazartesi
Gri listeden çıkış ve CDS’lerin seyri
Devamını Oku
- ARACI KURUM RAPORLARI
- 08:41Borsada alıcılı başlangıç bekleniyor
- 15:28Tekfen Holding yılbaşından bu yana %118 kazandırdı
- 08:24Borsada alıcılı başlangıç bekleniyor
- 15:03Türk Hava Yolları hissesinde kurumların en yüksek beklentisi yüzde 82.3
- 09:03Bugün dikkatler NVDA’nın sonuçlarında! Hayal kırıklığı olacak mı?
- Tümünü Göster