Sistem tasarlama-Matriks örneği

Adnan Salih 17 Kasım 2016, 10:27

 

Dünkü yazıda QUANDL blog sistesinde çıkan bir röportajdan yola çıkmıştık. Yazıyı almamın ana sebebi sistem tasarımı konusunda gelişmiş bir kurumun en üst düzey çalışanının yöntemlerine ve en önemlisi felsefesine odaklanmaktı.

Yazı soyut doğru ama bu işin ciddiyetini ve zorluğunu da anlatıyor.

Sistem tasarlamak için ben Excel ve Matlab kullanıyorum. Zaman zaman da Matriks’e başvurduğum oluyor. Geçmişte MetaSock çok popülerdi. Yabancı bloglarda Python kullanıldığını da çok görüyorum. Excel kullanırken formülasyonları kullanabiliriz, VBA’dan faydalanabiliriz. Matlab pahalı bir uygulama, bununla birlikte vektörizasyon kabiliyeti çok büyük veri setinde çok hızlı çalışmanızı sağlayabiliyor. Vektörizasyondan kast ettiğim binlerce satır ve onlarca sütundan oluşan bir veride tek bir satırla 1 ve 0 lardan oluşan bir karar matrisi yapabilmek ve bunu daha sonraki işlemlerde kullanabilmek olarak anlatılabilir.

Bu köşede sistem geliştirme ile ilgili olarak pek çok örnek verdim,  test yöntemlerini ve sonuçlarını paylaştım, paylaşmaya da devam edeceğim. Günlük yazılar içinde bazen bazı konular geçmişte kalabiliyor ve geri dönüp bulması zor olabiliyor.

Sistem tasarımlarında son olarak Aroon göstergesine dayalı bir stratejiyi Excel üzerinde test etmiştik.

Öncesinde BİST100 açılışı pozitif ise sat %1,25 ile kar al ya da gün sonunda kapat stratejisine göz atmıştık. Bu stratejiye dair değerli okuyucularımızdan (ismini yayınlamak için izin almadığım için şimdilik yazmıyorum)  Matriks/Metastock formül oluşturulmasına dair güzel bir paylaşım aldım. Benim Excel’de tasarladığım sistemi Matriks üzerinde ve 5 dk veri ile kullanmak istersek aşağıdaki formülasyon zincirini kullanmak gerekiyor:

Matriks’te sistem testi yapabilmek tasarlayabilmek için grafik açmanız ve grafik üzerinde KHN menüsü altında system tester kullanmak gerekiyor.

Borsa işlem saatleri değişmeden önce aşağıdaki adımları izlemiştik:

  1. 1.Matriks system tester'da sistem formülünü yazarken 2 koşul için "sinyali 0 bar geciktir" olarak bırakmalıyız.

 
2.
Matriks system tester'da sistem formülünü yazdığımız ekranda "STOP" sekmesinden "Kar realizasyonu" kısmında 2 seçenek aktif hale getirilmeli ve "Kar hedefi" 1,25 yüzde olarak seçilmelidir.

  1. 3.Matriks'de simülasyon yaparken fiyat seçenekleri kısmından "açığa satış" ve "açık poz. kapat" açılış seçilmeli.Aynı ekranda "0 bar önceki fiyatları kullan" uygulanmalıdır.

 
Not: Sistemi bist'in kapanış saat ve dakikasını rahat ifade edebilmek için 5dk'lık grafik üzerinde tasarladım.Eğer istenirse "Açık poz. kapat" koşulu modifiye edilerek saatlik grafikte de çalıştırılabilir.

Açığa sat/Sell short order :

ba:=ValueWhen(1,ValueWhen(1,DayOfMonth()<>Ref(DayOfMonth(),-1) OR Cum(1)=2,O)<>0,ValueWhen(1,DayOfMonth()<>Ref(DayOfMonth(),-1) OR Cum(1)=2,O));

dk:=ValueWhen(1,DayOfMonth() <> ValueWhen(2,1,DayOfMonth()),ValueWhen(2,1,C));

barssince(ba < dk) > 0 and hour()*100+minute()<1730

Açık Poz. Kapat/Buy to cover order :

and hour()*100+minute()=1730

eğer sadece performans izlemek istersek 1 saatlik için formül:

Açığa sat

ba:=ValueWhen(1,ValueWhen(1,DayOfMonth()<>Ref(DayOfMonth(),-1) OR Cum(1)=2,O)<>0,ValueWhen(1,DayOfMonth()<>Ref(DayOfMonth(),-1) OR Cum(1)=2,O));

dk:=ValueWhen(1,DayOfMonth() <> ValueWhen(2,1,DayOfMonth()),ValueWhen(2,1,C));

barssince(ba < dk) > 0 and hour()*100+minute()<1700

Açık poz. kapat

hour()*100+minute()<1700

