
Finansal Uygulamalar için C# ve .NET
Kantitatif finans ve fintech için Microsoft ekosistemi
Neden .NET İşlem Kürsülerinde Hâlâ Hâkim
Birçok satış tarafı kürsüsünde fiyatlama, risk, OMS ve kalın istemci (thick-client) arayüzleri hâlâ C# / .NET üzerinde çalışıyor — kimse Go öğrenmediğinden değil, on yıllardır süregelen kontroller, tedarikçiler ve Excel entegrasyonlarının hepsi buraya işaret ettiğinden.
Modern .NET platformlar arası çalışır, birçok iş yükü için JIT performansı rakiplerine yakındır ve çöp toplayıcı (GC) duraklamalar konusunda giderek daha az agresif hale gelmektedir — bir kürsü arayüzünün yoğun bir fiyat akışı sırasında donmaması gerektiğinde bu önemlidir.
C# dilinin kendisi, statik tipten ödün vermeden desen eşleştirme (pattern matching), record'lar, nullable referans tipleri ve diğer kullanım kolaylıklarını kazandı — kötü bir refactor'ın bir bilançoya zarar verebileceği yerlerde bu işe yarar.
Finansın Sevdiği C# Dil Özellikleri
C#, finansal hesaplama için son derece uygun hale gelmesini sağlayan birkaç özellik sunar:
LINQ (Language Integrated Query) koleksiyonları doğrudan kodunuzun içinde SQL benzeri bir söz dizimiyle sorgulamanıza olanak tanır. 10.000 pozisyondan oluşan bir portföyü işleyip risk limitlerini aşanları bulmak tek, okunabilir bir ifadeye dönüşür:
var breaches = positions
.Where(p => p.Notional > riskLimit)
.OrderByDescending(p => p.Notional)
.Select(p => new { p.Symbol, p.Notional, p.PnL })
.ToList();
Async/await — C#, async/await desenini öncü olarak geliştirdi (daha sonra JavaScript, Python ve Rust tarafından benimsendi). Piyasa verisini aynı anda akıtması, kullanıcı girdilerini işlemesi ve borsalara emir göndermesi gereken işlem sistemleri için async/await, manuel iş parçacığı (thread) yönetiminin karmaşıklığı olmadan eşzamanlılık sağlar.
Desen eşleştirme (pattern matching) (C# 11/12'de geliştirildi) karmaşık koşullu mantığı temiz bir şekilde ele alır — emir yönlendirme kuralları, risk sınıflandırması ve enstrüman tipi dağıtımı için gereklidir:
decimal CalculateMargin(Instrument inst) => inst switch
{
{ Type: "perpetual", Leverage: > 10 } => inst.Notional * 0.10m,
{ Type: "perpetual" } => inst.Notional * 0.05m,
{ Type: "spot" } => inst.Notional,
_ => throw new ArgumentException($"Unknown type: {inst.Type}")
};
Defter tarzı para hesaplamaları için decimal kullanın; double grafikler için uygundur ama bakiyeler için risklidir — ikili (binary) kayan noktalı sayılar sentlere saygı göstermez.
.NET ile Kantitatif Finans
.NET ekosistemi, türev fiyatlamadan Monte Carlo simülasyonlarına kadar kantitatif finans için olgun kütüphaneler sunar:
Math.NET Numerics temel sayısal kütüphanedir — lineer cebir, istatistik, dağılımlar, interpolasyon ve optimizasyon. Matris işlemleri için donanım hızlandırmalı arka uçlarla (MKL, OpenBLAS) .NET'in NumPy/SciPy karşılığıdır. 500 varlık üzerinde bir portföyün kovaryans matrisini hesaplamak mı gerekiyor? Math.NET bunu LAPACK destekli rutinlerle halleder.
QuantLib.NET, sektör standardı QuantLib C++ kütüphanesini sarmalayarak tahviller, swaplar, opsiyonlar (Black-Scholes, Heston, yerel volatilite) ve getiri eğrisi oluşturma için fiyatlama modelleri sağlar. Hedge fonları egzotik türevleri fiyatlamak için QuantLib kullanır; .NET sarmalayıcısı C# uygulamalarının bu modelleri yönetilmeyen (unmanaged) koda geçmeden çağırmasına izin verir.
Excel entegrasyonu işlem kürsülerinde hâlâ kritik önemdedir. Excel-DNA, C#'ta Excel eklentileri yazmanıza olanak tanır; bunlar Excel'de yerel çalışma sayfası fonksiyonları olarak görünür. Bir kantitatif analist C#'ta bir fiyatlama fonksiyonu yazabilir, onu Excel'e sunabilir ve traderlar bunu, alttaki uygulamanın ne olduğunu bilmeden veya önemsemeden çalışma sayfalarında kullanabilir. Bu desen — C# motoru, Excel arayüzü — çoğu satış tarafı kürsüsündeki standart iş akışıdır.
[ExcelFunction(Description = "Black-Scholes call price")]
public static double BSCall(double S, double K, double T,
double r, double sigma)
{
double d1 = (Math.Log(S / K) + (r + 0.5 * sigma * sigma) * T)
/ (sigma * Math.Sqrt(T));
double d2 = d1 - sigma * Math.Sqrt(T);
return S * NormCdf(d1) - K * Math.Exp(-r * T) * NormCdf(d2);
}
Portföy analitiği ve risk yönetimi için C# uygulamaları düzenli olarak binlerce pozisyon üzerinde riske maruz değer (VaR), Greek'ler (delta, gamma, vega), senaryo analizi ve stres testleri hesaplar — hem sayısal hassasiyet hem de saniyenin altında yanıt süresi gerektiren görevler.
Span<T> ve Memory<T> ile Yüksek Performanslı Hesaplama
Modern .NET, sıfır tahsis (zero-allocation) programlama ilkelleri sayesinde C ve C++ ile olan performans farkının büyük bölümünü kapattı. Span<T> ve Memory<T>, çöp toplama tarafından yönetilen yığında (heap) tahsis yapmadan — yığın (stack) üzerinde tahsis edilen diziler, heap dizileri veya yönetilmeyen bellek gibi — bitişik bellek bölgelerine güvenli, sınır denetimli erişim sağlar.
Saniyede 100.000 piyasa verisi mesajı işleyen bir işlem sistemi için her heap tahsisi GC baskısı oluşturur. Mesajları string nesneleri tahsis etmek yerine Span<byte> dilimlerine ayrıştırarak, piyasa verisini mesaj başına sıfır tahsisle işleyebilirsiniz — bu, .NET üzerinde çalışan yüksek frekanslı işlem firmaları tarafından üretimde kullanılan bir tekniktir.
// Parse a price from a binary message without allocating
static decimal ParsePrice(ReadOnlySpan<byte> message)
{
// Slice the relevant bytes, interpret as fixed-point
var priceBytes = message.Slice(offset: 16, length: 8);
long rawPrice = BinaryPrimitives.ReadInt64LittleEndian(priceBytes);
return rawPrice / 100_000_000m; // 8 decimal places
}
System.IO.Pipelines bu yaklaşımı ağ G/Ç'sine genişletir, tampon (buffer) kopyalamadan veri akışlarını okuma ve yazma için yüksek performanslı bir boru hattı (pipeline) sağlar. ASP.NET'in web sunucusu olan Kestrel, dahili olarak Pipelines kullanır ve saniyede milyonlarca isteği işler — bu da onu işlem verisi sunan gerçek zamanlı API uç noktaları için uygun hale getirir.
ASP.NET Core üzerine inşa edilen SignalR, WebSocket'ler üzerinden gerçek zamanlı çift yönlü iletişim sağlar ve otomatik olarak Server-Sent Events veya long polling'e geri döner. İşlem uygulamaları için SignalR, canlı fiyat tik'lerini, emir güncellemelerini ve portföy değişikliklerini bağlı istemcilere minimum gecikmeyle iter — GaiaEx'in gerçek zamanlı piyasa verisini web arayüzüne akıtma şekline benzer.
İşlem Arayüzleri: WPF'ten Platformlar Arası MAUI'ye
Emir defterlerini, grafikleri, pozisyonları, blotter'ları ve risk metriklerini gösteren yoğun, veri açısından zengin masaüstü uygulaması olan işlem terminali, çoğu bankada on yıldan fazla süredir bir C#/WPF uygulaması olmuştur. WPF (Windows Presentation Foundation), donanım hızlandırmalı render, güçlü veri bağlama ve arayüz iş parçacığını donduramadan onbinlerce güncellenen hücreyi görüntüleme yeteneği sağlar.
Tipik bir işlem arayüzü mimarisi MVVM (Model-View-ViewModel) desenini kullanır: View, düzeni tanımlayan XAML işaretlemesidir, ViewModel, View'ın bağlandığı gözlemlenebilir (observable) özellikleri sunar ve Model, alanı (pozisyonlar, emirler, enstrümanlar) temsil eder. Bir fiyat tik'lediğinde, ViewModel bir özelliği günceller, WPF'nin bağlama motoru değişikliği View'a yayar ve hücre güncellenir — geliştiricinin herhangi bir arayüz güncelleme kodu yazmasına gerek kalmadan.
.NET MAUI (Multi-platform App UI), bu modeli platformlar arası geliştirmeye genişletir — tek bir C# kod tabanından Windows, macOS, iOS ve Android. Kurumsal işlem kürsüleri Windows'a hâlâ hâkim olsa da, perakende işlem platformları giderek mobil ve macOS desteğine ihtiyaç duyuyor. MAUI, iş mantığını yeniden yazmadan bu erişimi sağlar.
Bulut barındırmalı işlem platformları için Blazor ilgi çekici bir alternatif sunar: tüm web arayüzünüzü JavaScript yerine C#'ta yazın. Blazor WebAssembly, C#'ı tarayıcıda doğrudan WASM üzerinden çalıştırırken, Blazor Server arayüz mantığını sunucu tarafında çalıştırır ve DOM farklarını bir SignalR bağlantısı üzerinden gönderir. Tüm yığını .NET olan bir firma için Blazor, React veya Angular yazan ayrı bir ön uç ekibine olan ihtiyacı ortadan kaldırır.
Hedge Fonlarda, Prop Şirketlerinde ve Fintech'te C#
Finansta C#/.NET geliştiricileri için kariyer manzarası derin ve iyi ücretlidir:
- Citadel / Citadel Securities — İşlem sistemleri, risk motorları ve dahili araçlar için C#'ı yoğun şekilde kullanır. Sistematik işlem devinin yığını C++, Python ve C# karışımıdır.
- Two Sigma — Java ve Python'un yanında portföy yönetim sistemleri ve veri altyapısı için C# kullanır.
- Bloomberg — Bloomberg Terminal'in sunucu tarafı altyapısı, analitik ve veri işleme için önemli C# bileşenleri içerir.
- Jump Trading, IMC, Optiver — Prop işlem firmaları, strateji geliştirme çerçeveleri, geriye dönük test (backtest) motorları ve operasyonel araçlar için C# kullanır.
.NET ekosistemi ayrıca bulut tabanlı finansal iş yükleri için Azure ile kusursuz bir şekilde entegre olur. Azure Functions, toplu risk hesaplamaları için sunucusuz (serverless) hesaplama sağlar. Azure Event Hubs, saniyede milyonlarca piyasa verisi olayını işler. Azure Kubernetes Service (AKS), konteynerize edilmiş .NET mikroservislerini orkestre eder. .NET + Azure kombinasyonu, SOC 2 uyumluluğu ve veri ikametgahı garantileri gerektiren düzenlenmiş finansal kuruluşlar için kurumsal bulut yığınıdır.
Bir prop şirketi için risk motoru, GaiaEx gibi bir kripto borsası için fiyatlama servisi, bir işlem kürsüsü için Excel eklentisi veya portföy izleme için gerçek zamanlı bir gösterge paneli inşa ediyor olun — C# ve .NET size işin gerektirdiği performansı, kütüphaneleri ve sektör güvenini verir. Hataların maliyetinin dolarla ölçüldüğü finansta, .NET'in tip güvenliği, araç desteği ve savaş testinden geçmiş çalışma zamanı bir lüks değildir — bunlar birer gerekliliktir.

