← Yazılar

Portföyümü her sabah Claude'a yazdırıyorum

Finanstan anlamıyorum ama bir portföyüm var. Yirmi gün boyunca her sabah tahmin yazdırıp puanladım. En çok da baseline diye bir kelime öğrendim.

·13 dk okuma

Bu yazının İngilizce sürümü de var

İçindekiler
  1. Önce şunu kurmam gerekti: Claude hesap yapmayacak
  2. Dosya düzeni
  3. Bir tahmin nasıl görünüyor
  4. Baseline neymiş
  5. Neden çöptü
  6. Nokta tahmin bir işe yarıyor mu
  7. Bir de %74,5 vardı
  8. Sistem gün gün nasıl değişti
  9. En çok işe yarayan dosya: hata günlüğü
  10. Neden analiz planını önce yazdım
  11. Finansla ilgisi olmayan kısım
  12. Yirmi günün sonunda

Finanstan anlamam. Bir portföyüm var, içinde altın var, bir teknoloji fonu var, katılım hesapları var. Aylardır bakiyeye bakıp “artmış” ya da “azalmış” diyordum, o kadar. Neyin neyi etkilediğini bilmiyordum.

Bir sabah şunu denedim: Claude’a her gün portföyümün fotoğrafını çektireyim, ne olacağını yazdırayım, ertesi gün de tuttu mu tutmadı mı diye puanlatayım. Amaç zengin olmak değildi. Amaç, kendi param üzerinden neyin neyi hareket ettirdiğini öğrenmekti.

Yirmi gün sürdü. En değerli çıktısı tahminler olmadı.

  • 20
    gün
  • 148
    puanlanmış tahmin
  • 53
    düzeltme kaydı
  • 0
    olumlu sonuç

Önce şunu kurmam gerekti: Claude hesap yapmayacak

İlk gün fark ettiğim şey şu oldu. Bir dil modeline “portföyüm ne kadar arttı” diye sorarsanız size bir sayı söylüyor. Sayı makul görünüyor. Ama o sayı hesaplanmış değil, üretilmiş.

Bu yüzden işi baştan ikiye böldüm. Claude düşünen taraf, kod ise hesap makinesi. Aralarındaki sınırı yazılı hale getirdim ve bir daha bozmadım.

fetch_market.py tarihli fiyatı API'den çeker çapraz kontrol eder bulamadığını doldurmaz Claude gündemi tarar tahmin ve gerekçe yazar hesap yapmaz pt.py saklar, eşleştirir hata metriğini hesaplar internete çıkmaz sınır bilerek keskin: halüsinasyonun girebileceği tek yer ortadaki kutu
Bu ayrımı 1 Ağustos'ta kurdum. Sağ ve sol kutu asla yorum yapmıyor, ortadaki kutu asla aritmetik yapmıyor.

Sağdaki kuralı ilk günden koymuştum. Soldakini 5 Ağustos’ta eklemek zorunda kaldım, çünkü modelin en verimli hata kaynağı aritmetik değilmiş: arama sonucunda gördüğü tarihsiz bir sayıyı doğru sanmakmış. Artık fiyat okumak da Claude’un işi değil.

Dosya düzeni

Her şey düz dosya. Veritabanı yok, arayüz yok. Sebebi basit: bir yıl sonra bu klasörü açtığımda ne yaptığımı anlayabilmek istiyorum.

data/
  portfolio.json            varlık tanımları
  snapshots/2026-08-21.json günün fiyatları ve portföy değeri
  forecasts/2026-08-21.json tahminler, kanıtlar, piyasa durumu
  resolutions.jsonl         sonuçlar, yalnızca ekleme yapılır
  evidence/2026-08-21.md    o günün ham gündem notu, kaynaklı
  narrative/2026-08-21.md   rapora giren yorum
  reviews/on-kayit.md       analiz planı: hangi test, hangi n, hangi eşik
  holdings/2026-08-21.json  fonların içindeki gerçek varlıklar

