Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

Yayın: 10 Mayıs 2024

Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

Not: Bu makale Medium'da yayımlandı. Orijinal makaleye buradan ulaşabilirsiniz.

Eğer benim gibi, parasını nasıl yatıracağını düşünen biriyseniz, bu makale tam size göre olabilir!

Bu makale yatırım tavsiyesi değildir, bu nedenle kendi takdirinizle kullanın. Finansal kararlarınızdan herhangi bir sorumluluk kabul etmiyorum.

Arka Plan

Daha küçük bir hisse senedi grubuna yatırım yaparak ortalamanın üzerinde bir risk-ayarlı getiri elde etmenin bir yolu var mı? Örneğin, 10 hisse senedi belirleyebilir miyiz (Örn. 1. Tesla + 2. IBM + 3. Chevron +… + 10. Gamestop), ki bunlar tek tek ortalama performans gösterebilir ancak aynı anda yatırıldığında güçlü sonuçlar verebilir mi?

Eğer S&P 500'den tüm 10 hisse senedi kombinasyonunu deneseydik, bu 245,810,588,801,891,070,000 kombinasyon olurdu, bu da "en iyi" 10 hisse senedi portföyünü bulmak için çılgınca bir zaman gerektirirdi. Bu tür bir senaryoda, Genetik Algoritma işe yarar, çünkü "iyi yeterli" bir çözüm bulmak için önemli ölçüde daha kısa bir zaman alır.

Para

Problem Tanımı

S&P 500'de listelenen hisse senetlerinden en iyi risk-ayarlı getiriyi sağlayan 10 hisse senedi kombinasyonunu bulmak istiyoruz. Getiri, portföyün % büyümesi olacak, risk ise yatırılan zaman dilimi boyunca gözlemlenen standart sapma olacak. Risk-ayarlı getiri sadece riskin getiriye bölünmesidir.

Yöntem

10 hisse senedi kombinasyonu üzerinden döngü yapmak ve en iyi risk-ayarlı getiriyi bulmaya çalışmak için bir Genetik Algoritma kullanacağız. Aşağıdaki video Genetik Algoritmalar hakkında iyi bir genel bakış sağlar.

Yüksek seviyede, Genetik Algoritmalar evrimi simüle eder, nesiller boyunca portföylerin döngüsü yapar ve sadece güçlü "fitness" (bir portföyün risk-ayarlı getirisi) kalanları bırakır. "Çaprazlama" (2 mevcut hisse senedi portföyünü birleştirerek yeni bir tane oluşturma) ve "mutasyon" (portföydeki bir hisse senedini rastgele başka biriyle değiştirme) gibi mekanizmalar, modelin yerel minimumlarda takılıp kalmamasını sağlar ve hesaplama sürecine çeşitlilik getirir.

Python'da PyGAD kütüphanesini kullanacağız, bu da genetik algoritmaları kolayca uygulamamıza yardımcı olur.

Veri

S&P500'deki hisse senetlerinin listesini alıyoruz (Veri kaynağı için sona bakın) ve her bir hisse senedinin tarihsel performansını elde etmek için Yahoo Finance'a erişiyoruz. Tüm hisse senetlerinin bulunduğu bir ana veritabanı oluşturulur.

Veri

Yatırım dönemimizin başlangıç ve bitiş tarihlerini keyfi olarak 2021 Nisan ~ 2022 Mart olarak belirliyoruz. Hisse senedi fiyatı için "Uyarlanmış kapanış" kullanılır ve tüm hisse senedi fiyatları, yatırım döneminin başındaki fiyatlarına dayanarak 10 $'a normalize edilir. Bunun nedeni, her bir hisse senedine eşit miktarda yatırım yapmak istememiz ve hisse senedi fiyatından etkilenmememizdir. Her bir hisse senedi ticker'ı, kullanacağımız Genetik Algoritma kütüphanesi tarafından gerektiği gibi atanır. Aşağıda, Genetik Algoritmaya beslenmek üzere verinin nasıl göründüğü gösterilmektedir:

Son veri

Eğitim

GA'nın birçok parametresi olduğundan (# nesiller, # popülasyon başına çözüm, # mutasyona uğramış genlerin %'si vb.), en iyi parametreleri bulmak için hızlı bir hiperparametre optimizasyonu yaparız. Ardından, en iyi hisse senedi portföyünü bulmak için algoritmayı eğitiriz. Aşağıdaki grafikte görüldüğü gibi, algoritma fitness'ı (yani risk-ayarlı getiri) 20 nesilden sonra iki katına çıkar, fitness artmaz.

Eğitim

Sonuçlar - Referans 1: S&P 500

