Açık Kaynaklı Kitaptan Kantitatif İşlem Öğrenme
Açık kaynaklı kantitatif işlem kitabı, ham veriden canlı emre uzanan müfredatı sunuyor. Aşamaları, başlangıçta nerede durulduğunu ve ABD hisselerine aktarılabilen bölümleri inceliyor.
Açık kaynaklı bir kantitatif işlem kitabı, ücretsiz bir kamu müfredatıdır: ham veriden canlı emre kadar tüm süreç, başlangıç seviyesindeki bir yatırımcının karşılaşacağı sırayla yazıya dökülür. xingwudao tarafından GitHub’da yayımlanan XQuant: Everyone Can Be a Quantitative Trader el yazması, Ağustos 2026 itibarıyla 686 yıldızla bunun temiz bir örneğidir. Dokuz bölüm, neredeyse her kantitatif işlem müfredatının izlediği yolu baştan sona ele alır. Bu sayfa, söz konusu yolu aşama aşama takip eder, her aşamadaki belirli hatayı tanımlar ve Çin A hisselerinden ABD hisselerine geçişte hangi bölümlerin geçerliliğini koruduğunu belirtir.
Açık kaynaklı bir niceliksel işlem kitabı neler içerir?
Herhangi bir başlangıç müfredatındaki marka unsurları çıkarıldığında geriye şu sırayla beş aşama kalır: veriyi edinmek ve temizlemek, bu veriden bir sinyal oluşturmak, sinyali geçmiş verilerle test etmek, alınacak pozisyonun büyüklüğüne karar vermek, ardından emri iletmek ve maliyetleri ödemek. 14 Temmuz 2026 tarihli 016b66e commit’indeki XQuant içeriği, aynı konuları dokuz bölümde ele alır.
- Hazırlık, ardından birinci bölüm: eksiksiz bir stratejiyi baştan sona çalıştırmak.
- İkinci bölüm, ne alınacağı: üç ETF ile başlamak.
- Üçüncü bölüm, ne kadar alınacağı: üç portföy dağılımı yöntemini birbiriyle karşılaştırarak ölçmek.
- Dördüncü bölüm, ne zaman işlem yapılacağı: yeniden dengeleme, stop loss, take profit.
- Beşinci bölüm, bir stratejinin gerçekten iyi olup olmadığını değerlendirmek: dört farklı bakış açısı.
- Altıncı bölüm, erken sevinmemek: aşırı uyum sağlamayı önlemek.
- Yedinci bölüm, idealden gerçeğe: işlemleri gerçekleştirmek.
- Sekizinci bölüm, lansman sonrasındaki dönem: izleme, teşhis, yineleme.
- Dokuzuncu bölüm, yeni fırsatları bulmak: faktör araştırmasına giriş.
Sıralama dikkat çekicidir. Pozisyon büyüklüğü üçüncü bölümde, her iki backtest bölümünden önce ele alınır. Faktör araştırması ise son bölüme bırakılır. Kendi kendine öğrenilen yöntemler genellikle bunun tersine ilerler: önce bir faktör fikri, sonra bir backtest, pozisyon büyüklüğüne ilişkin bir kural ise hiç yoktur. Aynı tarihte 333 yıldıza sahip yardımcı uygulama deposu, tamamlanmış kod yerine yazılı görev tanımları etrafında düzenlenmiştir; uygulamayı gerçekleştirmesi için yönlendirme AI asistanına bırakılır. Yazılmamış kodu okuyabilmek hâlâ aşağıdaki her şeyi belirleyen beceridir. Bunun nedeni, sonraki her hatanın bir uygulama ayrıntısının içinde gizlenmesidir.
Birinci aşama: verileri alın, ardından evreni tanımlayın
Veri çalışmasının görünen kısmı temizlemedir: hatalı işlemler, eksik seanslar, bölünme ve temettü düzeltmeleri. Hangi hisselerin inceleneceğini seçmek ise görünmeyen kısımdır. Hayatta kalma yanlılığı, strateji kodunun tek satırı yazılmadan önce burada devreye girer. Haziran ayındaki bir haftada işlem gören her ABD ticker’ını, her yıl için ayrı ayrı alın ve 2026’nın aynı haftasında bunlardan kaçının hâlâ işlem gördüğünü sorun.
Her verinin arkasındaki tam SQL
WITH june_week AS (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS year,
ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE toMonth(toTimeZone(window_start, 'America/New_York')) = 6
AND toDayOfMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 10 AND 16
AND toYear(toTimeZone(window_start, 'America/New_York')) BETWEEN 2016 AND 2026
AND volume > 0
GROUP BY year, ticker
),
survivors AS (
SELECT ticker FROM june_week WHERE year = 2026
)
SELECT year,
uniqExact(ticker) AS tickers_traded,
uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors)) AS still_trading_2026,
round(100 * uniqExactIf(ticker, ticker IN (SELECT ticker FROM survivors))
/ uniqExact(ticker), 1) AS still_trading_pct
FROM june_week
GROUP BY year
ORDER BY year2016 yılının o haftasında işlem gören 8224 ticker’dan 50% tanesi 2026 yılının aynı haftasında hâlâ işlem görüyordu. Diğerleri satın alındı, birleşti, yeniden adlandırıldı veya borsadan çıkarıldı. Güncel listedeki hisselerle oluşturulan bir geriye dönük test, yalnızca hayatta kalanları inceler ve sonradan seçilen şirketleri elde tutma stratejisini başarılı gösterir. Yeni başlayanlara yönelik bir veri akışı, bu hayatta kalanlar listesini herhangi bir uyarı olmadan sunabilir: ücretsiz hisse piyasası verileri API’si rehberi, bu veri akışlarının hangi verileri sağlayıp hangilerini sağlamadığını ele alır.
İkinci aşama: veriyi sinyale dönüştürmek
Sinyal, belirli bir zamanda bir hisseyi puanlayan kuraldır. Faktör ise aynı anda çok sayıda hisse için geçerli olduğuna inanılan sinyaldir. Momentum, değer ve düşük volatilite, ders kitaplarındaki klasik örneklerdir. Bu aşamadaki hata, işe yarayan bir kural bulana kadar kuralları test etmektir. Tek bir endeksin tek bir on yıllık dönemi üzerinde hareketli ortalama kesişimine dayalı yirmi farklı varyant, her zaman bir kazanan üretir. Kazanan da gürültüye en iyi uyum sağlayan varyanttır. Korunma yöntemleri gösterişsizdir: Kuralı ölçmeden önce sabitlemek, geçmişin hiç bakılmayacak bir bölümünü ayırmak, denenen her varyantı saymak ve ayarlanabilir parametre sayısını düşük tutmak gerekir. XQuant, faktör araştırmasından önce bu konuya bütünüyle bir bölüm ayırıyor. Doğru sıra budur.
Üçüncü aşama: çoğu başlangıç düzeyindeki yatırımcının durduğu backtest
Bu aşama, kendi kendine öğrenerek yürütülen projelerin çoğunu sona erdirir. Bunu sessizce yapar ve son derece iyi görünen bir özsermaye eğrisi bırakır. Yukarıda ele alınan hayatta kalan şirket yanlılığı, iki hatadan ilkidir. Geleceğe bakma yanlılığı ise ikincisidir. Strateji, emrin verilmesi gereken saatte henüz oluşmamış bir sayıyı kullanır. Bunun en yaygın biçimi, bugünün kapanış fiyatından hesaplanan bir kuralın aynı kapanış fiyatından gerçekleştirilmesidir. Bu varsayımın atladığı mesafeyi ölçmek gerekir.
Her verinin arkasındaki tam SQL
WITH sessions AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMin(open, window_start) AS session_open,
argMax(close, window_start) AS session_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'NVDA')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session
),
gaps AS (
SELECT ticker,
session,
toFloat64(session_open) AS open_px,
toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
FROM sessions
)
SELECT formatDateTime(toStartOfMonth(session), '%Y-%m') AS month,
formatDateTimeInJodaSyntax(toStartOfMonth(session), 'MMMM yyyy') AS month_label,
round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'SPY'), 1) AS spy_gap_bps,
round(avgIf(abs(open_px / prev_close - 1) * 10000, ticker = 'NVDA'), 1) AS nvda_gap_bps
FROM gaps
WHERE prev_close > 0
GROUP BY month, month_label
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'NVDA') > 0
ORDER BY monthJuly 2026 içinde, bir kapanış ile bir sonraki açılış işlemi arasındaki ortalama mesafe SPY için 40.8 baz puan, NVDA için 107.4 baz puan olarak ölçüldü. Bir baz puan, yüzde puanın yüzde biridir. August 2024 tarihinden başlayarak paneldeki 24 ayın tamamı sıfırın üzerinde yer alıyor. Kapanışta karar verip emri aynı kapanış fiyatından gerçekleştiren bir backtest, her işlemde bu mesafeyi bedelsiz olarak toplar. Gerçek piyasada verilen hiçbir emir bunu yapamaz. Backtestte geleceğe bakma yanlılığı mekanizmayı ayrıntılı biçimde açıklar. hisseler neden gece boyunca fiyat boşluğu oluşturur ise fiyat boşluğunun kendisini açıklar.
Dördüncü aşama: ne kadar alınacağına karar verme
Buradaki sorun, kuralın bulunmamasıdır. Kendi kendine öğrenen yatırımcıların çoğu pozisyon büyüklüğünü belirleyen bir kural yazmaz. Bu nedenle, genellikle hisse başına eşit tutar yatırmak veya elde kalan nakdi kullanmak gibi tesadüfi bir kuralları vardır. Eşit tutar, eşit risk anlamına gelmez.
Her verinin arkasındaki tam SQL
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(close, window_start) AS session_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'JNJ', 'MSFT', 'AAPL', 'NVDA', 'TSLA', 'COIN')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-08-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session
),
rets AS (
SELECT ticker,
toFloat64(session_close) AS close_px,
toFloat64(lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY session)) AS prev_close
FROM daily
)
SELECT ticker,
round(stddevSamp(close_px / prev_close - 1) * sqrt(252) * 100, 1) AS annualized_vol_pct,
round(abs(min(close_px / prev_close - 1)) * 100, 2) AS worst_day_pct
FROM rets
WHERE prev_close > 0
GROUP BY ticker
ORDER BY annualized_vol_pct DESC31 Temmuz 2026’da sona eren on iki aylık dönemde COIN yıllıklandırılmış 68% volatiliteyle hareket etti. Panelin sakin ucundaki SPY için bu oran 12.7% oldu. COIN için en kötü tek seans, önceki kapanışın 13.34% altında gerçekleşti. SPY için en kötü gün ise 2.69% kayıp gösterdi. Her hisseye aynı tutarda yatırım yapmak, günlük hareketler açısından çok farklı sonuçlar doğurur. Yeni başlayan bir yatırımcının fiilen deneyimlediği unsur sinyal değil, bu harekettir. Kelly kriterine göre pozisyon büyüklüğü formel bir yanıt ortaya koyar. konsantrasyon riski ise gayriresmî yaklaşımın görünümünü gösterir.
Beşinci aşama: uygulama ve backtest’in unuttuğu maliyetler
İki maliyet vardır; yalnızca biri görünür. Komisyonlar ve düzenleyici ücretler hesap ekstresinde yer alır. Slippage ise görünmez. Slippage, ekranda görülen fiyat ile gerçekleşen fiyat arasındaki farktır. Bunun tabanı, o andaki en iyi alış ve satış kotasyonları arasındaki mesafe olan alış-satış spread’idir. Alıcılar ask fiyatından öder, satıcılar bid fiyatından işlem gerçekleştirir. Bu nedenle gidiş-dönüş işleminde spread iki kez aşılır. Spread sabit değildir.
Her verinin arkasındaki tam SQL
WITH quotes AS (
SELECT ticker,
toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE) AS bucket,
toFloat64(ask_price - bid_price) / toFloat64((ask_price + bid_price) / 2) * 10000 AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'KO')
AND sip_timestamp >= toDateTime('2026-07-17 13:00:00')
AND sip_timestamp < toDateTime('2026-07-17 21:00:00')
AND bid_price > 0
AND ask_price > bid_price
)
SELECT formatDateTime(bucket, '%H:%i') AS et_time,
round(avgIf(spread_bps, ticker = 'AAPL'), 2) AS aapl_spread_bps,
round(avgIf(spread_bps, ticker = 'KO'), 2) AS ko_spread_bps
FROM quotes
WHERE spread_bps > 0 AND spread_bps < 500
GROUP BY et_time
HAVING countIf(ticker = 'AAPL') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY et_timePanel, bir cuma gününün 16 yarım saatlik dilimini kapsar. Açılış gongundan önceki 09:00 diliminden kapanıştan sonraki 16:30 dilime kadar uzanır. AAPL, ilk dilimde 10.53 baz puan genişliğinde, son dilimde ise 3.27 genişliğinde kote edilmiştir. KO için bu değerler 28.87 ve 8.04’dir. Günün en dar kotasyonları grafiğin ortasında, bu iki uç arasında yer alır. Piyasanın en likit iki hissesinde açılışta işlem yapan bir strateji, aynı stratejinin gün ortasında işlem yapan versiyonundan farklı bir maliyet öder. Sıfır maliyet varsayan bir backtest ise bu maliyetlerin hiçbirini doğru biçimde fiyatlamaz. Alış-satış spread’i maliyetin miktarını belirler, spread’lerin açılışta neden genişlediği eğrinin şeklini açıklar ve bir hisseyi işlemden geçirmenin maliyeti tam bir gidiş-dönüş işleminin toplamını ortaya koyar. Temiz bir backtest ile gerçek para arasında bir adım daha vardır: gerçek paradan önce paper trading.
Bir A hisse müfredatının hangi bölümleri ABD hisselerine aktarılabilir?
XQuant ve benzeri yöntemler Çin A hisseleri ve ETF'leri için hazırlanmıştır. Yöntem bütünüyle aktarılabilir: aşamaların sırası, tanımlar, aşırı uyum konusundaki disiplin, maliyetleri sonradan eklemek yerine ayrı bir kalem olarak yazma alışkanlığı ve pozisyon büyüklüğü hesaplamalarının tamamı. Fiyat çubukları her piyasada fiyat çubuklarıdır. Aktarılmayan unsur, bunları çevreleyen kurallardır.
- A hisselerinde gerçek bir T+1 kısıtlaması vardır: bugün alınan hisse bir sonraki seansa kadar satılamaz. ABD'deki T+1 bir takas kuralıdır ve gün içi işlemleri engellemez. Bununla birlikte, pattern day trader kuralı 25.000 doların altındaki teminatlı hesapları beş iş günü içinde üç gün içi işlemle sınırlar.
- Ana piyasa A hisselerinde günlük hareket sınırı yüzde 10'dur. Büyüme piyasalarında bu sınır yüzde 20'dir. ABD hisselerinde günlük fiyat sınırı yoktur. Bunun yerine işlemler volatilite bantları ve haber kaynaklı işlem durdurmalarıyla kesintiye uğrayabilir.
- A hisse emirleri 100 hisselik lotlar hâlinde işlem görür. Birçok ABD aracı kurumu küsuratlı hisse işlemlerini gerçekleştirir. Bu durum, bir pozisyon büyüklüğü kuralının ifade edebileceği seçenekleri dahi değiştirir.
- Çin'de satış tarafında damga vergisi uygulanır. ABD'de satış yapanlar ise tutarı ve yapısı farklı, düşük miktarlı düzenleyici ücretler öder.
- Seans yapısı da farklıdır. Şanghay ve Shenzhen'de öğle arası bulunur. ABD hisse piyasası işlem saatleri kesintisiz devam eder ve kapanış müzayedesiyle sona erer.
Bir kurstan alınarak kendi koduna aktarılan her maliyet veya zamanlama sabiti, ilk gerçek emirle ortaya çıkmayı bekleyen bir hatadır.
README yerine başvuruyu sabitleyin
Depoda Ağustos 2026 itibarıyla etiketlenmiş sürüm bulunmadığından, kalıcı başvuru noktası bir commit'tir: 016b66e, 14 Temmuz 2026 tarihli. Bu, yazımı hâlâ süren bir kitap açısından önem taşır. Bölüm numaraları değişir, README dosyaları yeniden yazılır, başlıklar yer değiştirir ve yedinci bölüme yönlendiren bir bağlantı sessizce başka bir içeriğe yönelmeye başlar. Commit'i ve tarihi belirtin; okunan bölümün numarası yerine başlığını kaydedin. Böylece notlar bir yıl sonra da doğrulanabilir kalır. Metin CC BY-NC-SA 4.0 kapsamında, derleme betikleri ise MIT lisansı altında yayımlanmıştır. Aynı disiplin, ders programının son dersidir: sabitlenmiş bir veri anlık görüntüsünden yeniden çalıştırılamayan bir strateji, sonuç değil, yalnızca bir anlatıdır.
SSS
Ücretsiz ve açık kaynaklı bir kitaptan kantitatif işlem öğrenilebilir mi?
Yol haritası açısından evet. Açık bir taslak, her iddianın kaynağıyla karşılaştırılmasına olanak tanır. Ancak bir kitap, belirli bir piyasanın verilerini, maliyetlerini ve kurallarını sağlayamaz. Bu nedenle, tek bir borsa için hazırlanmış bir müfredatın aracı kurumla örtüşmediği nokta da tam olarak burasıdır.
Bir kantitatif işlem müfredatında yeni başlayanların çoğu hangi aşamada zorlanır?
Geriye dönük testte. Sonucu olduğundan iyi gösteren iki hata burada ortaya çıkar: sonradan oluşturulmuş bir evrenden kaynaklanan survivorship bias ve fiyatın henüz ekrana gelmediği bir seviyeden işlem gerçekleştirilmesinden kaynaklanan look-ahead bias. 2016 yılının haziran haftasında işlem gören ticker’ların yalnızca 50% kadarı, on yıl sonra hâlâ işlem görüyordu.
Survivorship bias ile look-ahead bias arasındaki fark nedir?
Survivorship bias, evrenle ilgili bir sorundur: test edilen hisseler, varlıklarını sürdürmüş olmalarına göre seçilmiştir. Look-ahead bias ise zamanlamayla ilgili bir sorundur: strateji, emrin verilmesi gereken anda henüz mevcut olmayan bir sayıyı kullanır. İlki listedeki şirket sayısını, ikincisi ise gerçekleşen işlem fiyatını olduğundan yüksek gösterir.
Çin A tipi hisseleri için hazırlanan bir kantitatif işlem kursu ABD hisselerinde işe yarar mı?
Yöntem işe yarar. Piyasa kuralları ise aynı değildir. Aşamaların sırasını, aşırı uyum disiplinini ve maliyet hesaplamasını korumak gerekir. Ancak herhangi bir sermaye kullanılmadan önce veri altyapısı, T+1 satış kısıtlaması, günlük fiyat limitleri ve lot büyüklükleri ABD’deki karşılıklarıyla değiştirilmelidir.
Yukarıdaki her panel, altında SQL sorgusu bulunan kayıtlı bir sorgudur. Birini açıp ticker’ları veya tarihleri değiştirerek Strasmore terminalinde kendiniz çalıştırabilirsiniz.