En çok işime yarayan dosya evidence klasörü oldu. Her sabah Claude gündemi tarıyor ve o günün notunu kaynaklarıyla birlikte yazıyor. Tahminin kendisi değil, tahminin gerekçesi orada duruyor.

Bir örnek. 1 Ağustos notunda şu satır var:

Jeopolitik risk primi altını yukarı iterken, aynı olayın petrol, enflasyon, Fed artışı, reel faiz kanalı altını aşağı itiyor. İki kuvvet birbirini büyük ölçüde götürüyor.

Altın fiyatı Jeopolitik tırmanma risk primi yukarı iter Aynı olay petrol, enflasyon, Fed artışı, reel faiz iki kuvvet birbirini götürüyor nokta tahmin sıfıra yakın, bant geniş
Neyin neyi etkilediğini öğrendiğim yer burası oldu. "Savaş çıktı, altın alır" cümlesi bu tabloda yanlış.

Bir başka satır, o günden bugüne bakışımı en çok değiştiren şey:

Türk lirasının kontrollü aşınması, lira bazlı her varlığa günde yaklaşık %0,07 sabit bir yukarı ivme veriyor. Yani “portföyüm bu ay %2 arttı” cümlesi ile “zenginleştim” cümlesi aynı şey değil. Bunu ölçmeden önce ikisinin farklı olduğunu bilmiyordum.

Bir tahmin nasıl görünüyor

Her tahminde beş şey var: bir nokta değer, bir %80 bandı, yukarı gitme olasılığı, gerekçe ve bu tahmini çürütecek olay. Sonuncusu en faydalısı, çünkü ertesi gün “haklı mıydım” yerine “çürüten şey oldu mu” diye bakabiliyorum.

{
  "asset": "gram_altin",
  "horizon": "1d",
  "target_date": "2026-08-24",
  "base_price": 7039.39,
  "point_pct": 0.15,
  "low_pct": -1.85,
  "high_pct": 2.15,
  "p_up": 0.53,
  "confidence": "dusuk",
  "rationale": "Bugünkü kotasyon Çarşamba'dan bu yana olan hareketi zaten taşıyor, iki kez sayılamaz. Geriye Cuma ABD seansı ve Pazar açılışı kalıyor. Üç günde %5,9 koşan bir varlıkta hafta sonuna karşı kâr realizasyonu riski gerçek."
}

Kayıt yazıldıktan sonra mühürleniyor. Hedef gün geldiğinde pt.py gerçekleşenle eşleştirip puanlıyor. Puanlayan taraf bir dil modeli değil, çünkü kendi karnesini kendi doldurması saçma olurdu.

Fiyatlarscript çeker Gündemher gün, istisnasız Tahmingerekçe ve çürütücü Mühür Puankod yapar her sabah aynı sıra, atlanan adım yok
Yirmi gün boyunca değişmeyen tek şey bu sıra oldu. Değişen her şey aşağıdaki tabloda.

Baseline neymiş

Şimdi asıl öğrendiğim şeye geleyim.

İlk hafta sonunda Claude bana şunu söyledi: tahminler naif baseline’ı %70 oranında yeniyor, p < 0,001. Sevindim. Ama baseline kelimesinin ne demek olduğunu bilmiyordum, sadece iyi bir şey olduğunu anladım.

Sonradan öğrendim. Baseline, hiç düşünmeden verebileceğiniz en aptal cevap. Fiyat tahmininde en aptal cevap şudur: “yarın da bugünkü fiyatta kalır.” Modelin bunu yenmesi gerekir, yoksa düşünmesinin bir anlamı yok.

Mantıklı geldi. Sorun şu ki bu aptal cevap, her koşulda aynı derecede aptal değil.

Neden çöptü

12 Ağustos’ta ölçüm penceresine baktım. Ölçüm boyunca gerçekleşen haftalık hareketlerin hepsi pozitifti. Yirmide yirmi.

20 gözlemin 20'si pozitif ortalama +%5,78
Piyasa ölçüm boyunca tek yönlü yükseldi. Claude da tahminlerinin %86,5'ini pozitif yazmıştı.

