Nicel geliştiriciler, finansal algoritmaların kazanç ve kayıp (P&L) açısından nasıl performans gösterdiğini görmek için geri test simülasyonları yapmak zorundadır. İstatistiksel teknikler, algoritmaların mümkün olan sonuçlarını P&L yolları açısından görselleştirmek için önemlidir. GPU’lar, bu süreçte gereken süreyi önemli ölçüde azaltabilir.
Finansal Pazarların Matematiksel Modelleme
Finansal piyasalardaki matematiksel modelleme uygulamaları, 1973 yılında Nobel Ödüllü Black-Scholes modeli ile başlamıştır. Bu model, o dönemde devrim niteliğinde olup, sermaye piyasalarını önemli ölçüde etkilemiştir. İstatistiksel Monte Carlo simülasyonları, Brownian hareket modelleriyle elde edilebilecek fiyat yollarını temsil etmek için özel olarak tasarlanmış modeller içermektedir.
Piyasa Katılımcıları ve Dinamik Sipariş Defteri
Bu yazı, finansal piyasaların katılımcılarına yönelik bir donanım hızlandırma çalışmasını sunmaktadır. Katılımcılar arasında:
- Traderlar, karlı stratejilerden sorumlu olanlar
- Borsalar, firmaların menkul kıymet alım satımını sağlamakta
- Risk yöneticileri, firmanın pozisyonlarının riskini kontrol etmekte
Tüm bu piyasa katılımcıları, menkul kıymetlerin alım satımında fiyatlar, hacimler ve zamanlama ile ilgili çok özel bir kurallar seti olan dinamik sipariş defterinde iş birliği yapmaktadırlar.
GPU’ların Rolü
GPU’lar, büyük miktarda fiyat verisi ve yüksek işlem hızları nedeniyle bu dinamik sipariş defterlerini simüle etmek için gereken hızlandırılmış hesaplamayı sağlar. Bu yazı, bu bağlamda GPU’ların nasıl uygulanacağını açıklamaktadır.
Nano saniye zaman damgalı piyasa işlemleri, özellikle doğru tahminlerle pozitif kar elde etmeyi uman yüksek frekanslı ticaret alanındaki katılımcılar için günümüzde ilgi çekicidir. Bu bağlamda, alpha, bir yatırımın risk-free oranı dikkate alınarak ve riskle ayarlanmış olarak piyasa endeksine göre aşan getiri ölçüsüdür.
GPU ile Hızlandırılmış Simülasyonlar
Çalışmamızda, simüle edilen zaman aralığı uzadıkça, donanım hızlandırmanın sağladığı avantajların arttığını bulduk. Piyasa uygulayıcısı, bu simülasyon tekniklerini canlı işlemeye hazırlarken güven kazanmak için gerekli aralığı belirleyecektir. NVIDIA Hopper ve NVIDIA Blackwell mimarileri, hangi NVIDIA GPU modeli kullanılırsa kullanılsın, 14.000’den fazla iç CUDA çekirdeği sunarak, çok sayıda paralel program yürütme olanağı sağlar: H100 NVL, H100 SXM, H200 NVL, H200 SXM, GH200, B200 veya GB200.
Piyasa Verisi ve Simülasyon Problemi
Dünya genelinde yüksek frekansla yakalanan piyasa verisi miktarı şaşırtıcıdır. Gerçek sipariş defteri ve dolayısıyla sipariş defteri simülasyonları; karşıt tarafların alım yapmak için verdikleri fiyat seviyeleri, karşı tarafların satış yapmak için verdikleri fiyat seviyeleri ve midprice (en yüksek teklif ile en düşük teklifin ortalaması) gibi karmaşık bir durumu içermektedir.
10 alım ve 10 satış seviyesi vardır. Limit emirler (LO), fiyat noktalarıyla spesifik olan karşıt taraflar tarafından yerleştirilirken, piyasa emirleri (MO), işlem fiyatı üzerinde daha esnek olan ve hemen yürütülmesi gereken durumlar için verilmektedir. Araştırmacılar ve uygulayıcılar, bu dinamik olaylar gerçekleşirken kar elde etmeyi hedefleyerek LO ve MO’ları sırayla borsa işlemine yerleştiren modeller üzerinde yoğunlaşmaktadırlar. Stratejilerin simülasyonu, firmalar tarafından tahsis edilen sermaye miktarı nedeniyle önem taşımaktadır.
Şekil 1 ve Şekil 2, sırasıyla 15 saniye ve 23.400 saniye (bir işlem günü) için sipariş defterine dair perspektif sunmaktadır. Şekil 1, belirli bir hisse senedinin limit emir defterinin, 15 saniyelik görünümün ortasında aşağıya doğru sıçrayışını göstermektedir. Sonuç olarak, midprice, yaklaşık 579,00 $’dan 578,00 $’a kadar düşmektedir. İlk zaman damgası olan 34.200, piyasa açılışını temsil etmektedir. Ayrıca, 34.212 saniyedeki piyasa açılışında fiyatın aşırı dalgalandığına dikkat edin.
Bu örnek, bir büyük ölçekli teknoloji hissesidir. Tüm gün için işlem aralığı daha geniştir çünkü piyasa fiyatının, tüm LO ve MO faaliyetleri tarafından etkilenmesi için daha fazla zaman vardır. Şekil 2’de midprice, yaklaşık 579,00 $’dan 565,00 $’a kadar düşmektedir. Limit emir defterinin üstünden altına genişliği, zaman ilerledikçe daralmaktadır.
Statistiksel Monte Carlo simülasyonlarının GPU’lar ile hızlandırılması, bu soruna uygun olduklarından ve araştırmacılar için zamanı daha verimli hale getirmektedir. Kullanılan yaklaşımın özel bir uygulaması, ana piyasa simülasyon modüllerinden biri için örneklenmiştir.
CUDA Python ile Simülasyon Hızlandırma: CuPy ve Numba
Python, ifadelerin bir fonksiyon içinde yer almasını gerektirmediğinden, Python programlarını bir dizi fonksiyon içinde sıralı ifadeler olarak düşünebilirsiniz. Genel olarak, CuPy yaklaşımı, kodu fonksiyonlar dışında yazarken GPU yürütmesi açısından iyi bir şekilde çalışmaktadır. CuPy’nin kullanımına bir örnek aşağıda verilmiştir.
import cupy as cp
x = cp.array([1, 2, 3, 4, 5])
y = cp.array([5, 4, 3, 2, 1])
z = x * y # GPU hızlandırmalı işlem
Aşağıda Numba kullanarak eşdeğer kod verilmiştir:
import numba
from numba import cuda
@cuda.jit
def mult_kernel(x, y, z):
i = cuda.grid(1)
if i
Numba yaklaşımı, CUDA grid’inin dizilerine iptal ederek #cuda.grid(1) ile paralelliği daha iyi kontrol etme imkanı sağlamakta ve GPU’daki hesaplamayı kontrol edebilmek için açık bir şekilde bir çekirdek fonksiyonu yazmayı gerektirmektedir. CuPy matrisleri, Numba CUDA çekirdeği içinde doğrudan kullanılamaz; bu nedenle orijinal simülasyon, Numba çekirdeği haline dönüşmek üzere bir zaman döngüsü Python fonksiyonu gibi görünmektedir. Bu nedenler dolayısıyla, bu yazıda Numba’ya odaklanılmıştır.
Normal ve Uniform Varyantlar
Çoğu olasılık simülasyonu için, hem normal hem de uniform varyantlar için bir rastgele sayı üreteci gereklidir. NumPy bunu sağlamakta ve bir varyant elde ederken aşırı yüklenmeyi önlemek için bunları toplu hale getirmek ve GPU’ya göndermek gereklidir. Hem “cihaz” (GPU) hem de “ana bilgisayar” (CPU) üzerinde hedeflenen aynı normal(0,1) ve uniform(0,1) varyantları için cuda.to_device
komutu kullanılmaktadır.
if isGPU: #host ve cihazda norm ve unif varyantları kopyası
np.random.seed(20)
norm_variates_d = cuda.to_device(np.random.randn(Nsims*Nt).reshape(Nsims,Nt))
unif_variates_d = cuda.to_device(np.random.rand(Nsims*Nt).reshape(Nsims,Nt))
np.random.seed(20)
norm_variates = np.random.randn(Nsims*Nt).reshape(Nsims,Nt)
unif_variates = np.random.rand(Nsims*Nt).reshape(Nsims,Nt)
if isGPU: assert(norm_variates_d.copy_to_host()[0,10]==norm_variates[0,10]) #kontrol
Simülasyon Çekirdeğini Üretme
Stokastik simülasyon üreten Python fonksiyonunu, hızlandırma sağlamak için tekrar kodlama ana mühendislik görevi haline gelmektedir. Bu, simülasyon yolları boyunca paralelleştirilmekte ve binlerce saniyenin simülasyonu için makul bir çalışma süresi sağlanmaktadır.
Her bir sonuç dizisi için, copy_to_host
yöntemi cihazdan ana bilgisayara kopyalama işlemi için kullanılmaktadır. Numba çekirdekleri, @cuda.jit
dekoratörü ile tanımlanmaktadır. Fonksiyonun içinde birkaç anahtar 2D stokastik değişken bulunmaktadır: hisse senedi fiyat yolu s_path
, isMO
, buySellMO
, alpha_path
, envanter q_path
, zenginlik X_path
.
@cuda.jit(debug=False)
def generate_simulation_kernel(Nsims, t, dt, Delta, sigma,...):
...
j = cuda.grid(1) #cuda.blockDim.x * cuda.blockIdx.x + cuda.threadIdx.x
if j
Kısa zaman aralığı olan T = 30 saniyesi için simülasyon grafiklerine bakın; dt = 0.2 saniye, Şekil 3 ve 4’te gösterilmektedir.
Sonuçlar ve Hızlanma
Üç simülasyon zaman aralığı için CPU ve NVIDIA H200 GPU arasındaki performans sonuçları Şekil 5’te gösterilmektedir. Bir ay gibi uzun zaman aralıklarında 114 kat hızlanma sağlanmakta, bu durum NVIDIA H200 Tensor Core GPU’sunun çok sayıda CUDA çekirdeğinden faydalanmaktadır. 1.000 gibi sağlam bir simülasyon sayısı kullanarak midprice, alpha ve P&L’nin ortalama ve standart sapmaları hesaplanabilmektedir.
Hızlanmanın Kaynağı
GPU tarafından sağlanan hızlanmanın kaynağı, algoritmanın 2D yapısından gelmektedir. İlk boyut, zamanın 0’dan son T’ye kadar geçen kısmıdır; burada stokastik diferansiyel denklemi simülasyonunun ardışık doğası nedeniyle GPU hızlanması için fırsat bulunmamaktadır. İkinci boyut ise, güçlü bir simülasyon için hesaplanacak yol sayısıdır (Nsims = 1.000). Genel olarak, Monte Carlo simülasyonları, hesaplanan rastgele değişkenin dağılımını tahmin ederken daha iyi bir değer sağlar. Dolayısıyla, 1.000 veya daha fazla simülasyon ve daha uzun süreler için GPU’lar, gerekli kütlesel paralel hesaplamayı daha hızlı gerçekleştirmek için güvenilir olarak kullanılabilir ve çalışmaları daha verimli hale getirmektedir.
Sonuç ve Hedefler
Geçmişte midprice süreçleri için uygulanan en iyi simülasyonlar, Stochastic Calculus for Finance II adlı kitapta tarif edilen metodlara uygun olarak yüksek frekanslı limit emir ve piyasa emir süreçleri için belirlenmiştir.
Simülasyon gerçekleştirmek için daha karmaşık süreçler, yüksek frekans karşıt taraf katılımcılarının daha yüksek seviye karmaşıklığını yansıtmaktadır. Normal dağılım ve log getirilerin piyasanın gerçek fiyat davranışını nasıl modellediği hakkında daha detaylı bilgiye Financial Analytics with R kitabından ulaşabilirsiniz.
Detaylı inceleme, Algorithmic and High-Frequency Trading kitabında yer alan dinamik programlama optimizasyon hedeflerini kapsamaktadır. İleri düzey simülasyon tekniklerini sub-saniye hassasiyetinde ticaret günlerine yaymak, çok çekirdekli bir CPU üzerinde hesaplanması zor iken, yazıda sunulan sonuçlara göre GPU’dan kazanılan hızlanma ile daha iyi bir şekilde gerçekleştirilebilmektedir.
Bu simülasyon, kendi piyasa durumlarını üretse de, büyük sipariş defteri veri setlerinin kullanımı da GPU hızlandırması gerektirmekte ve bunun da sermaye piyasaları teknoloji alanındaki başarısında gözlemlenmesi mümkündür. Dünya genelinde birçok borsa üzerinden çok sayıda işlem gören menkul kıymetlerin test edilmesi için birden fazla GPU gerekecektir.
RAPIDS‘i indirip kurarak veri bilimi iş yüklerinizde GPU’ları etkin hale getirmeye başlayın. Öncelikle NVIDIA sürücüsünü ve CUDA toolkit’ini yüklemeyi unutmayın.
Numba‘yı indirerek Python programlarınızı hızlandırmak için bu paketi kullanmaya başlayabilirsiniz. CuPy, GPU dizilerine kolay geçiş sağlarken, Numba matris paralelliğinin boyutları üzerinde daha fazla kontrol sağladığı için bu yazıda yer alan çözüm için en uygun olanıdır.
NVIDIA GTC 2025‘e katılın ve Elektronik Piyasalarda Güvenli ve Verimli Ticaret için Yapay Zeka [S72692] oturumuna göz atın.