Saatlik formülde tek değiştireceğimiz parametre " simülasyon > sistem ayarı > fiyat seçenekleri > poz kapama : kapanış " olmalıdır.

Aynı analizin Excel halini ise bu bağlantıda inceleyebilirsiniz.

Açılış-kapanış arasındaki ilişkiyi uzun süredir düşünüyordum. Bu fikri olgunlaştırmak için yorumlarına güvendiğim arkadaşlarımla tartıştım ve ortaya yukarıda anlattığım sonuçlar çıktı.

Matriks programındaki ekran görüntüleri:

Sistemin biraz daha incelenmesi ve yeni saatlere uydurulması gerekiyor.

İşlem yapmak isterken pek çoğumuz henüz kimsenin bulmadığı bir formül bulma peşinde koşarız. Buna İngilizce’de “Holy Grail of Investing”derler. Bir nevi efsane arayışı. Böyle birşey olamaz, mükemmel formül yoktur olmayacaktır ve buna inanıp işlem yaparsanız mutlaka kaybedersiniz. En güzel sistemler daima en basit fikirlerden ve ilişkilerden ortaya çıkar. Sistemler sade olmalıdır ve değişken sayısı 2-3 den fazla olmamalıdır. Onu da alalım bunu da alalım şunu da koyalım derseniz kağıt üzerinde harika sonuç üreten ama gerçek ortamda çalışmaya başlayınca sizi batıracak bir sistem edinmiş olursunuz.

Sistemleri tasarlarken optimizasyon da sık sık kullanılır. Optimizasyon bir modelde değişkenlerin/göstergelerin en yüksek kar/en yüksek sharpe rasyosu/en düşük zarar gibi hedeflere göre kalibre edilmesidir.

Matrikste fiyat değişimlerine göre çok basit bir sistemi tasarlayıp optimize edebiliriz.

40 bar fiyat çok ucuzladığında alacağız ama çok ucuzu henüz kalibre etmedik.

40 bar fiyat değişimi belirli bir düzeye geldiğinde satacağız, bunu da kalibre etmedik.

Sistemi tek taraflı işletmektense pahalı olduğunda açığa da satalım:

Açığa satınca kapatacağımız yer:

Değişkenleri optimize edelim:

Toplam 32400 test yapılacak. Bu test çok uzun değil ama biraz vakit alabilir.

Optimizasyon konusunda en rahatsız edici konu yukarıda verdiğim örnekteki gibi tüm veri setine uyan bir parametre kalibrasyonu yapılmış olmasıdır. Bu sayede tüm veri setinde mükemmel sonuç üretecek  iki değer (OPT1, OPT2) bulabiliriz. Bulduğumuz değerler ise gerçek hayatta büyük ihtimalle işe yaramayacaktır.

Bunun için nasıl bir yöntem izlemeliyiz? Yürüyen optimizasyon –walk-froward optimizasyon yapmalıyız.

 Bu yöntemde elimizde 12 aylık veri olduğunu var sayalım. İlk 2 ayı optimizasyon için kullanıp sonraki bir ayı işlem yapmakla geçireceğiz. 3’üncü ay bittiğinde ise ilk baştaki ayın verilerini atıp son iki ayı kullanarak optimizasyon yapıp 4’üncü ayda işlem yapacağız. Sistem bu şekilde tasarlandığında daha doğrudur, çünkü biz geçmişe seyahat edip ne olacağını bilerek hareket edemeyiz, geçmişte bugünkü fiyat hareketlerini bilmiyoruz dolayısı ile ona göre hareket etmeliyiz.

Bir zamanlar Sayın Yaşar Erdinç tasarladığı sistemleri paylaşırdı yanlış hatırlamıyorsam yaptığı bir sistem o kadar iyi kazandırıyordu ki (kağıt üzerinde) VIOP’a yatırılan bütün teminatları ve hatta daha fazlasını kar olarak elde edebiliyordu. Bu gerçek olamayacağına göre böyle şeylere inanmamak gerekir ve buna inanmamak inanın yatırımcının hayrınadır.

Ortalıkta sistem geliştirdiğini söyleyen ve bunları pazarlayan dünya kadar insan var, madem bu kadar iyiler kendileri kullansın değil mi?

Yukarıda örneğini verdiğim matriks kodlamalarını lütfen olduğu gibi alıp kullanmayın örnek olduklarını ve fikir göstermek amacıyla yazıldıklarını unutmayın. Mutlaka size uyacak bir model geliştirebilirsiniz. Yatırım tavsiyesi olmadığını tekrar hatırlatmak isterim, yazılanların tamamı eğitim amaçlıdır.

Yarın yukarıda ele aldığım sistemleri görsel olarak tasarlayabileceğimiz bir web sitesini ele alacağım.

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

  • cemil17 Kasım 2016 12:10En mükemmel indikatör stokastik slow,,,çok iyi sonuçlar veriyor.

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

Diğer Yazıları