Böyle bir pencerede “sıfır değişim” tahminini yenmek beceri değil. Küçük ve pozitif herhangi bir sayı onu mekanik olarak yener. Ölçtüğüm şey modelin öngörüsü değil, piyasanın o dönemki yönüydü.

Yani ilk haftanın gurur duyduğum başlığı bir şey ölçmüyordu.

Düzeltme, tek bir aptal cevap yerine üç tane koymak oldu. Biri gerçekten aptal, diğer ikisi biraz daha zor.

BaselineYaniYenildiOranp
Naifyarın da aynı kalır104/1480,703< 0,001
Driftson 5 günün ortalaması kadar oynar86/1280,672< 0,001
Momentumdün ne kadar oynadıysa o kadar oynar93/1280,727< 0,001
Üçü birdenhepsini aynı anda yenmek50/1280,3910,995

Üçünü tek tek yeniyor. Aynı anda yenemiyor: %39,1, yani yazı tura atmaktan kötü.

Kazara yenebildiğiniz bir baseline, baseline değildir.

Nokta tahmin bir işe yarıyor mu

Baseline karşılaştırması hâlâ nazik bir sınav. Daha sert sorusu şu: modelin verdiği sayı, hiç sayı vermemekten iyi mi?

Bunu ölçmek için her varlıkta iki şeyi karşılaştırdım. Birincisi tahminlerin hata saçılması. İkincisi, hiç tahmin yapmayıp sadece o varlığın ortalamasını söyleseydim oluşacak saçılma.

0 tahmin daha kötü tahmin daha iyi A1−2,5% A2−4,3% A3−0,9% A4+15,8% A5+0,6% A6−3,8%
Altıda beşinde kazanç yok, üçünde tahmin sabit bir sayıdan daha kötü. Tek istisna A4 ve orada sadece 14 gözlem var, yani büyük ihtimalle gürültü.

Bunun pratik bir sonucu var ve beni asıl bu ikna etti. Eğer tahmin saçılmayı azaltmıyorsa, güven bandının genişliği benim bilgisizliğimden değil, piyasanın kendi oynaklığından geliyor. O bant daha çok veri toplayarak daralmaz. “Modeli biraz daha iyileştirsem bantlar daralır” beklentisi ölçülmüş biçimde yanlış çıktı.

Bir de %74,5 vardı

Aynı veri setinde yön isabeti %74,5 çıktı. Dört tahminden üçü doğru yönü söylemiş.

Bunu başlık yapmak çok cazipti. Yapmadım, çünkü aynı tuzağın ikinci hâli: günlerin çoğunun yukarı olduğu bir pencerede “yukarı” demek iyi puan alır ve hiçbir şey bilmediğinizi gizler.

Bunu temizleyen ölçü, olasılıkları “son günlerin kaçı yukarıydı” sayımıyla karşılaştırıyor.

Brier skoru, düşük olan iyi model 0,208 basit sayım 0,194 "son günlerin kaçı yukarıydı" Aradaki fark model geride
Modelin verdiği olasılıklar yerine son günleri saymak daha iyi skor veriyordu.

Sistem gün gün nasıl değişti

Tahminler işe yaramadı ama sistem her gün biraz daha az yanlış oldu. Değişikliklerin çoğu bir hatanın arkasından geldi.

GünNe olduNe değişti
1 Ağuİlk kayıtBir fonu para piyasası fonu sandım, meğer hisse ağırlıklıymış
2 AğuHafta sonu kâr payıKatılma hesabı hafta sonu kâr payı yazmıyormuş, motor düzeltildi
3 AğuPara giriş çıkışıGetiriyi akıştan arındırmadan ölçmek anlamsızmış
4 AğuFon içleriFonun içindeki gerçek varlıklar da veri oldu
5 AğuFiyat okumaClaude’un arama sonucundan sayı okuması yasaklandı
6 AğuBanka ekranıBir günde altı düzeltme, ölçümün tabanı yanlışmış
10 Ağuİkinci defterAyrı bir portföy kendi köküne taşındı, çift sayım bitti
12 AğuZor baselineDrift ve momentum eklendi, başlık çöktü
13 AğuDerin incelemeSkorlama motoru baştan yazıldı
20 AğuYayınVeri seti ve yöntem anonim olarak açıldı