Öncelikle, pazar endeksi S&P500'ün performansını iyileştirmek istedik, bu nedenle yatırım süresince nasıl performans gösterdiğine bir göz atalım:

Sonuçlar - Referans 1: S&P 500

S&P 500'ün performansı bu zaman diliminde tamamen dikkate değer değildi, yıllık ~% 7 getiri ve günlük ~% 1 risk (standart sapma) ile, bu da ~% 8 risk-ayarlı getiri sağlar. Bu referansın çok kolay yenilenecek olması nedeniyle, kendimize başka bir referans bulalım:

Sonuçlar - Referans 2: En İyi 10 Performans

Yatırım süresince, en yüksek getiri elde eden 10 hisse senedini seçtik (Dikkat edilmesi gereken tek geri dönüş olması, bu riski hesaba katmaz). En iyi 10 hisse senedi 'DVN', 'APA', 'MRO', 'COP', 'CF', 'FTNT', 'OXY', 'FANG', 'NVDA' ve 'MOS' idi. Bunların çoğu enerji ile ilgili işletmelerdir, NVIDIA gibi istisnalar vardır.

Sonuçlar - Referans 2: En İyi 10 Performans

Yukarıda görüldüğü gibi, bu 10 şirketin portföyü ~% 90 büyüme ve ~% 2 risk getirdi. Genel olarak, risk-ayarlı getiri %42,8 idi.

Bizim Sonuçlarımız

Modelimiz, maksimum risk-ayarlı getirisi olan 'CERN', 'DVN', 'DRE', 'ABBV', 'SEE', 'ORLY', 'WST', 'COP', 'ED', 'PSA' hisse senedi kombinasyonunu belirledi. Bu şirketlerin bazıları, En İyi Performanslar olarak da mevcut Benchmark #2'de bulunur, ancak Abbvie gibi yeni girişler görüyoruz.

Sonuçlarımız

Modelin normal getirisi en iyilerin altında ve yaklaşık %52 civarındadır, ancak önemli ölçüde daha düşük bir risk elde edebilir: %0,8. Yukarıdaki grafikte görebileceğiniz gibi, portföy herhangi bir salınım yaşamaz ve tutarlı bir şekilde artar. Portföy genel olarak %62 risk-ayarlı getiri elde eder, bu da en iyi performans sergileyen portföyün %20 üzerindedir.

Sonuç

Sonuç

Maksimum risk-ayarlı getiriye sahip portföyü bulmak için bir genetik algoritma eğittik. Genetik algoritma, milyarlarca olası portföy arasında "yeterince iyi" bir çözüm bulmamıza yardımcı oldu. Daha fazla eğitimle daha yüksek getiriler elde edilebilir.

Veri ve kodu bu GitHub Reposunda bulabilirsiniz.

Keyifli kodlamalar!

Bu blog İngilizce'den ChatGPT ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.

Yorum bırak

Yorumlar

Diğer bloglara bak

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

2024/06/19

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

JavaScriptSvelteKolayBasitDinamikTooltipFront-end
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

2024/06/17

JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

SvelteSVGJavaScriptTailwindInteraktif HaritaTokyoJaponya23 WardsTokyo Metropolitan Bölgesi
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

2024/06/14

Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

MatplotlibGrafikÇizimPythonJaponca KarakterlerSorunBug
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

2024/06/13

Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

Kitap İncelemesiÖtekiyle KonuşmakTalking to StrangersMalcolm Gladwell
Japonca'da En Sık Kullanılan 3.000 Kanji

2024/06/07

Japonca'da En Sık Kullanılan 3.000 Kanji

3000Kullanma YayginligiKanji KullanimiKanjiJaponcaKanji ListesiKanji YayginligiJLPTJaponca CalismaOgrenmeYaygin Japonca Kelimeler
VSCode'da Regex Kullanarak Replace Yapma Yöntemi

2024/06/07

VSCode'da Regex Kullanarak Replace Yapma Yöntemi

VSCodeRegexAramaDeğiştirmeKoşullu DeğiştirmeFindReplaceConditional Replace
Svelte'de Readable Store Kullanmayın

2024/06/06

Svelte'de Readable Store Kullanmayın

SvelteReadableWritableState ManagementStoreHızBellekDosya Boyutu
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

2024/06/05

Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

GzipSıkıştırmaPakoWeb SitesiYükleme HızıSvelteKit
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

2024/05/31

Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

JavascriptFarePointerHoverWeb Geliştirme
Svelte ve SVG ile Interaktif Harita Oluşturun

2024/05/29

Svelte ve SVG ile Interaktif Harita Oluşturun

