İşte günlük hisse senedi dosyasından tek bir satır. NVDA, 7 Haziran 2024 Cuma; 10'a 1 bölünmenin yürürlüğe girmesinden önceki son seans.
| Sütun | Değer |
|---|---|
| tarih | 2024-06-07 |
| kapanış | 1208.88 |
| hacim | 42,800,000 (yuvarlanmış) |
| split_factor | 1.0 |
| temettü | 0.00 |
| düzeltilmiş kapanış | 120.8781 |
Bu görünümde OHLC sütunlarını bilerek dışarıda bıraktım. Yazının sonlarına doğru geri dönecekler; sessizce bozulan da onlar.
Bu satırdaki ilginç olan her şey ikinci ve altıncı sütun arasındaki farkta yatıyor. 7 Haziran'da piyasada görülen fiyat 1208.88 idi. Hisse artık bir birim olarak var olmadığından, hiç kimse bir daha o fiyattan işlem yapmayacak. 120.8781 yeniden oluşturulmuş bir değerdir ve 1208.88'in 10'a bölünmesinden ibaret değildir. Sütunları tek tek inceleyelim.
tarih: 2024-06-07 ve daha fazla önem taşıyan diğer iki tarih
Bölünme 22 Mayıs 2024'te, bilanço açıklamasıyla birlikte duyuruldu. Kayıt
tarihi 6 Haziran'dı. Bölünme sonrası fiyatlarla işlemler 10 Haziran Pazartesi
günü başladı. Üç tarih var; veri sağlayıcınızın
split_factor sütunu bunlardan tam olarak birine denk gelir,
genellikle bölünme sonrası fiyatlarla işlem yapılan ilk seansa. Buradaki bir
günlük kayma, gördüğüm en yaygın şirket aksiyonu hatası ve toplu sonuçlarda
fark edilmesi imkânsız: özsermaye eğriniz tek bir günde %90'lık bir düşüş veya
%900'lük bir yükseliş gösterir. 2,000 gün üzerinden hesaplanan Sharpe bunu
neredeyse fark etmez ama maksimum düşüş veya zarar durdurma kuralı kesinlikle
fark eder.
Temettünün de kendi tarih sorunu var ve bu sorun 2024'te herkesin verisini etkiledi. NVDA'nın bölünme sonrası $0.01 tutarındaki üç aylık temettüsünün kayıt tarihi 11 Haziran'dı. ABD'de takas süresi 28 Mayıs 2024'te T+1'e geçti; bu da temettü hakkı kesim tarihiyle kayıt tarihinin artık aynı gün olduğu anlamına geliyor. On yıllardır doğru olan "kayıt tarihinden bir iş günü çıkar" yöntemiyle temettü hakkı kesim tarihini hesaplayan her veri yükleyici, Haziran 2024'te temettü düzeltmelerini sessizce bir seans erken üretmeye başladı. Hiçbir hata oluşmuyor. Çarpan yalnızca yanlış satıra işleniyor.
Şirket aksiyonu kodlarındaki hata biçimi hiçbir zaman bir istisna değildir. Bir gün kaymış ve tümüyle makul görünen bir sayıdır.
kapanış: 1208.88 — dosyada bulunmayan fiyat
Bu, ham fiyat kaydıdır ve çoğu araştırma hattında kimsenin okumadığı bir
sütunda bulunur. Sinyaller adj_close üzerinden hesaplanır. Dolar
cinsinden hisse başı fiyat seviyesine bağlı her kural da artık hiçbir piyasa
katılımcısının görmediği bir sayıyı referans alır.
NVDA'nın 2024 baharında $1,000 seviyesine doğru yükselişi, arkasında gerçek emir akışı olan gerçek bir olaydı: yuvarlak fiyat seviyelerinin çekim gücü, 950 ve 1000'de kümelenen opsiyon kullanım fiyatları, her yaklaşmada gündeme gelen haber riski. Düzeltilmiş veride bu dönemin tamamı $100 seviyesinde yaşanır. Psikolojik seviye davranışını, yuvarlak seviyelerin yakınındaki boşluk doldurma mantığını veya kullanım fiyatına yakınlık özelliğini test ediyorsanız, henüz gerçekleşmemiş bir olayla yeniden ölçeklenmiş fiyat serisini test ediyorsunuz demektir.
Aynı durum yatırım evreni filtreleri için de geçerli. "$5 altındaki hisseleri hariç tut" kuralı, gerçek piyasa mikro yapısı sorunlarını temsil eden geçerli bir göstergedir: geniş göreli alış-satış farkları, teminat uygunluğu kuralları, fiyat adımı rejimleri. Bunu düzeltilmiş geçmiş veriye uygularsanız, sonradan ters bölünmeye uğrayan şirketleri $30'dan işlem gördükleri dönemlerde hariç tutarsınız. "Fiyat $500'ün üzerinde" kuralını uygularsanız NVDA'yı Haziran 2024 öncesindeki her yıldan fark ettirmeden çıkarırsınız. Fiyat filtreleri düzeltilmemiş fiyat kayıtlarında uygulanmalı. Nokta.
split_factor: 1.0 — ve sonraki satırdaki 0.1
Bu çarpan, bugünden geriye doğru çalışan kümülatif bir çarpımdır. 10 Haziran 2024'ten önceki her satır bu bölünmeden gelen 0.1 ile, 2021'deki 4'e 1 bölünmeden gelen 0.25 ile ve daha öncekilerle çarpılır. NVDA'nın 2021 öncesi geçmişi 0.025 ile ölçeklenir; böylece 2019'da $200'den işlem gören bir mum $5.00 olarak görünür.
Aklınızda tutmanız gereken iki sonuç var. Birincisi, düzeltilmiş geçmiş, yeni bir şirket aksiyonu gerçekleştiğinde değişir. Mayıs 2024'te yaptığınız geriye dönük testle bugün yaptığınız test, aynı kod ve aynı tarihler için farklı sayılar üretir. Özellikleri sembol ve tarihe göre önbelleğe alıp veri sürümünü kaydetmediyseniz, artık iki farklı ölçeği karıştıran bir önbelleğiniz var demektir. Tam da bu yüzden düzeltme dönemini özellik anahtarına sürüm olarak ekliyoruz; bunu öğrenmemiz bize kafa karıştırıcı bir öğleden sonraya mal oldu.
İkincisi, 0.025 ölçeğinde 0.01 fiyat adımlarıyla işlem gören bir hisse artık 0.00025'lik artışlarla hareket eder. Fiyat adımına yuvarlama mantığınız, "bu yeni bir zirve mi" karşılaştırmalarınız, kayan nokta eşitliği kontrolleriniz: hepsi piyasanın gerçekte sahip olduğu çözünürlüğün çok altında çalışır.
temettü: 0.01 — arkasındaki tüm fiyatların basamak düzenini bozan sayı
Bir sent. Gürültü gibi görünüyor ve adj_close değerinin düzgün
bir 120.888 yerine 120.8781 olmasının nedeni bu.
10 Haziran kapanışı 121.79'du. Temettü hakkı kesim tarihi çarpanı (121.79 − 0.01) / 121.79 = 0.99991789. Bu çarpan 11 Haziran öncesindeki tüm fiyatlarla çarpılır; böylece bölünmeye göre düzeltilmiş 120.888 değeri 120.878074 olur. Küçük, kalıcı ve NVDA'nın geçmişinde geriye doğru altmış küsur temettü hakkı kesim tarihinin her birinde yeniden uygulanıyor. Önemli olan bileşik etkisi: 2015'e baktığınızda, makul görünen onlarca çarpanla çarpılmış bir fiyat görüyorsunuz. Düzeltilmiş hiçbir geçmiş fiyatı artık kuruş basamaklarına oturmuyor.
Bu da yuvarlak seviyeye karşı yapılan her == karşılaştırmasının
yanlış olduğu, "limit fiyata dokunduk mu" kontrolünün tolerans gerektirdiği ve
yeniden oluşturduğunuz OHLC'nin 4 ondalık haneye gelişigüzel yuvarlandıktan
sonra düşük ≤ açılış ≤ yüksek değişmezini artık sağlamadığı anlamına geliyor.
Ayrıca adj_close toplam getiri serisiyken
close fiyat getirisi serisidir. Getirileri birinden, düşüşleri
diğerinden hesaplarsanız, yaşananları tanımlayan iki farklı ölçümü birbirine
karıştırmış olursunuz.
hacim: 42,800,000 — herkesin aynı şekilde uygulamadığı bölen
Bölünme sonrası seanslarla karşılaştırılabilmesi için hisse hacmini 10'la çarpmak gerekir. Bazı veri sağlayıcıları bunu yapar. Bazıları yapmaz. Bazıları OHLC'yi düzeltip hacmi ham bırakır; üç seçenek içindeki en kötüsü budur, çünkü fiyatı hacimle çarpana kadar dosya kendi içinde tutarlı görünür.
En sağlam çözüm, hisse hacmini özellik olarak kullanmayı bırakıp yapısı gereği bölünmelerden etkilenmeyen dolar hacmine geçmektir. 20 günlük ortalama dolar hacmine dayalı likidite filtresi hiç düzeltme mantığı gerektirmez ve bir şirket aksiyonuyla bozulamaz. Özelliğin değişmezliği, doğru düzeltme kodundan daha iyidir; çünkü doğru düzeltme kodu sürekli doğru tutmanız gereken bir şeydir.
Veri sağlayıcı dosyalarının 3 biçimi, 3 hata biçimi.
| Sunulan veri | Bozulan şey |
|---|---|
| Yalnızca düzeltilmiş kapanış, ham OHLC | Fiyat boşluğu ve gün içi mantık iki farklı fiyat ölçeğini birlikte kullanır |
| Düzeltilmiş OHLC, ham hacim | Dolar hacmi bölünme oranı kadar sapar; ADV filtreleri yanlış çalışır |
| Ham OHLCV ve çarpan sütunları | Çarpanları uygularsanız sorun yok. Yanlış satıra uygularsanız her şey bozulur |
Dosyada olmayan sütunlar: adj_open, adj_high, adj_low
Şimdi OHLC'yi geri ekleyelim. Veri akışı yalnızca kapanışı düzeltiyorsa ve
stratejiniz bir gecelik fiyat boşluğunu
open / prev_adj_close − 1 olarak hesaplıyorsa, 10 Haziran 2024'te
120.37 / 120.8781 − 1 işlemini yapar; yaklaşık −0.4% çıkan bu değer makuldür.
Aynı kodu 7 Haziran 2024'e götürün; ham dosyadaki açılışı (yaklaşık 1207) eski
bölünmelerden gelen 0.025 ile düzeltilmiş kapanışla karşılaştırır ve birkaç
bin yüzde puanlık bir boşluk üretir.
Ham bir sütunu düzeltilmiş bir sütunla karıştıran her işlem, iki koordinat sistemi arasında aritmetik yapmaktır. Artık karışık düzeltme kullanan okumaları, araştırmacıların hatırlaması gereken bir şey olarak bırakmak yerine veri yükleme katmanında bir doğrulama koşulu sayıyorum; araştırmacılar bunu hatırlamayacak, ben de dahil.
Hiçbir sütunun söylemediği şey: gerçekte kaç hisse almış olacağınız
Geriye dönük testin maliyet modelinde paraya mal olan konu bu ve hisse bölünmesini yazmamın nedeni de bu.
ABD hisse senedi komisyonları çoğu zaman hisse başına alınır. Yaygın bir sabit ücretli perakende aracı kurum tarifesinde işlem başına en az $1.00 olmak üzere hisse başına $0.005 varsayalım. Şimdi, bölünmeden bir yıl önce ham fiyatın $400 civarında ve düzeltilmiş fiyatın $40 göründüğü dönemde, $400,000 tutarında bir NVDA pozisyonunun geriye dönük testini yapın.
| Hisse adedi | Komisyon | |
|---|---|---|
| Gerçekte olan (ham $400) | 1,000 | $5.00 |
| Geriye dönük testin gördüğü (düzeltilmiş $40) | 10,000 | $50.00 |
Pozisyon büyüklüğü aynı, işlem aynı, modellenen maliyet 10 kat fazla. Her işlem yönünde $45 hayali maliyet, bir gidiş dönüşte $90 demek; her gün pozisyon değiştiren bir strateji, hiç var olmamış maliyetlere yılda yaklaşık $22,000 harcar. $400k'lık bir portföyde yıllık getirinin 5.6 yüzde puanı, tümüyle bir bölenin yarattığı fark. Bu örnekte gerçekte olduğunuzdan daha kötü görünmenize yol açıyor; bu atlatılabilir.
Ters bölünmeler ters yönde işler ve tehlikeli olan da budur. 1'e 10 ters bölünme, düzeltilmiş geçmişte fiyatların 10 kat yüksek, hisse adetlerininse işlem yapacağınız miktarın 10'da 1'i görünmesi demektir. Maliyet modeliniz hisse başı komisyonu sessizce 10'a böler. Ters bölünmelerin yaygın olduğu evren, küçük ölçekli, $5 altı ve alış-satış farkı geniş hisselerden oluşur; hisse başı ücretler de maliyet kalemlerinin en büyüğüdür. Geriye dönük test, cezalandırması gereken hisseleri olduğundan iyi gösterir.
Çözüm basit ve yapısaldır: pozisyon büyüklüğünü dolar cinsinden belirleyin, hisse adedini ilgili tarihin düzeltilmemiş fiyatını kullanarak hesaplayın ve hisse başı ücretleri bu adet üzerinden uygulayın. Ham fiyat sütununu denetim amacıyla saklanan bir kalıntı olarak değil, gerçekleşme motorunun etkin girdisi olarak veri yükleyicide daima tutun.
- Sinyaller ve getiriler: düzeltilmiş seri.
- Hisse adetleri, hisse başı ücretler, fiyat adımına yuvarlama, fiyat seviyesi filtreleri: düzeltilmemiş seri.
- Likidite ve kapasite: ikisi de gerekmeyen dolar hacmi.
6 sütun, 1 satır, 3 hafta önceden duyurulmuş ve kimseyi şaşırtmamış, oldukça sıradan bir şirket aksiyonu. Piyasa bunu bir sabah içinde halletti. Araştırma hattında doğru biçimde yeniden oluşturmak bundan çok daha zor; hattın bunu başaramadığının işaretiyse neredeyse hiçbir zaman bir hata mesajı olmaz.
← Tüm yazılar