En çok işe yarayan dosya: hata günlüğü

Her düzeltmeye bir numara verdim. K1, K2, K3 diye gidiyor. Bugün 53’teyim.

Her kayıtta şunlar var: hata ne zaman oldu, ne zaman fark edildi, kim buldu, kaç gün gizli kaldı, nasıl düzeltildi, daha önce aynısı olmuş muydu.

Hatayı kim buldu Claude · 43 ben · 10 Fark edilene kadar geçen süre medyan 1 gün ortalama 2,5 gün en uzunu 15 gün
Kullanıcının bulduğu hatalar ajanın öz tespit karnesine yazılmıyor. Bu ayrım olmadan sayı işe yaramaz.

Bu dosya bana tahminlerden daha çok şey öğretti. Hataların çoğu modelin akıl yürütmesinde değil, ölçümün tabanındaydı: yanlış fiyat, çift sayılan para, hafta sonuna yazılan kâr payı, iki kez sayılan bir hareket.

Neden analiz planını önce yazdım

Bir ayrıntı geri kalan her şeyi mümkün kılıyor: hangi testi hangi eşikle yapacağımı veriyi görmeden yazdım.

Bu sıradan bir titizlik değil. Burada tahmini üreten, puanlayan ve yöntemi değiştiren aynı ajan. Böyle bir kurulumda sonucu görüp “hangi alt kümede iyi çıkmışım” diye bakmak sadece mümkün değil, varsayılan davranış. Ön kayıt, buna karşı elimdeki tek engel.

Aynı sebeple, düzeltmelerin sistematik olarak kendi karnesini kayırıp kayırmadığını sınayan bir test de var. Orada anlamlı sonuç çıkması iyi haber değil, kötü haber sayılıyor.

Finansla ilgisi olmayan kısım

Buradaki hata sınıfı finansa özgü değil. Kendi işinizde şu üç soruyu sorun:

  • Sınıflandırıcınız %95 doğrulukta. Peki verinin %94’ü zaten tek etiket mi?
  • A/B testiniz kazandı. Kontrol kolu yapılabilecek en iyi basit şey miydi, yoksa yenmesi kolay bir şey mi?
  • Öneri sisteminiz popülerlik sıralamasını yeniyor. Peki kullanıcının en son tıkladığı şeyi yeniyor mu?

Üç baseline koymak, tek baseline koymaktan neredeyse hiç pahalı değil. Aradaki tek fark, birinin size gerçeği söylemesi, diğerinin iyi hissettirmesi.

Yirmi günün sonunda

Kaydedilen sonuçların hepsi olumsuz: nokta tahmin bilgi katmıyor, üç baseline birden yenilmiyor, olasılıklar basit sayımdan kötü, bantlar fazla geniş.

Ama ben başta bunları öğrenmek istiyordum, zengin olmayı değil. Şimdi portföyüme baktığımda neyin neyi ittiğini biliyorum: liranın sabit aşınmasının getirinin ne kadarını açıkladığını, altındaki iki kuvvetin nasıl birbirini götürdüğünü, fonun bugünkü fiyatının aslında dünün kapanışı olduğunu.

Sistem daha akıllı tahmin ederek değil, neyi tahmin edemeyeceğini öğrenerek iyileşiyor. Yirmi günde öğrendiğim şey bu.

Veri seti, yöntem ve ön kayıt belgesi anonim olarak yayımlandı; buradaki her sayı bağımsız bir script ile yeniden üretilebiliyor.

Notlar. Örneklem küçüktür: 20 gün, günde yaklaşık üç bağımsız gözlem, tek oynaklık rejimi. Buradaki hiçbir sonuç istatistiksel olarak yerleşmiş değildir. Varlıklar A1 ile A6 arasında takma adla anılır; tutar, bakiye, adet ve kurum bilgisi hiçbir yerde yer almaz. Bu metin yatırım tavsiyesi değildir; tahminler hiçbir zaman alım satım kararında kullanılmadı.