SvelteSVGInteraktif HaritaFront-end
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

2024/05/28

Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

Kitap İncelemesiGeleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor?Originals: How Non-Conformists Move the WorldAdam Grant & Sheryl Sandberg
Javascript Kullanarak Sudoku Nasıl Çözülür?

2024/05/27

Javascript Kullanarak Sudoku Nasıl Çözülür?

Sudoku ÇözümAlgoritmaJavaScriptKodlama
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

2024/05/26

Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

Website Trafik ArtırmaClick (Tıklama)Impression (Gösterim)Google Search Console
Hayat Bisiklet Sürmek Gibidir

2024/05/24

Hayat Bisiklet Sürmek Gibidir

BisikletHayatFilozofiBaşarı
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

2024/05/19

JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

SudokuBacktracking AlgoritmasıTamamlanmış SudokuJavaScript
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

2024/05/16

Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

TailwindHarikaFront-endWeb Geliştirme
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

2024/05/15

Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

Git HooksPythonSite HaritasıSvelteKit
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

2024/05/14

Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

Kitap İncelemesiRange(Çok Yönlü)David EpsteinBaşarı İçin Neden Çok Şeyle İlgilenmeliyiz?
Svelte ve SvelteKit nedir?

2024/05/13

Svelte ve SvelteKit nedir?

SvelteSvelteKitFront-endVite
SvelteKit ile Internationalization (Çoklu Dil Desteği)

2024/05/12

SvelteKit ile Internationalization (Çoklu Dil Desteği)

InternationalizationÇoklu Dil DestegiSvelteKitI18N
Svelte'de Caching ile Deploy Süresini Azaltın

2024/05/11

Svelte'de Caching ile Deploy Süresini Azaltın

SvelteEnhanced ImageCachingDeploy Suresi
Svelte ve Intersection Oberver ile Lazy-Load

2024/05/10

Svelte ve Intersection Oberver ile Lazy-Load

Lazy LoadingWebsite Hiz OptimizasyonuSvelteIntersection Observer
ShapeFile Formatini SVG Formatina Degistirme Yontemi

2024/05/09

ShapeFile Formatini SVG Formatina Degistirme Yontemi

ShapeFileSVGPythonGeoJSON
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

2024/05/08

Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

SvelteSayfa GuncellemeBindingKey Fonksiyonu
Kitap İncelemesi | Savaş Sanatı - Sun Tzu

2024/05/07

Kitap İncelemesi | Savaş Sanatı - Sun Tzu

Kitap İncelemesiThe Art of War (Savaş Sanatı)Sun TzuThomas Cleary
Specialistlik Bitti. Yaşasın Generalistlik!

2024/05/06

Specialistlik Bitti. Yaşasın Generalistlik!

GenelUzmanParadigma DegisimiYazilim Muhendisligi
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

2024/05/03

2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

PythonSecmen Profil Analizi2018 Milletvekili SecimleriSecmen Yas Analizi
Python Selenium Ile Secmen Veritabani Olusturma

2024/05/01

Python Selenium Ile Secmen Veritabani Olusturma

PythonSeleniumVeri KazimaMilletvekili Secimleri
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

2024/04/30

Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

SvelteTailwindInfinite ScrollFront-end
1 Yıl İçerisinde Japonca Konuşabilmek

2024/04/29

1 Yıl İçerisinde Japonca Konuşabilmek

JaponcaDil yeterliligiJLPTKisa zamanda dil ogrenme
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

2024/04/25

Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

Website SablonuFront-endSvelteTailwind
Tembel Muhendisler Kotu Urunler Yapar

2024/01/29

Tembel Muhendisler Kotu Urunler Yapar

Tembel MuhendisKotu UrunStarbucksSBI
Mukemmellik Uzerine

2024/01/28

Mukemmellik Uzerine

MukemmellikHayatin anlamiTatmin Edici HayatAmac
MacBook'ta PDF'i PNG'ye Cevirme Yontemi

2024/01/28

MacBook'ta PDF'i PNG'ye Cevirme Yontemi

PDFPNGMacBookAutomator
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

2023/12/31

2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

KitapOkuma2023Geriye Bakma
Python PIL Kullarak Foto Kolaji Yapma Yontemi

2023/12/30

Python PIL Kullarak Foto Kolaji Yapma Yontemi

PythonPILGörüntü işlemeKolaj
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

2024/01/09

Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

JavascriptAlet TespitiBrowser TespitiWebsite Analizi
ChatGPT Cevap Anatomisi

2024/01/19

ChatGPT Cevap Anatomisi

ChatGPTBuyuk Dil ModeliMakina OgrenimiYapay Zeka