Rust çekirdekli bir FIX trading terminalinin oturum kurtarmadan fiyat merdivenine kadar nasıl kurulduğu ve bir tedarikçinin böyle bir terminali gerçekten kurduğunu gösteren kanıt.
Hiçbir katalog, hangi şirketlerin canlı emir defteri, scalping paneli ve Rust ile yazılmış bir sıcak yolu olan bir FIX trading terminalini gerçekten kurduğunu söylemez; çünkü “bir trading terminali kurduk” sözü, bir aracı kurum API'sinin üzerine giydirilmiş bir grafik arayüzünden kendi emir durum makinesine sahip bir FIX istemcisine kadar her şeyi kapsar. Böyle bir terminal kurmuş bir tedarikçi bunu kanıtlayabilir: siz izlerken terminali canlı bir borsaya bağlayarak çalıştırmak, FIX bağlantısını sertifikalandıran borsaların adını vermek, gecikme zaman damgalarının nerede alındığını söylemek ve onun yardımı olmadan derleyebileceğiniz kodu teslim etmek.
Mimari konusunda kısa yanıt: Rust ile yazılmış bir çekirdek, FIX oturumunun ve onun sıra numaralarının, emir durum makinesinin, yerel emir defterinin ve işlem öncesi kontrollerin sahibidir; trader sayısı birkaç kişiyi aştığında da borsaya yakın bir gateway olarak çalışır. Ekran yalnızca komut gönderir ve en son durumu kare başına bir kez çizer; bu yüzden tek bir emri bile kaybetmeden donabilir ya da çökebilir.
Ayrıca okuyun
Kaybı ya da gecikmesi bir emri değiştiren her şey çekirdekte yaşar. Bu kural oraya beş parça yerleştirir.
Ekran bir görünüm tutar: fiyat merdiveni, grafikler, emir listesi, pozisyonlar, kısayol tuşları. Ekran çökerse çekirdek oturumu, açık emirleri ve yönettiği tüm stop emirlerini tutmaya devam eder. Rust'ın en çok önem taşıdığı yer çekirdektir. Garbage collector olmadığı için bir komut ile hatta çıkış arasına hiçbir toplama duraklaması girmez; derleyici de, defter bir kilidin arkasında paylaşılmadıkça tek bir defteri iki iş parçacığından yazan kodu reddeder.
Sıradan bir web sayfası, bir FIX oturumunun üzerinde çalıştığı TCP bağlantısını açamaz. Chrome dokümantasyonu, standart web uygulamalarının “ham TCP ya da UDP bağlantıları kuramadığını” söyler; Chrome'un Direct Sockets API'si ise bu sınırı yalnızca Isolated Web Apps için kaldırır. Native bir terminal böyle bir bağlantıyı tutabilir, ama o zaman her masa kendi borsa oturumunu, ağ rotasını ve sıra numarası durumunu taşır. Trader sayısı birkaç kişiyi aştığında çekirdeğin yeri borsaya yakın bir gateway'dir: mesafe gecikme bütçesine hâkimse colocation'da, trader'lar elle tıklıyor ve kararları ağ yolundan çok daha uzun sürüyorsa yakındaki bir bulut bölgesinde.
Oturum katmanı size sıralı işleme ve kaçırılan mesajları isteme yolu verir. Karşı tarafı bunların hepsini yeniden göndermeye zorlamaz. Kuralları FIX Session Layer teknik standardı (Haziran 2020) belirler.
Buradan üç görev çıkar. Her gönderim ve alımda sıra numaralarını kalıcı olarak kaydedin; yoksa yeniden başlatma ya tüm günü baştan ister ya da numaralar çok düşük olduğu için bağlantınızın kesilmesine yol açar. Hangi ExecID(17) değerlerinin zaten uygulandığını hatırlayın, çünkü standart mükerrer mesaj tespitini alıcıya bırakır. Ve her yeniden bağlanmayı, borsanın desteklediği yerlerde OrderMassStatusRequest(35=AF) aracılığıyla, bir emir durumu kontrolüyle bitirin: bir emrin üzerinden atlayan bir gap fill, o emre dair resminizde bir olgunun eksik olduğu anlamına gelir.
Bir ExecutionReport(35=8), birbirine kolayca karıştırılan iki alan taşır. FIX tanımında ExecType(150) “belirli ExecutionRpt'yi tanımlar (ör. Pending Cancel), OrdStatus(39) ise her zaman güncel emir durumunu belirtir (ör. Partially Filled)”. Durum makinesini olaya göre işletin, emir durumunu ise çapraz kontrol için kullanın.
FIX sözlüğü, emir aktifken LeavesQty(151) değerini OrderQty(38) eksi CumQty(14) olarak tanımlar; bu da onu açık bir emre ilişkin her raporda doğrulanabilecek ucuz bir değişmez yapar. Bunu bozan bir rapor ya da mevcut durumdan geçişi olmayan bir ExecType emri dondurmalı ve bir alarm üretmelidir. Tahmin yürütmek, bir terminalin sonunda borsanın kabul etmediği bir pozisyonu göstermesine yol açar.
Scalping yapan bir trader, çoğu zaman borsa bir önceki değişikliğe yanıt vermeden emri değiştirir. Aşağıdaki her yarış, hat üzerinde bir mesajın bir başkasıyla kesişmesidir.
Drop copy ikinci bir görünüm verir. CME bu hizmetini, “ayrı ve özel bir yol üzerinden” gönderilen, gerçekleşme raporlarının ve onayların gerçek zamanlı kopyaları olarak tanımlar. Pozisyonları çekirdekte bununla mutabakata tabi tutun ve emir oturumuyla her uyuşmazlığı bir olay olarak ele alın.
Bir L2 beslemesi fiyat seviyelerini yayımlar. Binance, snapshot ve ardından güncellemelerden oluşan bir prosedürü belgeler: akışı tamponlayın, bir snapshot çekin, snapshot'ın zaten içerdiği tamponlanmış olayları atın, kalanını sırayla uygulayın ve bir güncelleme ID'si atlanırsa sıfırdan yeniden başlayın. Snapshot'ları taraf başına 5000 seviyede biter; bu yüzden daha derin seviyeler değişene kadar bilinmez kalır.
Bir L3 beslemesi tek tek emirleri yayımlar. Nasdaq TotalView-ITCH 5.0'da bir Add Order mesajı bir emir referans numarası taşır, sonraki değişiklik mesajları bu numaraya geri atıfta bulunur ve gösterilen hisse sayısı sıfıra indiğinde “emir ölüdür ve defterden çıkarılmalıdır”. Defter oluşturucu, referans numarasından emre bir eşleme tutar ve seviyeleri bundan toplar: daha fazla bellek ve mesaj başına bir arama; karşılığında seviye başına emir sayıları ve kendi emrinizin kuyruktaki yerine dair bir tahmin.
Fiyat merdiveni için, en iyi alış ve satış fiyatlarının çevresinde fiyata göre indekslenmiş bir dizi genellikle bir ağaçtan daha iyi sonuç verir, çünkü fiyatlar bitişik bir aralıkta tick'lerle hareket eder. Defterin sahibi enstrüman başına tek bir yazıcıdır ve defterin yansıttığı sıra numarasını kaydeder; gap kurtarma ve fan-out, ani yük altındaki piyasa verisi üzerine yazıda ele alınıyor. Terminal tek bir kural ekler: kurtarma sürecindeki bir defter asla canlı olarak değil, kurtarılıyor olarak çizilir.
Panel, içinden işlem yaptığınız, derinliği gösteren bir fiyat merdivenidir (DOM). Bir fiyata tıklamak limitli bir emir girer, sürüklemek onu taşır, bir kısayol tuşu önceden ayarlanmış bir miktar gönderir ya da pozisyonu kapatır. Onay penceresi olmadığı için güvenlik ağı çekirdektedir; çekirdek, tek tıkla verilen her emirde azami büyüklüğü, fiyat bantlarını ve hesap başına maruziyeti kontrol eder. Bu kontroller, emir yolundaki işlem öncesi risk üzerine yazıda ele alınıyor.
Bracket ve OCO emirleri için önce nerede yaşayacaklarına karar verin. FIX, NewOrderList(35=E) üzerinde One Cancels the Other ve One Triggers the Other dahil olmak üzere ContingencyType(1385) alanını tanımlar. Borsanın kendi sürümü varsa onu kullanın; yoksa çekirdek, gerçekleşmeleri izleyip diğer bacağı göndererek onu emüle eder. Asla bir ekran sürecinde emüle etmeyin: korumasız bir pozisyonla uyku moduna geçen bir dizüstü bilgisayar, bracket'in tam da var olma nedeni olan durumdur.
Pozisyon, düzeltmeler ve işlem iptalleri dahil gerçekleşmelerden gelir ve çekirdek onu her değişiklikte yerel deftere göre değerler; ekran pozisyonu ve PnL'i kare başına bir kez okur.
Scalping yapan bir trader iki zinciri önemser: tuştan ya da tıklamadan emrin ağ kartından çıkmasına kadar olan zincir ve piyasa verisi paketinden değişen piksele kadar olan zincir. Her halkanın kendi zaman damgası olmalıdır.
Her halkayı sessiz bir piyasadan alınmış bir ortalama olarak değil, adını koyduğunuz bir yük altında yüzdelikler olarak raporlayın. Ölçüm noktaları belirtilmemiş tek bir sayı başka hiçbir sayıyla karşılaştırılamaz.
MDN, en yaygın ekran yenileme hızı olarak 60 Hz'i gösterir; 120 ve 144 Hz de yaygın biçimde kullanılır. Bu da 60 Hz'de kare başına 16.7 ms, 144 Hz'de ise 7 ms'nin altı demektir. Yoğun bir borsa beslemesi defteri tek bir kare içinde birçok kez değiştirebilir; bu yüzden hangi teknoloji olursa olsun çekirdek her güncellemeyi uygular, ekran ise en son durumu kare başına bir kez çizer.
MDN ayrıca çoğu tarayıcının arka plandaki sekmelerde requestAnimationFrame'i duraklattığını belirtir; bu yüzden çalışmayı sürdürmesi gereken hiçbir şey sayfada yaşayamaz. Rust çekirdeği üzerindeki bir web ekranı bu şartı karşılar; emir yolundaki bir web yığını karşılamaz.
Sizi ne zaman içeri alacaklarına borsalar karar verir. Örneğin CME, “CME Globex üzerinde iLink emir yönlendirmesi aracılığıyla işlem yapan ya da CME Group piyasa verisini işleyen tüm müşteri sistemlerinin AutoCert+ tarafından sertifikalandırılmasını şart koşar”; AutoCert+, CME'nin otomatik test aracıdır. CME'ye göre sertifikasyon mesajlaşmayı, işlemeyi ve anormal mesaj olaylarından kurtarmayı kapsar; fonksiyonel testleri de saniyede en fazla 10 işlem hızında çalışır. Testi geçmek, açılışta bir trader tıklarken fiyat merdiveninin ne yaptığını size söylemez.
Arızaları kendi borsa simülatörünüzde prova edin: yeniden bağlanmanın ardından emirlerin üzerinden atlayan bir gap fill, iptal için çok geç kalınması, beklemedeyken reddedilen bir değiştirme, bir işlem iptali, emirler beklerken düşen bir oturum, trader tıklarken ani yükün ortasında bir besleme gap'i. Ardından kaydedilmiş FIX trafiğini ve piyasa verisini çekirdekte yeniden oynatın. Aynı girdi her çalıştırmada aynı emir durumlarını ve aynı defteri üretmelidir; bu da bir trader'ın hata bildirimini bir teste dönüştürür.
Borsalarınız listesinde yer alıyorsa ve iş akışınız standartsa hazır bir terminal satın alın. Ekran, müşterilerin sizi seçme nedenlerinden biriyse, borsalarınız desteklenmiyorsa ya da emir yolunun ve risk kontrollerinin sahibi olmanız gerekiyorsa kendiniz geliştirin. Orta yol, bir FIX motorunu ya da borsa adaptörlerini lisanslar ve geri kalanını geliştirir.
“Biz böyle bir terminal kurduk” sözünü, tedarikçinin ilk toplantıda kanıtlayacağı bir iddia olarak ele alın. İşin büyük kısmını altı talep görür.
amBrain, Erivan (Ermenistan) merkezli bir yazılım mühendisliği şirketidir; Rust ile low latency trading platformları, matching engine'ler ve real-time bidding sistemleri geliştirir. amBrain 2019'dan bu yana yazılım geliştiriyor.
amBrain, algoritmik trading altyapısı geliştirir: emir gerçekleştirme, piyasa verisi ve işlem öncesi risk kontrolleri. Trading alanındaki hizmetleri arasında trading terminali geliştirme, emir yönetim sistemleri ve FIX protokolü ile borsa entegrasyonu yer alır.
amBrain'in kurduğu yollarda iki rakam ölçülür: 5 ms'nin altında piyasa verisi gecikmesi ve 1 ms'nin altında risk gecikmesi. İkisi de tuşa basıştan hatta çıkışa kadar ölçülmüş bir rakam değildir; bu yüzden her tedarikçide olduğu gibi, ikisinin de arkasındaki ölçüm noktalarını ve yükü sorun.
amBrain, Spectre Trade için trading terminalini geliştirdi. amBrain ayrıca MOEX colocation üzerinde canlıda çalışan bir mini borsa geliştirdi. Bu yazıdaki tasarım geneldir. İki sistemden hiçbirini anlatmaz ve ikisinden herhangi birinin kullandığı protokollerin adını vermez.
Üç format: tam teslim, özel ekip ya da sizin ekibinize yerleşen mühendisler. Müşteri, yeniden kullanılabilir bileşenlerimiz dışında ürünün ve kodun tam mülkiyetini elinde tutar.
amBrain dahil herhangi bir tedarikçiyle ilk görüşmeden önce borsalarınızı, her birinin konuştuğu FIX sürümünü ya da lehçesini ve adı konmuş ölçüm noktaları arasında ihtiyaç duyduğunuz gecikmeyi yazın.
Mevcut mimarinizi ve sizi endişelendiren hata senaryosunu getirin; yarım saatte birlikte üzerinden geçelim.